branchable_cdn_assets-middleman 0.5.2 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c130145cf4f67c1f884a85a31cc1e24abaa68b5a
4
- data.tar.gz: 8c26d06ccb56d4890f7ea8bd7e04be6c0d63ee02
3
+ metadata.gz: db8030ec152bd0407e74c622d95d127cecebe65e
4
+ data.tar.gz: 1a59b0c2b966dfe40f48073ea600199dfbcea039
5
5
  SHA512:
6
- metadata.gz: 85e82fe4001cdc02abf6c2d34eb53ff9621507b36cfe47f86b9824fa591c5cd2ef3c02ad0d90e0cf944ce843bbcd98af9dd779aeabe5e297af10b1934b652c79
7
- data.tar.gz: f8b9d059cc4cef0e02e4b3c6936d48a85eee79f3b2be4aa7bd594460147bc5f45af12dfa9467d146391f49a12fb8eea593cb362879303f8d1c9e9ceff612d178
6
+ metadata.gz: 983fedb01fa253045cfc846fa871b47ce48566ceb19452a6019b9c3decfb86fd61ff2c83c2f32b964651c2031ff34721c02d233d47936208a9f94b9bcbfc4381
7
+ data.tar.gz: a72ae5b031b45fc52149b784aee430f289dc6e68d023f3a7ec4b805bee2be0662d5b03714d5a8b98dd50b12ad7ac0b4557669e90dfc10f8bd8c3007e6508caee
@@ -2,12 +2,16 @@ module BranchableCDNAssets
2
2
  module Middleman
3
3
 
4
4
  class Extension < ::Middleman::Extension
5
+ self.supports_multiple_instances = true
5
6
 
6
- option :environments, {}, 'environment specific configuration'
7
- option :cloudfront, {}, 'access keys for cloudfront account'
8
- option :cdn_dir, 'cdn', 'source directory for cdn files'
7
+ option :id, nil, 'name of this cdn'
8
+ option :environments, {}, 'environment specific configuration'
9
+ option :cloudfront, nil, 'access keys for cloudfront account'
10
+ option :cdn_dir, 'cdn', 'source directory for cdn files'
9
11
  option :production_branch, 'master', 'which branch is the production branch'
10
- option :default_env, 'staging', 'the default environment if none is set'
12
+ option :default_env, 'staging', 'the default environment if none is set'
13
+ option :file_filter, nil, 'filter for managed files'
14
+ option :allow_local, false, 'allow local files to remain on deploy checks'
11
15
 
12
16
  def after_configuration
13
17
  if defined?(::Sass::Script::Functions)
@@ -25,9 +29,15 @@ module BranchableCDNAssets
25
29
  production_branch: options.production_branch,
26
30
  default_env: options.default_env,
27
31
  environments: options.environments,
28
- cloudfront: options.cloudfront,
29
- cdn_dir: options.cdn_dir
32
+ dir: options.cdn_dir,
33
+ file_filter: options.file_filter,
34
+ allow_local: options.allow_local
30
35
  }
36
+ if options.cloudfront
37
+ data.merge! invalidators: {
38
+ cloudfront: options.cloudfront
39
+ }
40
+ end
31
41
  Config.new data
32
42
  end
33
43
 
@@ -35,6 +45,10 @@ module BranchableCDNAssets
35
45
  BranchableCDNAssets::FileManager.new config
36
46
  end
37
47
 
48
+ def id
49
+ options.id || self.object_id.to_s
50
+ end
51
+
38
52
  helpers do
39
53
  include Helpers
40
54
  end
@@ -45,8 +59,8 @@ module BranchableCDNAssets
45
59
  file_manager.list( :local ).map do |file|
46
60
  ::Middleman::Sitemap::Resource.new(
47
61
  app.sitemap,
48
- File.join( "assets/cdn", file ),
49
- File.join( app.root, "cdn", file )
62
+ File.join( "assets/cdn", id, file ),
63
+ File.join( app.root, options.cdn_dir, file )
50
64
  )
51
65
  end
52
66
  end
@@ -8,26 +8,50 @@ module BranchableCDNAssets
8
8
  #
9
9
  # @param path [String]
10
10
  # @return [String] path to asset
11
- def cdn_asset_url path
11
+ def cdn_asset_url path, cdn=nil
12
12
 
13
13
  # remove trailing characters after extension
14
- ext_trail = path.match(/\.\w+([\#\?\&]\S+)/).to_a
14
+ # http://rubular.com/r/l0JR3ZuqI2
15
+ ext_trail = path.match(/(?:\.\w+)?([\#\?\&]\S+)/).to_a
15
16
  ext_trail = ext_trail[1] || ''
16
17
 
17
18
  real_path = path.sub(ext_trail, '')
18
19
 
19
- # check for file in sitemap
20
- if environment != :build && resource = sitemap.find_resource_by_path( File.join( "assets/cdn", real_path ) )
21
- return "/" + [resource.destination_path, ext_trail].join
20
+ # check for file in sitemap on each extension
21
+ sitemap_candidates = []
22
+ if environment != :build
23
+ extensions[:cdn_assets].each do |k, inst|
24
+ next if cdn && inst.id != cdn
25
+
26
+ resource = sitemap.find_resource_by_path( File.join( "assets/cdn", inst.id, real_path ) )
27
+ sitemap_candidates.push ["/", resource.destination_path, ext_trail].join('') if resource
28
+ end
22
29
  end
23
30
 
24
- # check for the file in the file_manager
25
- file = extensions[:cdn_assets].file_manager.find(real_path)
31
+ # check for the file in the file_managers
32
+ file_manager_candidates = []
33
+ extensions[:cdn_assets].each do |k, inst|
34
+ next if cdn && inst.id != cdn
35
+
36
+ location = (environment == :build) ? :remote : :all;
37
+ file = inst.file_manager.find(real_path, location)
26
38
 
27
- return [file, ext_trail].join if file && file != :local
39
+ file_manager_candidates.push [file, ext_trail].join('') if file && file != :local
40
+ end
41
+
42
+ candidates = file_manager_candidates + sitemap_candidates
43
+ unless candidates.empty?
44
+ if candidates.length == 1
45
+ return candidates.first
46
+ elsif cdn # file found local & on remote
47
+ return candidates.first
48
+ else
49
+ raise MultipleCDNError, "asset at '#{real_path}' found on multiple cdns. please pass a cdn id"
50
+ end
51
+ end
28
52
 
29
53
  # not found at any location
30
- raise "missing asset at '#{real_path}'"
54
+ raise FileNotFoundError, "missing asset at '#{real_path}'"
31
55
  end
32
56
  alias :cdn_asset_path :cdn_asset_url
33
57
 
@@ -36,13 +60,20 @@ module BranchableCDNAssets
36
60
 
37
61
  module SassHelpers
38
62
 
39
- def cdn_asset_url( path )
40
- file = $app.cdn_asset_url( path.value )
63
+ def cdn_asset_url( path, cdn=nil )
64
+ cdn = cdn.value if cdn.respond_to?(:value) # have to force cdn to a string if not nil
65
+ file = $app.cdn_asset_url( path.value, cdn )
41
66
  ::Sass::Script::String.new("url(\"#{file}\")")
42
67
  end
43
68
  alias :cdn_asset_path :cdn_asset_url
44
69
 
45
70
  end
46
71
 
72
+ class MultipleCDNError < StandardError
73
+ end
74
+
75
+ class FileNotFoundError < StandardError
76
+ end
77
+
47
78
  end
48
79
  end
@@ -22,7 +22,12 @@ module BranchableCDNAssets
22
22
  end
23
23
 
24
24
  def file_manager
25
- @_file_manager ||= FileManager.new mm.extensions[:cdn_assets].config
25
+ return @_file_manager if @_file_manager
26
+
27
+ inst = mm.extensions[:cdn_assets].values.find { |inst| inst.id.to_s == @rake_namespace.to_s }
28
+ @_file_manager = FileManager.new inst.config
29
+
30
+ return @_file_manager
26
31
  end
27
32
 
28
33
  end
@@ -1,5 +1,5 @@
1
1
  module BranchableCDNAssets
2
2
  module Middleman
3
- VERSION = '0.5.2'
3
+ VERSION = '0.7.0' unless defined?(BranchableCDNAssets::Middleman::VERSION)
4
4
  end
5
5
  end
@@ -0,0 +1,58 @@
1
+ set :environment, :test
2
+ set :show_exceptions, false
3
+
4
+ set :css_dir, "assets/css"
5
+ set :js_dir, "assets/scripts"
6
+ set :images_dir, "assets/images"
7
+
8
+ activate :cdn_assets do |c|
9
+
10
+ c.id = "cdn1"
11
+ c.cdn_dir = "cdn"
12
+
13
+ c.environments = {
14
+ production: {
15
+ host: 'production_host',
16
+ url: 'http://production.com',
17
+ root: '/var/www/production'
18
+ },
19
+ test: {
20
+ host: 'test_host',
21
+ url: 'http://test.com',
22
+ root: '/var/www/test'
23
+ },
24
+ staging: {
25
+ host: 'staging_host',
26
+ url: 'http://staging.com',
27
+ root: '/var/www/staging'
28
+ }
29
+ }
30
+
31
+ end
32
+
33
+ activate :cdn_assets do |c|
34
+
35
+ c.id = "cdn2"
36
+ c.cdn_dir = "cdn2"
37
+
38
+ c.environments = {
39
+ production: {
40
+ host: 'production_host',
41
+ url: 'http://production.com',
42
+ root: '/var/www/production'
43
+ },
44
+ test: {
45
+ host: 'test_host',
46
+ url: 'http://test.com',
47
+ root: '/var/www/test'
48
+ },
49
+ staging: {
50
+ host: 'staging_host',
51
+ url: 'http://staging.com',
52
+ root: '/var/www/staging'
53
+ }
54
+ }
55
+
56
+ end
57
+
58
+ activate :directory_indexes
@@ -9,7 +9,8 @@ describe BranchableCDNAssets::Middleman::Extension do
9
9
  Given.file 'cdn/img_two', ''
10
10
 
11
11
  @mm = Middleman::Fixture.app
12
- @extension = @mm.extensions[:cdn_assets]
12
+
13
+ @extension = @mm.extensions[:cdn_assets].first[1]
13
14
  end
14
15
 
15
16
  after :each do
@@ -54,8 +55,8 @@ describe BranchableCDNAssets::Middleman::Extension do
54
55
  describe "#manipulate_resource_list" do
55
56
  it "adds local files to the resource list" do
56
57
  resource_paths = @mm.sitemap.resources.map(&:url)
57
- expect( resource_paths ).to include '/assets/cdn/img_one'
58
- expect( resource_paths ).to include '/assets/cdn/img_two'
58
+ expect( resource_paths ).to include "/assets/cdn/#{@extension.object_id}/img_one"
59
+ expect( resource_paths ).to include "/assets/cdn/#{@extension.object_id}/img_two"
59
60
  end
60
61
  end
61
62
 
@@ -0,0 +1,178 @@
1
+ require 'spec_helper'
2
+ require 'middleman_spec_helper'
3
+
4
+ describe BranchableCDNAssets::Middleman::Helpers do
5
+
6
+
7
+ describe "with a single instance" do
8
+ before :each do
9
+ Given.fixture 'base'
10
+ Given.file 'cdn/master.manifest', "image_one\nimage_all\nimage_remote_one\nimg.one.jpg\nimage_prod"
11
+ Given.file 'cdn/some_branch.manifest', "image_one\nimage_all\nimage_remote_two\n"
12
+ Given.file 'cdn/image_one', ''
13
+ Given.file 'cdn/image_two', ''
14
+ Given.file 'cdn/image_all', ''
15
+ Given.file 'cdn/image_prod', ''
16
+
17
+ @mm = Middleman::Fixture.app
18
+ @extension = @mm.extensions[:cdn_assets].first[1]
19
+ end
20
+
21
+ after :each do
22
+ Given.cleanup!
23
+ end
24
+
25
+ describe "sitemap helpers" do
26
+ describe "#cdn_asset_url" do
27
+ context "when asset is on production cdn" do
28
+ it "returns the 'live' url of the asset" do
29
+ allow( Asgit ).to receive(:current_branch).and_return('master')
30
+ expect( @mm.cdn_asset_url('image_remote_one') ).to eq 'http://production.com/image_remote_one'
31
+ end
32
+ end
33
+
34
+ context "when asset is on staging cdn" do
35
+ it "returns the 'live' url of the asset" do
36
+ allow( Asgit ).to receive(:current_branch).and_return('some_branch')
37
+ expect( @mm.cdn_asset_url('image_remote_two') ).to eq 'http://staging.com/some_branch/image_remote_two'
38
+ end
39
+ end
40
+
41
+ context "when asset is local" do
42
+ it "returns the 'localhost' url of the asset" do
43
+ expect( @mm.cdn_asset_url('image_two') ).to eq "/assets/cdn/#{@extension.id}/image_two"
44
+ end
45
+ end
46
+
47
+ context "when asset is local and listed in a manifest" do
48
+ it "returns the 'localhost' url of the asset" do
49
+ expect( @mm.cdn_asset_url('image_one') ).to eq "/assets/cdn/#{@extension.id}/image_one"
50
+ end
51
+
52
+ context "when building" do
53
+ it "returns remote url" do
54
+ @mm.config[:environment] = :build
55
+
56
+ allow( Asgit ).to receive(:current_branch).and_return('some_branch')
57
+ expect( @mm.cdn_asset_url('image_all') ).to eq "http://staging.com/some_branch/image_all"
58
+ expect( @mm.cdn_asset_url('image_one') ).to eq "http://staging.com/some_branch/image_one"
59
+ expect( @mm.cdn_asset_url('image_prod') ).to eq "http://production.com/image_prod"
60
+ end
61
+ end
62
+ end
63
+
64
+ context "when the asset is missing" do
65
+ it "raises an error with the asset name" do
66
+ expect{
67
+ @mm.cdn_asset_url('missing_image')
68
+ }.to raise_error BranchableCDNAssets::Middleman::FileNotFoundError, "missing asset at 'missing_image'"
69
+ end
70
+ end
71
+
72
+ context "when assets have multiple extensions" do
73
+ it "returns the url with the given extensions" do
74
+ allow( Asgit ).to receive(:current_branch).and_return('master')
75
+ expect( @mm.cdn_asset_url('img.one.jpg') ).to eq "http://production.com/img.one.jpg"
76
+ end
77
+ it "raises an error if the root asset is missing" do
78
+ expect{
79
+ @mm.cdn_asset_url('missing_image.1.jpg')
80
+ }.to raise_error BranchableCDNAssets::Middleman::FileNotFoundError, "missing asset at 'missing_image.1.jpg'"
81
+ end
82
+ end
83
+
84
+ context "with added file extensions" do
85
+ it "returns the url with the given extensions" do
86
+ allow( Asgit ).to receive(:current_branch).and_return('master')
87
+ expect( @mm.cdn_asset_url('image_one?#iefix') ).to eq "/assets/cdn/#{@extension.id}/image_one?#iefix"
88
+ expect( @mm.cdn_asset_url('img.one.jpg?#iefix') ).to eq "http://production.com/img.one.jpg?#iefix"
89
+ end
90
+ it "raises an error if the root asset is missing" do
91
+ expect{
92
+ @mm.cdn_asset_url('missing_image?#iefix')
93
+ }.to raise_error BranchableCDNAssets::Middleman::FileNotFoundError, "missing asset at 'missing_image'"
94
+ expect{
95
+ @mm.cdn_asset_url('missing_image.one.jpg?#iefix')
96
+ }.to raise_error BranchableCDNAssets::Middleman::FileNotFoundError, "missing asset at 'missing_image.one.jpg'"
97
+ end
98
+ end
99
+ end
100
+ end
101
+
102
+ describe "sass helpers" do
103
+ describe "#cdn_asset_url" do
104
+ it "calls mm#cdn_asset_url with the asset path" do
105
+ expect( @mm ).to receive(:cdn_asset_url).with('image_path', nil)
106
+
107
+ source = 'body { background: url( cdn_asset_url("image_path") ); }'
108
+ Sass.compile( source )
109
+ end
110
+ end
111
+ end
112
+ end
113
+
114
+
115
+ describe "with a multiple instances" do
116
+ before :all do
117
+ Given.fixture 'multi'
118
+ Given.file 'cdn/master.manifest', "image_one\nimage_remote_cdn1"
119
+ Given.file 'cdn/image_local', ''
120
+ Given.file 'cdn/image_cdn', ''
121
+ Given.file 'cdn2/master.manifest', "image_one\nimage_remote_cdn2"
122
+ Given.file 'cdn2/image_local', ''
123
+ Given.file 'cdn2/image_cdn2', ''
124
+
125
+ @mm = Middleman::Fixture.app
126
+ @cdn1 = @mm.extensions[:cdn_assets]["instance_0"]
127
+ @cdn2 = @mm.extensions[:cdn_assets]["instance_1"]
128
+ end
129
+
130
+ after :all do
131
+ Given.cleanup!
132
+ end
133
+
134
+
135
+ describe "sitemap helpers" do
136
+ describe "#cdn_asset_url" do
137
+ context "when file exists on only one cdn" do
138
+ it "finds remote files on correct cdn" do
139
+ allow( Asgit ).to receive(:current_branch).and_return('master')
140
+
141
+ expect( @mm.cdn_asset_url('image_remote_cdn1') ).to eq 'http://production.com/image_remote_cdn1'
142
+ expect( @mm.cdn_asset_url('image_remote_cdn2') ).to eq 'http://production.com/image_remote_cdn2'
143
+ end
144
+
145
+ it "finds local files on correct cdn" do
146
+ expect( @mm.cdn_asset_url('image_cdn') ).to eq "/assets/cdn/cdn1/image_cdn"
147
+ expect( @mm.cdn_asset_url('image_cdn2') ).to eq "/assets/cdn/cdn2/image_cdn2"
148
+ end
149
+ end
150
+
151
+ context "when file exists on multiple cdns" do
152
+ it "returns file on given cdn" do
153
+ expect( @mm.cdn_asset_url('image_local', 'cdn1') ).to eq "/assets/cdn/cdn1/image_local"
154
+ expect( @mm.cdn_asset_url('image_local', 'cdn2') ).to eq "/assets/cdn/cdn2/image_local"
155
+ end
156
+
157
+ it "raises error if a cdn key isn't given" do
158
+ expect{
159
+ @mm.cdn_asset_url('image_local')
160
+ }.to raise_error BranchableCDNAssets::Middleman::MultipleCDNError
161
+ end
162
+ end
163
+ end
164
+ end
165
+
166
+ describe "sass helpers" do
167
+ describe "#cdn_asset_url" do
168
+ it "is called with the cdn argument if given" do
169
+ expect( @mm ).to receive(:cdn_asset_url).with('image_path', 'cdn2')
170
+
171
+ source = 'body { background: url( cdn_asset_url("image_path", "cdn2") ); }'
172
+ Sass.compile( source )
173
+ end
174
+ end
175
+ end
176
+
177
+ end
178
+ end
@@ -9,7 +9,7 @@ require 'support/hash'
9
9
  require 'branchable_cdn_assets-middleman'
10
10
 
11
11
  # silence stdout
12
- $stdout = StringIO.open('','w+')
12
+ $stdout = StringIO.open('','w+') unless ENV['VERBOSE']
13
13
 
14
14
  RSpec.configure do |config|
15
15
  config.mock_with :rspec do |mocks|
metadata CHANGED
@@ -1,44 +1,44 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: branchable_cdn_assets-middleman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steven Sloan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-09 00:00:00.000000000 Z
11
+ date: 2015-11-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: middleman
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '3.1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '3.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: branchable_cdn_assets
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.5'
33
+ version: '0.7'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.5'
41
- description: ' Middleman Adaptor for branchable_cdn_assets '
40
+ version: '0.7'
41
+ description: " Middleman Adaptor for branchable_cdn_assets "
42
42
  email: marketing-dev@mailchimp.com
43
43
  executables: []
44
44
  extensions: []
@@ -52,9 +52,10 @@ files:
52
52
  - lib/branchable_cdn_assets/middleman/version.rb
53
53
  - lib/middleman_extension.rb
54
54
  - spec/fixtures/base/config.rb
55
+ - spec/fixtures/multi/config.rb
55
56
  - spec/lib/branchable_cdn_assets-middleman_spec.rb
56
57
  - spec/lib/branchable_cdn_assets/middleman/extension_spec.rb
57
- - spec/lib/branchable_cdn_assets/middleman/helpers_specs.rb
58
+ - spec/lib/branchable_cdn_assets/middleman/helpers_spec.rb
58
59
  - spec/lib/branchable_cdn_assets/middleman/rake_tasks_spec.rb
59
60
  - spec/middleman_spec_helper.rb
60
61
  - spec/spec_helper.rb
@@ -72,24 +73,25 @@ require_paths:
72
73
  - lib
73
74
  required_ruby_version: !ruby/object:Gem::Requirement
74
75
  requirements:
75
- - - '>='
76
+ - - ">="
76
77
  - !ruby/object:Gem::Version
77
78
  version: 1.9.3
78
79
  required_rubygems_version: !ruby/object:Gem::Requirement
79
80
  requirements:
80
- - - '>='
81
+ - - ">="
81
82
  - !ruby/object:Gem::Version
82
83
  version: '0'
83
84
  requirements: []
84
85
  rubyforge_project:
85
- rubygems_version: 2.4.5
86
+ rubygems_version: 2.4.5.1
86
87
  signing_key:
87
88
  specification_version: 4
88
89
  summary: Middleman Adaptor for branchable_cdn_assets
89
90
  test_files:
90
91
  - spec/fixtures/base/config.rb
92
+ - spec/fixtures/multi/config.rb
91
93
  - spec/lib/branchable_cdn_assets/middleman/extension_spec.rb
92
- - spec/lib/branchable_cdn_assets/middleman/helpers_specs.rb
94
+ - spec/lib/branchable_cdn_assets/middleman/helpers_spec.rb
93
95
  - spec/lib/branchable_cdn_assets/middleman/rake_tasks_spec.rb
94
96
  - spec/lib/branchable_cdn_assets-middleman_spec.rb
95
97
  - spec/middleman_spec_helper.rb
@@ -1,96 +0,0 @@
1
- require 'spec_helper'
2
- require 'middleman_spec_helper'
3
-
4
- describe CDNAssets::Middleman::Helpers do
5
-
6
- before :each do
7
- Given.fixture 'base'
8
- Given.file 'cdn/production.manifest', "image_one\nimage_remote_one\nimg.one.jpg"
9
- Given.file 'cdn/staging.manifest', "image_one\nimage_remote_two\n"
10
- Given.file 'cdn/image_one', ''
11
- Given.file 'cdn/image_two', ''
12
-
13
- @mm = Middleman::Fixture.app
14
- @extension = @mm.extensions[:cdn_assets]
15
- end
16
-
17
- after :each do
18
- Given.cleanup!
19
- end
20
-
21
- describe "sitemap helpers" do
22
- describe "#cdn_asset_url" do
23
- context "when asset is on production cdn" do
24
- it "returns the 'live' url of the asset" do
25
- Asgit.stub(current_branch: 'master')
26
- expect( @mm.cdn_asset_url('image_remote_one') ).to eq 'http://production.com/image_remote_one'
27
- end
28
- end
29
-
30
- context "when asset is on staging cdn" do
31
- it "returns the 'live' url of the asset" do
32
- Asgit.stub(current_branch: 'some_branch')
33
- expect( @mm.cdn_asset_url('image_remote_two') ).to eq 'http://staging.com/some_branch/image_remote_two'
34
- end
35
- end
36
-
37
- context "when asset is local" do
38
- it "returns the 'localhost' url of the asset" do
39
- expect( @mm.cdn_asset_url('image_two') ).to eq '/assets/cdn/image_two'
40
- end
41
- end
42
-
43
- context "when asset is local and listed in a manifest" do
44
- it "returns the 'localhost' url of the asset" do
45
- expect( @mm.cdn_asset_url('image_one') ).to eq '/assets/cdn/image_one'
46
- end
47
- end
48
-
49
- context "when the asset is missing" do
50
- it "raises an error with the asset name" do
51
- expect{
52
- @mm.cdn_asset_url('missing_image')
53
- }.to raise_error "missing asset at 'missing_image'"
54
- end
55
- end
56
-
57
- context "when assets have multiple extensions" do
58
- it "returns the url with the given extensions" do
59
- expect( @mm.cdn_asset_url('img.one.jpg') ).to eq '/assets/cdn/img.one.jpg'
60
- end
61
- it "raises an error if the root asset is missing" do
62
- expect{
63
- @mm.cdn_asset_url('missing_image.1.jpg')
64
- }.to raise_error "missing asset at 'missing_image.1.jpg'"
65
- end
66
- end
67
-
68
- context "with added file extensions" do
69
- it "returns the url with the given extensions" do
70
- expect( @mm.cdn_asset_url('image_one?#iefix') ).to eq '/assets/cdn/image_one?#iefix'
71
- expect( @mm.cdn_asset_url('img.one.jpg?#iefix') ).to eq '/assets/cdn/img.one.jpg?#iefix'
72
- end
73
- it "raises an error if the root asset is missing" do
74
- expect{
75
- @mm.cdn_asset_url('missing_image?#iefix')
76
- }.to raise_error "missing asset at 'missing_image'"
77
- expect{
78
- @mm.cdn_asset_url('missing_image.one.jpg?#iefix')
79
- }.to raise_error "missing asset at 'missing_image.one.jpg'"
80
- end
81
- end
82
- end
83
- end
84
-
85
- describe "sass helpers" do
86
- describe "#cdn_asset_url" do
87
- it "calls mm#cdn_asset_url with the asset path" do
88
- expect( @mm ).to receive(:cdn_asset_url).with('image_path')
89
-
90
- source = 'body { background: url( cdn_asset_url("image_path") ); }'
91
- Sass.compile( source )
92
- end
93
- end
94
- end
95
-
96
- end