class PlaceholderPattern
Implements using a pattern that has not been defined
Public Class Methods
new(placeholder, deep_clone = nil, original_arguments = nil)
click to toggle source
Constructs a new placeholder pattern @overload initialize(placeholder)
@param [Symbol] placeholder the name to replace with
@overload initialize(opts, deep_clone, original)
@param (see PatternBase#initialize)
Calls superclass method
PatternBase::new
# File lib/ruby_grammar_builder/pattern_extensions/placeholder.rb, line 15 def initialize(placeholder, deep_clone = nil, original_arguments = nil) if deep_clone == :deep_clone super(placeholder, deep_clone, original_arguments) else super( match: Regexp.new("placeholder(?##{placeholder})"), placeholder: placeholder ) end end
Public Instance Methods
evaluate(groups = nil)
click to toggle source
(see PatternBase#evaluate
) @note this raises a runtime error if the pattern has not been resolved
Calls superclass method
PatternBase#evaluate
# File lib/ruby_grammar_builder/pattern_extensions/placeholder.rb, line 49 def evaluate(groups = nil) if @match.is_a?(String) && @match.start_with?("placeholder") raise "Attempting to evaluate an unresolved placeholder `:#{@arguments[:placeholder]}'" end super(groups) end
resolve!(repository)
click to toggle source
Resolves the placeholder
@param [Hash] repository the repository to use to resolve the placeholder
@return [self]
# File lib/ruby_grammar_builder/pattern_extensions/placeholder.rb, line 64 def resolve!(repository) unless repository[@arguments[:placeholder]].is_a? PatternBase raise ":#{@arguments[:placeholder]} is not a pattern and cannot be substituted" end @match = repository[@arguments[:placeholder]].__deep_clone__ self # repository[@arguments[:placeholder]].resolve(repository) end
to_s(depth = 0, top_level = true)
click to toggle source
(see PatternBase#to_s
)
Calls superclass method
PatternBase#to_s
# File lib/ruby_grammar_builder/pattern_extensions/placeholder.rb, line 27 def to_s(depth = 0, top_level = true) return super unless @match == "placeholder" output = top_level ? "placeholder(" : ".placeholder(" output += ":#{@arguments[:placeholder]})" output += @next_pattern.to_s(depth, false).lstrip if @next_pattern output end
to_tag()
click to toggle source
(see PatternBase#to_tag
) @note this raises a runtime error if the pattern has not been resolved
Calls superclass method
PatternBase#to_tag
# File lib/ruby_grammar_builder/pattern_extensions/placeholder.rb, line 38 def to_tag if @match.is_a?(String) && @match.start_with?("placeholder") placeholder = @arguments[:placeholder] raise "Attempting to create a tag from an unresolved placeholder `:#{placeholder}'" end super() end