class Railroader::Constants
Constants
- LITERALS
Public Class Methods
constant_as_array(exp)
click to toggle source
# File lib/railroader/tracker/constants.rb, line 130 def self.constant_as_array exp res = [] while exp if exp.is_a? Sexp case exp.node_type when :const res << exp.value exp = nil when :colon3 res << exp.value << :"" exp = nil when :colon2 res << exp.last exp = exp[1] else res << exp exp = nil end else res << exp exp = nil end end res.reverse! res end
get_constant_base_name(exp)
click to toggle source
# File lib/railroader/tracker/constants.rb, line 158 def self.get_constant_base_name exp return exp unless exp.is_a? Sexp case exp.node_type when :const, :colon3 exp.value when :colon2 exp.last else exp end end
new()
click to toggle source
# File lib/railroader/tracker/constants.rb, line 51 def initialize @constants = Hash.new { |h, k| h[k] = [] } end
Public Instance Methods
[](exp)
click to toggle source
# File lib/railroader/tracker/constants.rb, line 59 def [] exp return unless constant? exp match = find_constant exp if match match.value else nil end end
add(name, value, context = nil)
click to toggle source
# File lib/railroader/tracker/constants.rb, line 100 def add name, value, context = nil if call? value and value.method == :freeze value = value.target end base_name = Constants.get_constant_base_name(name) @constants[base_name] << Constant.new(name, value, context) end
each() { |constant| ... }
click to toggle source
# File lib/railroader/tracker/constants.rb, line 122 def each @constants.each do |name, values| values.each do |constant| yield constant end end end
find_all(exp)
click to toggle source
# File lib/railroader/tracker/constants.rb, line 95 def find_all exp base_name = Constants.get_constant_base_name(exp) @constants[base_name] end
find_constant(exp)
click to toggle source
# File lib/railroader/tracker/constants.rb, line 70 def find_constant exp base_name = Constants.get_constant_base_name(exp) if @constants.key? base_name @constants[base_name].find do |c| if c.match? exp return c end end name_array = Constants.constant_as_array(exp) # Avoid losing info about dynamic constant values return unless name_array.all? { |n| constant? n or n.is_a? Symbol } @constants[base_name].find do |c| if c.match? name_array return c end end end nil end
get_literal(name)
click to toggle source
# File lib/railroader/tracker/constants.rb, line 114 def get_literal name if x = self[name] and literal? x x else nil end end
literal?(exp)
click to toggle source
# File lib/railroader/tracker/constants.rb, line 110 def literal? exp exp.is_a? Sexp and LITERALS.include? exp.node_type end
size()
click to toggle source
# File lib/railroader/tracker/constants.rb, line 55 def size @constants.length end