Class: Tr8n::RussianNumericRule

Inherits:
NumericRule show all
Defined in:
app/models/tr8n/integration/ru/russian_numeric_rule.rb

Overview

This is an example of how you could implement the transform function for the default transform_tokens if your default site language is Russian

Class Method Summary collapse

Methods inherited from NumericRule

default_rules_for, dependency, #describe_partial_rule, description, #description, #evaluate, evaluate_rule_fragment, #humanize_description, #humanize_values, humanize_values, number_token_value, #number_token_value, operator_options, rule_options, #sanitize_values, sanitize_values, suffixes, #to_hash

Methods inherited from LanguageRule

by_id, #clear_cache, create_from_sync_hash, #definition, dependant?, dependency, dependency_label, #description, #destroy_with_log!, #evaluate, for, humanize_values, keyword, options, sanitize_values, #save_with_log!, suffixes, #to_sync_hash, #token_description, transformable?

Class Method Details

.default_transform(*args) ⇒ Object

params: [singular form, plural form1, plural form2]



56
57
58
59
60
61
62
# File 'app/models/tr8n/integration/ru/russian_numeric_rule.rb', line 56

def self.default_transform(*args)
  if args.size != 3
    raise Tr8n::Exception.new("Invalid transform arguments for number token")
  end
  
  args[2]
end

.transform(*args) ⇒ Object

FORM: [object, (ends in 1, but not in 11), (ends in 2, 3, 4 and is not 12, 13, 14), (ends in 0, 5, 6, 7, 8, 9, 11, 12, 13, 14)] | собака, собаки, собак | сообщение, сообщения, сообщений



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'app/models/tr8n/integration/ru/russian_numeric_rule.rb', line 33

def self.transform(*args)
  if args.size != 4
    raise Tr8n::Exception.new("Invalid transform arguments for number token")
  end
  
  object = args[0]
  object_value = number_token_value(object)
  unless object_value
    raise Tr8n::Exception.new("Token #{object.class.name} does not respond to #{Tr8n::Config.rules_engine[:numeric_rule][:object_method]}")
  end

  string_value = object_value.to_s

  if string_value.last == "1" and string_value != "11"
    return args[1]
  elsif ['2', '3', '4'].include?(string_value.last) and not ['12', '13', '14'].include?(string_value)
    return args[2]
  end
  
  args[3]
end