class Tml::LanguageContext

Public Class Methods

new(attrs = {}) click to toggle source
Calls superclass method Tml::Base::new
# File lib/tml/language_context.rb, line 38
def initialize(attrs = {})
  super

  self.attributes[:rules] = {}
  if hash_value(attrs, :rules)
    hash_value(attrs, :rules).each do |key, rule|
      self.attributes[:rules][key] = Tml::LanguageContextRule.new(rule.merge(
       :keyword => key,
       :language_context => self
      ))
    end
  end
end

Public Instance Methods

applies_to_token?(token) click to toggle source
# File lib/tml/language_context.rb, line 65
def applies_to_token?(token)
  token_expression.match(token) != nil
end
config() click to toggle source
# File lib/tml/language_context.rb, line 52
def config
  context_rules = Tml.config.context_rules
  hash_value(context_rules, self.keyword.to_sym) || {}
end
fallback_rule() click to toggle source
# File lib/tml/language_context.rb, line 69
def fallback_rule
  @fallback_rule ||= rules.values.detect{|rule| rule.fallback?}
end
find_matching_rule(obj) click to toggle source
# File lib/tml/language_context.rb, line 108
def find_matching_rule(obj)
  token_vars = vars(obj)
  rules.values.each do |rule|
    next if rule.fallback?
    return rule if rule.evaluate(token_vars)
  end
  fallback_rule
end
token_expression() click to toggle source
# File lib/tml/language_context.rb, line 57
def token_expression
  @token_expression ||= begin
    exp = self.attributes[:token_expression]
    exp = Regexp.new(exp[1..-2])
    exp
  end
end
vars(obj) click to toggle source

prepare variables for evaluation

# File lib/tml/language_context.rb, line 74
def vars(obj)
  vars = {}

  variables.each do |key|
    method = hash_value(config, "variables.#{key}")
    unless method
      vars[key] = obj
      next
    end

    if method.is_a?(String)
      if obj.is_a?(Hash)
        object = hash_value(obj, 'object') || obj
        if object.is_a?(Hash)
          vars[key] = hash_value(object, method, :whole => true)
        else
          vars[key] = object.send(method)
        end
      elsif obj.is_a?(String)
        vars[key] = obj
      else
        vars[key] = obj.send(method)
      end
    elsif method.is_a?(Proc)
      vars[key] = method.call(obj)
    else
      vars[key] = obj
    end

    vars[key] = vars[key].to_s if vars[key].is_a?(Symbol)
  end
  vars
end