Class: Eco::Language::Models::ParserSerializer
- Inherits:
-
Object
- Object
- Eco::Language::Models::ParserSerializer
- Defined in:
- lib/eco/language/models/parser_serializer.rb
Overview
Basic class to define a parser/serializing framework
Direct Known Subclasses
Instance Attribute Summary collapse
-
#attr ⇒ String, Symbol
readonly
the attribute this parser/serializer is linked to.
Instance Method Summary collapse
-
#def_parser(category = :default) {|source_data, dependencies| ... } ⇒ Object
Defines the parser of the attribute.
-
#def_serializer(category = :default) {|source_data, dependencies| ... } ⇒ Object
Defines the serializer of the attribute.
-
#initialize(attr, dependencies: {}) ⇒ ParserSerializer
constructor
Parser/seralizer.
-
#parse(source, category = :default, dependencies: {}) ⇒ Object
Calls the
parser
of this attribute by passingsource
and resolved dependencies. -
#parser_category?(category = :default) ⇒ Boolean
Checks if there's a
parser
defined forcategory
. -
#serialize(object, category = :default, dependencies: {}) ⇒ Object
Calls the
serializer
of this attribute by passingobject
and resolved dependencies. -
#serializer_category?(category = :default) ⇒ Boolean
Checks if there's a
serializer
defined forcategory
.
Constructor Details
#initialize(attr, dependencies: {}) ⇒ ParserSerializer
Parser/seralizer.
13 14 15 16 17 18 |
# File 'lib/eco/language/models/parser_serializer.rb', line 13 def initialize(attr, dependencies: {}) @attr = attr @dependencies = dependencies @parser = {} @serializer = {} end |
Instance Attribute Details
#attr ⇒ String, Symbol (readonly)
the attribute this parser/serializer is linked to.
6 7 8 |
# File 'lib/eco/language/models/parser_serializer.rb', line 6 def attr @attr end |
Instance Method Details
#def_parser(category = :default) {|source_data, dependencies| ... } ⇒ Object
- the block should expect one or two parameters.
- the final dependencies is a merge of default dependencies with
parse
call dependencies.
Defines the parser of the attribute.
28 29 30 31 |
# File 'lib/eco/language/models/parser_serializer.rb', line 28 def def_parser(category = :default, &block) @parser[category.to_sym] = block self end |
#def_serializer(category = :default) {|source_data, dependencies| ... } ⇒ Object
- the block should expect one or two parameters.
- the final dependencies is a merge of default dependencies with
serialize
call dependencies.
Defines the serializer of the attribute.
41 42 43 44 |
# File 'lib/eco/language/models/parser_serializer.rb', line 41 def def_serializer(category = :default, &block) @serializer[category.to_sym] = block self end |
#parse(source, category = :default, dependencies: {}) ⇒ Object
- the method depenencies override keys of the default dependencies.
Calls the parser
of this attribute by passing source
and resolved dependencies.
52 53 54 55 |
# File 'lib/eco/language/models/parser_serializer.rb', line 52 def parse(source, category = :default, dependencies: {}) raise "There is no parser of type '#{category}' for this attribue '#{attr}'" unless parser_category?(category) call_block(source, @dependencies.merge(dependencies), attr, &@parser[category.to_sym]) end |
#parser_category?(category = :default) ⇒ Boolean
Checks if there's a parser
defined for category
70 71 72 |
# File 'lib/eco/language/models/parser_serializer.rb', line 70 def parser_category?(category = :default) @parser.key?(category.to_sym) end |
#serialize(object, category = :default, dependencies: {}) ⇒ Object
- the method depenencies override keys of the default dependencies.
Calls the serializer
of this attribute by passing object
and resolved dependencies.
63 64 65 66 |
# File 'lib/eco/language/models/parser_serializer.rb', line 63 def serialize(object, category = :default, dependencies: {}) raise "There is no serializer of type '#{category}' for this attribue '#{attr}'" unless serializer_category?(category) call_block(object, @dependencies.merge(dependencies), attr, &@serializer[category.to_sym]) end |
#serializer_category?(category = :default) ⇒ Boolean
Checks if there's a serializer
defined for category
76 77 78 |
# File 'lib/eco/language/models/parser_serializer.rb', line 76 def serializer_category?(category = :default) @serializer.key?(category.to_sym) end |