Class: Krikri::Parser::Value

Inherits:
Object
  • Object
show all
Defined in:
lib/krikri/parser.rb

Overview

A generic parser value.

Interface to a single value node which can access typed data values (e.g. String, DateTime, etc…) parsed from a string, and provides access to child nodes and attributes.

Direct Known Subclasses

JsonParser::Value, XmlParser::Value

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args, &block) ⇒ Object


97
98
99
100
# File 'lib/krikri/parser.rb', line 97

def method_missing(name, *args, &block)
  return attribute(name) if attribute?(name)
  super
end

Instance Method Details

#[](name) ⇒ Object

Property accessor interface. Passes `name` to the local implementation of #get_child_nodes.

Parameters:

  • name (#to_sym)

    a named property to access


43
44
45
# File 'lib/krikri/parser.rb', line 43

def [](name)
  get_child_nodes(name)
end

#attribute?(name) ⇒ Boolean

Queries whether `name` is an attribute of this node

Parameters:

  • name (#to_sym)

    an attribute name to query

Returns:

  • (Boolean)

    true if `name` is an attribute of the current node


89
90
91
92
93
94
95
# File 'lib/krikri/parser.rb', line 89

def attribute?(name)
  begin
    attributes.include?(name)
  rescue NotImplementedError
    false
  end
end

#attributesArray<Symbol>

This method is abstract.

Returns a list of attributes accessible on the node

Returns:

  • (Array<Symbol>)

    a list of attributes accessible on the node

Raises:

  • (NotImplementedError)

81
82
83
# File 'lib/krikri/parser.rb', line 81

def attributes
  raise NotImplementedError
end

#child?(name) ⇒ Boolean

Queries whether `name` is a subproperty of this node

Parameters:

  • name (#to_sym)

    a named property to query

Returns:

  • (Boolean)

    true if `name` is a subproperty of the current node


51
52
53
# File 'lib/krikri/parser.rb', line 51

def child?(name)
  children.include?(name)
end

#childrenArray<Symbol>

This method is abstract.

Returns a list of subproperties that can be passed back to #[] to access child nodes

Returns:

  • (Array<Symbol>)

    a list of subproperties that can be passed back to #[] to access child nodes

Raises:

  • (NotImplementedError)

59
60
61
# File 'lib/krikri/parser.rb', line 59

def children
  raise NotImplementedError
end

#respond_to_missing(method) ⇒ Object


102
103
104
# File 'lib/krikri/parser.rb', line 102

def respond_to_missing(method, *)
  attribute?(method) || super
end

#value<#to_s>

This method is abstract.

Returns typed value for the property

Returns:

  • (<#to_s>)

    typed value for the property

Raises:

  • (NotImplementedError)

66
67
68
# File 'lib/krikri/parser.rb', line 66

def value
  raise NotImplementedError
end

#values?Boolean

This method is abstract.

Returns true if this node has typed values accessible with #values

Returns:

  • (Boolean)

    true if this node has typed values accessible with #values

Raises:

  • (NotImplementedError)

74
75
76
# File 'lib/krikri/parser.rb', line 74

def values?
  raise NotImplementedError
end