bulldog 0.0.11 → 0.0.12

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