chunky_png 1.0.0.rc1 → 1.0.0.rc2
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.
- data/.yardopts +2 -0
- data/chunky_png.gemspec +2 -2
- data/lib/chunky_png.rb +94 -28
- data/lib/chunky_png/canvas.rb +10 -7
- data/lib/chunky_png/canvas/drawing.rb +15 -2
- data/lib/chunky_png/canvas/operations.rb +44 -24
- data/lib/chunky_png/canvas/png_decoding.rb +6 -6
- data/lib/chunky_png/canvas/png_encoding.rb +7 -5
- data/lib/chunky_png/canvas/resampling.rb +9 -3
- data/lib/chunky_png/color.rb +19 -19
- data/lib/chunky_png/dimension.rb +10 -3
- data/lib/chunky_png/point.rb +9 -4
- data/lib/chunky_png/vector.rb +95 -8
- data/spec/chunky_png/canvas/drawing_spec.rb +17 -19
- data/spec/chunky_png/canvas/operations_spec.rb +46 -0
- data/spec/chunky_png/canvas/resampling_spec.rb +33 -0
- data/spec/chunky_png/dimension_spec.rb +10 -5
- data/spec/chunky_png/point_spec.rb +7 -2
- data/spec/chunky_png/vector_spec.rb +59 -13
- metadata +3 -3
@@ -182,6 +182,14 @@ describe ChunkyPNG::Canvas::Operations do
|
|
182
182
|
subject.rotate_left.should == ChunkyPNG::Canvas.new(3, 2, [2, 4, 6, 1, 3, 5] )
|
183
183
|
end
|
184
184
|
|
185
|
+
it "should not return itself" do
|
186
|
+
subject.rotate_left.should_not equal(subject)
|
187
|
+
end
|
188
|
+
|
189
|
+
it "should not change the image dimensions" do
|
190
|
+
lambda { subject.rotate_left }.should_not change(subject, :dimension)
|
191
|
+
end
|
192
|
+
|
185
193
|
it "it should rotate 180 degrees when applied twice" do
|
186
194
|
subject.rotate_left.rotate_left.should == subject.rotate_180
|
187
195
|
end
|
@@ -194,12 +202,35 @@ describe ChunkyPNG::Canvas::Operations do
|
|
194
202
|
subject.rotate_left.rotate_left.rotate_left.rotate_left.should == subject
|
195
203
|
end
|
196
204
|
end
|
205
|
+
|
206
|
+
describe '#rotate_left!' do
|
207
|
+
it "should rotate the pixels 90 degrees clockwise" do
|
208
|
+
subject.rotate_left!
|
209
|
+
subject.should == ChunkyPNG::Canvas.new(3, 2, [2, 4, 6, 1, 3, 5] )
|
210
|
+
end
|
211
|
+
|
212
|
+
it "should return itself" do
|
213
|
+
subject.rotate_left!.should equal(subject)
|
214
|
+
end
|
215
|
+
|
216
|
+
it "should change the image dimensions" do
|
217
|
+
lambda { subject.rotate_left! }.should change(subject, :dimension).from(ChunkyPNG::Dimension('2x3')).to(ChunkyPNG::Dimension('3x2'))
|
218
|
+
end
|
219
|
+
end
|
197
220
|
|
198
221
|
describe '#rotate_right' do
|
199
222
|
it "should rotate the pixels 90 degrees clockwise" do
|
200
223
|
subject.rotate_right.should == ChunkyPNG::Canvas.new(3, 2, [5, 3, 1, 6, 4, 2] )
|
201
224
|
end
|
202
225
|
|
226
|
+
it "should not return itself" do
|
227
|
+
subject.rotate_right.should_not equal(subject)
|
228
|
+
end
|
229
|
+
|
230
|
+
it "should not change the image dimensions" do
|
231
|
+
lambda { subject.rotate_right }.should_not change(subject, :dimension)
|
232
|
+
end
|
233
|
+
|
203
234
|
it "it should rotate 180 degrees when applied twice" do
|
204
235
|
subject.rotate_right.rotate_right.should == subject.rotate_180
|
205
236
|
end
|
@@ -212,6 +243,21 @@ describe ChunkyPNG::Canvas::Operations do
|
|
212
243
|
subject.rotate_right.rotate_right.rotate_right.rotate_right.should == subject
|
213
244
|
end
|
214
245
|
end
|
246
|
+
|
247
|
+
describe '#rotate_right!' do
|
248
|
+
it "should rotate the pixels 90 degrees clockwise" do
|
249
|
+
subject.rotate_right!
|
250
|
+
subject.should == ChunkyPNG::Canvas.new(3, 2, [5, 3, 1, 6, 4, 2] )
|
251
|
+
end
|
252
|
+
|
253
|
+
it "should return itself" do
|
254
|
+
subject.rotate_right!.should equal(subject)
|
255
|
+
end
|
256
|
+
|
257
|
+
it "should change the image dimensions" do
|
258
|
+
lambda { subject.rotate_right! }.should change(subject, :dimension).from(ChunkyPNG::Dimension('2x3')).to(ChunkyPNG::Dimension('3x2'))
|
259
|
+
end
|
260
|
+
end
|
215
261
|
|
216
262
|
describe '#rotate_180' do
|
217
263
|
it "should rotate the pixels 180 degrees" do
|
@@ -27,5 +27,38 @@ describe ChunkyPNG::Canvas::Resampling do
|
|
27
27
|
it "should downscale the x-axis and upscale the y-axis of the image" do
|
28
28
|
subject.resample_nearest_neighbor(20, 50).should == reference_canvas('clock_nn_xdown_yup')
|
29
29
|
end
|
30
|
+
|
31
|
+
it "should not return itself" do
|
32
|
+
subject.resample_nearest_neighbor(1, 1).should_not equal(subject)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should not change the original image's dimensions" do
|
36
|
+
lambda { subject.resample_nearest_neighbor(1, 1) }.should_not change(subject, :dimension)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#resample_nearest_neighbor!' do
|
41
|
+
it "should upscale both axis of the image" do
|
42
|
+
subject.resample_nearest_neighbor!(45, 45)
|
43
|
+
subject.should == reference_canvas('clock_nn_xup_yup')
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should downscale both axis of the image" do
|
47
|
+
subject.resample_nearest_neighbor!(12, 12)
|
48
|
+
subject.should == reference_canvas('clock_nn_xdown_ydown')
|
49
|
+
end
|
50
|
+
|
51
|
+
it "should downscale the x-axis and upscale the y-axis of the image" do
|
52
|
+
subject.resample_nearest_neighbor!(20, 50)
|
53
|
+
subject.should == reference_canvas('clock_nn_xdown_yup')
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should return itself" do
|
57
|
+
subject.resample_nearest_neighbor!(1, 1).should equal(subject)
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should change the original image's dimensions" do
|
61
|
+
lambda { subject.resample_nearest_neighbor!(1, 1) }.should change(subject, :dimension).to(ChunkyPNG::Dimension('1x1'))
|
62
|
+
end
|
30
63
|
end
|
31
64
|
end
|
@@ -16,17 +16,17 @@ end
|
|
16
16
|
describe 'ChunkyPNG.Dimension' do
|
17
17
|
subject { ChunkyPNG::Dimension.new(1, 2) }
|
18
18
|
|
19
|
-
it "should create a
|
19
|
+
it "should create a dimension from a 2-item array" do
|
20
20
|
ChunkyPNG::Dimension([1, 2]).should == subject
|
21
21
|
ChunkyPNG::Dimension(['1', '2']).should == subject
|
22
22
|
end
|
23
23
|
|
24
|
-
it "should create a
|
24
|
+
it "should create a dimension from a hash with x and y keys" do
|
25
25
|
ChunkyPNG::Dimension(:width => 1, :height => 2).should == subject
|
26
26
|
ChunkyPNG::Dimension('width' => '1', 'height' => '2').should == subject
|
27
27
|
end
|
28
28
|
|
29
|
-
it "should create a
|
29
|
+
it "should create a dimension from a point-like string" do
|
30
30
|
[
|
31
31
|
ChunkyPNG::Dimension('1,2'),
|
32
32
|
ChunkyPNG::Dimension('1 2'),
|
@@ -36,8 +36,13 @@ describe 'ChunkyPNG.Dimension' do
|
|
36
36
|
].all? { |point| point == subject }
|
37
37
|
end
|
38
38
|
|
39
|
+
it "should create a dimension from an object that responds to width and height" do
|
40
|
+
mock_object = mock('Some object with width and height', :width => 1, :height => 2)
|
41
|
+
ChunkyPNG::Dimension(mock_object).should == subject
|
42
|
+
end
|
43
|
+
|
39
44
|
it "should raise an exception if the input is not understood" do
|
40
|
-
lambda { ChunkyPNG::Dimension(Object.new) }.should raise_error(
|
41
|
-
lambda { ChunkyPNG::Dimension(1, 2, 3) }.should raise_error(
|
45
|
+
lambda { ChunkyPNG::Dimension(Object.new) }.should raise_error(ArgumentError)
|
46
|
+
lambda { ChunkyPNG::Dimension(1, 2, 3) }.should raise_error(ArgumentError)
|
42
47
|
end
|
43
48
|
end
|
@@ -64,8 +64,13 @@ describe 'ChunkyPNG.Point' do
|
|
64
64
|
].all? { |point| point == subject }
|
65
65
|
end
|
66
66
|
|
67
|
+
it "should create a point from an object that responds to x and y" do
|
68
|
+
mock_object = mock('Some object with x and y', :x => 1, :y => 2)
|
69
|
+
ChunkyPNG::Point(mock_object).should == subject
|
70
|
+
end
|
71
|
+
|
67
72
|
it "should raise an exception if the input is not understood" do
|
68
|
-
lambda { ChunkyPNG::Point(Object.new) }.should raise_error(
|
69
|
-
lambda { ChunkyPNG::Point(1, 2, 3) }.should raise_error(
|
73
|
+
lambda { ChunkyPNG::Point(Object.new) }.should raise_error(ArgumentError)
|
74
|
+
lambda { ChunkyPNG::Point(1, 2, 3) }.should raise_error(ArgumentError)
|
70
75
|
end
|
71
76
|
end
|
@@ -1,39 +1,85 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe ChunkyPNG::Vector do
|
4
|
-
subject { ChunkyPNG::Vector.new([ChunkyPNG::Point.new(2,
|
4
|
+
subject { ChunkyPNG::Vector.new([ChunkyPNG::Point.new(2, 5), ChunkyPNG::Point.new(1, 3), ChunkyPNG::Point.new(4, 6)]) }
|
5
5
|
|
6
6
|
it { should respond_to(:points) }
|
7
7
|
it { should have(3).items }
|
8
8
|
|
9
9
|
describe '#x_range' do
|
10
10
|
it "should get the right range of x values" do
|
11
|
-
subject.x_range.should == (1..
|
11
|
+
subject.x_range.should == (1..4)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should find the minimum x-coordinate" do
|
15
|
+
subject.min_x.should == 1
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should find the maximum x-coordinate" do
|
19
|
+
subject.max_x.should == 4
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should calculate the width correctly" do
|
23
|
+
subject.width.should == 4
|
12
24
|
end
|
13
25
|
end
|
14
26
|
|
15
27
|
describe '#y_range' do
|
16
28
|
it "should get the right range of y values" do
|
17
|
-
subject.y_range.should == (
|
29
|
+
subject.y_range.should == (3..6)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should find the minimum x-coordinate" do
|
33
|
+
subject.min_y.should == 3
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should find the maximum x-coordinate" do
|
37
|
+
subject.max_y.should == 6
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should calculate the height correctly" do
|
41
|
+
subject.height.should == 4
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe '#offset' do
|
46
|
+
it "should return a ChunkyPNG::Point" do
|
47
|
+
subject.offset.should be_kind_of(ChunkyPNG::Point)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should use the mininum x and y coordinates as values for the point" do
|
51
|
+
subject.offset.x.should == subject.min_x
|
52
|
+
subject.offset.y.should == subject.min_y
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe '#dimension' do
|
57
|
+
it "should return a ChunkyPNG::Dimension" do
|
58
|
+
subject.dimension.should be_kind_of(ChunkyPNG::Dimension)
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should use the width and height of the vector for the dimension" do
|
62
|
+
subject.dimension.width.should == subject.width
|
63
|
+
subject.dimension.height.should == subject.height
|
18
64
|
end
|
19
65
|
end
|
20
66
|
|
21
67
|
describe '#edges' do
|
22
68
|
it "should get three edges when closing the path" do
|
23
|
-
subject.edges(true).to_a.should == [[ChunkyPNG::Point.new(2,
|
24
|
-
[ChunkyPNG::Point.new(1,
|
25
|
-
[ChunkyPNG::Point.new(
|
69
|
+
subject.edges(true).to_a.should == [[ChunkyPNG::Point.new(2, 5), ChunkyPNG::Point.new(1, 3)],
|
70
|
+
[ChunkyPNG::Point.new(1, 3), ChunkyPNG::Point.new(4, 6)],
|
71
|
+
[ChunkyPNG::Point.new(4, 6), ChunkyPNG::Point.new(2, 5)]]
|
26
72
|
end
|
27
73
|
|
28
74
|
it "should get two edges when not closing the path" do
|
29
|
-
subject.edges(false).to_a.should == [[ChunkyPNG::Point.new(2,
|
30
|
-
[ChunkyPNG::Point.new(1,
|
75
|
+
subject.edges(false).to_a.should == [[ChunkyPNG::Point.new(2, 5), ChunkyPNG::Point.new(1, 3)],
|
76
|
+
[ChunkyPNG::Point.new(1, 3), ChunkyPNG::Point.new(4, 6)]]
|
31
77
|
end
|
32
78
|
end
|
33
79
|
end
|
34
80
|
|
35
81
|
describe 'ChunkyPNG.Vector' do
|
36
|
-
|
82
|
+
let(:example) { ChunkyPNG::Vector.new([ChunkyPNG::Point.new(2, 4), ChunkyPNG::Point.new(1, 2), ChunkyPNG::Point.new(3, 6)]) }
|
37
83
|
|
38
84
|
it "should return an empty vector when given an empty array" do
|
39
85
|
ChunkyPNG::Vector().should == ChunkyPNG::Vector.new([])
|
@@ -41,18 +87,18 @@ describe 'ChunkyPNG.Vector' do
|
|
41
87
|
end
|
42
88
|
|
43
89
|
it "should raise an error when an odd number of numerics is given" do
|
44
|
-
lambda { ChunkyPNG::Vector(1, 2, 3) }.should raise_error(
|
90
|
+
lambda { ChunkyPNG::Vector(1, 2, 3) }.should raise_error(ArgumentError)
|
45
91
|
end
|
46
92
|
|
47
93
|
it "should create a vector from a string" do
|
48
|
-
ChunkyPNG::Vector('(2,4) (1,2) (3,6)').should ==
|
94
|
+
ChunkyPNG::Vector('(2,4) (1,2) (3,6)').should == example
|
49
95
|
end
|
50
96
|
|
51
97
|
it "should create a vector from a flat array" do
|
52
|
-
ChunkyPNG::Vector(2,4,1,2,3,6).should ==
|
98
|
+
ChunkyPNG::Vector(2,4,1,2,3,6).should == example
|
53
99
|
end
|
54
100
|
|
55
101
|
it "should create a vector from a nested array" do
|
56
|
-
ChunkyPNG::Vector('(2,4)', [1, 2], :x => 3, :y => 6).should ==
|
102
|
+
ChunkyPNG::Vector('(2,4)', [1, 2], :x => 3, :y => 6).should == example
|
57
103
|
end
|
58
104
|
end
|
metadata
CHANGED
@@ -6,8 +6,8 @@ version: !ruby/object:Gem::Version
|
|
6
6
|
- 1
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.0.
|
9
|
+
- rc2
|
10
|
+
version: 1.0.0.rc2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Willem van Bergen
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-02
|
18
|
+
date: 2011-03-02 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|