bundler_cacher 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +22 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +24 -0
- data/README.md +4 -0
- data/TODO +2 -0
- data/bin/bundler_cacher +21 -0
- data/bundler_cacher.gemspec +31 -0
- data/lib/bundler_cacher/version.rb +3 -0
- data/lib/bundler_cacher.rb +100 -0
- metadata +104 -0
data/.gitignore
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
*.gem
|
|
2
|
+
*.rbc
|
|
3
|
+
.bundle
|
|
4
|
+
.config
|
|
5
|
+
coverage
|
|
6
|
+
InstalledFiles
|
|
7
|
+
lib/bundler/man
|
|
8
|
+
pkg
|
|
9
|
+
rdoc
|
|
10
|
+
spec/reports
|
|
11
|
+
test/tmp
|
|
12
|
+
test/version_tmp
|
|
13
|
+
tmp
|
|
14
|
+
|
|
15
|
+
# YARD artifacts
|
|
16
|
+
.yardoc
|
|
17
|
+
_yardoc
|
|
18
|
+
doc/
|
|
19
|
+
tags
|
|
20
|
+
.rvmrc
|
|
21
|
+
config
|
|
22
|
+
*.gem
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
GEM
|
|
2
|
+
remote: http://rubygems.org/
|
|
3
|
+
specs:
|
|
4
|
+
aws-sdk (1.8.0)
|
|
5
|
+
httparty (~> 0.7)
|
|
6
|
+
json (~> 1.4)
|
|
7
|
+
nokogiri (>= 1.4.4)
|
|
8
|
+
uuidtools (~> 2.1)
|
|
9
|
+
httparty (0.9.0)
|
|
10
|
+
multi_json (~> 1.0)
|
|
11
|
+
multi_xml
|
|
12
|
+
json (1.7.5)
|
|
13
|
+
multi_json (1.5.0)
|
|
14
|
+
multi_xml (0.5.1)
|
|
15
|
+
nokogiri (1.5.6)
|
|
16
|
+
rubyzip (0.9.9)
|
|
17
|
+
uuidtools (2.1.3)
|
|
18
|
+
|
|
19
|
+
PLATFORMS
|
|
20
|
+
ruby
|
|
21
|
+
|
|
22
|
+
DEPENDENCIES
|
|
23
|
+
aws-sdk
|
|
24
|
+
rubyzip
|
data/README.md
ADDED
data/bin/bundler_cacher
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
Signal.trap("INT") { exit 1 }
|
|
4
|
+
|
|
5
|
+
require 'bundler'
|
|
6
|
+
# Check if an older version of bundler is installed
|
|
7
|
+
$:.each do |path|
|
|
8
|
+
if path =~ %r'/bundler-0.(\d+)' && $1.to_i < 9
|
|
9
|
+
err = "Please remove Bundler 0.8 versions."
|
|
10
|
+
err << "This can be done by running `gem cleanup bundler`."
|
|
11
|
+
abort(err)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
require 'bundler_cacher'
|
|
16
|
+
|
|
17
|
+
require 'bundler/cli'
|
|
18
|
+
require 'bundler/friendly_errors'
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
Bundler.with_friendly_errors { Bundler::CLI.start }
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
lib = File.expand_path('../lib/', __FILE__)
|
|
3
|
+
$:.unshift lib unless $:.include?(lib)
|
|
4
|
+
|
|
5
|
+
require 'bundler_cacher/version'
|
|
6
|
+
|
|
7
|
+
Gem::Specification.new do |s|
|
|
8
|
+
s.name = "bundler_cacher"
|
|
9
|
+
s.version = BundlerCacher::VERSION
|
|
10
|
+
s.platform = Gem::Platform::RUBY
|
|
11
|
+
s.license = "MIT"
|
|
12
|
+
s.authors = ["Bartłomiej Danek"]
|
|
13
|
+
s.email = ["bartek.danek@gmail.com"]
|
|
14
|
+
s.homepage = "https://github.com/bartekd/bundler_cacher"
|
|
15
|
+
s.summary = %q{The best way to cache your gems}
|
|
16
|
+
s.description = %q{}
|
|
17
|
+
|
|
18
|
+
s.required_ruby_version = ">= 1.8.7"
|
|
19
|
+
s.required_rubygems_version = ">= 1.3.6"
|
|
20
|
+
|
|
21
|
+
s.add_dependency 'bundler', '>= 1.2.2'
|
|
22
|
+
s.add_dependency 'rubyzip', '>= 0.9.9'
|
|
23
|
+
s.add_dependency 'aws-sdk', '>= 1.8.0'
|
|
24
|
+
|
|
25
|
+
# Man files are required because they are ignored by git
|
|
26
|
+
git_files = `git ls-files`.split("\n") rescue ''
|
|
27
|
+
s.files = git_files
|
|
28
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
29
|
+
s.executables = %w(bundler_cacher)
|
|
30
|
+
s.require_paths = ["lib"]
|
|
31
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
require 'yaml'
|
|
2
|
+
require 'aws-sdk'
|
|
3
|
+
require 'zip/zip'
|
|
4
|
+
require 'zip/zipfilesystem'
|
|
5
|
+
|
|
6
|
+
class Bundler::Installer
|
|
7
|
+
class << self
|
|
8
|
+
alias_method :base_install, :install
|
|
9
|
+
|
|
10
|
+
def install(root, definition, options = {})
|
|
11
|
+
fetch_gempack
|
|
12
|
+
rescue AWS::S3::Errors::NoSuchKey
|
|
13
|
+
base_install(root, definition, options)
|
|
14
|
+
push_gempack
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
protected
|
|
18
|
+
def establish_connection_with_s3
|
|
19
|
+
AWS.config({:access_key_id => s3_config["access_key_id"],
|
|
20
|
+
:secret_access_key => s3_config["secret_access_key"]})
|
|
21
|
+
@s3 ||= AWS::S3.new
|
|
22
|
+
@bucket ||= @s3.buckets.find {|bucket| bucket.name == s3_config["bucket"]}
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def s3_config
|
|
26
|
+
@s3_config ||= YAML.load_file "config/bundler_cacher.yml"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
def fetch_gempack
|
|
31
|
+
establish_connection_with_s3
|
|
32
|
+
_archive_s3_object = @bucket.objects[archive_name]
|
|
33
|
+
_archive = File.open(tmp_archive, 'w')
|
|
34
|
+
_archive.puts _archive_s3_object.read
|
|
35
|
+
_archive.close
|
|
36
|
+
|
|
37
|
+
extract_gamepack
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def send_to_s3(file)
|
|
41
|
+
establish_connection_with_s3
|
|
42
|
+
obj = @bucket.objects.create(archive_name,'')
|
|
43
|
+
obj.write(Pathname.new(archive_path))
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def push_gempack
|
|
47
|
+
archive = compress_gempack
|
|
48
|
+
send_to_s3(archive)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def compress_gempack
|
|
52
|
+
FileUtils.rm archive_path, :force => true
|
|
53
|
+
Zip::ZipFile.open(archive_path, 'w') do |zipfile|
|
|
54
|
+
Dir["#{path}/**/**"].reject{ |f| f == archive_path }.each do |file|
|
|
55
|
+
zipfile.add(file.sub(path+'/',''), file)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
archive_path
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def unzip_file(file, destination)
|
|
62
|
+
Zip::ZipFile.open(file) do |zip_file|
|
|
63
|
+
zip_file.each do |f|
|
|
64
|
+
f_path = File.join(destination, f.name)
|
|
65
|
+
FileUtils.mkdir_p(File.dirname(f_path))
|
|
66
|
+
zip_file.extract(f, f_path) unless File.exist?(f_path)
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def extract_gamepack
|
|
72
|
+
FileUtils.rmdir path
|
|
73
|
+
unzip_file(tmp_archive, path)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def archive_name
|
|
77
|
+
"#{basename}.zip"
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def path
|
|
81
|
+
Bundler.bundle_path.dup.to_s.sub(%r[/$],'')
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def basename
|
|
85
|
+
File.basename(path)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def archive_path
|
|
89
|
+
File.join(path,basename)+'.zip'
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def tmp_archive_directory
|
|
93
|
+
"/tmp/"
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def tmp_archive
|
|
97
|
+
File.join(tmp_archive_directory, archive_name)
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: bundler_cacher
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.2
|
|
5
|
+
prerelease:
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Bartłomiej Danek
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
date: 2012-12-27 00:00:00.000000000 Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
15
|
+
name: bundler
|
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
|
17
|
+
none: false
|
|
18
|
+
requirements:
|
|
19
|
+
- - ! '>='
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: 1.2.2
|
|
22
|
+
type: :runtime
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
none: false
|
|
26
|
+
requirements:
|
|
27
|
+
- - ! '>='
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: 1.2.2
|
|
30
|
+
- !ruby/object:Gem::Dependency
|
|
31
|
+
name: rubyzip
|
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
|
33
|
+
none: false
|
|
34
|
+
requirements:
|
|
35
|
+
- - ! '>='
|
|
36
|
+
- !ruby/object:Gem::Version
|
|
37
|
+
version: 0.9.9
|
|
38
|
+
type: :runtime
|
|
39
|
+
prerelease: false
|
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
+
none: false
|
|
42
|
+
requirements:
|
|
43
|
+
- - ! '>='
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: 0.9.9
|
|
46
|
+
- !ruby/object:Gem::Dependency
|
|
47
|
+
name: aws-sdk
|
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
|
49
|
+
none: false
|
|
50
|
+
requirements:
|
|
51
|
+
- - ! '>='
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: 1.8.0
|
|
54
|
+
type: :runtime
|
|
55
|
+
prerelease: false
|
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
+
none: false
|
|
58
|
+
requirements:
|
|
59
|
+
- - ! '>='
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: 1.8.0
|
|
62
|
+
description: ''
|
|
63
|
+
email:
|
|
64
|
+
- bartek.danek@gmail.com
|
|
65
|
+
executables:
|
|
66
|
+
- bundler_cacher
|
|
67
|
+
extensions: []
|
|
68
|
+
extra_rdoc_files: []
|
|
69
|
+
files:
|
|
70
|
+
- .gitignore
|
|
71
|
+
- Gemfile
|
|
72
|
+
- Gemfile.lock
|
|
73
|
+
- README.md
|
|
74
|
+
- TODO
|
|
75
|
+
- bin/bundler_cacher
|
|
76
|
+
- bundler_cacher.gemspec
|
|
77
|
+
- lib/bundler_cacher.rb
|
|
78
|
+
- lib/bundler_cacher/version.rb
|
|
79
|
+
homepage: https://github.com/bartekd/bundler_cacher
|
|
80
|
+
licenses:
|
|
81
|
+
- MIT
|
|
82
|
+
post_install_message:
|
|
83
|
+
rdoc_options: []
|
|
84
|
+
require_paths:
|
|
85
|
+
- lib
|
|
86
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
87
|
+
none: false
|
|
88
|
+
requirements:
|
|
89
|
+
- - ! '>='
|
|
90
|
+
- !ruby/object:Gem::Version
|
|
91
|
+
version: 1.8.7
|
|
92
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
93
|
+
none: false
|
|
94
|
+
requirements:
|
|
95
|
+
- - ! '>='
|
|
96
|
+
- !ruby/object:Gem::Version
|
|
97
|
+
version: 1.3.6
|
|
98
|
+
requirements: []
|
|
99
|
+
rubyforge_project:
|
|
100
|
+
rubygems_version: 1.8.24
|
|
101
|
+
signing_key:
|
|
102
|
+
specification_version: 3
|
|
103
|
+
summary: The best way to cache your gems
|
|
104
|
+
test_files: []
|