Skip to content
This repository has been archived by the owner on Jul 13, 2023. It is now read-only.

Commit

Permalink
Merge pull request #729 from Sporky023/master
Browse files Browse the repository at this point in the history
replace Paperclip::Attachment#initialize options with an AttachmentOptions instance
  • Loading branch information
Sporky023 committed Feb 3, 2012
2 parents 5d4ba62 + 9eda1bb commit 7f948f8
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 3 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -20,3 +20,4 @@ capybara*.html

*SPIKE*
*emfile.lock
tags
3 changes: 2 additions & 1 deletion lib/paperclip.rb
Expand Up @@ -37,6 +37,7 @@
require 'paperclip/interpolations'
require 'paperclip/style'
require 'paperclip/attachment'
require 'paperclip/attachment_options'
require 'paperclip/storage'
require 'paperclip/callback_compatibility'
require 'paperclip/missing_attachment_styles'
Expand Down Expand Up @@ -325,7 +326,7 @@ def has_attached_file name, options = {}
self.attachment_definitions = self.attachment_definitions.dup
end

attachment_definitions[name] = {:validations => []}.merge(options)
attachment_definitions[name] = Paperclip::AttachmentOptions.new(options)
Paperclip.classes_with_attachments << self.name
Paperclip.check_for_url_clash(name,attachment_definitions[name][:url],self.name)

Expand Down
10 changes: 10 additions & 0 deletions lib/paperclip/attachment_options.rb
@@ -0,0 +1,10 @@
module Paperclip
class AttachmentOptions < Hash
def initialize(options)
options = {:validations => []}.merge(options)
options.each do |k, v|
self.[]=(k, v)
end
end
end
end
40 changes: 40 additions & 0 deletions test/attachment_options_test.rb
@@ -0,0 +1,40 @@
require './test/helper'

class AttachmentOptionsTest < Test::Unit::TestCase
should "be a Hash" do
assert_kind_of Hash, Paperclip::AttachmentOptions.new({})
end

should "add a default empty validations" do
options = {:arbi => :trary}
expected = {:validations => []}.merge(options)
actual = Paperclip::AttachmentOptions.new(options).to_hash
assert_equal expected, actual
end

should "not override validations if passed to initializer" do
options = {:validations => "something"}
attachment_options = Paperclip::AttachmentOptions.new(options)
assert_equal "something", attachment_options[:validations]
end

should "respond to []" do
assert Paperclip::AttachmentOptions.new({}).respond_to?(:[])
end

should "deliver the specified options through []" do
intended_options = {:specific_key => "specific value"}
attachment_options = Paperclip::AttachmentOptions.new(intended_options)
assert_equal "specific value", attachment_options[:specific_key]
end

should "respond to []=" do
assert Paperclip::AttachmentOptions.new({}).respond_to?(:[]=)
end

should "remember options set with []=" do
attachment_options = Paperclip::AttachmentOptions.new({})
attachment_options[:foo] = "bar"
assert_equal "bar", attachment_options[:foo]
end
end
8 changes: 6 additions & 2 deletions test/helper.rb
Expand Up @@ -54,10 +54,14 @@ def setup
ActiveRecord::Base.establish_connection(config['test'])
Paperclip.options[:logger] = ActiveRecord::Base.logger

Dir[File.join(File.dirname(__FILE__), 'support','*')].each do |f|
require f
def require_everything_in_directory(directory_name)
Dir[File.join(File.dirname(__FILE__), directory_name, '*')].each do |f|
require f
end
end

require_everything_in_directory('support')

def reset_class class_name
ActiveRecord::Base.send(:include, Paperclip::Glue)
Object.send(:remove_const, class_name) rescue nil
Expand Down

0 comments on commit 7f948f8

Please sign in to comment.