branchable_cdn_assets-middleman 0.5.2 → 0.7.0

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.
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