bulldog 0.0.11 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.11
1
+ 0.0.12
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{bulldog}
8
- s.version = "0.0.11"
8
+ s.version = "0.0.12"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["George Ogata"]
12
- s.date = %q{2009-12-03}
12
+ s.date = %q{2009-12-11}
13
13
  s.description = %q{= Bulldog
14
14
 
15
15
  Flexible file attachments for active record.
@@ -145,6 +145,20 @@ module Bulldog
145
145
  true
146
146
  end
147
147
 
148
+ #
149
+ # Return the value of the given attribute from an instance
150
+ # variable set during file examination.
151
+ #
152
+ # If not set, runs a file examination first.
153
+ #
154
+ def from_examination(name)
155
+ ivar = :"@#{name}"
156
+ value = instance_variable_get(ivar) and
157
+ return value
158
+ examine
159
+ instance_variable_get(ivar)
160
+ end
161
+
148
162
  private # -------------------------------------------------------
149
163
 
150
164
  #
@@ -16,8 +16,7 @@ module Bulldog
16
16
  #
17
17
  def dimensions(style_name)
18
18
  if style_name.equal?(:original)
19
- examine
20
- @original_dimensions
19
+ from_examination :original_dimensions
21
20
  else
22
21
  style = reflection.styles[style_name]
23
22
  target_dimensions = style[:size].split(/x/).map(&:to_i)
@@ -54,7 +53,7 @@ module Bulldog
54
53
  if $?.success? && output.present?
55
54
  width, height, orientation = *output.scan(/(\d+) (\d+) (\d?)/).first.map(&:to_i)
56
55
  rotated = (orientation & 0x4).nonzero?
57
- @original_dimensions ||= rotated ? [height, width] : [width, height]
56
+ @original_dimensions = rotated ? [height, width] : [width, height]
58
57
  true
59
58
  else
60
59
  Bulldog.logger.warn "command failed (#{$?.exitstatus})"
@@ -130,14 +130,12 @@ module Bulldog
130
130
  if (column_name = reflection.column_name_for_stored_attribute(name))
131
131
  value = record.send(column_name)
132
132
  value = send("deserialize_#{name}", value) if storable_attribute.cast
133
- ivar = :"@#{name}"
134
133
  if storable_attribute.per_style?
135
- instance_variable_get(ivar) or
136
- instance_variable_set(ivar, {})
137
- instance_variable_get(ivar)[name] = value
134
+ ivar = :"@original_#{name}"
138
135
  else
139
- instance_variable_set(ivar, value)
136
+ ivar = :"@#{name}"
140
137
  end
138
+ instance_variable_set(ivar, value)
141
139
  end
142
140
  end
143
141
  end
@@ -16,8 +16,7 @@ module Bulldog
16
16
  #
17
17
  def dimensions(style_name)
18
18
  if style_name.equal?(:original)
19
- examine
20
- @original_dimensions
19
+ from_examination :original_dimensions
21
20
  else
22
21
  style = reflection.styles[style_name]
23
22
  target_dimensions = style[:size].split(/x/).map(&:to_i)
@@ -30,8 +30,7 @@ module Bulldog
30
30
  if stream.missing?
31
31
  0
32
32
  else
33
- examine
34
- @original_duration
33
+ from_examination :original_duration
35
34
  end
36
35
  end
37
36
 
@@ -50,7 +49,7 @@ module Bulldog
50
49
  if stream.missing?
51
50
  [VideoTrack.new(:dimensions => [2, 2])]
52
51
  else
53
- examine
52
+ examine unless @original_video_tracks
54
53
  if @original_video_tracks.empty?
55
54
  @original_video_tracks << VideoTrack.new(:dimensions => [2, 2])
56
55
  end
@@ -1,164 +1,177 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Attachment::Image do
4
- use_model_class(:Thing,
5
- :photo_file_name => :string,
6
- :photo_width => :integer,
7
- :photo_height => :integer,
8
- :photo_aspect_ratio => :float,
9
- :photo_dimensions => :string)
10
-
11
- before do
12
- Thing.has_attachment :photo do
13
- style :double, :size => '80x60'
14
- style :filled, :size => '60x60', :filled => true
15
- style :unfilled, :size => '120x120'
16
- default_style :double
17
- end
18
- @thing = Thing.new(:photo => test_image_file)
19
- end
20
-
21
4
  def run(command)
22
5
  `#{command}`
23
6
  $?.success? or
24
7
  raise "command failed: #{command}"
25
8
  end
26
9
 
27
- describe "#dimensions" do
28
- it "should return 1x1 if the style is missing" do
29
- Thing.attachment_reflections[:photo].configure do
30
- detect_type_by{:image}
31
- end
32
- @thing.save.should be_true
33
- File.unlink(@thing.photo.path(:original))
34
- @thing = Thing.find(@thing.id)
35
- @thing.photo.is_a?(Attachment::Image) # sanity check
36
- @thing.photo.stream.missing? # sanity check
37
- @thing.photo.dimensions(:original).should == [1, 1]
10
+ describe "when file attributes are not stored" do
11
+ use_model_class(:Thing, :photo_file_name => :string)
12
+
13
+ describe "#dimensions" do
14
+ it "should return 1x1 if the file is missing" do
15
+ Thing.has_attachment :photo do
16
+ type :image
17
+ style :double, :size => '80x60'
18
+ style :filled, :size => '60x60', :filled => true
19
+ style :unfilled, :size => '120x120'
20
+ default_style :double
21
+ end
22
+ @thing = Thing.new(:photo => test_image_file)
23
+ @thing.save.should be_true
24
+ File.unlink(@thing.photo.path(:original))
25
+ @thing = Thing.find(@thing.id)
26
+ @thing.photo.is_a?(Attachment::Image) # sanity check
27
+ @thing.photo.stream.missing? # sanity check
28
+ @thing.photo.dimensions(:original).should == [1, 1]
29
+ end
38
30
  end
31
+ end
39
32
 
40
- it "should return the width and height of the default style if no style name is given" do
41
- @thing.photo.dimensions.should == [80, 60]
42
- end
33
+ describe "when file attributes are stored" do
34
+ use_model_class(:Thing,
35
+ :photo_file_name => :string,
36
+ :photo_width => :integer,
37
+ :photo_height => :integer,
38
+ :photo_aspect_ratio => :float,
39
+ :photo_dimensions => :string)
43
40
 
44
- it "should return the width and height of the given style" do
45
- @thing.photo.dimensions(:original).should == [40, 30]
46
- @thing.photo.dimensions(:double).should == [80, 60]
41
+ before do
42
+ Thing.has_attachment :photo do
43
+ style :double, :size => '80x60'
44
+ style :filled, :size => '60x60', :filled => true
45
+ style :unfilled, :size => '120x120'
46
+ default_style :double
47
+ end
48
+ @thing = Thing.new(:photo => test_image_file)
47
49
  end
48
50
 
49
- it "should return the calculated width according to style filledness" do
50
- @thing.photo.dimensions(:filled).should == [60, 60]
51
- @thing.photo.dimensions(:unfilled).should == [120, 90]
52
- end
51
+ describe "#dimensions" do
52
+ it "should return the width and height of the default style if no style name is given" do
53
+ @thing.photo.dimensions.should == [80, 60]
54
+ end
53
55
 
54
- it "should honor the exif:Orientation header" do
55
- path = create_image("#{temporary_directory}/test.jpg", :size => '40x30')
56
- rotated_path = "#{temporary_directory}/rotated-test.jpg"
57
- run "exif --create-exif --ifd=EXIF --tag=Orientation --set-value=4 --output=#{rotated_path} #{path}"
58
- open(rotated_path) do |file|
59
- @thing.photo = file
60
- @thing.photo.dimensions(:original).should == [30, 40]
56
+ it "should return the width and height of the given style" do
57
+ @thing.photo.dimensions(:original).should == [40, 30]
58
+ @thing.photo.dimensions(:double).should == [80, 60]
61
59
  end
62
- end
63
60
 
64
- it "should only invoke identify once"
65
- it "should log the result"
66
- end
61
+ it "should return the calculated width according to style filledness" do
62
+ @thing.photo.dimensions(:filled).should == [60, 60]
63
+ @thing.photo.dimensions(:unfilled).should == [120, 90]
64
+ end
67
65
 
68
- describe "#width" do
69
- it "should return the width of the default style if no style name is given" do
70
- @thing.photo.width.should == 80
71
- end
66
+ it "should honor the exif:Orientation header" do
67
+ path = create_image("#{temporary_directory}/test.jpg", :size => '40x30')
68
+ rotated_path = "#{temporary_directory}/rotated-test.jpg"
69
+ run "exif --create-exif --ifd=EXIF --tag=Orientation --set-value=4 --output=#{rotated_path} #{path}"
70
+ open(rotated_path) do |file|
71
+ @thing.photo = file
72
+ @thing.photo.dimensions(:original).should == [30, 40]
73
+ end
74
+ end
72
75
 
73
- it "should return the width of the given style" do
74
- @thing.photo.width(:original).should == 40
75
- @thing.photo.width(:double).should == 80
76
+ it "should only invoke identify once"
77
+ it "should log the result"
76
78
  end
77
- end
78
79
 
79
- describe "#height" do
80
- it "should return the height of the default style if no style name is given" do
81
- @thing.photo.height.should == 60
82
- end
80
+ describe "#width" do
81
+ it "should return the width of the default style if no style name is given" do
82
+ @thing.photo.width.should == 80
83
+ end
83
84
 
84
- it "should return the height of the given style" do
85
- @thing.photo.height(:original).should == 30
86
- @thing.photo.height(:double).should == 60
85
+ it "should return the width of the given style" do
86
+ @thing.photo.width(:original).should == 40
87
+ @thing.photo.width(:double).should == 80
88
+ end
87
89
  end
88
- end
89
90
 
90
- describe "#aspect_ratio" do
91
- it "should return the aspect ratio of the default style if no style name is given" do
92
- @thing.photo.aspect_ratio.should be_close(4.0/3, 1e-5)
93
- end
91
+ describe "#height" do
92
+ it "should return the height of the default style if no style name is given" do
93
+ @thing.photo.height.should == 60
94
+ end
94
95
 
95
- it "should return the aspect ratio of the given style" do
96
- @thing.photo.aspect_ratio(:original).should be_close(4.0/3, 1e-5)
97
- @thing.photo.aspect_ratio(:filled).should be_close(1, 1e-5)
96
+ it "should return the height of the given style" do
97
+ @thing.photo.height(:original).should == 30
98
+ @thing.photo.height(:double).should == 60
99
+ end
98
100
  end
99
- end
100
101
 
101
- describe "storable attributes" do
102
- it "should set the stored attributes on assignment" do
103
- @thing.photo_width.should == 40
104
- @thing.photo_height.should == 30
105
- @thing.photo_aspect_ratio.should be_close(4.0/3, 1e-5)
106
- @thing.photo_dimensions.should == '40x30'
107
- end
102
+ describe "#aspect_ratio" do
103
+ it "should return the aspect ratio of the default style if no style name is given" do
104
+ @thing.photo.aspect_ratio.should be_close(4.0/3, 1e-5)
105
+ end
108
106
 
109
- describe "after roundtripping through the database" do
110
- before do
111
- @thing.save
112
- @thing = Thing.find(@thing.id)
107
+ it "should return the aspect ratio of the given style" do
108
+ @thing.photo.aspect_ratio(:original).should be_close(4.0/3, 1e-5)
109
+ @thing.photo.aspect_ratio(:filled).should be_close(1, 1e-5)
113
110
  end
111
+ end
114
112
 
115
- it "should restore the stored attributes" do
113
+ describe "storable attributes" do
114
+ it "should set the stored attributes on assignment" do
116
115
  @thing.photo_width.should == 40
117
116
  @thing.photo_height.should == 30
118
117
  @thing.photo_aspect_ratio.should be_close(4.0/3, 1e-5)
119
118
  @thing.photo_dimensions.should == '40x30'
120
119
  end
121
120
 
122
- it "should recalculate the dimensions correctly" do
123
- @thing.photo.dimensions(:filled).should == [60, 60]
124
- @thing.photo.dimensions(:unfilled).should == [120, 90]
121
+ describe "after roundtripping through the database" do
122
+ before do
123
+ @thing.save
124
+ @thing = Thing.find(@thing.id)
125
+ end
126
+
127
+ it "should restore the stored attributes" do
128
+ @thing.photo_width.should == 40
129
+ @thing.photo_height.should == 30
130
+ @thing.photo_aspect_ratio.should be_close(4.0/3, 1e-5)
131
+ @thing.photo_dimensions.should == '40x30'
132
+ end
133
+
134
+ it "should recalculate the dimensions correctly" do
135
+ @thing.photo.dimensions(:filled).should == [60, 60]
136
+ @thing.photo.dimensions(:unfilled).should == [120, 90]
137
+ end
125
138
  end
126
139
  end
127
- end
128
140
 
129
- describe "#reload" do
130
- before do
131
- thing = Thing.create(:photo => test_image_file('test.jpg'))
132
- @thing = Thing.find(thing.id)
133
- end
141
+ describe "#reload" do
142
+ before do
143
+ thing = Thing.create(:photo => test_image_file('test.jpg'))
144
+ @thing = Thing.find(thing.id)
145
+ end
134
146
 
135
- it "should update the stored attributes from the file" do
136
- # Prime the cached values.
137
- @thing.photo_width.should == 40
138
- @thing.photo_height.should == 30
139
- @thing.photo_aspect_ratio.should be_close(4.0/3, 1e-5)
140
- @thing.photo_dimensions.should == '40x30'
141
-
142
- FileUtils.cp(test_path('test2.jpg'), @thing.photo.path(:original))
143
- @thing.photo.reload
144
- @thing.photo_width.should == 2
145
- @thing.photo_height.should == 2
146
- @thing.photo_aspect_ratio.should == 1
147
- @thing.photo_dimensions.should == '2x2'
148
- end
147
+ it "should update the stored attributes from the file" do
148
+ # Prime the cached values.
149
+ @thing.photo_width.should == 40
150
+ @thing.photo_height.should == 30
151
+ @thing.photo_aspect_ratio.should be_close(4.0/3, 1e-5)
152
+ @thing.photo_dimensions.should == '40x30'
149
153
 
150
- it "should update the original dimensions from the file" do
151
- @thing.photo.dimensions(:original).should == [40, 30]
152
- FileUtils.cp(test_path('test2.jpg'), @thing.photo.path(:original))
153
- @thing.photo.reload
154
- @thing.photo.dimensions(:original).should == [2, 2]
155
- end
154
+ FileUtils.cp(test_path('test2.jpg'), @thing.photo.path(:original))
155
+ @thing.photo.reload
156
+ @thing.photo_width.should == 2
157
+ @thing.photo_height.should == 2
158
+ @thing.photo_aspect_ratio.should == 1
159
+ @thing.photo_dimensions.should == '2x2'
160
+ end
156
161
 
157
- it "should update the dimensions for each style from the file" do
158
- @thing.photo.dimensions(:double).should == [80, 60]
159
- FileUtils.cp(test_path('test2.jpg'), @thing.photo.path(:original))
160
- @thing.photo.reload
161
- @thing.photo.dimensions(:double).should == [60, 60]
162
+ it "should update the original dimensions from the file" do
163
+ @thing.photo.dimensions(:original).should == [40, 30]
164
+ FileUtils.cp(test_path('test2.jpg'), @thing.photo.path(:original))
165
+ @thing.photo.reload
166
+ @thing.photo.dimensions(:original).should == [2, 2]
167
+ end
168
+
169
+ it "should update the dimensions for each style from the file" do
170
+ @thing.photo.dimensions(:double).should == [80, 60]
171
+ FileUtils.cp(test_path('test2.jpg'), @thing.photo.path(:original))
172
+ @thing.photo.reload
173
+ @thing.photo.dimensions(:double).should == [60, 60]
174
+ end
162
175
  end
163
176
  end
164
177
  end
@@ -1,23 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Attachment::Pdf do
4
- use_model_class(:Thing,
5
- :attachment_file_name => :string,
6
- :attachment_width => :integer,
7
- :attachment_height => :integer,
8
- :attachment_aspect_ratio => :float,
9
- :attachment_dimensions => :string)
10
-
11
- before do
12
- Thing.has_attachment :attachment do
13
- style :double, :size => '1224x1584'
14
- style :filled, :size => '500x500', :filled => true
15
- style :unfilled, :size => '1000x1000'
16
- default_style :double
17
- end
18
- @thing = Thing.new(:attachment => test_file)
19
- end
20
-
21
4
  def test_file
22
5
  path = "#{temporary_directory}/test.pdf"
23
6
  FileUtils.cp("#{ROOT}/spec/data/test.pdf", path)
@@ -28,109 +11,139 @@ describe Attachment::Pdf do
28
11
  Thing.attachment_reflections[:attachment].configure(&block)
29
12
  end
30
13
 
31
- describe "#process" do
32
- it "should be processed with ImageMagick by default" do
33
- context = nil
34
- configure do
35
- style :output
36
- process :on => :event do
37
- context = self
14
+ describe "when file attributes are not stored" do
15
+ use_model_class(:Thing, :attachment_file_name => :string)
16
+
17
+ describe "#dimensions" do
18
+ it "should return 1x1 if the file is missing" do
19
+ Thing.has_attachment :attachment do
20
+ type :pdf
21
+ style :double, :size => '1224x1584'
22
+ style :filled, :size => '500x500', :filled => true
23
+ style :unfilled, :size => '1000x1000'
24
+ default_style :double
38
25
  end
26
+ @thing = Thing.new(:attachment => test_file)
27
+ @thing.save.should be_true
28
+ File.unlink(@thing.attachment.path(:original))
29
+ @thing = Thing.find(@thing.id)
30
+ @thing.attachment.is_a?(Attachment::Pdf) # sanity check
31
+ @thing.attachment.stream.missing? # sanity check
32
+ @thing.attachment.dimensions(:original).should == [1, 1]
39
33
  end
40
-
41
- @thing.attachment.process(:event)
42
- context.should be_a(Processor::ImageMagick)
43
34
  end
44
35
  end
45
36
 
46
- describe "#dimensions" do
47
- it "should return 1x1 if the style is missing" do
48
- Thing.attachment_reflections[:attachment].configure do
49
- detect_type_by{:pdf}
37
+ describe "when file attributes are stored" do
38
+ use_model_class(:Thing,
39
+ :attachment_file_name => :string,
40
+ :attachment_width => :integer,
41
+ :attachment_height => :integer,
42
+ :attachment_aspect_ratio => :float,
43
+ :attachment_dimensions => :string)
44
+
45
+ before do
46
+ Thing.has_attachment :attachment do
47
+ style :double, :size => '1224x1584'
48
+ style :filled, :size => '500x500', :filled => true
49
+ style :unfilled, :size => '1000x1000'
50
+ default_style :double
50
51
  end
51
- @thing.save.should be_true
52
- File.unlink(@thing.attachment.path(:original))
53
- @thing = Thing.find(@thing.id)
54
- @thing.attachment.is_a?(Attachment::Pdf) # sanity check
55
- @thing.attachment.stream.missing? # sanity check
56
- @thing.attachment.dimensions(:original).should == [1, 1]
52
+ @thing = Thing.new(:attachment => test_file)
57
53
  end
58
54
 
59
- it "should return the width and height of the default style if no style name is given" do
60
- @thing.attachment.dimensions.should == [1224, 1584]
61
- end
55
+ describe "#process" do
56
+ it "should be processed with ImageMagick by default" do
57
+ context = nil
58
+ configure do
59
+ style :output
60
+ process :on => :event do
61
+ context = self
62
+ end
63
+ end
62
64
 
63
- it "should return the width and height of the given style" do
64
- @thing.attachment.dimensions(:original).should == [612, 792]
65
- @thing.attachment.dimensions(:double).should == [1224, 1584]
65
+ @thing.attachment.process(:event)
66
+ context.should be_a(Processor::ImageMagick)
67
+ end
66
68
  end
67
69
 
68
- it "should return the calculated width according to style filledness" do
69
- @thing.attachment.dimensions(:filled).should == [500, 500]
70
- @thing.attachment.dimensions(:unfilled).should == [773, 1000]
71
- end
70
+ describe "#dimensions" do
71
+ it "should return the width and height of the default style if no style name is given" do
72
+ @thing.attachment.dimensions.should == [1224, 1584]
73
+ end
72
74
 
73
- it "should only invoke identify once"
74
- it "should log the result"
75
- end
75
+ it "should return the width and height of the given style" do
76
+ @thing.attachment.dimensions(:original).should == [612, 792]
77
+ @thing.attachment.dimensions(:double).should == [1224, 1584]
78
+ end
76
79
 
77
- describe "#width" do
78
- it "should return the width of the default style if no style name is given" do
79
- @thing.attachment.width.should == 1224
80
- end
80
+ it "should return the calculated width according to style filledness" do
81
+ @thing.attachment.dimensions(:filled).should == [500, 500]
82
+ @thing.attachment.dimensions(:unfilled).should == [773, 1000]
83
+ end
81
84
 
82
- it "should return the width of the given style" do
83
- @thing.attachment.width(:original).should == 612
84
- @thing.attachment.width(:double).should == 1224
85
+ it "should only invoke identify once"
86
+ it "should log the result"
85
87
  end
86
- end
87
88
 
88
- describe "#height" do
89
- it "should return the height of the default style if no style name is given" do
90
- @thing.attachment.height.should == 1584
91
- end
89
+ describe "#width" do
90
+ it "should return the width of the default style if no style name is given" do
91
+ @thing.attachment.width.should == 1224
92
+ end
92
93
 
93
- it "should return the height of the given style" do
94
- @thing.attachment.height(:original).should == 792
95
- @thing.attachment.height(:double).should == 1584
94
+ it "should return the width of the given style" do
95
+ @thing.attachment.width(:original).should == 612
96
+ @thing.attachment.width(:double).should == 1224
97
+ end
96
98
  end
97
- end
98
99
 
99
- describe "#aspect_ratio" do
100
- it "should return the aspect ratio of the default style if no style name is given" do
101
- @thing.attachment.aspect_ratio.should be_close(612.0/792, 1e-5)
102
- end
100
+ describe "#height" do
101
+ it "should return the height of the default style if no style name is given" do
102
+ @thing.attachment.height.should == 1584
103
+ end
103
104
 
104
- it "should return the aspect ratio of the given style" do
105
- @thing.attachment.aspect_ratio(:original).should be_close(612.0/792, 1e-5)
106
- @thing.attachment.aspect_ratio(:filled).should be_close(1, 1e-5)
105
+ it "should return the height of the given style" do
106
+ @thing.attachment.height(:original).should == 792
107
+ @thing.attachment.height(:double).should == 1584
108
+ end
107
109
  end
108
- end
109
110
 
110
- describe "storable attributes" do
111
- it "should set the stored attributes on assignment" do
112
- @thing.attachment_width.should == 612
113
- @thing.attachment_height.should == 792
114
- @thing.attachment_aspect_ratio.should be_close(612.0/792, 1e-5)
115
- @thing.attachment_dimensions.should == '612x792'
116
- end
111
+ describe "#aspect_ratio" do
112
+ it "should return the aspect ratio of the default style if no style name is given" do
113
+ @thing.attachment.aspect_ratio.should be_close(612.0/792, 1e-5)
114
+ end
117
115
 
118
- describe "after roundtripping through the database" do
119
- before do
120
- @thing.save
121
- @thing = Thing.find(@thing.id)
116
+ it "should return the aspect ratio of the given style" do
117
+ @thing.attachment.aspect_ratio(:original).should be_close(612.0/792, 1e-5)
118
+ @thing.attachment.aspect_ratio(:filled).should be_close(1, 1e-5)
122
119
  end
120
+ end
123
121
 
124
- it "should restore the stored attributes" do
122
+ describe "storable attributes" do
123
+ it "should set the stored attributes on assignment" do
125
124
  @thing.attachment_width.should == 612
126
125
  @thing.attachment_height.should == 792
127
126
  @thing.attachment_aspect_ratio.should be_close(612.0/792, 1e-5)
128
127
  @thing.attachment_dimensions.should == '612x792'
129
128
  end
130
129
 
131
- it "should recalculate the dimensions correctly" do
132
- @thing.attachment.dimensions(:filled).should == [500, 500]
133
- @thing.attachment.dimensions(:unfilled).should == [773, 1000]
130
+ describe "after roundtripping through the database" do
131
+ before do
132
+ @thing.save
133
+ @thing = Thing.find(@thing.id)
134
+ end
135
+
136
+ it "should restore the stored attributes" do
137
+ @thing.attachment_width.should == 612
138
+ @thing.attachment_height.should == 792
139
+ @thing.attachment_aspect_ratio.should be_close(612.0/792, 1e-5)
140
+ @thing.attachment_dimensions.should == '612x792'
141
+ end
142
+
143
+ it "should recalculate the dimensions correctly" do
144
+ @thing.attachment.dimensions(:filled).should == [500, 500]
145
+ @thing.attachment.dimensions(:unfilled).should == [773, 1000]
146
+ end
134
147
  end
135
148
  end
136
149
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bulldog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - George Ogata
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-03 00:00:00 -05:00
12
+ date: 2009-12-11 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency