Skip to content

Commit

Permalink
fix bug that doesnt allow a Proc sanitizer to return null
Browse files Browse the repository at this point in the history
  • Loading branch information
Zac Horn committed Mar 14, 2012
1 parent 2b8c6ae commit fb88197
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 10 deletions.
10 changes: 6 additions & 4 deletions lib/sequel_sanitize.rb
@@ -1,7 +1,7 @@
module Sequel
module Plugins
# The Sanitize plugin basically does a 'before_filter' on
# specified fields, if no sanitizer is specified the default
# The Sanitize plugin basically does a 'before_filter' on
# specified fields, if no sanitizer is specified the default
# one is used
#
module Sanitize
Expand All @@ -14,8 +14,10 @@ def self.configure(model, opts={})
define_method("#{f}=") do |value|
sanitizer = self.class.sanitize_options[:field_sanitize][f]
do_downcase = self.class.sanitize_options[:field_downcase][f]
sanitized = sanitizer.call(value) if sanitizer.respond_to?(:call)
sanitized ||= self.send(sanitizer, value) if sanitizer
if sanitizer
sanitized = sanitizer.call(value) if sanitizer.respond_to?(:call)
sanitized = self.send(sanitizer, value) if sanitizer.is_a? Symbol
end
sanitized = sanitized.downcase if do_downcase and sanitized.respond_to?(:downcase)
super(sanitized)
end
Expand Down
20 changes: 14 additions & 6 deletions spec/sequel_sanitize_spec.rb
Expand Up @@ -12,10 +12,10 @@ class Item < Sequel::Model; end
it "should be loaded using Model.plugin" do
Item.plugins.should include(Sequel::Plugins::Sanitize)
end

it "should require a field array" do
class Item2 < Sequel::Model; end
lambda {Item2.plugin :sanitize}.should raise_error(ArgumentError, ":fields must be a non-empty array")
lambda {Item2.plugin :sanitize}.should raise_error(ArgumentError, ":fields must be a non-empty array")
end

it "should require a sanitizer to be a symbol or callable" do
Expand All @@ -27,8 +27,16 @@ class Item2 < Sequel::Model; end
i = Item.new(:name => " Kevin ")
i.name.should eql "Kevin"
end

it 'should allow a Proc as sanitizer to return nil' do
class Item < Sequel::Model
plugin :sanitize, :fields => [:name], :sanitizer => Proc.new{|s| nil}
end
i = Item.new(:name => " ")
i.name.should eql nil
end
end

describe "downcase option" do
before(:each) do
Item.plugin :sanitize, :fields => [:name]
Expand All @@ -47,13 +55,13 @@ class Item2 < Sequel::Model; end
Item2.plugin :sanitize, :fields => [:name, nil]
Item2.sanitize_options[:fields].should eql [:name]
end

it 'should remove duplicate fields' do
class Item2 < Sequel::Model; end
Item2.plugin :sanitize, :fields => [:name, :slug, :name]
Item2.sanitize_options[:fields].count.should eql 2
end

it 'should add to the field list on multiple calls' do
#not overwrite fields when you add more fields with different options
class Item2 < Sequel::Model; end
Expand All @@ -62,7 +70,7 @@ class Item2 < Sequel::Model; end
Item2.plugin :sanitize, :fields => [:more, :columns, :name]
Item2.sanitize_options[:fields].should eql [:name, :slug, :more, :columns]
end

it 'should aggregate the values of field options' do
class Item2 < Sequel::Model; end
Item2.plugin :sanitize, :fields => [:name, :slug]
Expand Down

0 comments on commit fb88197

Please sign in to comment.