diff --git a/lib/paperclip/style.rb b/lib/paperclip/style.rb index 0ef6c7fe6..933bcac23 100644 --- a/lib/paperclip/style.rb +++ b/lib/paperclip/style.rb @@ -18,6 +18,8 @@ def initialize name, definition, attachment @geometry = definition.delete(:geometry) @format = definition.delete(:format) @processors = definition.delete(:processors) + @convert_options = definition.delete(:convert_options) + @source_file_options = definition.delete(:source_file_options) @other_args = definition else @geometry, @format = [definition, nil].flatten[0..1] @@ -46,11 +48,13 @@ def whiny? end def convert_options - attachment.send(:extra_options_for, name) + @convert_options.respond_to?(:call) ? @convert_options.call(attachment.instance) : + (@convert_options || attachment.send(:extra_options_for, name)) end def source_file_options - attachment.send(:extra_source_file_options_for, name) + @source_file_options.respond_to?(:call) ? @source_file_options.call(attachment.instance) : + (@source_file_options || attachment.send(:extra_source_file_options_for, name)) end # returns the geometry string for this style diff --git a/test/style_test.rb b/test/style_test.rb index 89e104dd5..ef3bc6de8 100644 --- a/test/style_test.rb +++ b/test/style_test.rb @@ -41,7 +41,9 @@ class StyleTest < Test::Unit::TestCase :styles => { :foo => lambda{|a| "300x300#"}, :bar => { - :geometry => lambda{|a| "300x300#"} + :geometry => lambda{|a| "300x300#"}, + :convert_options => lambda{|a| "-do_stuff"}, + :source_file_options => lambda{|a| "-do_extra_stuff"} } } end @@ -51,6 +53,8 @@ class StyleTest < Test::Unit::TestCase assert_equal "300x300#", @attachment.options.styles[:bar].geometry assert_equal [:test], @attachment.options.styles[:foo].processors assert_equal [:test], @attachment.options.styles[:bar].processors + assert_equal "-do_stuff", @attachment.options.styles[:bar].convert_options + assert_equal "-do_extra_stuff", @attachment.options.styles[:bar].source_file_options end end @@ -177,4 +181,29 @@ class StyleTest < Test::Unit::TestCase assert_equal [:test], @attachment.options.styles[:foo].processors end end + + context "An attachment with :convert_options and :source_file_options in :styles" do + setup do + @attachment = attachment :path => ":basename.:extension", + :styles => { + :thumb => "100x100", + :large => {:geometry => "400x400", + :convert_options => "-do_stuff", + :source_file_options => "-do_extra_stuff" + } + } + @file = StringIO.new("...") + @file.stubs(:original_filename).returns("file.jpg") + end + + should "have empty options for :thumb style" do + assert_equal "", @attachment.options.styles[:thumb].processor_options[:convert_options] + assert_equal "", @attachment.options.styles[:thumb].processor_options[:source_file_options] + end + + should "have the right options for :large style" do + assert_equal "-do_stuff", @attachment.options.styles[:large].processor_options[:convert_options] + assert_equal "-do_extra_stuff", @attachment.options.styles[:large].processor_options[:source_file_options] + end + end end