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