Skip to content

Commit

Permalink
Fixed ID partitioning interpolation, when cloning attachments
Browse files Browse the repository at this point in the history
  • Loading branch information
dim committed Dec 13, 2011
1 parent 989ec0e commit ac82244
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 2 deletions.
7 changes: 5 additions & 2 deletions lib/paperclip/interpolations.rb
Expand Up @@ -150,10 +150,13 @@ def hash attachment=nil, style_name=nil
# Returns the id of the instance in a split path form. e.g. returns
# 000/001/234 for an id of 1234.
def id_partition attachment, style_name
if (id = attachment.instance.id).is_a?(Integer)
case id = attachment.instance.id
when Integer
("%09d" % id).scan(/\d{3}/).join("/")
else
when String
id.scan(/.{3}/).first(3).join("/")
else
nil
end
end

Expand Down
14 changes: 14 additions & 0 deletions test/interpolations_test.rb
Expand Up @@ -88,6 +88,13 @@ class InterpolationsTest < Test::Unit::TestCase
assert_equal 23, Paperclip::Interpolations.id(attachment, :style)
end

should "return nil for attachments to new records" do
attachment = mock
attachment.expects(:id).returns(nil)
attachment.expects(:instance).returns(attachment)
assert_nil Paperclip::Interpolations.id(attachment, :style)
end

should "return the partitioned id of the attachment when the id is an integer" do
attachment = mock
attachment.expects(:id).returns(23)
Expand All @@ -102,6 +109,13 @@ class InterpolationsTest < Test::Unit::TestCase
assert_equal "32f/nj2/3oi", Paperclip::Interpolations.id_partition(attachment, :style)
end

should "return nil for the partitioned id of an attachment to a new record (when the id is nil)" do
attachment = mock
attachment.expects(:id).returns(nil)
attachment.expects(:instance).returns(attachment)
assert_nil Paperclip::Interpolations.id_partition(attachment, :style)
end

should "return the name of the attachment" do
attachment = mock
attachment.expects(:name).returns("file")
Expand Down

0 comments on commit ac82244

Please sign in to comment.