Sha256: c10e6c6b58ff53f68e6079f8abc99b672137656838231044516ae2b6bea0f0c7
Contents?: true
Size: 1.26 KB
Versions: 115
Compression:
Stored size: 1.26 KB
Contents
module Regexp::Expression module Shared module ClassMethods # Convenience method to init a valid Expression without a Regexp::Token def construct(params = {}) attrs = construct_defaults.merge(params) options = attrs.delete(:options) token_args = Regexp::TOKEN_KEYS.map { |k| attrs.delete(k) } token = Regexp::Token.new(*token_args) raise ArgumentError, "unsupported attribute(s): #{attrs}" if attrs.any? new(token, options) end def construct_defaults if self == Root { type: :expression, token: :root, ts: 0 } elsif self < Sequence { type: :expression, token: :sequence } else { type: token_class::Type } end.merge(level: 0, set_level: 0, conditional_level: 0, text: '') end def token_class if self == Root || self < Sequence nil # no token class because these objects are Parser-generated # TODO: synch exp class, token class & type names for this in v3.0.0 elsif self == CharacterType::Any Regexp::Syntax::Token::Meta else Regexp::Syntax::Token.const_get(name.split('::')[2]) end end end def token_class self.class.token_class end end end
Version data entries
115 entries across 114 versions & 18 rubygems