class TwitterCldr::Transforms::Transformer
Constants
- RULE_CLASSES
Attributes
direction[R]
rules[R]
transform_id[R]
Private Class Methods
build(rule_list, direction)
click to toggle source
# File lib/twitter_cldr/transforms/transformer.rb, line 70 def build(rule_list, direction) rules = parse_rules(rule_list) new(rules, direction) end
direction_from(resource)
click to toggle source
# File lib/twitter_cldr/transforms/transformer.rb, line 75 def direction_from(resource) case transform_from(resource)[:direction] when 'both' :bidirectional else :forward end end
each_transform() { |aliass| ... }
click to toggle source
# File lib/twitter_cldr/transforms/transformer.rb, line 41 def each_transform if block_given? TransformId.transform_id_map.each do |aliass, _| yield aliass end else to_enum(__method__) end end
exists?(transform_id_or_str)
click to toggle source
# File lib/twitter_cldr/transforms/transformer.rb, line 21 def exists?(transform_id_or_str) !!get(transform_id_or_str) rescue false end
get(transform_id_or_str)
click to toggle source
# File lib/twitter_cldr/transforms/transformer.rb, line 27 def get(transform_id_or_str) id = parse_id(transform_id_or_str) if resource_exists?(id) load(id).forward_rule_set else reversed_id = id.reverse if resource_exists?(reversed_id) load(reversed_id).backward_rule_set end end end
identify_class(rule_text)
click to toggle source
# File lib/twitter_cldr/transforms/transformer.rb, line 122 def identify_class(rule_text) RULE_CLASSES.find do |klass| klass.accepts?(rule_text) end end
load(transform_id)
click to toggle source
# File lib/twitter_cldr/transforms/transformer.rb, line 62 def load(transform_id) transformers[transform_id.to_s] ||= begin resource = resource_for(transform_id) direction = direction_from(resource) new(parse_resource(resource), direction, transform_id) end end
new(rules, direction, transform_id)
click to toggle source
# File lib/twitter_cldr/transforms/transformer.rb, line 151 def initialize(rules, direction, transform_id) @rules = rules @direction = direction @transform_id = transform_id end
parse_each_rule(rule_list, symbol_table) { |rule| ... }
click to toggle source
# File lib/twitter_cldr/transforms/transformer.rb, line 107 def parse_each_rule(rule_list, symbol_table) rule_list.each_with_index do |rule_text, idx| if klass = identify_class(rule_text) rule = klass.parse( rule_text, symbol_table, idx ) yield rule else raise InvalidTransformRuleError, "Invalid rule: '#{rule_text}'" end end end
parse_id(transform_id)
click to toggle source
# File lib/twitter_cldr/transforms/transformer.rb, line 53 def parse_id(transform_id) case transform_id when TransformId transform_id else TransformId.parse(transform_id) end end
parse_resource(resource)
click to toggle source
# File lib/twitter_cldr/transforms/transformer.rb, line 88 def parse_resource(resource) parse_rules(rules_from(resource)) end
parse_rules(rule_list)
click to toggle source
# File lib/twitter_cldr/transforms/transformer.rb, line 92 def parse_rules(rule_list) symbol_table = {} rules = [] parse_each_rule(rule_list, symbol_table) do |rule| if rule.is_variable? symbol_table[rule.name] = rule elsif !rule.is_comment? rules << rule end end rules end
resource_exists?(transform_id)
click to toggle source
# File lib/twitter_cldr/transforms/transformer.rb, line 142 def resource_exists?(transform_id) TwitterCldr.resource_exists?( 'shared', 'transforms', transform_id.file_name ) end
resource_for(transform_id)
click to toggle source
# File lib/twitter_cldr/transforms/transformer.rb, line 136 def resource_for(transform_id) TwitterCldr.get_resource( 'shared', 'transforms', transform_id.file_name ) end
rules_from(resource)
click to toggle source
# File lib/twitter_cldr/transforms/transformer.rb, line 128 def rules_from(resource) transform_from(resource)[:rules] end
transform_from(resource)
click to toggle source
# File lib/twitter_cldr/transforms/transformer.rb, line 132 def transform_from(resource) resource[:transforms].first end
transformers()
click to toggle source
# File lib/twitter_cldr/transforms/transformer.rb, line 84 def transformers @transformers ||= {} end
Private Instance Methods
backward_rule_set()
click to toggle source
# File lib/twitter_cldr/transforms/transformer.rb, line 166 def backward_rule_set if bidirectional? @backward_rule_set ||= forward_rule_set.invert else raise NotInvertibleError, "cannot invert this #{self.class.name}" end end
bidirectional?()
click to toggle source
all rules are either forward or bidirectional
# File lib/twitter_cldr/transforms/transformer.rb, line 158 def bidirectional? direction == :bidirectional end
forward_rule_set()
click to toggle source
# File lib/twitter_cldr/transforms/transformer.rb, line 162 def forward_rule_set @forward_rule_set ||= RuleSet.new(rules, transform_id) end