Class: Eco::Language::Models::ParserSerializer

Inherits:
Object
  • Object
show all
Defined in:
lib/eco/language/models/parser_serializer.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attr, dependencies: {}) ⇒ ParserSerializer

Parser/seralizer. parsing or serializing functions.

Parameters:

  • attr (String, Symbol)

    name of the parsed/serialized.

  • dependencies (Hash) (defaults to: {})

    provisioning of default dependencies that will be required when calling back to the



13
14
15
16
# File 'lib/eco/language/models/parser_serializer.rb', line 13

def initialize(attr, dependencies: {})
  @attr = attr
  @dependencies = dependencies
end

Instance Attribute Details

#attrObject (readonly)

Returns the value of attribute attr.



7
8
9
# File 'lib/eco/language/models/parser_serializer.rb', line 7

def attr
  @attr
end

Instance Method Details

#def_parser {|source_data, dependencies| ... } ⇒ Object

Note:
  1. the block should expect one or two parameters.
  2. the final dependencies is a merge of default dependencies with parse call dependencies.

Defines the parser of the attribute.

Yields:

  • (source_data, dependencies)

    user defined parser that returns the parsed value.

Yield Parameters:

  • source_data (Any)

    source data that will be parsed.

  • dependencies (Hash)

    hash with the provisioned dependencies.



25
26
27
28
# File 'lib/eco/language/models/parser_serializer.rb', line 25

def def_parser(&block)
  @parser = block
  self
end

#def_serializer {|source_data, dependencies| ... } ⇒ Object

Note:
  1. the block should expect one or two parameters.
  2. the final dependencies is a merge of default dependencies with serialize call dependencies.

Defines the serializer of the attribute.

Yields:

  • (source_data, dependencies)

    user defined serialiser that returns the serialised value.

Yield Parameters:

  • source_data (Any)

    source data that will be serialised.

  • dependencies (Hash)

    hash with the provisioned dependencies.



37
38
39
40
# File 'lib/eco/language/models/parser_serializer.rb', line 37

def def_serializer(&block)
  @serializer = block
  self
end

#parse(source, dependencies: {}) ⇒ Object

Note:
  • the method depenencies override keys of the default dependencies.

Calls the parser of this attribute by passing source and resolved dependencies.

Parameters:

  • source (Any)

    source data to be parsed.

  • dependencies (Hash) (defaults to: {})

    additional dependencies that should be merged to the default dependencies.

Raises:

  • (Exception)

    when there is no parser defined.



48
49
50
51
# File 'lib/eco/language/models/parser_serializer.rb', line 48

def parse(source, dependencies: {})
  raise "There is no parser for this attribue '#{attr}'" if !@parser
  @parser.call(source, @dependencies.merge(dependencies), attr)
end

#serialize(object, dependencies: {}) ⇒ Object

Note:
  • the method depenencies override keys of the default dependencies.

Calls the serializer of this attribute by passing object and resolved dependencies.

Parameters:

  • object (Any)

    source data to be serialized.

  • dependencies (Hash) (defaults to: {})

    additional dependencies that should be merged to the default dependencies.

Raises:

  • (Exception)

    when there is no serializer defined.



59
60
61
62
# File 'lib/eco/language/models/parser_serializer.rb', line 59

def serialize(object, dependencies: {})
  raise "There is no serializer for this attribue '#{attr}'" if !@serializer
  @serializer.call(object, @dependencies.merge(dependencies), attr)
end