diff options
Diffstat (limited to 'activerecord')
6 files changed, 38 insertions, 30 deletions
diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index d24ca2716e..e448609cf4 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -1,5 +1,10 @@ *Rails 3.2.0 (unreleased)* +* If multiple parameters are sent representing a date, and some are blank, the +resulting object is nil. In previous releases those values defaulted to 1. This +only affects existing but blank parameters, missing ones still raise an error. +[Akira Matsuda] + * ActiveRecord::Base.establish_connection now takes a string that contains a URI that specifies the connection configuration. For example: diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index 00f986b3ce..2c162a6fc8 100644 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -1738,7 +1738,7 @@ MSG end # Returns an <tt>#inspect</tt>-like string for the value of the - # attribute +attr_name+. String attributes are elided after 50 + # attribute +attr_name+. String attributes are truncated upto 50 # characters, and Date and Time attributes are returned in the # <tt>:db</tt> format. Other attributes return the value of # <tt>#inspect</tt> without modification. @@ -2027,15 +2027,18 @@ MSG # If Date bits were not provided, error raise "Missing Parameter" if [1,2,3].any?{|position| !values_hash_from_param.has_key?(position)} max_position = extract_max_param_for_multiparameter_attributes(values_hash_from_param, 6) + # If Date bits were provided but blank, then return nil + return nil if (1..3).any? {|position| values_hash_from_param[position].blank?} + set_values = (1..max_position).collect{|position| values_hash_from_param[position] } - # If Date bits were provided but blank, then default to 1 # If Time bits are not there, then default to 0 - [1,1,1,0,0,0].each_with_index{|v,i| set_values[i] = set_values[i].blank? ? v : set_values[i]} + (3..5).each {|i| set_values[i] = set_values[i].blank? ? 0 : set_values[i]} instantiate_time_object(name, set_values) end def read_date_parameter_value(name, values_hash_from_param) - set_values = (1..3).collect{|position| values_hash_from_param[position].blank? ? 1 : values_hash_from_param[position]} + return nil if (1..3).any? {|position| values_hash_from_param[position].blank?} + set_values = [values_hash_from_param[1], values_hash_from_param[2], values_hash_from_param[3]] begin Date.new(*set_values) rescue ArgumentError # if Date.new raises an exception on an invalid date diff --git a/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb b/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb index ab07253e86..123b3654e6 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb @@ -48,7 +48,7 @@ module ActiveRecord # # Or a URL: # - # ActiverRecord::Base.establish_connection( + # ActiveRecord::Base.establish_connection( # "postgres://myuser:mypass@localhost/somedatabase" # ) # diff --git a/activerecord/lib/active_record/railties/databases.rake b/activerecord/lib/active_record/railties/databases.rake index 44e5520230..0ee7e20cf1 100644 --- a/activerecord/lib/active_record/railties/databases.rake +++ b/activerecord/lib/active_record/railties/databases.rake @@ -115,7 +115,8 @@ db_namespace = namespace :db do end end else - $stderr.puts "#{config['database']} already exists" + # Bug with 1.9.2 Calling return within begin still executes else + $stderr.puts "#{config['database']} already exists" unless config['adapter'] =~ /sqlite/ end end diff --git a/activerecord/test/cases/adapters/postgresql/connection_test.rb b/activerecord/test/cases/adapters/postgresql/connection_test.rb new file mode 100644 index 0000000000..21b97b3b39 --- /dev/null +++ b/activerecord/test/cases/adapters/postgresql/connection_test.rb @@ -0,0 +1,14 @@ +require "cases/helper" + +module ActiveRecord + class PostgresqlConnectionTest < ActiveRecord::TestCase + def setup + super + @connection = ActiveRecord::Base.connection + end + + def test_encoding + assert_not_nil @connection.encoding + end + end +end diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb index 607c87beec..8b4e7dd799 100644 --- a/activerecord/test/cases/base_test.rb +++ b/activerecord/test/cases/base_test.rb @@ -540,7 +540,7 @@ class BasicsTest < ActiveRecord::TestCase topic.attributes = attributes # note that extra #to_date call allows test to pass for Oracle, which # treats dates/times the same - assert_date_from_db Date.new(1, 6, 24), topic.last_read.to_date + assert_nil topic.last_read end def test_multiparameter_attributes_on_date_with_empty_month @@ -549,7 +549,7 @@ class BasicsTest < ActiveRecord::TestCase topic.attributes = attributes # note that extra #to_date call allows test to pass for Oracle, which # treats dates/times the same - assert_date_from_db Date.new(2004, 1, 24), topic.last_read.to_date + assert_nil topic.last_read end def test_multiparameter_attributes_on_date_with_empty_day @@ -558,7 +558,7 @@ class BasicsTest < ActiveRecord::TestCase topic.attributes = attributes # note that extra #to_date call allows test to pass for Oracle, which # treats dates/times the same - assert_date_from_db Date.new(2004, 6, 1), topic.last_read.to_date + assert_nil topic.last_read end def test_multiparameter_attributes_on_date_with_empty_day_and_year @@ -567,7 +567,7 @@ class BasicsTest < ActiveRecord::TestCase topic.attributes = attributes # note that extra #to_date call allows test to pass for Oracle, which # treats dates/times the same - assert_date_from_db Date.new(1, 6, 1), topic.last_read.to_date + assert_nil topic.last_read end def test_multiparameter_attributes_on_date_with_empty_day_and_month @@ -576,7 +576,7 @@ class BasicsTest < ActiveRecord::TestCase topic.attributes = attributes # note that extra #to_date call allows test to pass for Oracle, which # treats dates/times the same - assert_date_from_db Date.new(2004, 1, 1), topic.last_read.to_date + assert_nil topic.last_read end def test_multiparameter_attributes_on_date_with_empty_year_and_month @@ -585,7 +585,7 @@ class BasicsTest < ActiveRecord::TestCase topic.attributes = attributes # note that extra #to_date call allows test to pass for Oracle, which # treats dates/times the same - assert_date_from_db Date.new(1, 1, 24), topic.last_read.to_date + assert_nil topic.last_read end def test_multiparameter_attributes_on_date_with_all_empty @@ -678,12 +678,7 @@ class BasicsTest < ActiveRecord::TestCase } topic = Topic.find(1) topic.attributes = attributes - assert_equal 1, topic.written_on.year - assert_equal 1, topic.written_on.month - assert_equal 1, topic.written_on.day - assert_equal 0, topic.written_on.hour - assert_equal 12, topic.written_on.min - assert_equal 2, topic.written_on.sec + assert_nil topic.written_on end def test_multiparameter_attributes_on_time_will_ignore_date_if_empty @@ -693,12 +688,7 @@ class BasicsTest < ActiveRecord::TestCase } topic = Topic.find(1) topic.attributes = attributes - assert_equal 1, topic.written_on.year - assert_equal 1, topic.written_on.month - assert_equal 1, topic.written_on.day - assert_equal 16, topic.written_on.hour - assert_equal 24, topic.written_on.min - assert_equal 0, topic.written_on.sec + assert_nil topic.written_on end def test_multiparameter_attributes_on_time_with_seconds_will_ignore_date_if_empty attributes = { @@ -707,12 +697,7 @@ class BasicsTest < ActiveRecord::TestCase } topic = Topic.find(1) topic.attributes = attributes - assert_equal 1, topic.written_on.year - assert_equal 1, topic.written_on.month - assert_equal 1, topic.written_on.day - assert_equal 16, topic.written_on.hour - assert_equal 12, topic.written_on.min - assert_equal 02, topic.written_on.sec + assert_nil topic.written_on end def test_multiparameter_attributes_on_time_with_utc |