Class: RFC8259::Object
Overview
The Objects, as described in RFC8259 section 4.
Class Method Summary collapse
-
.from_ast(ast) ⇒ Object
Parse the AST from parser, and convert into corrsponding values.
Instance Method Summary collapse
-
#[](key) ⇒ [Value]
fetch the key.
-
#each_pair {|key, value| ... } ⇒ Object
(also: #each)
iterates over the pairs.
-
#inspect ⇒ ::String
The object in string.
-
#plain_old_ruby_object ⇒ ::Hash
(also: #to_h, #to_hash)
Converted object.
-
#pretty_print(pp) ⇒ Object
For pretty print.
Class Method Details
.from_ast(ast) ⇒ Object
Parse the AST from parser, and convert into corrsponding values.
41 42 43 44 45 46 47 48 49 50 |
# File 'lib/RFC8259/object.rb', line 41 def self.from_ast ast type, *assoc = *ast raise ArgumentError, "not an object: #{ast.inspect}" if type != :object assoc.map! do |a| a.map! do |b| RFC8259::Value.from_ast b end end new assoc end |
Instance Method Details
#[](key) ⇒ [Value]
Note:
RFC8259 allows identical key to appear multiple times in an object.
Note:
This is O(1)
fetch the key.
57 58 59 60 61 |
# File 'lib/RFC8259/object.rb', line 57 def [] key ret = @assoc.select do |(k, _)| k == key end ret.map! do |(_, v)| v end return ret end |
#each_pair {|key, value| ... } ⇒ Object Also known as: each
iterates over the pairs.
65 66 67 68 69 70 71 72 |
# File 'lib/RFC8259/object.rb', line 65 def each_pair &b e = Enumerator.new do |y| @assoc.each do |a| y << a end end return block_given? ? e.each(&b) : e end |
#inspect ⇒ ::String
Returns the object in string.
96 97 98 99 100 101 102 |
# File 'lib/RFC8259/object.rb', line 96 def inspect hdr = sprintf "#<%p:%#016x {", self.class, self.object_id << 1 map = @assoc.map do |(k, v)| sprintf '%p: %p', k.to_s, v end.join ', ' hdr << map << '}>' end |
#plain_old_ruby_object ⇒ ::Hash Also known as: to_h, to_hash
Returns converted object.
78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/RFC8259/object.rb', line 78 def plain_old_ruby_object ret = Hash.new @assoc.each do |(k, v)| kk = k.plain_old_ruby_object if ret.include? kk raise RuntimeError, "key #{kk} conflict." else vv = v.plain_old_ruby_object ret.store kk, vv end end return ret end |
#pretty_print(pp) ⇒ Object
For pretty print
106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/RFC8259/object.rb', line 106 def pretty_print pp hdr = sprintf '#<%p:%#016x', self.class, self.object_id << 1 pp.group 1, hdr, '>' do pp.text ' ' RFC8259::Dumper.kandr pp, 1, @assoc.each, '{', '}' do |(i, j)| i.pretty_print pp pp.text ': ' j.pretty_print pp end end end |