diff options
author | Jeremy Kemper <jeremy@bitsweat.net> | 2005-11-19 09:53:36 +0000 |
---|---|---|
committer | Jeremy Kemper <jeremy@bitsweat.net> | 2005-11-19 09:53:36 +0000 |
commit | 2ed6d365bbb2a3e0138add33be964d1cc1705b76 (patch) | |
tree | 52cebc950df6630ed447aa927a3e4f3209ab74e4 /activerecord | |
parent | d777e506f27debdb5c66cc6653e2f3dc1b634d88 (diff) | |
download | rails-2ed6d365bbb2a3e0138add33be964d1cc1705b76.tar.gz rails-2ed6d365bbb2a3e0138add33be964d1cc1705b76.tar.bz2 rails-2ed6d365bbb2a3e0138add33be964d1cc1705b76.zip |
Correct boolean handling in generated reader methods. References #2945.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3092 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/CHANGELOG | 2 | ||||
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb | 13 | ||||
-rwxr-xr-x | activerecord/test/abstract_unit.rb | 3 | ||||
-rwxr-xr-x | activerecord/test/base_test.rb | 34 |
4 files changed, 50 insertions, 2 deletions
diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index 1ca945b8d3..17c829149d 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Correct boolean handling in generated reader methods. #2945 [don.park@gmail.com, Stefan Kaes] + * Don't generate read methods for columns whose names are not valid ruby method names. #2946 [Stefan Kaes] * Document :force option to create_table. #2921 [Blair Zajac <blair@orcaware.com>] diff --git a/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb b/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb index 5be344ad06..df79f27576 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb @@ -59,7 +59,7 @@ module ActiveRecord when :time then self.class.string_to_dummy_time(value) when :date then self.class.string_to_date(value) when :binary then self.class.binary_to_string(value) - when :boolean then value == true or (value =~ /^t(rue)?$/i) == 0 or value.to_s == '1' + when :boolean then self.class.value_to_boolean(value) else value end end @@ -75,7 +75,7 @@ module ActiveRecord when :time then "#{self.class.name}.string_to_dummy_time(#{var_name})" when :date then "#{self.class.name}.string_to_date(#{var_name})" when :binary then "#{self.class.name}.binary_to_string(#{var_name})" - when :boolean then "(#{var_name} == true or (#{var_name} =~ /^t(?:true)?$/i) == 0 or #{var_name}.to_s == '1')" + when :boolean then "#{self.class.name}.value_to_boolean(#{var_name})" else nil end end @@ -120,6 +120,15 @@ module ActiveRecord Time.send(Base.default_timezone, *time_array) rescue nil end + # convert something to a boolean + def self.value_to_boolean(value) + return value if value==true || value==false + case value.to_s.downcase + when "true", "t", "1" then true + else false + end + end + private def extract_limit(sql_type) $1.to_i if sql_type =~ /\((.*)\)/ diff --git a/activerecord/test/abstract_unit.rb b/activerecord/test/abstract_unit.rb index 0626243521..d9c60ab6bd 100755 --- a/activerecord/test/abstract_unit.rb +++ b/activerecord/test/abstract_unit.rb @@ -24,3 +24,6 @@ def current_adapter?(type) ActiveRecord::ConnectionAdapters.const_defined?(type) && ActiveRecord::Base.connection.instance_of?(ActiveRecord::ConnectionAdapters.const_get(type)) end + +#ActiveRecord::Base.logger = Logger.new(STDOUT) +#ActiveRecord::Base.colorize_logging = false diff --git a/activerecord/test/base_test.rb b/activerecord/test/base_test.rb index 1ad6e6c3ee..c819c97f3b 100755 --- a/activerecord/test/base_test.rb +++ b/activerecord/test/base_test.rb @@ -206,6 +206,40 @@ class BasicsTest < Test::Unit::TestCase topic = topics(:first) topic.approved = false assert !topic.approved?, "approved should be false" + topic.approved = "false" + assert !topic.approved?, "approved should be false" + end + + def test_read_attribute_when_true + topic = topics(:first) + topic.approved = true + assert topic.approved?, "approved should be true" + topic.approved = "true" + assert topic.approved?, "approved should be true" + end + + def test_read_write_boolean_attribute + topic = Topic.new + # puts "" + # puts "New Topic" + # puts topic.inspect + topic.approved = "false" + # puts "Expecting false" + # puts topic.inspect + assert !topic.approved, "approved should be false" + topic.approved = "false" + # puts "Expecting false" + # puts topic.inspect + assert !topic.approved, "approved should be false" + topic.approved = "true" + # puts "Expecting true" + # puts topic.inspect + assert topic.approved, "approved should be true" + topic.approved = "true" + # puts "Expecting true" + # puts topic.inspect + assert topic.approved, "approved should be true" + # puts "" end def test_reader_generation |