montage 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. data/.document +5 -0
  2. data/.gitignore +31 -0
  3. data/History.md +40 -0
  4. data/LICENSE +19 -0
  5. data/README.md +89 -0
  6. data/Rakefile +41 -0
  7. data/VERSION +1 -0
  8. data/bin/montage +22 -0
  9. data/lib/montage.rb +33 -0
  10. data/lib/montage/commands.rb +32 -0
  11. data/lib/montage/commands/generate.rb +234 -0
  12. data/lib/montage/commands/init.rb +119 -0
  13. data/lib/montage/core_ext.rb +80 -0
  14. data/lib/montage/project.rb +185 -0
  15. data/lib/montage/sass_builder.rb +37 -0
  16. data/lib/montage/source.rb +75 -0
  17. data/lib/montage/sprite.rb +132 -0
  18. data/lib/montage/templates/montage.yml +26 -0
  19. data/lib/montage/templates/sass_mixins.erb +20 -0
  20. data/lib/montage/templates/sources/book.png +0 -0
  21. data/lib/montage/templates/sources/box-label.png +0 -0
  22. data/lib/montage/templates/sources/calculator.png +0 -0
  23. data/lib/montage/templates/sources/calendar-month.png +0 -0
  24. data/lib/montage/templates/sources/camera.png +0 -0
  25. data/lib/montage/templates/sources/eraser.png +0 -0
  26. data/lib/montage/version.rb +3 -0
  27. data/montage.gemspec +145 -0
  28. data/spec/fixtures/custom_dirs/montage.yml +8 -0
  29. data/spec/fixtures/default/montage.yml +7 -0
  30. data/spec/fixtures/default/public/images/sprites/src/one.png +0 -0
  31. data/spec/fixtures/default/public/images/sprites/src/three.png +0 -0
  32. data/spec/fixtures/default/public/images/sprites/src/two.png +0 -0
  33. data/spec/fixtures/directory_config/config/montage.yml +5 -0
  34. data/spec/fixtures/missing_source/montage.yml +3 -0
  35. data/spec/fixtures/missing_source_dir/montage.yml +5 -0
  36. data/spec/fixtures/root_config/montage.yml +5 -0
  37. data/spec/fixtures/root_config/public/images/sprites/src/source_one.png +0 -0
  38. data/spec/fixtures/root_config/public/images/sprites/src/source_three.jpg +0 -0
  39. data/spec/fixtures/root_config/public/images/sprites/src/source_two +0 -0
  40. data/spec/fixtures/sources/hundred.png +0 -0
  41. data/spec/fixtures/sources/mammoth.png +0 -0
  42. data/spec/fixtures/sources/other.png +0 -0
  43. data/spec/fixtures/sources/twenty.png +0 -0
  44. data/spec/fixtures/subdirs/montage.yml +5 -0
  45. data/spec/fixtures/subdirs/sub/sub/keep +0 -0
  46. data/spec/lib/command_runner.rb +140 -0
  47. data/spec/lib/fixtures.rb +7 -0
  48. data/spec/lib/have_public_method_defined.rb +19 -0
  49. data/spec/lib/project_helper.rb +135 -0
  50. data/spec/lib/shared_project_specs.rb +32 -0
  51. data/spec/lib/shared_sprite_specs.rb +30 -0
  52. data/spec/montage/commands/generate_spec.rb +308 -0
  53. data/spec/montage/commands/init_spec.rb +120 -0
  54. data/spec/montage/core_ext_spec.rb +33 -0
  55. data/spec/montage/project_spec.rb +181 -0
  56. data/spec/montage/sass_builder_spec.rb +269 -0
  57. data/spec/montage/source_spec.rb +53 -0
  58. data/spec/montage/spec/have_public_method_defined_spec.rb +31 -0
  59. data/spec/montage/sprite_spec.rb +170 -0
  60. data/spec/rcov.opts +8 -0
  61. data/spec/spec.opts +4 -0
  62. data/spec/spec_helper.rb +19 -0
  63. data/tasks/spec.rake +17 -0
  64. data/tasks/yard.rake +11 -0
  65. metadata +249 -0
@@ -0,0 +1,120 @@
1
+ require File.expand_path('../../../spec_helper', __FILE__)
2
+
3
+ # ----------------------------------------------------------------------------
4
+
5
+ context 'Generating a new project in the current directory' do
6
+ before(:all) do
7
+ @runner = Montage::Spec::InitCommandRunner.new.run!
8
+ end
9
+
10
+ it { @runner.should be_success }
11
+ it { @runner.stdout.should =~ /Your project was created/ }
12
+ it { @runner.path_to_file('montage.yml').should be_file }
13
+
14
+ # Example sources?
15
+
16
+ it 'should copy the sample source images' do
17
+ %w( book box-label calculator calendar-month camera eraser ).each do |source|
18
+ (@runner.project.paths.sources + "#{source}.png").should be_file
19
+ end
20
+ end
21
+
22
+ # Config
23
+
24
+ describe 'the montage.yml file' do
25
+ before(:all) do
26
+ @config = File.read(@runner.project.paths.config)
27
+ end
28
+
29
+ it { @config.should =~ %r{^ config.sprites:\s+"public/images/sprites"$} }
30
+ it { @config.should =~ %r{^ config.sources:\s+"public/images/sprites/src"$} }
31
+ end
32
+ end
33
+
34
+ # ----------------------------------------------------------------------------
35
+
36
+ context 'Generating a new project in a path which has a ./config directory' do
37
+ before(:all) do
38
+ @runner = Montage::Spec::InitCommandRunner.new
39
+ @runner.mkdir('config')
40
+ @runner.run!
41
+ end
42
+
43
+ it { @runner.should be_success }
44
+ it { @runner.stdout.should =~ /Your project was created/ }
45
+ it { @runner.path_to_file('config/montage.yml').should be_file }
46
+ it { @runner.path_to_file('montage.yml').should_not be_file }
47
+ end
48
+
49
+ # ----------------------------------------------------------------------------
50
+
51
+ context 'Generating a new project in an existing project directory' do
52
+ before(:all) do
53
+ @runner = Montage::Spec::InitCommandRunner.new
54
+ 2.times { @runner.run! }
55
+ end
56
+
57
+ it { @runner.should be_failure }
58
+ it { @runner.stdout.should =~ /A Montage project already exists in the current directory/ }
59
+ end
60
+
61
+ # ----------------------------------------------------------------------------
62
+
63
+ context 'Generating a new project in an existing project which has a ./config directory' do
64
+ before(:all) do
65
+ @runner = Montage::Spec::InitCommandRunner.new
66
+ @runner.mkdir('config')
67
+ 2.times { @runner.run! }
68
+ end
69
+
70
+ it { @runner.should be_failure }
71
+ it { @runner.stdout.should =~ /A Montage project already exists in the current directory/ }
72
+ end
73
+
74
+ # ----------------------------------------------------------------------------
75
+
76
+ context 'Generating a new project with a custom sprites directory' do
77
+ describe 'the montage.yml file' do
78
+ before(:all) do
79
+ @runner = Montage::Spec::InitCommandRunner.new(
80
+ :sprites => 'public/other').run!
81
+
82
+ @config = File.read(@runner.project.paths.config)
83
+ end
84
+
85
+ it { @config.should =~ %r{^ config.sprites:\s+"public/other"$} }
86
+ it { @config.should =~ %r{^ config.sources:\s+"public/other/src"$} }
87
+ end
88
+ end
89
+
90
+ # ----------------------------------------------------------------------------
91
+
92
+ context 'Generating a new project with an absolute custom sprites directory' do
93
+ describe 'the montage.yml file' do
94
+ before(:all) do
95
+ @runner = Montage::Spec::InitCommandRunner.new(
96
+ :sprites => '/tmp').run!
97
+
98
+ @config = File.read(@runner.project.paths.config)
99
+ end
100
+
101
+ it { @config.should =~ %r{^ config.sprites:\s+"/tmp"$} }
102
+ it { @config.should =~ %r{^ config.sources:\s+"/tmp/src"$} }
103
+ end
104
+ end
105
+
106
+ # ----------------------------------------------------------------------------
107
+
108
+ context 'Generating a new project with a custom sprites and sources directory' do
109
+ describe 'the montage.yml file' do
110
+ before(:all) do
111
+ @runner = Montage::Spec::InitCommandRunner.new(
112
+ :sprites => 'public/other', :sources => 'src/sprites').run!
113
+
114
+ @config = File.read(@runner.project.paths.config)
115
+ end
116
+
117
+ it { @config.should =~ %r{^ config.sprites:\s+"public/other"$} }
118
+ it { @config.should =~ %r{^ config.sources:\s+"src/sprites"$} }
119
+ end
120
+ end
@@ -0,0 +1,33 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe String do
4
+ it 'should not do anything when there is no leading whitespace' do
5
+ "abc\ndef\nhij".unindent.should == "abc\ndef\nhij"
6
+ end
7
+
8
+ it 'should remove leading whitespace consistently' do
9
+ " abc\n def\n hij".unindent.should == "abc\ndef\nhij"
10
+ end
11
+
12
+ it 'should remove no whitespace when one line has none' do
13
+ " abc\ndef\n hij".unindent.should == " abc\ndef\n hij"
14
+ end
15
+
16
+ it 'should ignore blank lines' do
17
+ " abc\n def\n\n hij".unindent.should == "abc\ndef\n\nhij"
18
+ end
19
+
20
+ it 'should remove no more whitespace than required' do
21
+ # Left-most at beginning.
22
+ unindented = " abc\n def\n hij\n lmn".unindent
23
+ unindented.should == "abc\n def\n hij\n lmn"
24
+
25
+ # Left-most in middle.
26
+ unindented = " abc\n def\n hij\n lmn".unindent
27
+ unindented.should == " abc\n def\nhij\n lmn"
28
+
29
+ # Left-most at end.
30
+ unindented = " abc\n def\n hij\n lmn".unindent
31
+ unindented.should == " abc\n def\n hij\nlmn"
32
+ end
33
+ end
@@ -0,0 +1,181 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe Montage::Project do
4
+ subject { Montage::Project }
5
+
6
+ # Class Methods ============================================================
7
+
8
+ # --- find -----------------------------------------------------------------
9
+
10
+ it { should respond_to(:find) }
11
+
12
+ describe '.find' do
13
+ describe 'when given a project root with montage.yml in the root' do
14
+ before(:all) do
15
+ @project = Montage::Project.find(fixture_path(:root_config))
16
+ @root = Pathname.new(fixture_path(:root_config))
17
+ @config = Pathname.new(fixture_path(:root_config, 'montage.yml'))
18
+ end
19
+
20
+ it_should_behave_like 'a project with correct paths'
21
+ end # when given a project root with montage.yml in the root
22
+
23
+ describe 'when given a project root with montage.yml in ./config' do
24
+ before(:all) do
25
+ @project = Montage::Project.find(fixture_path(:directory_config))
26
+ @root = Pathname.new(fixture_path(:directory_config))
27
+ @config = Pathname.new(
28
+ fixture_path(:directory_config, 'config/montage.yml'))
29
+ end
30
+
31
+ it_should_behave_like 'a project with correct paths'
32
+ end # when given a project root with montage.yml in ./config
33
+
34
+ describe 'when given a project subdirectory' do
35
+ before(:all) do
36
+ @project = Montage::Project.find(fixture_path(:subdirs, 'sub/sub'))
37
+ @root = Pathname.new(fixture_path(:subdirs))
38
+ @config = Pathname.new(fixture_path(:subdirs, 'montage.yml'))
39
+ end
40
+
41
+ it_should_behave_like 'a project with correct paths'
42
+ end # when given a project subdirectory
43
+
44
+ describe 'when given a configuration file in the root' do
45
+ before(:all) do
46
+ @project = Montage::Project.find(
47
+ fixture_path(:root_config, 'montage.yml'))
48
+
49
+ @root = Pathname.new(fixture_path(:root_config))
50
+ @config = Pathname.new(fixture_path(:root_config, 'montage.yml'))
51
+ end
52
+
53
+ it_should_behave_like 'a project with correct paths'
54
+ end # when given a configuration file in the root
55
+
56
+ describe 'when given a configuration file in ./config' do
57
+ before(:all) do
58
+ @project = Montage::Project.find(
59
+ fixture_path(:directory_config, 'config/montage.yml'))
60
+ @root = Pathname.new(fixture_path(:directory_config))
61
+ @config = Pathname.new(
62
+ fixture_path(:directory_config, 'config/montage.yml'))
63
+ end
64
+
65
+ it_should_behave_like 'a project with correct paths'
66
+ end # when given a configuration file in ./config
67
+
68
+ describe 'when the config file specifies custom directories' do
69
+ before(:all) do
70
+ @project = Montage::Project.find(fixture_path(:custom_dirs))
71
+ @base = Pathname.new(fixture_path(:custom_dirs)) + 'custom'
72
+ end
73
+
74
+ it 'should set the sources path' do
75
+ @project.paths.sources.should == @base + 'sources'
76
+ end
77
+
78
+ it 'should set the sprites path' do
79
+ @project.paths.sprites.should == @base + 'output'
80
+ end
81
+
82
+ it 'should set the SASS output path' do
83
+ @project.paths.sass.should == @base + 'sass'
84
+ end
85
+ end
86
+
87
+ describe 'when the config file specifies not to generate Sass' do
88
+ before(:all) do
89
+ @helper = Montage::Spec::ProjectHelper.new
90
+ @helper.write_config <<-CONFIG
91
+ ---
92
+ config.sass: false
93
+ CONFIG
94
+ end
95
+
96
+ it 'should set the SASS output path to false' do
97
+ @helper.project.paths.sass.should be_false
98
+ end
99
+ end
100
+
101
+ describe 'when given an empty directory' do
102
+ it 'should raise an error' do
103
+ running = lambda { Montage::Project.find(fixture_path(:empty)) }
104
+ running.should raise_exception(Montage::MissingProject)
105
+ end
106
+ end # when given an empty directory
107
+
108
+ describe 'when given an invalid path' do
109
+ it 'should raise an error' do
110
+ running = lambda { Montage::Project.find('__invalid__') }
111
+ running.should raise_exception(Montage::MissingProject)
112
+ end
113
+ end # when given an invalid path
114
+ end
115
+
116
+ # Instance Methods =========================================================
117
+
118
+ it { should have_public_method_defined(:paths) }
119
+
120
+ # --- sprites --------------------------------------------------------------
121
+
122
+ it { should have_public_method_defined(:sprites) }
123
+
124
+ describe '#sprites' do
125
+ context "when the project has one sprite with two sources" do
126
+ before(:each) do
127
+ @helper = Montage::Spec::ProjectHelper.new
128
+ @helper.write_config <<-CONFIG
129
+ ---
130
+ sprite_one:
131
+ - one
132
+ - two
133
+ CONFIG
134
+
135
+ @helper.write_source('one', 100, 25)
136
+ @helper.write_source('two', 100, 25)
137
+ end
138
+
139
+ it 'should return an array with one element' do
140
+ @helper.project.sprites.should have(1).sprite
141
+ end
142
+
143
+ it 'should have two sources in the sprite' do
144
+ @helper.project.sprites.first.should have(2).sources
145
+ end
146
+ end # when the project has one sprite with two sources
147
+
148
+ context "when the project has two sprites with 2/1 sources" do
149
+ before(:each) do
150
+ @helper = Montage::Spec::ProjectHelper.new
151
+ @helper.write_config <<-CONFIG
152
+ ---
153
+ sprite_one:
154
+ - one
155
+ - two
156
+
157
+ sprite_two:
158
+ - three
159
+ CONFIG
160
+
161
+ @helper.write_source('one', 100, 25)
162
+ @helper.write_source('two', 100, 25)
163
+ @helper.write_source('three', 100, 25)
164
+ end
165
+
166
+ it 'should return an array with two elements' do
167
+ @helper.project.sprites.should have(2).sprite
168
+ end
169
+
170
+ it 'should have two sources in the first sprite' do
171
+ @helper.project.sprite('sprite_one').should have(2).sources
172
+ end
173
+
174
+ it 'should have one source in the second sprite' do
175
+ @helper.project.sprite('sprite_two').should have(1).sources
176
+ end
177
+ end # when the project has one sprite with two sources
178
+
179
+ end
180
+
181
+ end
@@ -0,0 +1,269 @@
1
+ require File.expand_path('../../spec_helper', __FILE__)
2
+
3
+ describe Montage::SassBuilder do
4
+ subject { Montage::SassBuilder }
5
+
6
+ # --- write ----------------------------------------------------------------
7
+
8
+ it { should have_public_method_defined(:write) }
9
+
10
+ describe '#write' do
11
+ before(:each) do
12
+ @helper = Montage::Spec::ProjectHelper.new
13
+ end
14
+
15
+ context 'with a project containing a single sprite and two sources' do
16
+ before(:each) do
17
+ @helper.write_config <<-CONFIG
18
+ ---
19
+ only:
20
+ - one
21
+ - two
22
+ CONFIG
23
+
24
+ @helper.write_source('one')
25
+ @helper.write_source('two')
26
+
27
+ Montage::SassBuilder.new(@helper.project).write
28
+
29
+ @sass_path = @helper.path_to_file(
30
+ 'public/stylesheets/sass/_montage.sass')
31
+
32
+ if @sass_path.file?
33
+ @sass = File.read(@helper.path_to_file(
34
+ 'public/stylesheets/sass/_montage.sass'))
35
+ else
36
+ @sass = 'MISSING SASS FILE'
37
+ end
38
+ end
39
+
40
+ it 'should save the Sass file' do
41
+ @sass_path.should be_file
42
+ end
43
+
44
+ it 'should contain the sprite mixin' do
45
+ @sass.should =~ /^=only-sprite/
46
+ end
47
+
48
+ it 'should include a condition for the "one" source' do
49
+ expected = Regexp.escape(
50
+ %[ @if $icon == "one"\n] +
51
+ %[ $y_offset: $y_offset - 0px])
52
+
53
+ @sass.should =~ /^#{expected}/
54
+ end
55
+
56
+ it 'should include a condition for the "two" source' do
57
+ expected = Regexp.escape(
58
+ %[ @else if $icon == "two"\n] +
59
+ %[ $y_offset: $y_offset - #{20 + @helper.project.padding}px])
60
+
61
+ @sass.should =~ /^#{expected}/
62
+ end
63
+
64
+ it 'should include the background statement' do
65
+ @sass.should include(
66
+ " background: url(/images/sprites/only.png)")
67
+ end
68
+
69
+ describe 'the generated mixins' do
70
+ it 'should correctly position the first source' do
71
+ sass = Sass::Engine.new(<<-SASS.unindent).render
72
+ @import #{@helper.project.paths.sass.realpath + '_montage.sass'}
73
+
74
+ .rule
75
+ +only-sprite("one")
76
+ SASS
77
+
78
+ sass.should include(
79
+ 'background: url(/images/sprites/only.png) 0px 0px no-repeat')
80
+ end
81
+
82
+ it 'should correctly position the second source' do
83
+ sass = Sass::Engine.new(<<-SASS.unindent).render
84
+ @import #{@helper.project.paths.sass.realpath + '_montage.sass'}
85
+
86
+ .rule
87
+ +only-sprite("two")
88
+ SASS
89
+
90
+ sass.should include(
91
+ 'background: url(/images/sprites/only.png) 0px -40px no-repeat')
92
+ end
93
+
94
+ it 'should apply x-offsets' do
95
+ sass = Sass::Engine.new(<<-SASS.unindent).render
96
+ @import #{@helper.project.paths.sass.realpath + '_montage.sass'}
97
+
98
+ .rule
99
+ +only-sprite("one", 5px)
100
+ SASS
101
+
102
+ sass.should include(
103
+ 'background: url(/images/sprites/only.png) 5px 0px no-repeat')
104
+ end
105
+
106
+ it 'should apply y-offsets' do
107
+ sass = Sass::Engine.new(<<-SASS.unindent).render
108
+ @import #{@helper.project.paths.sass.realpath + '_montage.sass'}
109
+
110
+ .rule
111
+ +only-sprite("two", 0px, -10px)
112
+ SASS
113
+
114
+ # -20px (source one) - 20px (padding) - 10px (third arg) = -50px
115
+ sass.should include(
116
+ 'background: url(/images/sprites/only.png) 0px -50px no-repeat')
117
+ end
118
+ end
119
+ end # with a project containing a single sprite and two sources
120
+
121
+ context 'with a project containing two sprites, each with two sources' do
122
+ before(:each) do
123
+ @helper.write_config <<-CONFIG
124
+ ---
125
+ first:
126
+ - one
127
+ - two
128
+
129
+ second:
130
+ - three
131
+ - four
132
+ CONFIG
133
+
134
+ %w( one two three four ).each do |source|
135
+ @helper.write_source(source)
136
+ end
137
+
138
+ Montage::SassBuilder.new(@helper.project).write
139
+
140
+ @sass_path = @helper.path_to_file(
141
+ 'public/stylesheets/sass/_montage.sass')
142
+
143
+ if @sass_path.file?
144
+ @sass = File.read(@helper.path_to_file(
145
+ 'public/stylesheets/sass/_montage.sass'))
146
+ else
147
+ @sass = 'MISSING SASS FILE'
148
+ end
149
+ end
150
+
151
+ it 'should save the Sass file' do
152
+ @sass_path.should be_file
153
+ end
154
+
155
+ it 'should contain both sprite mixins' do
156
+ @sass.should =~ /^=first-sprite/
157
+ @sass.should =~ /^=second-sprite/
158
+ end
159
+
160
+ it 'should include a condition for the "one" source' do
161
+ expected = Regexp.escape(
162
+ %[ @if $icon == "one"\n] +
163
+ %[ $y_offset: $y_offset - 0px])
164
+
165
+ @sass.should =~ /^#{expected}/
166
+ end
167
+
168
+ it 'should include a condition for the "two" source' do
169
+ expected = Regexp.escape(
170
+ %[ @else if $icon == "two"\n] +
171
+ %[ $y_offset: $y_offset - #{20 + @helper.project.padding}px])
172
+
173
+ @sass.should =~ /^#{expected}/
174
+ end
175
+
176
+ it 'should include a condition for the "three" source' do
177
+ expected = Regexp.escape(
178
+ %[ @if $icon == "three"\n] +
179
+ %[ $y_offset: $y_offset - 0px])
180
+
181
+ @sass.should =~ /^#{expected}/
182
+ end
183
+
184
+ it 'should include a condition for the "four" source' do
185
+ expected = Regexp.escape(
186
+ %[ @else if $icon == "four"\n] +
187
+ %[ $y_offset: $y_offset - #{20 + @helper.project.padding}px])
188
+
189
+ @sass.should =~ /^#{expected}/
190
+ end
191
+
192
+ it 'should include the background statement for the first sprite' do
193
+ @sass.should include(
194
+ " background: url(/images/sprites/first.png)")
195
+ end
196
+
197
+ it 'should include the background statement for the second sprite' do
198
+ @sass.should include(
199
+ " background: url(/images/sprites/second.png)")
200
+ end
201
+ end # with a project containing two sprites, each with two sources
202
+
203
+ context 'with a project using a custom SASS location' do
204
+ before(:each) do
205
+ @helper.write_config <<-CONFIG
206
+ ---
207
+ config.sass: "public/sass"
208
+
209
+ only:
210
+ - one
211
+ CONFIG
212
+
213
+ @helper.write_source('one')
214
+ Montage::SassBuilder.new(@helper.project).write
215
+ end
216
+
217
+ it 'should save the Sass file' do
218
+ @helper.path_to_file(
219
+ 'public/sass/_montage.sass').should be_file
220
+ end
221
+ end # with a project using a custom SASS location
222
+
223
+ context 'with a project using a custom SASS location with a file name' do
224
+ before(:each) do
225
+ @helper.write_config <<-CONFIG
226
+ ---
227
+ config.sass: "public/sass/_here.sass"
228
+
229
+ only:
230
+ - one
231
+ CONFIG
232
+
233
+ @helper.write_source('one')
234
+ Montage::SassBuilder.new(@helper.project).write
235
+ end
236
+
237
+ it 'should save the Sass file' do
238
+ @helper.path_to_file(
239
+ 'public/sass/_here.sass').should be_file
240
+ end
241
+ end # with a project using a custom SASS location with a file name
242
+
243
+ context 'with a project using a custom sprite_url setting' do
244
+ before(:each) do
245
+ @helper.write_config <<-CONFIG
246
+ ---
247
+ config.sprite_url: "/right/about/here"
248
+
249
+ only:
250
+ - one
251
+ CONFIG
252
+
253
+ @helper.write_source('one')
254
+
255
+ Montage::SassBuilder.new(@helper.project).write
256
+
257
+ @sass = File.read(@helper.path_to_file(
258
+ 'public/stylesheets/sass/_montage.sass'))
259
+ end
260
+
261
+ it 'should include the background statement' do
262
+ @sass.should include(
263
+ " background: url(/right/about/here/only.png)")
264
+ end
265
+ end # with a project using a custom sprite_url setting
266
+
267
+ end # build
268
+
269
+ end