module Regexp::Syntax
Define the base module and the simplest of tokens.
After loading all the tokens the map is full. Extract all tokens and types into the All and Types constants.
Constants
- CURRENT
- VERSION_CONST_REGEXP
- VERSION_FORMAT
- VERSION_REGEXP
Public Instance Methods
Source
# File lib/regexp_parser/syntax/version_lookup.rb, line 63 def comparable(name) # add .99 to treat versions without a patch value as latest patch version Gem::Version.new((name.to_s.scan(/\d+/) << 99).join('.')) end
Source
# File lib/regexp_parser/syntax/version_lookup.rb, line 46 def const_missing(const_name) if const_name =~ VERSION_CONST_REGEXP return fallback_version_class(const_name) end super end
Calls superclass method
Source
# File lib/regexp_parser/syntax/version_lookup.rb, line 53 def fallback_version_class(version) sorted = (specified_versions + [version]).sort_by { |ver| comparable(ver) } index = sorted.index(version) index > 0 && const_get(sorted[index - 1]) end
Source
# File lib/regexp_parser/syntax/version_lookup.rb, line 24 def for(name) (@alias_map ||= {})[name] ||= version_class(name) end
Returns the syntax specification class for the given syntax version name. The special names βanyβ and β*β return Syntax::Any.
Source
# File lib/regexp_parser/syntax/version_lookup.rb, line 28 def new(name) warn 'Regexp::Syntax.new is deprecated in favor of Regexp::Syntax.for. '\ 'It does not return distinct instances and will be removed in v3.0.0.' self.for(name) end
Source
# File lib/regexp_parser/syntax/version_lookup.rb, line 59 def specified_versions constants.select { |const_name| const_name =~ VERSION_CONST_REGEXP } end
Source
# File lib/regexp_parser/syntax/version_lookup.rb, line 34 def supported?(name) name =~ VERSION_REGEXP && comparable(name) >= comparable('1.8.6') end
Source
# File lib/regexp_parser/syntax/version_lookup.rb, line 38 def version_class(version) return Regexp::Syntax::Any if ['*', 'any'].include?(version.to_s) version =~ VERSION_REGEXP || raise(InvalidVersionNameError, version) version_const_name = "V#{version.to_s.scan(/\d+/).join('_')}" const_get(version_const_name) || raise(UnknownSyntaxNameError, version) end