class Tr8n::LanguageContext
Public Class Methods
new(attrs = {})
click to toggle source
Calls superclass method
Tr8n::Base::new
# File lib/tr8n/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] = Tr8n::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/tr8n/language_context.rb, line 65 def applies_to_token?(token) token_expression.match(token) != nil end
config()
click to toggle source
# File lib/tr8n/language_context.rb, line 52 def config context_rules = Tr8n.config.context_rules hash_value(context_rules, self.keyword.to_sym) || {} end
fallback_rule()
click to toggle source
# File lib/tr8n/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/tr8n/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/tr8n/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/tr8n/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