Class: Optimistic::Json::Parser
- Inherits:
-
Object
- Object
- Optimistic::Json::Parser
- Defined in:
- lib/optimistic/json/parser.rb
Overview
The main parser class
Defined Under Namespace
Classes: InvalidToken, MissingParser
Constant Summary collapse
- TOKENS =
{ space: [" ", "\t", "\r", "\n"], array: ["["], object: ["{"], number: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", "-"], string: ['"'], true: ["t"], false: ["f"], null: ["n"] }.freeze
Instance Attribute Summary collapse
-
#logger ⇒ Object
: Logger.
-
#parsers ⇒ Object
readonly
: Hash[String, Method].
Instance Method Summary collapse
-
#handle_remaining_tokens(tokens, data, remaining_tokens) ⇒ Object
: (String tokens, untyped data, String remaining_tokens) -> void.
-
#initialize(logger: nil) ⇒ Parser
constructor
: (?logger: Logger?) -> void.
-
#parse(tokens) ⇒ Object
: (String tokens) -> untyped.
Constructor Details
#initialize(logger: nil) ⇒ Parser
: (?logger: Logger?) -> void
49 50 51 52 |
# File 'lib/optimistic/json/parser.rb', line 49 def initialize(logger: nil) @logger = logger || ::Logger.new($stdout) @parsers = setup_parsers end |
Instance Attribute Details
#logger ⇒ Object
: Logger
44 45 46 |
# File 'lib/optimistic/json/parser.rb', line 44 def logger @logger end |
#parsers ⇒ Object (readonly)
: Hash[String, Method]
46 47 48 |
# File 'lib/optimistic/json/parser.rb', line 46 def parsers @parsers end |
Instance Method Details
#handle_remaining_tokens(tokens, data, remaining_tokens) ⇒ Object
: (String tokens, untyped data, String remaining_tokens) -> void
70 71 72 |
# File 'lib/optimistic/json/parser.rb', line 70 def handle_remaining_tokens(tokens, data, remaining_tokens) logger.info({ tokens: tokens, data: data, remaining_tokens: remaining_tokens }) end |
#parse(tokens) ⇒ Object
: (String tokens) -> untyped
55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/optimistic/json/parser.rb', line 55 def parse(tokens) ::MultiJson.load(tokens) rescue ::MultiJson::ParseError => e result = parse_any(tokens, e) if result[:remainder].length.positive? logger.warn("Unable to parse the following JSON: #{result[:remainder]}") handle_remaining_tokens(tokens, result[:data], result[:remainder]) end result[:data] end |