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