montage 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.md +23 -0
- data/Rakefile +2 -4
- data/VERSION +1 -1
- data/bin/montage +11 -4
- data/lib/montage/commands/generate.rb +72 -11
- data/lib/montage/commands/init.rb +5 -11
- data/lib/montage/commands.rb +51 -18
- data/lib/montage/project.rb +54 -39
- data/lib/montage/source.rb +15 -44
- data/lib/montage/sprite.rb +25 -37
- data/lib/montage/sprite_definition.rb +127 -0
- data/lib/montage/templates/montage.yml +29 -19
- data/lib/montage/templates/sass_mixins.erb +1 -1
- data/lib/montage/templates/sources/{book.png → one/book.png} +0 -0
- data/lib/montage/templates/sources/{box-label.png → one/box-label.png} +0 -0
- data/lib/montage/templates/sources/{calculator.png → one/calculator.png} +0 -0
- data/lib/montage/templates/sources/{calendar-month.png → one/calendar-month.png} +0 -0
- data/lib/montage/templates/sources/{camera.png → one/camera.png} +0 -0
- data/lib/montage/templates/sources/{eraser.png → one/eraser.png} +0 -0
- data/lib/montage/templates/sources/two/inbox-image.png +0 -0
- data/lib/montage/templates/sources/two/magnet.png +0 -0
- data/lib/montage/templates/sources/two/newspaper.png +0 -0
- data/lib/montage/templates/sources/two/television.png +0 -0
- data/lib/montage/templates/sources/two/wand-hat.png +0 -0
- data/lib/montage/templates/sources/two/wooden-box-label.png +0 -0
- data/lib/montage.rb +10 -1
- data/montage.gemspec +17 -34
- data/spec/lib/project_helper.rb +41 -6
- data/spec/lib/shared_project_specs.rb +10 -11
- data/spec/montage/commands/generate_spec.rb +86 -132
- data/spec/montage/commands/init_spec.rb +18 -43
- data/spec/montage/project_spec.rb +77 -63
- data/spec/montage/sass_builder_spec.rb +33 -57
- data/spec/montage/source_spec.rb +10 -31
- data/spec/montage/sprite_definition_spec.rb +361 -0
- data/spec/montage/sprite_spec.rb +58 -57
- metadata +31 -70
- data/spec/fixtures/custom_dirs/montage.yml +0 -8
- data/spec/fixtures/default/montage.yml +0 -7
- data/spec/fixtures/default/public/images/sprites/src/one.png +0 -0
- data/spec/fixtures/default/public/images/sprites/src/three.png +0 -0
- data/spec/fixtures/default/public/images/sprites/src/two.png +0 -0
- data/spec/fixtures/directory_config/config/montage.yml +0 -5
- data/spec/fixtures/missing_source/montage.yml +0 -3
- data/spec/fixtures/missing_source_dir/montage.yml +0 -5
- data/spec/fixtures/root_config/montage.yml +0 -5
- data/spec/fixtures/root_config/public/images/sprites/src/source_one.png +0 -0
- data/spec/fixtures/root_config/public/images/sprites/src/source_three.jpg +0 -0
- data/spec/fixtures/root_config/public/images/sprites/src/source_two +0 -0
- data/spec/fixtures/sources/hundred.png +0 -0
- data/spec/fixtures/sources/mammoth.png +0 -0
- data/spec/fixtures/sources/other.png +0 -0
- data/spec/fixtures/sources/twenty.png +0 -0
- data/spec/fixtures/subdirs/montage.yml +0 -5
- data/spec/fixtures/subdirs/sub/sub/keep +0 -0
- data/spec/lib/fixtures.rb +0 -7
@@ -14,15 +14,9 @@ describe Montage::SassBuilder do
|
|
14
14
|
|
15
15
|
context 'with a project containing a single sprite and two sources' do
|
16
16
|
before(:each) do
|
17
|
-
@helper.
|
18
|
-
|
19
|
-
|
20
|
-
- one
|
21
|
-
- two
|
22
|
-
CONFIG
|
23
|
-
|
24
|
-
@helper.write_source('one')
|
25
|
-
@helper.write_source('two')
|
17
|
+
@helper.write_simple_config
|
18
|
+
@helper.write_source('only/one')
|
19
|
+
@helper.write_source('only/two')
|
26
20
|
|
27
21
|
Montage::SassBuilder.new(@helper.project).write
|
28
22
|
|
@@ -63,7 +57,7 @@ describe Montage::SassBuilder do
|
|
63
57
|
|
64
58
|
it 'should include the background statement' do
|
65
59
|
@sass.should include(
|
66
|
-
" background: url(/images/
|
60
|
+
" background: url(/images/only.png)")
|
67
61
|
end
|
68
62
|
|
69
63
|
describe 'the generated mixins' do
|
@@ -76,7 +70,7 @@ describe Montage::SassBuilder do
|
|
76
70
|
SASS
|
77
71
|
|
78
72
|
sass.should include(
|
79
|
-
'background: url(/images/
|
73
|
+
'background: url(/images/only.png) 0px 0px no-repeat')
|
80
74
|
end
|
81
75
|
|
82
76
|
it 'should correctly position the second source' do
|
@@ -88,7 +82,7 @@ describe Montage::SassBuilder do
|
|
88
82
|
SASS
|
89
83
|
|
90
84
|
sass.should include(
|
91
|
-
'background: url(/images/
|
85
|
+
'background: url(/images/only.png) 0px -40px no-repeat')
|
92
86
|
end
|
93
87
|
|
94
88
|
it 'should apply x-offsets' do
|
@@ -100,7 +94,7 @@ describe Montage::SassBuilder do
|
|
100
94
|
SASS
|
101
95
|
|
102
96
|
sass.should include(
|
103
|
-
'background: url(/images/
|
97
|
+
'background: url(/images/only.png) 5px 0px no-repeat')
|
104
98
|
end
|
105
99
|
|
106
100
|
it 'should apply y-offsets' do
|
@@ -113,25 +107,16 @@ describe Montage::SassBuilder do
|
|
113
107
|
|
114
108
|
# -20px (source one) - 20px (padding) - 10px (third arg) = -50px
|
115
109
|
sass.should include(
|
116
|
-
'background: url(/images/
|
110
|
+
'background: url(/images/only.png) 0px -50px no-repeat')
|
117
111
|
end
|
118
112
|
end
|
119
113
|
end # with a project containing a single sprite and two sources
|
120
114
|
|
121
115
|
context 'with a project containing two sprites, each with two sources' do
|
122
116
|
before(:each) do
|
123
|
-
@helper.
|
124
|
-
---
|
125
|
-
first:
|
126
|
-
- one
|
127
|
-
- two
|
117
|
+
@helper.write_simple_config
|
128
118
|
|
129
|
-
|
130
|
-
- three
|
131
|
-
- four
|
132
|
-
CONFIG
|
133
|
-
|
134
|
-
%w( one two three four ).each do |source|
|
119
|
+
%w( first/one first/two second/three second/four ).each do |source|
|
135
120
|
@helper.write_source(source)
|
136
121
|
end
|
137
122
|
|
@@ -157,33 +142,21 @@ describe Montage::SassBuilder do
|
|
157
142
|
@sass.should =~ /^=second-sprite/
|
158
143
|
end
|
159
144
|
|
160
|
-
it 'should include a condition for the
|
145
|
+
it 'should include a condition for the first sprite sources' do
|
161
146
|
expected = Regexp.escape(
|
162
147
|
%[ @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(
|
148
|
+
%[ $y_offset: $y_offset - 0px\n] +
|
170
149
|
%[ @else if $icon == "two"\n] +
|
171
150
|
%[ $y_offset: $y_offset - #{20 + @helper.project.padding}px])
|
172
151
|
|
173
152
|
@sass.should =~ /^#{expected}/
|
174
153
|
end
|
175
154
|
|
176
|
-
it 'should include a condition for the
|
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
|
155
|
+
it 'should include a condition for the second sprite sources' do
|
185
156
|
expected = Regexp.escape(
|
186
|
-
%[ @
|
157
|
+
%[ @if $icon == "four"\n] +
|
158
|
+
%[ $y_offset: $y_offset - 0px\n] +
|
159
|
+
%[ @else if $icon == "three"\n] +
|
187
160
|
%[ $y_offset: $y_offset - #{20 + @helper.project.padding}px])
|
188
161
|
|
189
162
|
@sass.should =~ /^#{expected}/
|
@@ -191,12 +164,12 @@ describe Montage::SassBuilder do
|
|
191
164
|
|
192
165
|
it 'should include the background statement for the first sprite' do
|
193
166
|
@sass.should include(
|
194
|
-
" background: url(/images/
|
167
|
+
" background: url(/images/first.png)")
|
195
168
|
end
|
196
169
|
|
197
170
|
it 'should include the background statement for the second sprite' do
|
198
171
|
@sass.should include(
|
199
|
-
" background: url(/images/
|
172
|
+
" background: url(/images/second.png)")
|
200
173
|
end
|
201
174
|
end # with a project containing two sprites, each with two sources
|
202
175
|
|
@@ -206,11 +179,12 @@ describe Montage::SassBuilder do
|
|
206
179
|
---
|
207
180
|
config.sass: "public/sass"
|
208
181
|
|
209
|
-
|
210
|
-
|
182
|
+
"public/images/sprites/:name/*.{png,jpg,jpeg,gif}":
|
183
|
+
to: "public/images/:name.png"
|
184
|
+
|
211
185
|
CONFIG
|
212
186
|
|
213
|
-
@helper.write_source('one')
|
187
|
+
@helper.write_source('only/one')
|
214
188
|
Montage::SassBuilder.new(@helper.project).write
|
215
189
|
end
|
216
190
|
|
@@ -226,11 +200,12 @@ describe Montage::SassBuilder do
|
|
226
200
|
---
|
227
201
|
config.sass: "public/sass/_here.sass"
|
228
202
|
|
229
|
-
|
230
|
-
|
203
|
+
"public/images/sprites/:name/*.{png,jpg,jpeg,gif}":
|
204
|
+
to: "public/images/:name.png"
|
205
|
+
|
231
206
|
CONFIG
|
232
207
|
|
233
|
-
@helper.write_source('one')
|
208
|
+
@helper.write_source('only/one')
|
234
209
|
Montage::SassBuilder.new(@helper.project).write
|
235
210
|
end
|
236
211
|
|
@@ -240,17 +215,18 @@ describe Montage::SassBuilder do
|
|
240
215
|
end
|
241
216
|
end # with a project using a custom SASS location with a file name
|
242
217
|
|
243
|
-
context 'with a project using a custom
|
218
|
+
context 'with a project using a custom url setting' do
|
244
219
|
before(:each) do
|
245
220
|
@helper.write_config <<-CONFIG
|
246
221
|
---
|
247
|
-
config.
|
222
|
+
config.url: "/right/about/here/:name.png"
|
223
|
+
|
224
|
+
"public/images/sprites/:name/*.{png,jpg,jpeg,gif}":
|
225
|
+
to: "public/images/:name.png"
|
248
226
|
|
249
|
-
only:
|
250
|
-
- one
|
251
227
|
CONFIG
|
252
228
|
|
253
|
-
@helper.write_source('one')
|
229
|
+
@helper.write_source('only/one')
|
254
230
|
|
255
231
|
Montage::SassBuilder.new(@helper.project).write
|
256
232
|
|
@@ -262,7 +238,7 @@ describe Montage::SassBuilder do
|
|
262
238
|
@sass.should include(
|
263
239
|
" background: url(/right/about/here/only.png)")
|
264
240
|
end
|
265
|
-
end # with a project using a custom
|
241
|
+
end # with a project using a custom url setting
|
266
242
|
|
267
243
|
end # build
|
268
244
|
|
data/spec/montage/source_spec.rb
CHANGED
@@ -3,50 +3,29 @@ require File.expand_path('../../spec_helper', __FILE__)
|
|
3
3
|
describe Montage::Source do
|
4
4
|
subject { Montage::Source }
|
5
5
|
|
6
|
-
# ---
|
6
|
+
# --- image -----------------------------------------------------------------
|
7
7
|
|
8
|
-
it { should have_public_method_defined(:
|
8
|
+
it { should have_public_method_defined(:image) }
|
9
9
|
|
10
|
-
describe '#
|
10
|
+
describe '#image' do
|
11
11
|
before(:each) do
|
12
12
|
@helper = Montage::Spec::ProjectHelper.new
|
13
|
-
@helper.
|
14
|
-
|
15
|
-
sprite_one:
|
16
|
-
- one
|
17
|
-
- two
|
18
|
-
CONFIG
|
19
|
-
|
20
|
-
@helper.write_source('one', 100, 25)
|
21
|
-
@helper.write_source('two', 100, 25)
|
13
|
+
@helper.write_simple_config
|
14
|
+
@helper.write_source('sprite_one/one', 100, 25)
|
22
15
|
end
|
23
16
|
|
24
|
-
it 'should return the path when the source file exists' do
|
25
|
-
|
26
|
-
|
27
|
-
source = Montage::Source.new(@helper.project.paths.sources, name, 'nm')
|
28
|
-
source.path.should == @helper.project.paths.sources + "#{name}.png"
|
17
|
+
it 'should return the Image instance path when the source file exists' do
|
18
|
+
source = Montage::Source.new(@helper.path_to_source('sprite_one/one'))
|
19
|
+
source.image.should be_a(Magick::Image)
|
29
20
|
end
|
30
21
|
|
31
22
|
it 'should raise an error when the source file does not exist' do
|
32
23
|
running = lambda {
|
33
|
-
Montage::Source.new(
|
34
|
-
@helper.project.paths.sources, '__invalid__', 'nm').path
|
35
|
-
}
|
36
|
-
|
37
|
-
running.should raise_error(Montage::MissingSource,
|
38
|
-
/Couldn't find a matching file/)
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'should raise an error when the source directory does not exist' do
|
42
|
-
name = @helper.project.sprites.first.sources.first.name
|
43
|
-
|
44
|
-
running = lambda {
|
45
|
-
Montage::Source.new(Pathname.new('__invalid__'), name, 'nm').path
|
24
|
+
Montage::Source.new(@helper.path_to_source('__invalid__')).image
|
46
25
|
}
|
47
26
|
|
48
27
|
running.should raise_error(Montage::MissingSource,
|
49
|
-
/Couldn't find the source
|
28
|
+
/Couldn't find the source file/)
|
50
29
|
end
|
51
30
|
end
|
52
31
|
|
@@ -0,0 +1,361 @@
|
|
1
|
+
require File.expand_path('../../spec_helper', __FILE__)
|
2
|
+
|
3
|
+
describe Montage::SpriteDefinition do
|
4
|
+
subject { Montage::SpriteDefinition }
|
5
|
+
|
6
|
+
# --------------------------------------------------------------------------
|
7
|
+
|
8
|
+
before(:each) do
|
9
|
+
@helper = Montage::Spec::ProjectHelper.new
|
10
|
+
@helper.write_simple_config
|
11
|
+
end
|
12
|
+
|
13
|
+
# --------------------------------------------------------------------------
|
14
|
+
|
15
|
+
context 'with src/*, matching two sources' do
|
16
|
+
before(:each) do
|
17
|
+
@helper.touch('src/big', 'src/small')
|
18
|
+
|
19
|
+
definition = Montage::SpriteDefinition.new(
|
20
|
+
@helper.project, 'src/*', 'name' => 'lurrr', "to" => "_")
|
21
|
+
|
22
|
+
@return = definition.to_sprites
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should return a single sprite' do
|
26
|
+
@return.length.should == 1
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should set the sprite name' do
|
30
|
+
@return.first.name.should == 'lurrr'
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should have two sources' do
|
34
|
+
@return.first.should have(2).sources
|
35
|
+
|
36
|
+
sources = @return.first.sources
|
37
|
+
|
38
|
+
sources.detect { |source| source.name == 'small' }.should be
|
39
|
+
sources.detect { |source| source.name == 'big' }.should be
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should set the sprite save path' do
|
43
|
+
@return.first.save_path.should == @helper.path_to_file('_')
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'should set the padding to 20' do
|
47
|
+
@return.first.padding.should == 20
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'should set the url' do
|
51
|
+
@return.first.url.should == '/images/lurrr.png'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# --------------------------------------------------------------------------
|
56
|
+
|
57
|
+
context 'with src/:name/*, matching two sprites with two sources each' do
|
58
|
+
before(:each) do
|
59
|
+
@helper.touch('src/big/one', 'src/small/one')
|
60
|
+
|
61
|
+
definition = Montage::SpriteDefinition.new(
|
62
|
+
@helper.project, 'src/:name/*', "to" => ":name")
|
63
|
+
|
64
|
+
@return = definition.to_sprites
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'should return two sprites' do
|
68
|
+
@return.length.should == 2
|
69
|
+
@return.detect { |sprite| sprite.name == 'small' }.should be
|
70
|
+
@return.detect { |sprite| sprite.name == 'big' }.should be
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'should have one source in each sprite' do
|
74
|
+
@return.each { |sprite| sprite.should have(1).sources }
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'should set the sprite save paths' do
|
78
|
+
@return.each do |sprite|
|
79
|
+
sprite.save_path.should == @helper.path_to_file(sprite.name)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'should set the padding to 20' do
|
84
|
+
@return.each { |sprite| sprite.padding == 20 }
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'should set the sprite urls' do
|
88
|
+
@return.each do |sprite|
|
89
|
+
sprite.url.should == "/images/#{sprite.name}.png"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
# --------------------------------------------------------------------------
|
95
|
+
|
96
|
+
context 'with **/:name/*, matching two sprites with two sources each' do
|
97
|
+
before(:each) do
|
98
|
+
@helper.touch 'base/one/big/one',
|
99
|
+
'base/two/big/two',
|
100
|
+
'base/one/small/three',
|
101
|
+
'base/two/small/four'
|
102
|
+
|
103
|
+
definition = Montage::SpriteDefinition.new(
|
104
|
+
@helper.project, '**/:name/*', "to" => ":name")
|
105
|
+
|
106
|
+
@return = definition.to_sprites
|
107
|
+
end
|
108
|
+
|
109
|
+
it 'should return two sprites' do
|
110
|
+
@return.length.should == 2
|
111
|
+
@return.detect { |sprite| sprite.name == 'small' }.should be
|
112
|
+
@return.detect { |sprite| sprite.name == 'big' }.should be
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'should have two sources in each sprite' do
|
116
|
+
@return.each { |sprite| sprite.should have(2).sources }
|
117
|
+
end
|
118
|
+
|
119
|
+
it 'should set the sprite save paths' do
|
120
|
+
@return.each do |sprite|
|
121
|
+
sprite.save_path.should == @helper.path_to_file(sprite.name)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'should set the padding to 20' do
|
126
|
+
@return.each { |sprite| sprite.padding == 20 }
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'should set the sprite urls' do
|
130
|
+
@return.each do |sprite|
|
131
|
+
sprite.url.should == "/images/#{sprite.name}.png"
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
# --------------------------------------------------------------------------
|
137
|
+
|
138
|
+
context 'with src/:name/*.{png,jpg}, matching one sprite with two sources' do
|
139
|
+
before(:each) do
|
140
|
+
@helper.touch 'src/sprite/one.png',
|
141
|
+
'src/sprite/two.jpg',
|
142
|
+
'src/sprite/three.app', # non-match
|
143
|
+
'src/sprite/four' # non-match
|
144
|
+
|
145
|
+
definition = Montage::SpriteDefinition.new(
|
146
|
+
@helper.project, 'src/:name/*.{png,jpg}', "to" => ":name")
|
147
|
+
|
148
|
+
@return = definition.to_sprites
|
149
|
+
end
|
150
|
+
|
151
|
+
it 'should return a single sprite' do
|
152
|
+
@return.length.should == 1
|
153
|
+
end
|
154
|
+
|
155
|
+
it 'should have two sources' do
|
156
|
+
@return.first.should have(2).sources
|
157
|
+
|
158
|
+
sources = @return.first.sources
|
159
|
+
|
160
|
+
sources.detect { |source| source.name == 'one' }.should be
|
161
|
+
sources.detect { |source| source.name == 'two' }.should be
|
162
|
+
end
|
163
|
+
|
164
|
+
it 'should set the sprite save path' do
|
165
|
+
@return.first.save_path.should == @helper.path_to_file('sprite')
|
166
|
+
end
|
167
|
+
|
168
|
+
it 'should set the padding to 20' do
|
169
|
+
@return.first.padding.should == 20
|
170
|
+
end
|
171
|
+
|
172
|
+
it 'should set the url' do
|
173
|
+
@return.first.url.should == '/images/sprite.png'
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
# --------------------------------------------------------------------------
|
178
|
+
|
179
|
+
context 'with (absolute)/src/:name/*, matching two sprites with one source each' do
|
180
|
+
before(:each) do
|
181
|
+
@helper.touch('src/big/one', 'src/small/one')
|
182
|
+
|
183
|
+
definition = Montage::SpriteDefinition.new(
|
184
|
+
@helper.project, @helper.project.paths.root + 'src/:name/*',
|
185
|
+
"to" => ":name")
|
186
|
+
|
187
|
+
@return = definition.to_sprites
|
188
|
+
end
|
189
|
+
|
190
|
+
it 'should return two sprites' do
|
191
|
+
@return.length.should == 2
|
192
|
+
@return.detect { |sprite| sprite.name == 'small' }.should be
|
193
|
+
@return.detect { |sprite| sprite.name == 'big' }.should be
|
194
|
+
end
|
195
|
+
|
196
|
+
it 'should have one source in each sprite' do
|
197
|
+
@return.each { |sprite| sprite.should have(1).sources }
|
198
|
+
end
|
199
|
+
|
200
|
+
it 'should set the sprite save paths' do
|
201
|
+
@return.each do |sprite|
|
202
|
+
sprite.save_path.should == @helper.path_to_file(sprite.name)
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
it 'should set the padding to 20' do
|
207
|
+
@return.each { |sprite| sprite.padding == 20 }
|
208
|
+
end
|
209
|
+
|
210
|
+
it 'should set the sprite urls' do
|
211
|
+
@return.each do |sprite|
|
212
|
+
sprite.url.should == "/images/#{sprite.name}.png"
|
213
|
+
end
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
# --------------------------------------------------------------------------
|
218
|
+
|
219
|
+
context 'with a custom padding option set to 50' do
|
220
|
+
before(:each) do
|
221
|
+
@helper.touch('src/big/one')
|
222
|
+
|
223
|
+
definition = Montage::SpriteDefinition.new(
|
224
|
+
@helper.project, 'src/:name/*', 'padding' => 50)
|
225
|
+
|
226
|
+
@return = definition.to_sprites
|
227
|
+
end
|
228
|
+
|
229
|
+
it 'should set the padding to 50' do
|
230
|
+
@return.first.padding == 50
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
# --------------------------------------------------------------------------
|
235
|
+
|
236
|
+
context 'where the project customises the padding to 50' do
|
237
|
+
before(:each) do
|
238
|
+
@helper.touch('src/big/one')
|
239
|
+
@helper.write_config <<-CONFIG
|
240
|
+
---
|
241
|
+
config.padding: 50
|
242
|
+
|
243
|
+
"public/images/sprites/:name/*.{png,jpg,jpeg,gif}":
|
244
|
+
to: "public/images/:name.png"
|
245
|
+
CONFIG
|
246
|
+
|
247
|
+
definition = Montage::SpriteDefinition.new(
|
248
|
+
@helper.project, 'src/:name/*')
|
249
|
+
|
250
|
+
@return = definition.to_sprites
|
251
|
+
end
|
252
|
+
|
253
|
+
it 'should set the padding to 50' do
|
254
|
+
@return.first.padding == 50
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
# --------------------------------------------------------------------------
|
259
|
+
|
260
|
+
context 'with a custom url option set to /omicron_persei_8' do
|
261
|
+
before(:each) do
|
262
|
+
@helper.touch('src/big/one')
|
263
|
+
|
264
|
+
definition = Montage::SpriteDefinition.new(
|
265
|
+
@helper.project, 'src/:name/*', 'url' => '/omicron_persei_8/:name')
|
266
|
+
|
267
|
+
@return = definition.to_sprites
|
268
|
+
end
|
269
|
+
|
270
|
+
it 'should set the sprite url' do
|
271
|
+
@return.first.url.should == '/omicron_persei_8/big'
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
275
|
+
# --------------------------------------------------------------------------
|
276
|
+
|
277
|
+
context 'with a custom url option using the :filename segment' do
|
278
|
+
before(:each) do
|
279
|
+
@helper.touch('src/big/one')
|
280
|
+
|
281
|
+
definition = Montage::SpriteDefinition.new(
|
282
|
+
@helper.project, 'src/:name/*', 'url' => '/omicron_persei_8/:filename')
|
283
|
+
|
284
|
+
@return = definition.to_sprites
|
285
|
+
end
|
286
|
+
|
287
|
+
it 'should set the sprite url' do
|
288
|
+
@return.first.url.should == '/omicron_persei_8/big.png'
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
292
|
+
# --------------------------------------------------------------------------
|
293
|
+
|
294
|
+
context 'where the project customises the URL to /omicron_persei_8' do
|
295
|
+
before(:each) do
|
296
|
+
@helper.touch('src/big/one')
|
297
|
+
@helper.write_config <<-CONFIG
|
298
|
+
---
|
299
|
+
config.url: "/omicron_persei_8/:name"
|
300
|
+
|
301
|
+
"public/images/sprites/:name/*.{png,jpg,jpeg,gif}":
|
302
|
+
to: "public/images/:name.png"
|
303
|
+
CONFIG
|
304
|
+
|
305
|
+
definition = Montage::SpriteDefinition.new(
|
306
|
+
@helper.project, 'src/:name/*')
|
307
|
+
|
308
|
+
@return = definition.to_sprites
|
309
|
+
end
|
310
|
+
|
311
|
+
it 'should set the sprite url' do
|
312
|
+
@return.first.url.should == '/omicron_persei_8/big'
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
316
|
+
# --------------------------------------------------------------------------
|
317
|
+
|
318
|
+
context 'with a :name capture, and a "name" option' do
|
319
|
+
it 'should raise an error' do
|
320
|
+
running = lambda { @path = Montage::SpriteDefinition.new(
|
321
|
+
@helper.project, '/__invalid__/:name/*',
|
322
|
+
'name' => 'lurrr', 'to' => ':name') }
|
323
|
+
|
324
|
+
running.should raise_error(Montage::DuplicateName)
|
325
|
+
end
|
326
|
+
end
|
327
|
+
|
328
|
+
# --------------------------------------------------------------------------
|
329
|
+
|
330
|
+
context 'with a :name capture, and no :name segment in the "to" option' do
|
331
|
+
it 'should raise an error' do
|
332
|
+
running = lambda { @path = Montage::SpriteDefinition.new(
|
333
|
+
@helper.project, '/:name/*', 'to' => '_') }
|
334
|
+
|
335
|
+
running.should raise_error(Montage::MissingName)
|
336
|
+
end
|
337
|
+
end
|
338
|
+
|
339
|
+
# --------------------------------------------------------------------------
|
340
|
+
|
341
|
+
context 'with a no :name capture, and and no "name" option' do
|
342
|
+
it 'should raise an error' do
|
343
|
+
running = lambda { Montage::SpriteDefinition.new(
|
344
|
+
@helper.project, '/__invalid__/*', "to" => "_") }
|
345
|
+
|
346
|
+
running.should raise_error(Montage::MissingName)
|
347
|
+
end
|
348
|
+
end
|
349
|
+
|
350
|
+
# --------------------------------------------------------------------------
|
351
|
+
|
352
|
+
context 'with no "to" option' do
|
353
|
+
it 'should set a default' do
|
354
|
+
@sprite = Montage::SpriteDefinition.new(@helper.project, '_',
|
355
|
+
'name' => 'lurrr').to_sprites.first
|
356
|
+
|
357
|
+
@sprite.save_path.should_not be_nil
|
358
|
+
end
|
359
|
+
end
|
360
|
+
|
361
|
+
end
|