Skip to content

Commit 7e0286e

Browse files
committed
Render all primitive types natively
If passed a String, Number, Boolean or Null value, `#serializer_for` should understand that the value doesn't need a custom serializer with all the bells and whistles.
1 parent 562d85c commit 7e0286e

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

lib/granola/helper.rb

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,19 @@ def self.serializer_class_for(object)
3535
name = object.class.name
3636
Object.const_get("%sSerializer" % name)
3737
rescue NameError
38-
const_get("%sSerializer" % name)
38+
case object
39+
when NilClass, TrueClass, FalseClass, Numeric, String
40+
PrimitiveTypesSerializer
41+
else
42+
raise
43+
end
3944
end
4045

4146
# Internal: Null serializer that transparently handles rendering `nil` in case
4247
# it's passed.
43-
class NilClassSerializer < Granola::Serializer
48+
class PrimitiveTypesSerializer < Granola::Serializer
4449
def serialized
45-
{}
50+
object
4651
end
4752
end
4853
end

test/helper_test.rb

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class ModelSerializer < Granola::Serializer
2828
assert_equal PersonSerializer, klass
2929

3030
klass = Granola::Helper.serializer_class_for([])
31-
assert_equal Granola::Helper::NilClassSerializer, klass
31+
assert_equal Granola::Helper::PrimitiveTypesSerializer, klass
3232

3333
klass = Granola::Helper.serializer_class_for(Namespaced::Model.new)
3434
assert_equal Namespaced::ModelSerializer, klass
@@ -53,7 +53,8 @@ class ModelSerializer < Granola::Serializer
5353
test "#serializer_for handles empty lists automatically" do
5454
serializer = serializer_for([])
5555
assert serializer.is_a?(Granola::List)
56-
assert_equal Granola::Helper::NilClassSerializer, serializer.item_serializer
56+
assert_equal \
57+
Granola::Helper::PrimitiveTypesSerializer, serializer.item_serializer
5758
end
5859

5960
test "#serializer_for accepts a Granola::Serializer" do |person|
@@ -67,3 +68,10 @@ class ModelSerializer < Granola::Serializer
6768
assert_equal expected, actual
6869
assert PersonSerializer === actual
6970
end
71+
72+
test "#serializer_for correctly serializes primitive types" do
73+
[nil, true, false, 10, 5.0, "foo"].each do |primitive_type|
74+
serializer = serializer_for(primitive_type)
75+
assert_equal primitive_type, serializer.serialized
76+
end
77+
end

0 commit comments

Comments
 (0)