class RbJSON5::EscapeSequence
@api private Utility class to unescape the given escape sequence
Constants
- ESCAPE_CHARACTERS
list of charactors needing escape
Public Class Methods
new(sequence, valid_patterns = [], &ifinvalid)
click to toggle source
@param sequence [Parslet::Slice]
escape sequence
@param valid_patterns [Array<Regexp>]
list of patterns for valid unescaped character
@yield [character, sequence]
call back block called when unespaced character is not matched with the given valid_patterns
@yieldparam character [String]
character unescaped from the given escape sequence
@yieldparam sequence [Parslet::Slice]
the given escape sequence
# File lib/rb_json5/escape_sequence.rb, line 18 def initialize(sequence, valid_patterns = [], &ifinvalid) @character = unescape(sequence.to_s) validate(@character, sequence, valid_patterns, ifinvalid) end
Public Instance Methods
to_s()
click to toggle source
returns the character unescaped from the given escape sequence
@return [String]
unescaped character
# File lib/rb_json5/escape_sequence.rb, line 27 def to_s @character end
Private Instance Methods
unescape(sequence)
click to toggle source
# File lib/rb_json5/escape_sequence.rb, line 40 def unescape(sequence) if ['x', 'u'].include?(sequence[1]) instance_eval("\"#{sequence}\"", __FILE__, __LINE__) else ESCAPE_CHARACTERS[sequence[1]] || sequence[1] end end
valid_character?(character, valid_patterns)
click to toggle source
# File lib/rb_json5/escape_sequence.rb, line 53 def valid_character?(character, valid_patterns) valid_patterns.empty? || valid_patterns.any? { |pattern| pattern.match?(character) } end
validate(character, sequence, valid_patterns, ifinvalid)
click to toggle source
# File lib/rb_json5/escape_sequence.rb, line 48 def validate(character, sequence, valid_patterns, ifinvalid) valid_character?(character, valid_patterns) || ifinvalid&.call(character, sequence) end