Added code to generate a property? method for properties casted as :boolean
Signed-off-by: Matt Aimonetti <mattaimonetti@gmail.com>
This commit is contained in:
parent
a8c7256974
commit
d1d8da513c
|
@ -77,6 +77,9 @@ module CouchRest
|
||||||
# Float instances don't get initialized with #new
|
# Float instances don't get initialized with #new
|
||||||
elsif ((property.init_method == 'new') && target == 'Float')
|
elsif ((property.init_method == 'new') && target == 'Float')
|
||||||
cast_float(self[key])
|
cast_float(self[key])
|
||||||
|
# 'boolean' type is simply used to generate a property? accessor method
|
||||||
|
elsif ((property.init_method == 'new') && target == 'boolean')
|
||||||
|
self[key]
|
||||||
else
|
else
|
||||||
# Let people use :send as a Time parse arg
|
# Let people use :send as a Time parse arg
|
||||||
klass = ::CouchRest.constantize(target)
|
klass = ::CouchRest.constantize(target)
|
||||||
|
@ -128,6 +131,18 @@ module CouchRest
|
||||||
end
|
end
|
||||||
EOS
|
EOS
|
||||||
|
|
||||||
|
if property.type == 'boolean'
|
||||||
|
class_eval <<-EOS, __FILE__, __LINE__
|
||||||
|
def #{property.name}?
|
||||||
|
if self['#{property.name}'].nil? || self['#{property.name}'] == false || self['#{property.name}'].to_s.downcase == 'false'
|
||||||
|
false
|
||||||
|
else
|
||||||
|
true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
EOS
|
||||||
|
end
|
||||||
|
|
||||||
if property.alias
|
if property.alias
|
||||||
class_eval <<-EOS, __FILE__, __LINE__
|
class_eval <<-EOS, __FILE__, __LINE__
|
||||||
alias #{property.alias.to_sym} #{property.name.to_sym}
|
alias #{property.alias.to_sym} #{property.name.to_sym}
|
||||||
|
|
|
@ -161,9 +161,35 @@ describe "ExtendedDocument properties" do
|
||||||
it "should work fine when a float is being passed" do
|
it "should work fine when a float is being passed" do
|
||||||
RootBeerFloat.new(:price => 9.99).price.should == 9.99
|
RootBeerFloat.new(:price => 9.99).price.should == 9.99
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "casting to a boolean value" do
|
||||||
|
class RootBeerFloat < CouchRest::ExtendedDocument
|
||||||
|
use_database DB
|
||||||
|
property :tasty, :cast_as => :boolean
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should add an accessor with a '?' for boolean attributes that returns true or false" do
|
||||||
|
RootBeerFloat.new(:tasty => true).tasty?.should == true
|
||||||
|
RootBeerFloat.new(:tasty => 'you bet').tasty?.should == true
|
||||||
|
RootBeerFloat.new(:tasty => 123).tasty?.should == true
|
||||||
|
|
||||||
|
RootBeerFloat.new(:tasty => false).tasty?.should == false
|
||||||
|
RootBeerFloat.new(:tasty => 'false').tasty?.should == false
|
||||||
|
RootBeerFloat.new(:tasty => 'FaLsE').tasty?.should == false
|
||||||
|
RootBeerFloat.new(:tasty => nil).tasty?.should == false
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should return the real value when the default accessor is used" do
|
||||||
|
RootBeerFloat.new(:tasty => true).tasty.should == true
|
||||||
|
RootBeerFloat.new(:tasty => 'you bet').tasty.should == 'you bet'
|
||||||
|
RootBeerFloat.new(:tasty => 123).tasty.should == 123
|
||||||
|
RootBeerFloat.new(:tasty => 'false').tasty.should == 'false'
|
||||||
|
RootBeerFloat.new(:tasty => false).tasty.should == false
|
||||||
|
RootBeerFloat.new(:tasty => nil).tasty.should == nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue