From a5d637d86c02d911b07d48bdbfbc4f23fb59d720 Mon Sep 17 00:00:00 2001
From: Jacob Atzen <jacob@jacobatzen.dk>
Date: Fri, 12 Mar 2010 10:22:29 +0100
Subject: ActiveModel::Dirty#changes should return a HashWithIndifferentAccess
 [#4157 state:resolved]
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Keep the Rails style of inject

Signed-off-by: José Valim <jose.valim@gmail.com>
---
 activemodel/lib/active_model/dirty.rb |  2 +-
 activemodel/test/cases/dirty_test.rb  | 29 +++++++++++++++++++++++++++++
 2 files changed, 30 insertions(+), 1 deletion(-)
 create mode 100644 activemodel/test/cases/dirty_test.rb

(limited to 'activemodel')

diff --git a/activemodel/lib/active_model/dirty.rb b/activemodel/lib/active_model/dirty.rb
index d3a6bad6bb..2f6b30dfed 100644
--- a/activemodel/lib/active_model/dirty.rb
+++ b/activemodel/lib/active_model/dirty.rb
@@ -107,7 +107,7 @@ module ActiveModel
     #   person.name = 'bob'
     #   person.changes # => { 'name' => ['bill', 'bob'] }
     def changes
-      changed.inject({}) { |h, attr| h[attr] = attribute_change(attr); h }
+      changed.inject(HashWithIndifferentAccess.new){ |h, attr| h[attr] = attribute_change(attr); h }
     end
 
     # Map of attributes that were changed when the model was saved.
diff --git a/activemodel/test/cases/dirty_test.rb b/activemodel/test/cases/dirty_test.rb
new file mode 100644
index 0000000000..c910cb43d4
--- /dev/null
+++ b/activemodel/test/cases/dirty_test.rb
@@ -0,0 +1,29 @@
+require "cases/helper"
+
+class DirtyTest < ActiveModel::TestCase
+  class DirtyModel
+    include ActiveModel::Dirty
+    define_attribute_methods [:name]
+
+    def initialize
+      @name = nil
+    end
+
+    def name
+      @name
+    end
+
+    def name=(val)
+      name_will_change!
+      @name = val
+    end
+  end
+
+  test "changes accessible through both strings and symbols" do
+    model = DirtyModel.new
+    model.name = "David"
+    assert !model.changes[:name].nil?
+    assert !model.changes['name'].nil?
+  end
+
+end
-- 
cgit v1.2.3