Class: AdequateSerialization::InlineSerializer
- Inherits:
-
Module
- Object
- Module
- AdequateSerialization::InlineSerializer
- Defined in:
- lib/adequate_serialization/inline_serializer.rb
Overview
With this module, you can define serializers inline in the object that they’re serializing. You use it with the ‘AdequateSerialization::inline` method to define the serializer dynamically, as in:
class User
attr_reader :id, :name, :title
def initialize(id:, name:, title: nil)
@id = id
@name = name
@title = title
end
include AdequateSerialization.inline {
attribute :id, :name
attribute :title, optional: true
}
end
user = User.new(id: 1, name: ‘Clark Kent’) user.as_json # => :name=>“Clark Kent”
user = User.new(id: 2, name: ‘Diana Prince’, title: ‘Wonder Woman’) user.as_json(includes: :title) # => :name=>“Diana Prince”, :title=>“Wonder Woman”
Instance Attribute Summary collapse
-
#block ⇒ Object
readonly
Returns the value of attribute block.
Instance Method Summary collapse
- #included(base) ⇒ Object
-
#initialize(&block) ⇒ InlineSerializer
constructor
A new instance of InlineSerializer.
Constructor Details
#initialize(&block) ⇒ InlineSerializer
Returns a new instance of InlineSerializer.
33 34 35 |
# File 'lib/adequate_serialization/inline_serializer.rb', line 33 def initialize(&block) @block = block end |
Instance Attribute Details
#block ⇒ Object (readonly)
Returns the value of attribute block.
31 32 33 |
# File 'lib/adequate_serialization/inline_serializer.rb', line 31 def block @block end |
Instance Method Details
#included(base) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/adequate_serialization/inline_serializer.rb', line 37 def included(base) base.include(Serializable) serializer_class = Class.new(Serializer) # In order to validate the attribute, we need to define the `serializes` # method before we evaluate the block serializer_class.define_singleton_method(:serializes) { base } serializer_class.class_eval(&block) # No need to memoize within the method because the block will hold on to # local variables for us. serializer = serializer_class.new base.define_singleton_method(:serializer) { serializer } end |