From 8377646d68b32de362fefad0d752a923f6b36da6 Mon Sep 17 00:00:00 2001 From: Taryn East Date: Fri, 2 Oct 2009 10:13:40 -0500 Subject: [PATCH] add indifferent access to the attributes Signed-off-by: Joshua Peek --- activeresource/lib/active_resource/base.rb | 3 ++- activeresource/test/cases/base/load_test.rb | 13 +++++++++++++ activeresource/test/cases/base_test.rb | 15 +++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/activeresource/lib/active_resource/base.rb b/activeresource/lib/active_resource/base.rb index 8fc0999c70..3a07811f26 100644 --- a/activeresource/lib/active_resource/base.rb +++ b/activeresource/lib/active_resource/base.rb @@ -1,6 +1,7 @@ require 'active_support' require 'active_support/core_ext/class/attribute_accessors' require 'active_support/core_ext/class/inheritable_attributes' +require 'active_support/core_ext/hash/indifferent_access' require 'active_support/core_ext/kernel/reporting' require 'active_support/core_ext/module/attr_accessor_with_default' require 'active_support/core_ext/module/delegation' @@ -770,7 +771,7 @@ module ActiveResource # my_other_course = Course.new(:name => "Philosophy: Reason and Being", :lecturer => "Ralph Cling") # my_other_course.save def initialize(attributes = {}) - @attributes = {} + @attributes = {}.with_indifferent_access @prefix_options = {} load(attributes) end diff --git a/activeresource/test/cases/base/load_test.rb b/activeresource/test/cases/base/load_test.rb index 1952f5b5f0..53fa94d07f 100644 --- a/activeresource/test/cases/base/load_test.rb +++ b/activeresource/test/cases/base/load_test.rb @@ -68,6 +68,19 @@ class BaseLoadTest < Test::Unit::TestCase assert_equal @matz.stringify_keys, @person.load(@matz).attributes end + def test_after_load_attributes_are_accessible + assert_equal Hash.new, @person.attributes + assert_equal @matz.stringify_keys, @person.load(@matz).attributes + assert_equal @matz[:name], @person.attributes['name'] + end + + def test_after_load_attributes_are_accessible_via_indifferent_access + assert_equal Hash.new, @person.attributes + assert_equal @matz.stringify_keys, @person.load(@matz).attributes + assert_equal @matz[:name], @person.attributes['name'] + assert_equal @matz[:name], @person.attributes[:name] + end + def test_load_one_with_existing_resource address = @person.load(:street_address => @first_address).street_address assert_kind_of StreetAddress, address diff --git a/activeresource/test/cases/base_test.rb b/activeresource/test/cases/base_test.rb index 96fc6fc2fe..fc366430d4 100644 --- a/activeresource/test/cases/base_test.rb +++ b/activeresource/test/cases/base_test.rb @@ -102,6 +102,9 @@ class BaseTest < Test::Unit::TestCase Person.password = nil end + ######################################################################## + # Tests relating to setting up the API-connection configuration + ######################################################################## def test_site_accessor_accepts_uri_or_string_argument site = URI.parse('http://localhost') @@ -509,6 +512,11 @@ class BaseTest < Test::Unit::TestCase assert_not_equal(first_connection, second_connection, 'Connection should be re-created') end + + ######################################################################## + # Tests for setting up remote URLs for a given model (including adding + # parameters appropriately) + ######################################################################## def test_collection_name assert_equal "people", Person.collection_name end @@ -637,6 +645,10 @@ class BaseTest < Test::Unit::TestCase assert_equal [:person_id].to_set, StreetAddress.__send__(:prefix_parameters) end + + ######################################################################## + # Tests basic CRUD functions (find/save/create etc) + ######################################################################## def test_respond_to matz = Person.find(1) assert matz.respond_to?(:name) @@ -910,6 +922,9 @@ class BaseTest < Test::Unit::TestCase assert_raise(ActiveResource::ResourceGone) { Person.find(1) } end + ######################################################################## + # Tests the more miscelaneous helper methods + ######################################################################## def test_exists # Class method. assert !Person.exists?(nil)