Class: Tml::Source

Inherits:
Base
  • Object
show all
Defined in:
lib/tml/source.rb

Instance Attribute Summary

Attributes inherited from Base

#attributes

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

attributes, belongs_to, has_many, hash_value, #hash_value, #method_missing, #to_hash, #update_attributes

Constructor Details

#initialize(attrs = {}) ⇒ Source

Returns a new instance of Source.



62
63
64
65
# File 'lib/tml/source.rb', line 62

def initialize(attrs = {})
  super
  self.key ||= Tml::Source.generate_key(attrs[:source])
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Tml::Base

Class Method Details

.cache_key(locale, source) ⇒ Object



58
59
60
# File 'lib/tml/source.rb', line 58

def self.cache_key(locale, source)
  File.join(locale, 'sources', source.split('/'))
end

.generate_key(source) ⇒ Object



54
55
56
# File 'lib/tml/source.rb', line 54

def self.generate_key(source)
  "#{Digest::MD5.hexdigest("#{source}")}~"[0..-2]
end

.normalize(url) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/tml/source.rb', line 40

def self.normalize(url)
  return nil if url.nil? or url == ''
  uri = URI.parse(url)
  path = uri.path
  return '/' if uri.path.nil? or uri.path == ''
  return path if path == '/'

  # always must start with /
  path = "/#{path}" if path[0] != '/'
  # should not end with /
  path = path[0..-2] if path[-1] == '/'
  path
end

Instance Method Details

#cached_translations(locale, key) ⇒ Object



113
114
115
116
117
# File 'lib/tml/source.rb', line 113

def cached_translations(locale, key)
  self.translations ||= {}
  self.translations[locale] ||= {}
  self.translations[locale][key]
end

#fetch_translations(locale) ⇒ Object



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/tml/source.rb', line 92

def fetch_translations(locale)
  self.translations ||= {}
  return self if Tml.session.block_option(:dry)
  return self if self.translations[locale]

  # Tml.logger.debug("Fetching #{source}")

  data = self.application.api_client.get(
    "sources/#{self.key}/translations",
    {:locale => locale, :all => true, :ignored => true, :app_id => self.application.key},
    {:cache_key => Tml::Source.cache_key(locale, self.source), :raw_json => true}
  ) || {}

  update_translations(locale, data)

  self
rescue Tml::Exception => ex
  self.translations = {}
  self
end

#ignored_key?(key) ⇒ Boolean

Returns:

  • (Boolean)


67
68
69
70
# File 'lib/tml/source.rb', line 67

def ignored_key?(key)
  return false if ignored_keys.nil?
  not ignored_keys.index(key).nil?
end

#reset_cacheObject



119
120
121
122
123
# File 'lib/tml/source.rb', line 119

def reset_cache
  application.languages.each do |lang|
    Tml.cache.delete(Tml::Source.cache_key(lang.locale, self.source))
  end
end

#update_translations(locale, data) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/tml/source.rb', line 72

def update_translations(locale, data)
  self.translations ||= {}
  self.translations[locale] = {}
  self.ignored_keys = data['ignored_keys'] || []

  data = data['results'] if data.is_a?(Hash) and data['results']

  data.each do |key, data|
    translations_data = data.is_a?(Hash) ? data['translations'] : data
    self.translations[locale][key] = translations_data.collect do |t|
      Tml::Translation.new(
        locale:   t['locale'] || locale,
        label:    t['label'],
        locked:   t['locked'],
        context:  t['context']
      )
    end
  end
end