From 2b9cd974368a44983a52853adcbcd31958931b84 Mon Sep 17 00:00:00 2001 From: twinturbo Date: Sat, 14 Jul 2012 13:12:26 +0200 Subject: [PATCH] Close #86 --- lib/active_model/serializer.rb | 4 ++-- test/serializer_test.rb | 44 ++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index bc96fbfa..b103f8a4 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -257,7 +257,7 @@ module ActiveModel end def attribute(attr, options={}) - self._attributes = _attributes.merge(attr => options[:key] || attr) + self._attributes = _attributes.merge(attr => options[:key] || attr.to_s.gsub(/\?$/, '').to_sym) unless method_defined?(attr) class_eval "def #{attr}() object.read_attribute_for_serialization(:#{attr}) end", __FILE__, __LINE__ @@ -522,4 +522,4 @@ module ActiveModel ActiveSupport::Notifications.instrument("#{name}.serializer", payload, &block) end end -end \ No newline at end of file +end diff --git a/test/serializer_test.rb b/test/serializer_test.rb index 082cd6bf..0928f5c0 100644 --- a/test/serializer_test.rb +++ b/test/serializer_test.rb @@ -890,4 +890,48 @@ class SerializerTest < ActiveModel::TestCase end assert_equal ActiveModel::Serializer, loaded end + + def tests_query_attributes_strip_question_mark + todo = Class.new do + def overdue? + true + end + + def read_attribute_for_serialization(name) + send name + end + end + + serializer = Class.new(ActiveModel::Serializer) do + attribute :overdue? + end + + actual = serializer.new(todo.new).as_json + + assert_equal({ + :overdue => true + }, actual) + end + + def tests_query_attributes_allow_key_option + todo = Class.new do + def overdue? + true + end + + def read_attribute_for_serialization(name) + send name + end + end + + serializer = Class.new(ActiveModel::Serializer) do + attribute :overdue?, :key => :foo + end + + actual = serializer.new(todo.new).as_json + + assert_equal({ + :foo => true + }, actual) + end end