Class: Tr8n::LanguageRule

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/tr8n/language_rule.rb

Overview

– Copyright © 2010-2012 Michael Berkovich, tr8n.net

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++

– Tr8n::LanguageRule Schema Information

Table name: tr8n_language_rules

id               INTEGER         not null, primary key
language_id      integer         not null
translator_id    integer         
type             varchar(255)    
definition       text            
created_at       datetime        
updated_at       datetime

Indexes

index_tr8n_language_rules_on_language_id_and_translator_id    (language_id, translator_id) 
index_tr8n_language_rules_on_language_id                      (language_id)

++

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.by_id(rule_id) ⇒ Object



61
62
63
64
65
# File 'app/models/tr8n/language_rule.rb', line 61

def self.by_id(rule_id)
  Tr8n::Cache.fetch("language_rule_#{rule_id}") do 
    find_by_id(rule_id)
  end
end

.create_from_sync_hash(lang, translator, rule_hash, opts = {}) ⇒ Object

“label”=>“{count сообщения”, “rank”=>1, “rules”=>[

   {"token"=>"count", "type"=>"number", "definition"=>
        {"multipart"=>true, "part1"=>"ends_in", "value1"=>"2,3,4", "operator"=>"and", "part2"=>"does_not_end_in", "value2"=>"12,13,14"}
   }
]

}



164
165
166
167
168
169
170
171
172
173
174
175
# File 'app/models/tr8n/language_rule.rb', line 164

def self.create_from_sync_hash(lang, translator, rule_hash, opts = {})
  return unless rule_hash["token"] and rule_hash["type"] and rule_hash["definition"]

  rule_class = Tr8n::Config.language_rule_dependencies[rule_hash["type"]]
  return unless rule_class # unsupported rule type, skip this completely
  
  rule_class.for(lang).each do |rule|
    return rule if rule.definition == rule_hash["definition"]
  end
  
  rule_class.create(:language => lang, :translator => translator, :definition => rule_hash["definition"])
end

.dependant?(token) ⇒ Boolean

Returns:

  • (Boolean)


79
80
81
# File 'app/models/tr8n/language_rule.rb', line 79

def self.dependant?(token)
  token.dependency == dependency or suffixes.include?(token.suffix)
end

.dependencyObject

TDOD: switch to using keyword

Raises:



88
89
90
# File 'app/models/tr8n/language_rule.rb', line 88

def self.dependency
  raise Tr8n::Exception.new("This method must be implemented in the extending rule") 
end

.dependency_labelObject

TDOD: switch to using keyword



93
94
95
# File 'app/models/tr8n/language_rule.rb', line 93

def self.dependency_label
  dependency
end

.for(language) ⇒ Object



67
68
69
# File 'app/models/tr8n/language_rule.rb', line 67

def self.for(language)
  self.where("language_id = ?", language.id)
end

.humanize_values(values) ⇒ Object



102
103
104
# File 'app/models/tr8n/language_rule.rb', line 102

def self.humanize_values(values)
  sanitize_values(values).join(", ")
end

.keywordObject



83
84
85
# File 'app/models/tr8n/language_rule.rb', line 83

def self.keyword
  dependency
end

.optionsObject



71
72
73
# File 'app/models/tr8n/language_rule.rb', line 71

def self.options
  @options ||= Tr8n::Config.language_rule_classes.collect{|kls| [kls.dependency_label, kls.name]}
end

.sanitize_values(values) ⇒ Object



97
98
99
100
# File 'app/models/tr8n/language_rule.rb', line 97

def self.sanitize_values(values)
  return [] unless values
  values.split(",").collect{|val| val.strip} 
end

.suffixesObject



75
76
77
# File 'app/models/tr8n/language_rule.rb', line 75

def self.suffixes
  []  
end

.transformable?Boolean

Returns:

  • (Boolean)


118
119
120
# File 'app/models/tr8n/language_rule.rb', line 118

def self.transformable?
  true
end

Instance Method Details

#clear_cacheObject



142
143
144
# File 'app/models/tr8n/language_rule.rb', line 142

def clear_cache
  Tr8n::Cache.delete("language_rule_#{id}")
end

#definitionObject



57
58
59
# File 'app/models/tr8n/language_rule.rb', line 57

def definition
  @indifferent_def ||= HashWithIndifferentAccess.new(super)
end

#descriptionObject

Raises:



110
111
112
# File 'app/models/tr8n/language_rule.rb', line 110

def description
  raise Tr8n::Exception.new("This method must be implemented in the extending rule") 
end

#destroy_with_log!(new_translator) ⇒ Object



136
137
138
139
140
# File 'app/models/tr8n/language_rule.rb', line 136

def destroy_with_log!(new_translator)
  new_translator.deleted_language_rule!(self)
  
  destroy
end

#evaluate(token_value) ⇒ Object

Raises:



106
107
108
# File 'app/models/tr8n/language_rule.rb', line 106

def evaluate(token_value)
  raise Tr8n::Exception.new("This method must be implemented in the extending rule") 
end

#save_with_log!(new_translator) ⇒ Object



122
123
124
125
126
127
128
129
130
131
132
133
134
# File 'app/models/tr8n/language_rule.rb', line 122

def save_with_log!(new_translator)
  if self.id
    if changed?
      self.translator = new_translator
      translator.updated_language_rule!(self)
    end
  else  
    self.translator = new_translator
    translator.added_language_rule!(self)
  end

  save  
end

#to_sync_hash(token, opts = {}) ⇒ Object

Synchronization Methods



149
150
151
152
153
154
155
# File 'app/models/tr8n/language_rule.rb', line 149

def to_sync_hash(token, opts = {})
  {
    "token" => token,  
    "type" => self.class.keyword,
    "definition" => definition
  }
end

#token_descriptionObject

Raises:



114
115
116
# File 'app/models/tr8n/language_rule.rb', line 114

def token_description
  raise Tr8n::Exception.new("This method must be implemented in the extending rule") 
end