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

Commit

Permalink
[#940] Raise error when style defined & not in path
Browse files Browse the repository at this point in the history
* Add StyleTokenNotFound in Errors
* Adjust tests to make sure :style present where not currently defined
  • Loading branch information
Joel Oliveira authored and sikachu committed Jul 4, 2012
1 parent 0958e6f commit b7b2b84
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 11 deletions.
12 changes: 12 additions & 0 deletions lib/paperclip/attachment.rb
Expand Up @@ -77,6 +77,7 @@ def initialize(name, instance, options = {})
@source_file_options = options[:source_file_options] @source_file_options = options[:source_file_options]
@whiny = options[:whiny] @whiny = options[:whiny]


initialize_path
initialize_storage initialize_storage
end end


Expand Down Expand Up @@ -358,6 +359,17 @@ def valid_assignment? file #:nodoc:
file.nil? || (file.respond_to?(:original_filename) && file.respond_to?(:content_type)) file.nil? || (file.respond_to?(:original_filename) && file.respond_to?(:content_type))
end end


def initialize_path
if style_not_in_custom_path?
raise(Paperclip::Errors::StyleTokenNotFound)
end
end

def style_not_in_custom_path?
@options[:path] != Paperclip::Attachment.default_options[:path] &&
@options[:styles].present? && !@options[:path].include?(':style')
end

def initialize_storage #:nodoc: def initialize_storage #:nodoc:
storage_class_name = @options[:storage].to_s.downcase.camelize storage_class_name = @options[:storage].to_s.downcase.camelize
begin begin
Expand Down
5 changes: 5 additions & 0 deletions lib/paperclip/errors.rb
Expand Up @@ -9,6 +9,11 @@ module Errors
class StorageMethodNotFound < Paperclip::Error class StorageMethodNotFound < Paperclip::Error
end end


# Will be thrown when there are custom styles and those styles aren't
# included in the path
class StyleTokenNotFound < Paperclip::Error
end

# Will be thrown when a command or executable is not found. # Will be thrown when a command or executable is not found.
class CommandNotFoundError < Paperclip::Error class CommandNotFoundError < Paperclip::Error
end end
Expand Down
4 changes: 2 additions & 2 deletions test/attachment_test.rb
Expand Up @@ -309,15 +309,15 @@ class AttachmentTest < Test::Unit::TestCase


context "An attachment with a default style and an extension interpolation" do context "An attachment with a default style and an extension interpolation" do
setup do setup do
@attachment = attachment :path => ":basename.:extension", @attachment = attachment :path => ":style_:basename.:extension",
:styles => { :default => ["100x100", :png] }, :styles => { :default => ["100x100", :png] },
:default_style => :default :default_style => :default
@file = StringIO.new("...") @file = StringIO.new("...")
@file.stubs(:original_filename).returns("file.jpg") @file.stubs(:original_filename).returns("file.jpg")
end end
should "return the right extension for the path" do should "return the right extension for the path" do
@attachment.assign(@file) @attachment.assign(@file)
assert_equal "file.png", @attachment.path assert_equal "default_file.png", @attachment.path
end end
end end


Expand Down
2 changes: 1 addition & 1 deletion test/storage/s3_test.rb
Expand Up @@ -228,7 +228,7 @@ def teardown
rebuild_model :styles => { :large => ['500x500#', :jpg] }, rebuild_model :styles => { :large => ['500x500#', :jpg] },
:storage => :s3, :storage => :s3,
:bucket => "bucket", :bucket => "bucket",
:path => ":attachment/:basename.:extension", :path => ":attachment/:style/:basename.:extension",
:s3_credentials => { :s3_credentials => {
'access_key_id' => "12345", 'access_key_id' => "12345",
'secret_access_key' => "54321" 'secret_access_key' => "54321"
Expand Down
25 changes: 17 additions & 8 deletions test/style_test.rb
Expand Up @@ -5,7 +5,7 @@ class StyleTest < Test::Unit::TestCase


context "A style rule" do context "A style rule" do
setup do setup do
@attachment = attachment :path => ":basename.:extension", @attachment = attachment :path => ":basename_:style.:extension",
:styles => { :foo => {:geometry => "100x100#", :format => :png} }, :styles => { :foo => {:geometry => "100x100#", :format => :png} },
:whiny => true :whiny => true
@style = @attachment.styles[:foo] @style = @attachment.styles[:foo]
Expand Down Expand Up @@ -33,9 +33,18 @@ class StyleTest < Test::Unit::TestCase
end end
end end


context "A path not containing a style rule" do
should "generate a warning when a :style token isn't found" do
assert_raises(Paperclip::Errors::StyleTokenNotFound) do
@attachment = attachment :path => ":basename_:extension",
:styles => { :foo => {:geometry => "100x100#", :format => :png} }
end
end
end

context "A style rule with properties supplied as procs" do context "A style rule with properties supplied as procs" do
setup do setup do
@attachment = attachment :path => ":basename.:extension", @attachment = attachment :path => ":style_:basename.:extension",
:whiny_thumbnails => true, :whiny_thumbnails => true,
:processors => lambda {|a| [:test]}, :processors => lambda {|a| [:test]},
:styles => { :styles => {
Expand Down Expand Up @@ -64,7 +73,7 @@ class StyleTest < Test::Unit::TestCase
styles[:aslist] = ["100x100", :png] styles[:aslist] = ["100x100", :png]
styles[:ashash] = {:geometry => "100x100", :format => :png} styles[:ashash] = {:geometry => "100x100", :format => :png}
styles[:asstring] = "100x100" styles[:asstring] = "100x100"
@attachment = attachment :path => ":basename.:extension", @attachment = attachment :path => ":style_:basename.:extension",
:styles => styles :styles => styles
end end
should "have the right number of styles" do should "have the right number of styles" do
Expand Down Expand Up @@ -97,7 +106,7 @@ class StyleTest < Test::Unit::TestCase


context "An attachment with :convert_options" do context "An attachment with :convert_options" do
setup do setup do
@attachment = attachment :path => ":basename.:extension", @attachment = attachment :path => ":style_:basename.:extension",
:styles => {:thumb => "100x100", :large => "400x400"}, :styles => {:thumb => "100x100", :large => "400x400"},
:convert_options => {:all => "-do_stuff", :thumb => "-thumbnailize"} :convert_options => {:all => "-do_stuff", :thumb => "-thumbnailize"}
@style = @attachment.styles[:thumb] @style = @attachment.styles[:thumb]
Expand All @@ -117,7 +126,7 @@ class StyleTest < Test::Unit::TestCase


context "An attachment with :source_file_options" do context "An attachment with :source_file_options" do
setup do setup do
@attachment = attachment :path => ":basename.:extension", @attachment = attachment :path => ":style_:basename.:extension",
:styles => {:thumb => "100x100", :large => "400x400"}, :styles => {:thumb => "100x100", :large => "400x400"},
:source_file_options => {:all => "-density 400", :thumb => "-depth 8"} :source_file_options => {:all => "-density 400", :thumb => "-depth 8"}
@style = @attachment.styles[:thumb] @style = @attachment.styles[:thumb]
Expand All @@ -137,7 +146,7 @@ class StyleTest < Test::Unit::TestCase


context "A style rule with its own :processors" do context "A style rule with its own :processors" do
setup do setup do
@attachment = attachment :path => ":basename.:extension", @attachment = attachment :path => ":style_:basename.:extension",
:styles => { :styles => {
:foo => { :foo => {
:geometry => "100x100#", :geometry => "100x100#",
Expand All @@ -162,7 +171,7 @@ class StyleTest < Test::Unit::TestCase


context "A style rule with :processors supplied as procs" do context "A style rule with :processors supplied as procs" do
setup do setup do
@attachment = attachment :path => ":basename.:extension", @attachment = attachment :path => ":style_:basename.:extension",
:styles => { :styles => {
:foo => { :foo => {
:geometry => "100x100#", :geometry => "100x100#",
Expand All @@ -184,7 +193,7 @@ class StyleTest < Test::Unit::TestCase


context "An attachment with :convert_options and :source_file_options in :styles" do context "An attachment with :convert_options and :source_file_options in :styles" do
setup do setup do
@attachment = attachment :path => ":basename.:extension", @attachment = attachment :path => ":style_:basename.:extension",
:styles => { :styles => {
:thumb => "100x100", :thumb => "100x100",
:large => {:geometry => "400x400", :large => {:geometry => "400x400",
Expand Down

0 comments on commit b7b2b84

Please sign in to comment.