Commit b7b2b843 by Joel Oliveira Committed by Prem Sichanugrist

[#940] Raise error when style defined & not in path

* Add StyleTokenNotFound in Errors
* Adjust tests to make sure :style present where not currently defined
parent 0958e6fc
...@@ -77,6 +77,7 @@ module Paperclip ...@@ -77,6 +77,7 @@ module Paperclip
@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
...@@ -358,6 +359,17 @@ module Paperclip ...@@ -358,6 +359,17 @@ module Paperclip
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
......
...@@ -9,6 +9,11 @@ module Paperclip ...@@ -9,6 +9,11 @@ module Paperclip
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
......
...@@ -309,7 +309,7 @@ class AttachmentTest < Test::Unit::TestCase ...@@ -309,7 +309,7 @@ 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("...")
...@@ -317,7 +317,7 @@ class AttachmentTest < Test::Unit::TestCase ...@@ -317,7 +317,7 @@ class AttachmentTest < Test::Unit::TestCase
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
......
...@@ -228,7 +228,7 @@ class S3Test < Test::Unit::TestCase ...@@ -228,7 +228,7 @@ class S3Test < Test::Unit::TestCase
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"
......
...@@ -5,7 +5,7 @@ class StyleTest < Test::Unit::TestCase ...@@ -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]
...@@ -33,9 +33,18 @@ class StyleTest < Test::Unit::TestCase ...@@ -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 => {
...@@ -64,7 +73,7 @@ class StyleTest < Test::Unit::TestCase ...@@ -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
...@@ -97,7 +106,7 @@ class StyleTest < Test::Unit::TestCase ...@@ -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]
...@@ -117,7 +126,7 @@ class StyleTest < Test::Unit::TestCase ...@@ -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]
...@@ -137,7 +146,7 @@ class StyleTest < Test::Unit::TestCase ...@@ -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#",
...@@ -162,7 +171,7 @@ class StyleTest < Test::Unit::TestCase ...@@ -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#",
...@@ -184,7 +193,7 @@ class StyleTest < Test::Unit::TestCase ...@@ -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",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment