class Regexp::Syntax::Base

A lookup map of supported types and tokens in a given syntax

Attributes

features[RW]

Public Class Methods

added_features() click to toggle source
# File lib/regexp_parser/syntax/base.rb, line 46
def added_features
  @added_features ||= {}
end
check!(type, token)
Alias for: implements!
check?(type, token)
Alias for: implements?
excludes(type, tokens) click to toggle source
# File lib/regexp_parser/syntax/base.rb, line 26
def excludes(type, tokens)
  tokens.each { |tok| features[type].delete(tok) }
  removed_features[type] = tokens
end
implementations(type) click to toggle source
# File lib/regexp_parser/syntax/base.rb, line 36
def implementations(type)
  features[type] || []
end
implements(type, tokens) click to toggle source
# File lib/regexp_parser/syntax/base.rb, line 21
def implements(type, tokens)
  (features[type] ||= []).concat(tokens)
  added_features[type] = tokens
end
implements!(type, token) click to toggle source
# File lib/regexp_parser/syntax/base.rb, line 40
def implements!(type, token)
  raise NotImplementedError.new(self, type, token) unless
    implements?(type, token)
end
Also aliased as: check!
implements?(type, token) click to toggle source
# File lib/regexp_parser/syntax/base.rb, line 31
def implements?(type, token)
  implementations(type).include?(token)
end
Also aliased as: check?
inherited(subclass) click to toggle source

automatically inherit features through the syntax class hierarchy

Calls superclass method
# File lib/regexp_parser/syntax/base.rb, line 16
def inherited(subclass)
  super
  subclass.features = features.to_h.map { |k, v| [k, v.dup] }.to_h
end
new() click to toggle source

TODO: drop this backwards compatibility code in v3.0.0, do `private :new`

# File lib/regexp_parser/syntax/base.rb, line 99
def initialize
  warn 'Using instances of Regexp::Parser::Syntax is deprecated ' \
       "and will no longer be supported in v3.0.0."
end
normalize(type, token) click to toggle source
# File lib/regexp_parser/syntax/base.rb, line 54
def normalize(type, token)
  case type
  when :group
    normalize_group(type, token)
  when :backref
    normalize_backref(type, token)
  else
    [type, token]
  end
end
normalize_backref(type, token) click to toggle source
# File lib/regexp_parser/syntax/base.rb, line 74
def normalize_backref(type, token)
  case token
  when :name_ref_ab, :name_ref_sq
    %i[backref name_ref]
  when :name_call_ab, :name_call_sq
    %i[backref name_call]
  when :name_recursion_ref_ab, :name_recursion_ref_sq
    %i[backref name_recursion_ref]
  when :number_ref_ab, :number_ref_sq
    %i[backref number_ref]
  when :number_call_ab, :number_call_sq
    %i[backref number_call]
  when :number_rel_ref_ab, :number_rel_ref_sq
    %i[backref number_rel_ref]
  when :number_rel_call_ab, :number_rel_call_sq
    %i[backref number_rel_call]
  when :number_recursion_ref_ab, :number_recursion_ref_sq
    %i[backref number_recursion_ref]
  else
    [type, token]
  end
end
normalize_group(type, token) click to toggle source
# File lib/regexp_parser/syntax/base.rb, line 65
def normalize_group(type, token)
  case token
  when :named_ab, :named_sq
    %i[group named]
  else
    [type, token]
  end
end
removed_features() click to toggle source
# File lib/regexp_parser/syntax/base.rb, line 50
def removed_features
  @removed_features ||= {}
end

Public Instance Methods

method_missing(name, *args) click to toggle source
Calls superclass method
# File lib/regexp_parser/syntax/base.rb, line 104
def method_missing(name, *args)
  if self.class.respond_to?(name)
    warn 'Using instances of Regexp::Parser::Syntax is deprecated ' \
         "and will no longer be supported in v3.0.0. Please call "\
         "methods on the class directly, e.g.: #{self.class}.#{name}"
    self.class.send(name, *args)
  else
    super
  end
end
respond_to_missing?(name, include_private = false) click to toggle source
Calls superclass method
# File lib/regexp_parser/syntax/base.rb, line 115
def respond_to_missing?(name, include_private = false)
  self.class.respond_to?(name) || super
end