Class: Jsonity::Builder
- Inherits:
- BasicObject
- Defined in:
- lib/jsonity/builder.rb
Class Method Summary collapse
-
.build(object = nil, content = nil, &block) ⇒ Hash
Build Jsonity.
Instance Method Summary collapse
-
#<=(obj) ⇒ Object
Set ‘obj` for the object.
-
#[] ⇒ Jsonity::Builder
Create array context.
-
#_content ⇒ Hash | nil
Getter for ‘@content`.
-
#call(obj = nil, &block) ⇒ Object
Mixin / Scoping.
-
#initialize(object, content) ⇒ Builder
constructor
Initializer.
Constructor Details
#initialize(object, content) ⇒ Builder
Initializer
35 36 37 38 |
# File 'lib/jsonity/builder.rb', line 35 def initialize(object, content) @object, @content = object, content @deferred_array_blocks = {} end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &block) ⇒ Object (private)
Handle ghost methods
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/jsonity/builder.rb', line 87 def method_missing(name, *args, &block) name = name.to_s is_object = name.match OBJECT_SUFFIX name, is_object = name[0..-2], is_object[0] if is_object = args.last.is_a?(::Hash) ? args.pop.dup : {} [:_object] = args[0] [:_nullable] = ('?' == is_object) if @array @array = false if is_object array name, , &block else ::Kernel.raise UnexpectedNodeOnArrayError.new("Unexpected attribute node `#{name}`") end else if is_object hash name, , &block else attribute name, , &block end end self end |
Class Method Details
.build(object = nil, content = nil, &block) ⇒ Hash
Build Jsonity
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/jsonity/builder.rb', line 13 def self.build(object = nil, content = nil, &block) content = {} unless content.is_a?(::Hash) builder = new object, content if object.respond_to? :json_attributes object.json_attributes.each { |a| builder.__send__(:attribute, a, {}) } end if object.respond_to? :json_attribute_blocks object.json_attribute_blocks.each { |b| builder.(&b) } end builder.(&block) builder._content end |
Instance Method Details
#<=(obj) ⇒ Object
Set ‘obj` for the object
43 44 45 |
# File 'lib/jsonity/builder.rb', line 43 def <=(obj) @object = obj end |
#[] ⇒ Jsonity::Builder
Create array context
52 53 54 55 |
# File 'lib/jsonity/builder.rb', line 52 def [] @array = true self end |
#_content ⇒ Hash | nil
Getter for ‘@content`
76 77 78 79 |
# File 'lib/jsonity/builder.rb', line 76 def _content evaluate_array_blocks! @content end |