asset_sync 0.5.4 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -16,6 +16,10 @@ describe AssetSync do
16
16
  end
17
17
  end
18
18
 
19
+ it "should default to running on precompile" do
20
+ AssetSync.config.run_on_precompile.should be_true
21
+ end
22
+
19
23
  it "should default AssetSync to enabled" do
20
24
  AssetSync.config.enabled?.should be_true
21
25
  AssetSync.enabled?.should be_true
@@ -57,6 +61,18 @@ describe AssetSync do
57
61
  it "should default manifest to false" do
58
62
  AssetSync.config.manifest.should be_false
59
63
  end
64
+
65
+ it "should default log_silently to true" do
66
+ AssetSync.config.log_silently.should be_true
67
+ end
68
+
69
+ it "should default cdn_distribution_id to nil" do
70
+ AssetSync.config.cdn_distribution_id.should be_nil
71
+ end
72
+
73
+ it "should default invalidate to empty array" do
74
+ AssetSync.config.invalidate.should == []
75
+ end
60
76
  end
61
77
 
62
78
  describe 'from yml' do
@@ -70,6 +86,10 @@ describe AssetSync do
70
86
  AssetSync.enabled?.should be_true
71
87
  end
72
88
 
89
+ it "should configure run_on_precompile" do
90
+ AssetSync.config.run_on_precompile.should be_false
91
+ end
92
+
73
93
  it "should configure aws_access_key_id" do
74
94
  AssetSync.config.aws_access_key_id.should == "xxxx"
75
95
  end
@@ -107,7 +127,7 @@ describe AssetSync do
107
127
  end
108
128
 
109
129
  it "should be disabled" do
110
- lambda{ AssetSync.sync }.should_not raise_error(AssetSync::Config::Invalid)
130
+ expect{ AssetSync.sync }.not_to raise_error()
111
131
  end
112
132
 
113
133
  after(:each) do
@@ -121,7 +141,7 @@ describe AssetSync do
121
141
  end
122
142
 
123
143
  it "should be invalid" do
124
- lambda{ AssetSync.sync }.should raise_error(AssetSync::Config::Invalid)
144
+ expect{ AssetSync.sync }.to raise_error()
125
145
  end
126
146
  end
127
147
 
@@ -134,7 +154,7 @@ describe AssetSync do
134
154
  end
135
155
 
136
156
  it "should do nothing, without complaining" do
137
- lambda{ AssetSync.sync }.should_not raise_error(AssetSync::Config::Invalid)
157
+ expect{ AssetSync.sync }.not_to raise_error()
138
158
  end
139
159
  end
140
160
 
@@ -148,7 +168,7 @@ describe AssetSync do
148
168
  end
149
169
 
150
170
  it "should not raise an invalid exception" do
151
- lambda{ AssetSync.sync }.should_not raise_error(AssetSync::Config::Invalid)
171
+ expect{ AssetSync.sync }.not_to raise_error()
152
172
  end
153
173
 
154
174
  it "should output a warning to stderr" do
@@ -157,6 +177,20 @@ describe AssetSync do
157
177
  end
158
178
  end
159
179
 
180
+ describe 'with disabled config' do
181
+ before(:each) do
182
+ AssetSync.stub(:stderr).and_return(@stderr = StringIO.new)
183
+ AssetSync.config = AssetSync::Config.new
184
+ AssetSync.configure do |config|
185
+ config.enabled = false
186
+ end
187
+ end
188
+
189
+ it "should not raise an invalid exception" do
190
+ lambda{ AssetSync.sync }.should_not raise_error()
191
+ end
192
+ end
193
+
160
194
  describe 'with gzip_compression enabled' do
161
195
  before(:each) do
162
196
  AssetSync.config = AssetSync::Config.new
@@ -193,4 +227,22 @@ describe AssetSync do
193
227
  end
194
228
  end
195
229
 
230
+ describe 'with invalid yml' do
231
+
232
+ before(:each) do
233
+ set_rails_root('with_invalid_yml')
234
+ AssetSync.config = AssetSync::Config.new
235
+ end
236
+
237
+ it "config should be invalid" do
238
+ AssetSync.config.valid?.should be_false
239
+ end
240
+
241
+ it "should raise a config invalid error" do
242
+ expect{ AssetSync.sync }.to raise_error()
243
+ end
244
+
245
+
246
+ end
247
+
196
248
  end
@@ -86,7 +86,7 @@ describe AssetSync do
86
86
  end
87
87
 
88
88
  it "should be invalid" do
89
- lambda{ AssetSync.sync }.should raise_error(AssetSync::Config::Invalid)
89
+ expect{ AssetSync.sync }.to raise_error()
90
90
  end
91
91
  end
92
92
 
@@ -100,7 +100,7 @@ describe AssetSync do
100
100
  end
101
101
 
102
102
  it "should not raise an invalid exception" do
103
- lambda{ AssetSync.sync }.should_not raise_error(AssetSync::Config::Invalid)
103
+ expect{ AssetSync.sync }.not_to raise_error()
104
104
  end
105
105
  end
106
106
 
@@ -2,19 +2,30 @@ require File.dirname(__FILE__) + '/../spec_helper'
2
2
 
3
3
  describe AssetSync::MultiMime do
4
4
 
5
+ before(:each) do
6
+ Object.send(:remove_const, :Rails) if defined?(Rails)
7
+ Object.send(:remove_const, :Mime) if defined?(Mime)
8
+ Object.send(:remove_const, :Rack) if defined?(Rack)
9
+ end
10
+
11
+ after(:each) do
12
+ Object.send(:remove_const, :Rails) if defined?(Rails)
13
+ Object.send(:remove_const, :Mime) if defined?(Mime)
14
+ Object.send(:remove_const, :Rack) if defined?(Rack)
15
+ end
16
+
17
+ after(:all) do
18
+ require 'mime/types'
19
+ end
20
+
5
21
  describe 'Mime::Type' do
6
22
 
7
23
  it 'should detect mime type' do
8
- Object.send(:remove_const, :Rails) if defined?(Rails)
24
+ pending "Fails on Travis CI only as of https://travis-ci.org/rumblelabs/asset_sync/builds/4188196"
9
25
  require 'rails'
10
26
  AssetSync::MultiMime.lookup('css').should == "text/css"
11
27
  end
12
28
 
13
- after(:each) do
14
- Object.send(:remove_const, :Rails) if defined?(Rails)
15
- Object.send(:remove_const, :Mime) if defined?(Mime)
16
- end
17
-
18
29
  end
19
30
 
20
31
  describe 'Rack::Mime' do
@@ -24,24 +35,15 @@ describe AssetSync::MultiMime do
24
35
  AssetSync::MultiMime.lookup('css').should == "text/css"
25
36
  end
26
37
 
27
- after(:each) do
28
- Object.send(:remove_const, :Rack) if defined?(Rack)
29
- end
30
-
31
38
  end
32
39
 
33
40
  describe 'MIME::Types' do
34
41
 
35
42
  it 'should detect mime type' do
36
- Object.send(:remove_const, :MIME) if defined?(MIME)
37
43
  require 'mime/types'
38
44
  AssetSync::MultiMime.lookup('css').should == "text/css"
39
45
  end
40
46
 
41
- after(:each) do
42
- Object.send(:remove_const, :MIME) if defined?(MIME)
43
- end
44
-
45
47
  end
46
48
 
47
49
  end
@@ -49,5 +49,146 @@ describe AssetSync::Storage do
49
49
  end
50
50
  storage.upload_files
51
51
  end
52
+
53
+ it 'should upload updated non-fingerprinted files' do
54
+ @local_files = [
55
+ 'public/image.png',
56
+ 'public/image-82389298328.png',
57
+ 'public/image-a8389f9h324.png',
58
+ 'public/application.js',
59
+ 'public/application-b3389d983k1.js',
60
+ 'public/application-ac387d53f31.js',
61
+ 'public',
62
+ ]
63
+ @remote_files = [
64
+ 'public/image.png',
65
+ 'public/image-a8389f9h324.png',
66
+ 'public/application.js',
67
+ 'public/application-b3389d983k1.js',
68
+ ]
69
+
70
+ storage = AssetSync::Storage.new(@config)
71
+ storage.stub(:local_files).and_return(@local_files)
72
+ storage.stub(:get_remote_files).and_return(@remote_files)
73
+ File.stub(:file?).and_return(true) # Pretend they all exist
74
+
75
+ updated_nonfingerprinted_files = [
76
+ 'public/image.png',
77
+ 'public/application.js',
78
+ ]
79
+ (@local_files - @remote_files + updated_nonfingerprinted_files).each do |file|
80
+ storage.should_receive(:upload_file).with(file)
81
+ end
82
+ storage.upload_files
83
+ end
84
+
85
+
86
+ it 'should correctly set expire date' do
87
+ local_files = ['file1.jpg', 'file1-1234567890abcdef1234567890abcdef.jpg']
88
+ local_files += ['dir1/dir2/file2.jpg', 'dir1/dir2/file2-1234567890abcdef1234567890abcdef.jpg']
89
+ remote_files = []
90
+ storage = AssetSync::Storage.new(@config)
91
+ storage.stub(:local_files).and_return(local_files)
92
+ storage.stub(:get_remote_files).and_return(remote_files)
93
+ File.stub(:file?).and_return(true)
94
+ File.stub(:open).and_return(nil)
95
+
96
+ def check_file(file)
97
+ case file[:key]
98
+ when 'file1.jpg'
99
+ when 'dir1/dir2/file2.jpg'
100
+ !file.should_not include(:cache_control, :expires)
101
+ when 'file1-1234567890abcdef1234567890abcdef.jpg'
102
+ when 'dir1/dir2/file2-1234567890abcdef1234567890abcdef.jpg'
103
+ file.should include(:cache_control, :expires)
104
+ else
105
+ fail
106
+ end
107
+ end
108
+
109
+ files = double()
110
+ local_files.count.times do
111
+ files.should_receive(:create) { |file| check_file(file) }
112
+ end
113
+ storage.stub_chain(:bucket, :files).and_return(files)
114
+ storage.upload_files
115
+ end
116
+
117
+ it "shoud invalidate files" do
118
+ @config.cdn_distribution_id = "1234"
119
+ @config.invalidate = ['local_image1.jpg']
120
+ @config.fog_provider = 'AWS'
121
+
122
+ storage = AssetSync::Storage.new(@config)
123
+ storage.stub(:local_files).and_return(@local_files)
124
+ storage.stub(:get_remote_files).and_return(@remote_files)
125
+ storage.stub(:upload_file).and_return(true)
126
+
127
+ mock_cdn = mock
128
+ Fog::CDN.should_receive(:new).and_return(mock_cdn)
129
+ mock_cdn.should_receive(:post_invalidation).with("1234", ["/assets/local_image1.jpg"]).and_return(stub({:body => {:id => '1234'}}))
130
+
131
+ storage.upload_files
132
+ end
133
+ end
134
+
135
+ describe '#upload_file' do
136
+ before(:each) do
137
+ # Object#remove_const does not remove the loaded
138
+ # file from the $" variable
139
+ Object.send(:remove_const, :MIME) if defined?(MIME)
140
+ mime_types = $".grep(/mime\/types/).first
141
+ $".delete(mime_types)
142
+ require 'mime/types'
143
+ @config = AssetSync::Config.new
144
+ end
145
+
146
+ it 'accepts custom headers per file' do
147
+ @config.custom_headers = {
148
+ "local_image2.jpg" => {
149
+ :cache_control => 'max-age=0'
150
+ }
151
+ }
152
+ storage = AssetSync::Storage.new(@config)
153
+ storage.stub(:local_files).and_return(@local_files)
154
+ storage.stub(:get_remote_files).and_return(@remote_files)
155
+ File.stub(:open).and_return('file') # Pretend they all exist
156
+
157
+ bucket = double
158
+ files = double
159
+
160
+ storage.stub(:bucket).and_return(bucket)
161
+ bucket.stub(:files).and_return(files)
162
+
163
+ files.should_receive(:create) do |argument|
164
+ argument[:cache_control].should == 'max-age=0'
165
+ end
166
+ storage.upload_file('assets/local_image2.jpg')
167
+ end
168
+
169
+ it 'accepts custom headers with a regular expression' do
170
+ @config.custom_headers = {
171
+ ".*\.jpg" => {
172
+ :cache_control => 'max-age=0'
173
+ }
174
+ }
175
+ storage = AssetSync::Storage.new(@config)
176
+ storage.stub(:local_files).and_return(@local_files)
177
+ storage.stub(:get_remote_files).and_return(@remote_files)
178
+ File.stub(:open).and_return('file') # Pretend they all exist
179
+ bucket = mock
180
+ files = mock
181
+ storage.stub(:bucket).and_return(bucket)
182
+ bucket.stub(:files).and_return(files)
183
+
184
+ files.should_receive(:create) do |argument|
185
+ argument[:cache_control].should == 'max-age=0'
186
+ end
187
+ storage.upload_file('assets/some_longer_path/local_image2.jpg')
188
+ end
189
+
190
+ after(:each) do
191
+ Object.send(:remove_const, :MIME) if defined?(MIME)
192
+ end
52
193
  end
53
194
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asset_sync
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.4
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2013-01-16 00:00:00.000000000 Z
14
+ date: 2013-08-26 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: fog
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ! '>='
22
22
  - !ruby/object:Gem::Version
23
- version: '0'
23
+ version: 1.8.0
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
@@ -28,7 +28,7 @@ dependencies:
28
28
  requirements:
29
29
  - - ! '>='
30
30
  - !ruby/object:Gem::Version
31
- version: '0'
31
+ version: 1.8.0
32
32
  - !ruby/object:Gem::Dependency
33
33
  name: activemodel
34
34
  requirement: !ruby/object:Gem::Requirement
@@ -94,7 +94,7 @@ dependencies:
94
94
  - !ruby/object:Gem::Version
95
95
  version: '0'
96
96
  - !ruby/object:Gem::Dependency
97
- name: rails
97
+ name: uglifier
98
98
  requirement: !ruby/object:Gem::Requirement
99
99
  none: false
100
100
  requirements:
@@ -110,7 +110,7 @@ dependencies:
110
110
  - !ruby/object:Gem::Version
111
111
  version: '0'
112
112
  - !ruby/object:Gem::Dependency
113
- name: uglifier
113
+ name: asset_sync
114
114
  requirement: !ruby/object:Gem::Requirement
115
115
  none: false
116
116
  requirements:
@@ -126,7 +126,7 @@ dependencies:
126
126
  - !ruby/object:Gem::Version
127
127
  version: '0'
128
128
  - !ruby/object:Gem::Dependency
129
- name: asset_sync
129
+ name: appraisal
130
130
  requirement: !ruby/object:Gem::Requirement
131
131
  none: false
132
132
  requirements:
@@ -153,12 +153,16 @@ extra_rdoc_files: []
153
153
  files:
154
154
  - .gitignore
155
155
  - .travis.yml
156
+ - Appraisals
156
157
  - CHANGELOG.md
157
158
  - Gemfile
158
159
  - README.md
159
160
  - Rakefile
160
161
  - asset_sync.gemspec
161
162
  - docs/heroku.md
163
+ - gemfiles/rails_3.1.gemfile
164
+ - gemfiles/rails_3.2.gemfile
165
+ - gemfiles/rails_4.0.gemfile
162
166
  - lib/asset_sync.rb
163
167
  - lib/asset_sync/asset_sync.rb
164
168
  - lib/asset_sync/config.rb
@@ -176,6 +180,7 @@ files:
176
180
  - spec/fixtures/aws_with_yml/config/asset_sync.yml
177
181
  - spec/fixtures/google_with_yml/config/asset_sync.yml
178
182
  - spec/fixtures/rackspace_with_yml/config/asset_sync.yml
183
+ - spec/fixtures/with_invalid_yml/config/asset_sync.yml
179
184
  - spec/integration/aws_integration_spec.rb
180
185
  - spec/spec_helper.rb
181
186
  - spec/unit/asset_sync_spec.rb
@@ -198,7 +203,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
198
203
  version: '0'
199
204
  segments:
200
205
  - 0
201
- hash: 331776732301041592
206
+ hash: -395743351028852648
202
207
  required_rubygems_version: !ruby/object:Gem::Requirement
203
208
  none: false
204
209
  requirements:
@@ -207,7 +212,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
207
212
  version: '0'
208
213
  segments:
209
214
  - 0
210
- hash: 331776732301041592
215
+ hash: -395743351028852648
211
216
  requirements: []
212
217
  rubyforge_project: asset_sync
213
218
  rubygems_version: 1.8.24
@@ -221,6 +226,7 @@ test_files:
221
226
  - spec/fixtures/aws_with_yml/config/asset_sync.yml
222
227
  - spec/fixtures/google_with_yml/config/asset_sync.yml
223
228
  - spec/fixtures/rackspace_with_yml/config/asset_sync.yml
229
+ - spec/fixtures/with_invalid_yml/config/asset_sync.yml
224
230
  - spec/integration/aws_integration_spec.rb
225
231
  - spec/spec_helper.rb
226
232
  - spec/unit/asset_sync_spec.rb