asset_sync 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 629deff4029487b164c47ee0a479cf5111461a15
4
+ data.tar.gz: 06e62f086d0a574def1741993066f42cf11b96da
5
+ SHA512:
6
+ metadata.gz: d37ddb643b78c91cdb24f1c8cf0fe3fb25162ace2c934eb6488ef8baf9eba8d080d892cdf85846eb0892677d58b2aea7b7a7baf3b35717de2082710d06ee8f75
7
+ data.tar.gz: fcb7bfb3c0a9b67fb341fb4eb8c4ca18e16e106e8eea852c150186685f59d75e97765246c90c2779feb4b4a1ebd707df9edc457a0db3fcf973e9994d0efce2e5
@@ -3,7 +3,7 @@ rvm:
3
3
  - 1.9.2
4
4
  - 1.9.3
5
5
  - jruby-19mode
6
- - rbx-19mode
6
+ - rbx-2
7
7
  - ruby-head
8
8
  - jruby-head
9
9
  gemfile:
@@ -23,12 +23,19 @@ matrix:
23
23
  gemfile: gemfiles/rails_4.0.gemfile
24
24
  - rvm: jruby-19mode
25
25
  gemfile: gemfiles/rails_4.0.gemfile
26
- - rvm: rbx-19mode
26
+ - rvm: rbx-2
27
27
  gemfile: gemfiles/rails_4.0.gemfile
28
28
  - rvm: 2.0.0
29
29
  gemfile: gemfiles/rails_3.2.gemfile
30
30
  - rvm: 2.0.0
31
31
  gemfile: gemfiles/rails_4.0.gemfile
32
+ - rvm: 2.1.2
33
+ gemfile: gemfiles/rails_4.1.gemfile
34
+ - rvm: 2.0.0
35
+ gemfile: gemfiles/rails_4.1.gemfile
36
+ - rvm: 2.1.2
37
+ gemfile: gemfiles/rails_4.1.gemfile
32
38
  allow_failures:
39
+ - rvm: rbx-2
33
40
  - rvm: ruby-head
34
41
  - rvm: jruby-head
data/Appraisals CHANGED
@@ -9,3 +9,7 @@ end
9
9
  appraise "rails-4.0" do
10
10
  gem "rails", "~> 4.0.0"
11
11
  end
12
+
13
+ appraise "rails-4.1" do
14
+ gem "rails", "~> 4.1.0"
15
+ end
@@ -1,5 +1,36 @@
1
1
  # RELEASE HISTORY
2
2
 
3
+ ## v1.1.0 / 2014-08-13
4
+
5
+ Version 1.1.0 (Toby Osbourn <tosbourn@rumblelabs.com>)
6
+
7
+ Changes:
8
+
9
+ * 1 Change
10
+
11
+ * Bumping master to 1.1.0 - preparing to update RubyGems
12
+
13
+ ## v0.5.6 / 2014-08-12
14
+
15
+ Version 0.5.6 (Toby Osbourn <tosbourn@rumblelabs.com>)
16
+
17
+ Changes:
18
+
19
+ * 1 Change
20
+
21
+ * Merged in support for optimized fog loading
22
+
23
+ ## v0.5.5 / 2014-08-12
24
+
25
+ Version 0.5.5 (Toby Osbourn <tosbourn@rumblelabs.com>)
26
+
27
+ Changes:
28
+
29
+ * 2 Nominal Changes
30
+
31
+ * Merged some spec changes to get Travis to pass the build correctly
32
+ * Support using AWS IAM Roles
33
+
3
34
  ## v0.5.1 / 2012-10-22
4
35
 
5
36
  Version 0.5.1 (David Rice <me@davidjrice.co.uk>)
data/README.md CHANGED
@@ -50,6 +50,19 @@ if defined?(AssetSync)
50
50
  ...
51
51
  end
52
52
  ```
53
+
54
+ ### Optimized Fog loading
55
+
56
+ Since AssetSync doesn't know which parts of Fog you intend to use, it will just load the entire library.
57
+ If you prefer to load fewer classes into your application, which will reduce load time and memory use,
58
+ you need to load those parts of Fog yourself *before* loading AssetSync:
59
+
60
+ In your Gemfile:
61
+ ```ruby
62
+ gem "fog", "~>1.20", require "fog/aws/storage"
63
+ gem "asset_sync"
64
+ ```
65
+
53
66
  ### Extended Installation (Faster sync with turbosprockets)
54
67
 
55
68
  It's possible to improve **asset:precompile** time if you are using Rails 3.2.x
@@ -95,7 +108,7 @@ Or
95
108
  ``` ruby
96
109
  config.action_controller.asset_host = "//storage.googleapis.com/#{ENV['FOG_DIRECTORY']}"
97
110
  ```
98
- On **non default S3 bucket region**: If your bucket is set to a region that is not the default US Standard (us-east-1) you must use the first style of url ``//#{ENV['FOG_DIRECTORY']}.s3.amazonaws.com`` or amazon will return a 301 permanently moved when assets are requested. Note the caveat above about bucket names and periods.
111
+ On **non default S3 bucket region**: If your bucket is set to a region that is not the default US Standard (us-east-1) you must use the first style of url ``//#{ENV['FOG_DIRECTORY']}.s3.amazonaws.com`` or amazon will return a 301 permanently moved when assets are requested. Note the caveat above about bucket names and periods.
99
112
 
100
113
  If you wish to have your assets sync to a sub-folder of your bucket instead of into the root add the following to your ``production.rb`` file
101
114
 
@@ -8,8 +8,8 @@ Gem::Specification.new do |s|
8
8
  s.version = AssetSync::VERSION
9
9
  s.date = "2013-08-26"
10
10
  s.platform = Gem::Platform::RUBY
11
- s.authors = ["Simon Hamilton", "David Rice", "Phil McClure"]
12
- s.email = ["shamilton@rumblelabs.com", "me@davidjrice.co.uk", "pmcclure@rumblelabs.com"]
11
+ s.authors = ["Simon Hamilton", "David Rice", "Phil McClure", "Toby Osbourn"]
12
+ s.email = ["shamilton@rumblelabs.com", "me@davidjrice.co.uk", "pmcclure@rumblelabs.com", "tosbourn@rumblelabs.com"]
13
13
  s.homepage = "https://github.com/rumblelabs/asset_sync"
14
14
  s.summary = %q{Synchronises Assets in a Rails 3 application and Amazon S3/Cloudfront and Rackspace Cloudfiles}
15
15
  s.description = %q{After you run assets:precompile your compiled assets will be synchronised with your S3 bucket.}
@@ -17,6 +17,7 @@ Gem::Specification.new do |s|
17
17
  s.rubyforge_project = "asset_sync"
18
18
 
19
19
  s.add_dependency('fog', ">= 1.8.0")
20
+ s.add_dependency('unf')
20
21
  s.add_dependency('activemodel')
21
22
 
22
23
  s.add_development_dependency "rspec"
@@ -24,7 +25,6 @@ Gem::Specification.new do |s|
24
25
  s.add_development_dependency "jeweler"
25
26
 
26
27
  s.add_development_dependency "uglifier"
27
- s.add_development_dependency "asset_sync"
28
28
  s.add_development_dependency "appraisal"
29
29
 
30
30
  s.files = `git ls-files`.split("\n")
@@ -0,0 +1,10 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rcov", :platforms => :mri_18, :group => [:development, :test]
6
+ gem "simplecov", :platforms => [:jruby, :mri_19, :ruby_19, :mri_20, :rbx], :group => [:development, :test], :require => false
7
+ gem "jruby-openssl", :platform => :jruby
8
+ gem "rails", "~> 4.1.0"
9
+
10
+ gemspec :path => "../"
@@ -1,4 +1,4 @@
1
- require 'fog'
1
+ require 'fog' unless defined?(::Fog)
2
2
  require 'active_model'
3
3
  require 'erb'
4
4
  require "asset_sync/asset_sync"
@@ -26,7 +26,7 @@ module AssetSync
26
26
  attr_accessor :fog_region # e.g. 'eu-west-1'
27
27
 
28
28
  # Amazon AWS
29
- attr_accessor :aws_access_key_id, :aws_secret_access_key, :aws_reduced_redundancy
29
+ attr_accessor :aws_access_key_id, :aws_secret_access_key, :aws_reduced_redundancy, :aws_iam_roles
30
30
 
31
31
  # Rackspace
32
32
  attr_accessor :rackspace_username, :rackspace_api_key, :rackspace_auth_url
@@ -39,8 +39,8 @@ module AssetSync
39
39
  validates :fog_provider, :presence => true
40
40
  validates :fog_directory, :presence => true
41
41
 
42
- validates :aws_access_key_id, :presence => true, :if => :aws?
43
- validates :aws_secret_access_key, :presence => true, :if => :aws?
42
+ validates :aws_access_key_id, :presence => true, :if => proc {aws? && !aws_iam?}
43
+ validates :aws_secret_access_key, :presence => true, :if => proc {aws? && !aws_iam?}
44
44
  validates :rackspace_username, :presence => true, :if => :rackspace?
45
45
  validates :rackspace_api_key, :presence => true, :if => :rackspace?
46
46
  validates :google_storage_secret_access_key, :presence => true, :if => :google?
@@ -85,6 +85,10 @@ module AssetSync
85
85
  aws_reduced_redundancy == true
86
86
  end
87
87
 
88
+ def aws_iam?
89
+ aws_iam_roles == true
90
+ end
91
+
88
92
  def fail_silently?
89
93
  fail_silently || !enabled?
90
94
  end
@@ -138,6 +142,7 @@ module AssetSync
138
142
  self.aws_access_key_id = yml["aws_access_key_id"]
139
143
  self.aws_secret_access_key = yml["aws_secret_access_key"]
140
144
  self.aws_reduced_redundancy = yml["aws_reduced_redundancy"]
145
+ self.aws_iam_roles = yml["aws_iam_roles"]
141
146
  self.rackspace_username = yml["rackspace_username"]
142
147
  self.rackspace_auth_url = yml["rackspace_auth_url"] if yml.has_key?("rackspace_auth_url")
143
148
  self.rackspace_api_key = yml["rackspace_api_key"]
@@ -173,10 +178,16 @@ module AssetSync
173
178
  def fog_options
174
179
  options = { :provider => fog_provider }
175
180
  if aws?
176
- options.merge!({
177
- :aws_access_key_id => aws_access_key_id,
178
- :aws_secret_access_key => aws_secret_access_key
179
- })
181
+ if aws_iam?
182
+ options.merge!({
183
+ :use_iam_profile => true
184
+ })
185
+ else
186
+ options.merge!({
187
+ :aws_access_key_id => aws_access_key_id,
188
+ :aws_secret_access_key => aws_secret_access_key
189
+ })
190
+ end
180
191
  elsif rackspace?
181
192
  options.merge!({
182
193
  :rackspace_username => rackspace_username,
@@ -1,3 +1,5 @@
1
+ require 'mime/types'
2
+
1
3
  module AssetSync
2
4
  class MultiMime
3
5
 
@@ -9,10 +11,10 @@ module AssetSync
9
11
  ext_with_dot = ".#{ext}"
10
12
  Rack::Mime.mime_type(ext_with_dot)
11
13
  else
12
- MIME::Types.type_for(ext).first
14
+ ::MIME::Types.type_for(ext).first
13
15
  end
14
16
 
15
17
  end
16
18
 
17
19
  end
18
- end
20
+ end
@@ -1,3 +1,3 @@
1
1
  module AssetSync
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -43,7 +43,6 @@ describe "AssetSync" do
43
43
 
44
44
  it "sync" do
45
45
  execute "rake ASSET_SYNC_PREFIX=#{@prefix} assets:precompile"
46
- # bucket(@prefix).files.size.should == 5
47
46
 
48
47
  files = bucket(@prefix).files
49
48
 
@@ -51,16 +50,16 @@ describe "AssetSync" do
51
50
  app_js_gz_path = files.select{ |f| f.key =~ app_js_gz_regex }.first
52
51
 
53
52
  app_js = files.get( app_js_path.key )
54
- app_js.content_type.should == "text/javascript"
53
+ expect(app_js.content_type).to eq("text/javascript")
55
54
 
56
55
  app_js_gz = files.get( app_js_gz_path.key )
57
- app_js_gz.content_type.should == "text/javascript"
58
- app_js_gz.content_encoding.should == "gzip"
56
+ expect(app_js_gz.content_type).to eq("text/javascript")
57
+ expect(app_js_gz.content_encoding).to eq("gzip")
59
58
  end
60
59
 
61
60
  it "sync with enabled=false" do
62
61
  execute "rake ASSET_SYNC_PREFIX=#{@prefix} ASSET_SYNC_ENABLED=false assets:precompile"
63
- bucket(@prefix).files.size.should == 0
62
+ expect(bucket(@prefix).files.size).to eq(0)
64
63
  end
65
64
 
66
65
  it "sync with gzip_compression=true" do
@@ -69,7 +68,7 @@ describe "AssetSync" do
69
68
 
70
69
  app_js_path = files.select{ |f| f.key =~ app_js_regex }.first
71
70
  app_js = files.get( app_js_path.key )
72
- app_js.content_type.should == "text/javascript"
71
+ expect(app_js.content_type).to eq("text/javascript")
73
72
  end
74
73
 
75
74
  end
@@ -32,22 +32,21 @@ shared_context "mock without Rails" do
32
32
  if defined? Rails
33
33
  Object.send(:remove_const, :Rails)
34
34
  end
35
- AssetSync.stub(:log)
35
+ allow(AssetSync).to receive(:log)
36
36
  end
37
37
  end
38
38
 
39
39
 
40
40
  shared_context "mock Rails" do
41
41
  before(:each) do
42
- unless defined? Rails
43
- Rails = double 'Rails'
44
- end
45
- Rails.stub(:env).and_return('test')
46
- Rails.stub :application => double('application')
47
- Rails.application.stub :config => double('config')
48
- Rails.application.config.stub :assets => ActiveSupport::OrderedOptions.new
42
+ Object.send(:remove_const, :Rails) if defined? Rails
43
+ Rails = double 'Rails'
44
+ allow(Rails).to receive(:env).and_return('test')
45
+ allow(Rails).to receive_messages :application => double('application')
46
+ allow(Rails.application).to receive_messages :config => double('config')
47
+ allow(Rails.application.config).to receive_messages :assets => ActiveSupport::OrderedOptions.new
49
48
  Rails.application.config.assets.prefix = '/assets'
50
- AssetSync.stub(:log)
49
+ allow(AssetSync).to receive(:log)
51
50
  end
52
51
  end
53
52
 
@@ -56,10 +55,10 @@ shared_context "mock Rails without_yml" do
56
55
 
57
56
  before(:each) do
58
57
  set_rails_root('without_yml')
59
- Rails.stub(:public_path).and_return(Rails.root.join('public').to_s)
58
+ allow(Rails).to receive(:public_path).and_return(Rails.root.join('public').to_s)
60
59
  end
61
60
  end
62
61
 
63
62
  def set_rails_root(path)
64
- Rails.stub(:root).and_return(Pathname.new(File.join(File.dirname(__FILE__), 'fixtures', path)))
63
+ allow(Rails).to receive(:root).and_return(Pathname.new(File.join(File.dirname(__FILE__), 'fixtures', path)))
65
64
  end
@@ -17,61 +17,61 @@ describe AssetSync do
17
17
  end
18
18
 
19
19
  it "should default to running on precompile" do
20
- AssetSync.config.run_on_precompile.should be_true
20
+ expect(AssetSync.config.run_on_precompile).to be_truthy
21
21
  end
22
22
 
23
23
  it "should default AssetSync to enabled" do
24
- AssetSync.config.enabled?.should be_true
25
- AssetSync.enabled?.should be_true
24
+ expect(AssetSync.config.enabled?).to be_truthy
25
+ expect(AssetSync.enabled?).to be_truthy
26
26
  end
27
27
 
28
28
  it "should configure provider as AWS" do
29
- AssetSync.config.fog_provider.should == 'AWS'
30
- AssetSync.config.should be_aws
29
+ expect(AssetSync.config.fog_provider).to eq('AWS')
30
+ expect(AssetSync.config).to be_aws
31
31
  end
32
32
 
33
33
  it "should should keep existing remote files" do
34
- AssetSync.config.existing_remote_files?.should == true
34
+ expect(AssetSync.config.existing_remote_files?).to eq(true)
35
35
  end
36
36
 
37
37
  it "should configure aws_access_key" do
38
- AssetSync.config.aws_access_key_id.should == "aaaa"
38
+ expect(AssetSync.config.aws_access_key_id).to eq("aaaa")
39
39
  end
40
40
 
41
41
  it "should configure aws_secret_access_key" do
42
- AssetSync.config.aws_secret_access_key.should == "bbbb"
42
+ expect(AssetSync.config.aws_secret_access_key).to eq("bbbb")
43
43
  end
44
44
 
45
45
  it "should configure aws_access_key" do
46
- AssetSync.config.fog_directory.should == "mybucket"
46
+ expect(AssetSync.config.fog_directory).to eq("mybucket")
47
47
  end
48
48
 
49
49
  it "should configure fog_region" do
50
- AssetSync.config.fog_region.should == "eu-west-1"
50
+ expect(AssetSync.config.fog_region).to eq("eu-west-1")
51
51
  end
52
52
 
53
53
  it "should configure existing_remote_files" do
54
- AssetSync.config.existing_remote_files.should == "keep"
54
+ expect(AssetSync.config.existing_remote_files).to eq("keep")
55
55
  end
56
56
 
57
57
  it "should default gzip_compression to false" do
58
- AssetSync.config.gzip_compression.should be_false
58
+ expect(AssetSync.config.gzip_compression).to be_falsey
59
59
  end
60
60
 
61
61
  it "should default manifest to false" do
62
- AssetSync.config.manifest.should be_false
62
+ expect(AssetSync.config.manifest).to be_falsey
63
63
  end
64
64
 
65
65
  it "should default log_silently to true" do
66
- AssetSync.config.log_silently.should be_true
66
+ expect(AssetSync.config.log_silently).to be_truthy
67
67
  end
68
68
 
69
69
  it "should default cdn_distribution_id to nil" do
70
- AssetSync.config.cdn_distribution_id.should be_nil
70
+ expect(AssetSync.config.cdn_distribution_id).to be_nil
71
71
  end
72
72
 
73
73
  it "should default invalidate to empty array" do
74
- AssetSync.config.invalidate.should == []
74
+ expect(AssetSync.config.invalidate).to eq([])
75
75
  end
76
76
  end
77
77
 
@@ -82,40 +82,40 @@ describe AssetSync do
82
82
  end
83
83
 
84
84
  it "should default AssetSync to enabled" do
85
- AssetSync.config.enabled?.should be_true
86
- AssetSync.enabled?.should be_true
85
+ expect(AssetSync.config.enabled?).to be_truthy
86
+ expect(AssetSync.enabled?).to be_truthy
87
87
  end
88
88
 
89
89
  it "should configure run_on_precompile" do
90
- AssetSync.config.run_on_precompile.should be_false
90
+ expect(AssetSync.config.run_on_precompile).to be_falsey
91
91
  end
92
92
 
93
93
  it "should configure aws_access_key_id" do
94
- AssetSync.config.aws_access_key_id.should == "xxxx"
94
+ expect(AssetSync.config.aws_access_key_id).to eq("xxxx")
95
95
  end
96
96
 
97
97
  it "should configure aws_secret_access_key" do
98
- AssetSync.config.aws_secret_access_key.should == "zzzz"
98
+ expect(AssetSync.config.aws_secret_access_key).to eq("zzzz")
99
99
  end
100
100
 
101
101
  it "should configure fog_directory" do
102
- AssetSync.config.fog_directory.should == "rails_app_test"
102
+ expect(AssetSync.config.fog_directory).to eq("rails_app_test")
103
103
  end
104
104
 
105
105
  it "should configure fog_region" do
106
- AssetSync.config.fog_region.should == "eu-west-1"
106
+ expect(AssetSync.config.fog_region).to eq("eu-west-1")
107
107
  end
108
108
 
109
109
  it "should configure existing_remote_files" do
110
- AssetSync.config.existing_remote_files.should == "keep"
110
+ expect(AssetSync.config.existing_remote_files).to eq("keep")
111
111
  end
112
112
 
113
113
  it "should default gzip_compression to false" do
114
- AssetSync.config.gzip_compression.should be_false
114
+ expect(AssetSync.config.gzip_compression).to be_falsey
115
115
  end
116
116
 
117
117
  it "should default manifest to false" do
118
- AssetSync.config.manifest.should be_false
118
+ expect(AssetSync.config.manifest).to be_falsey
119
119
  end
120
120
  end
121
121
 
@@ -160,7 +160,7 @@ describe AssetSync do
160
160
 
161
161
  describe 'with fail_silent configuration' do
162
162
  before(:each) do
163
- AssetSync.stub(:stderr).and_return(@stderr = StringIO.new)
163
+ allow(AssetSync).to receive(:stderr).and_return(@stderr = StringIO.new)
164
164
  AssetSync.config = AssetSync::Config.new
165
165
  AssetSync.configure do |config|
166
166
  config.fail_silently = true
@@ -173,13 +173,13 @@ describe AssetSync do
173
173
 
174
174
  it "should output a warning to stderr" do
175
175
  AssetSync.sync
176
- @stderr.string.should =~ /can't be blank/
176
+ expect(@stderr.string).to match(/can't be blank/)
177
177
  end
178
178
  end
179
179
 
180
180
  describe 'with disabled config' do
181
181
  before(:each) do
182
- AssetSync.stub(:stderr).and_return(@stderr = StringIO.new)
182
+ allow(AssetSync).to receive(:stderr).and_return(@stderr = StringIO.new)
183
183
  AssetSync.config = AssetSync::Config.new
184
184
  AssetSync.configure do |config|
185
185
  config.enabled = false
@@ -187,7 +187,7 @@ describe AssetSync do
187
187
  end
188
188
 
189
189
  it "should not raise an invalid exception" do
190
- lambda{ AssetSync.sync }.should_not raise_error()
190
+ expect{ AssetSync.sync }.not_to raise_error()
191
191
  end
192
192
  end
193
193
 
@@ -198,7 +198,7 @@ describe AssetSync do
198
198
  end
199
199
 
200
200
  it "config.gzip? should be true" do
201
- AssetSync.config.gzip?.should be_true
201
+ expect(AssetSync.config.gzip?).to be_truthy
202
202
  end
203
203
  end
204
204
 
@@ -209,21 +209,21 @@ describe AssetSync do
209
209
  end
210
210
 
211
211
  it "config.manifest should be true" do
212
- AssetSync.config.manifest.should be_true
212
+ expect(AssetSync.config.manifest).to be_truthy
213
213
  end
214
214
 
215
215
  it "config.manifest_path should default to public/assets.." do
216
- AssetSync.config.manifest_path.should =~ /public\/assets\/manifest.yml/
216
+ expect(AssetSync.config.manifest_path).to match(/public\/assets\/manifest.yml/)
217
217
  end
218
218
 
219
219
  it "config.manifest_path should default to public/assets.." do
220
220
  Rails.application.config.assets.manifest = "/var/assets"
221
- AssetSync.config.manifest_path.should == "/var/assets/manifest.yml"
221
+ expect(AssetSync.config.manifest_path).to eq("/var/assets/manifest.yml")
222
222
  end
223
223
 
224
224
  it "config.manifest_path should default to public/custom_assets.." do
225
225
  Rails.application.config.assets.prefix = 'custom_assets'
226
- AssetSync.config.manifest_path.should =~ /public\/custom_assets\/manifest.yml/
226
+ expect(AssetSync.config.manifest_path).to match(/public\/custom_assets\/manifest.yml/)
227
227
  end
228
228
  end
229
229
 
@@ -235,14 +235,11 @@ describe AssetSync do
235
235
  end
236
236
 
237
237
  it "config should be invalid" do
238
- AssetSync.config.valid?.should be_false
238
+ expect(AssetSync.config.valid?).to be_falsey
239
239
  end
240
240
 
241
241
  it "should raise a config invalid error" do
242
242
  expect{ AssetSync.sync }.to raise_error()
243
243
  end
244
-
245
-
246
244
  end
247
-
248
245
  end