summaryrefslogtreecommitdiff
path: root/support
diff options
context:
space:
mode:
Diffstat (limited to 'support')
-rwxr-xr-xsupport/vendor-gem.rb38
1 files changed, 38 insertions, 0 deletions
diff --git a/support/vendor-gem.rb b/support/vendor-gem.rb
new file mode 100755
index 0000000..4115a56
--- /dev/null
+++ b/support/vendor-gem.rb
@@ -0,0 +1,38 @@
+#!/usr/bin/env ruby
+require 'fileutils'
+require 'open3'
+
+VENDOR_PREFIX = 'lib/vendor'
+
+def main(gem, version, vendor_dir)
+ if !vendor_dir.start_with?(VENDOR_PREFIX)
+ abort "Invalid vendor_dir: must start with #{VENDOR_PREFIX}: #{vendor_dir.inspect}"
+ end
+
+ FileUtils.rm_rf(vendor_dir)
+
+ # Use clear-sources to force https://rubygems.org as the source
+ if !system(*%W[gem fetch #{gem} -v #{version} --clear-sources -s https://rubygems.org])
+ abort "Failed to fetch gem"
+ end
+
+ FileUtils.mkdir_p(vendor_dir)
+
+ # A .gem file is a tar file containing a data.tar.gz file.
+ statuses = Open3.pipeline(
+ %W[tar -xOf - data.tar.gz],
+ %W[tar -zxf -],
+ in: "#{gem}-#{version}.gem",
+ chdir: vendor_dir
+ )
+
+ if !statuses.all?(&:success?)
+ abort "Failed to extract gem"
+ end
+end
+
+if ARGV.count != 3
+ abort "Usage: #{$PROGNAME} GEM VERSION VENDOR_DIR"
+end
+
+main(*ARGV)