easy_translatable 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c87e052e95899dc6b22ac1448a9a934cb08867d5
4
- data.tar.gz: 82c1645a1e0ed7cbaddb5bc7a5a746861a11f18e
3
+ metadata.gz: 0a2db1f63c194bb5c4ff3014938c96f635ad2f17
4
+ data.tar.gz: 296172fd483778a4e593c659bb2b4a30c665ad53
5
5
  SHA512:
6
- metadata.gz: b671ad665fa26149eb88ec15546a92038dac5f301625710e9526b76821afb48bac357bb008873f8994a67104cd31b66bf5c2e2aba947c770850fee1f536b5df0
7
- data.tar.gz: 81c3329c6381e2d1a08816261055b8eb0b5c0d886b9717b2ffa030b5a03eb740827616f8c3a442b4c94a8ec953345a1d836e2e14196097b73e1fce9d5e8c8a1a
6
+ metadata.gz: e63d023cdde40a254c4874f81f892ecf28c28143d6857008776f3cf1efe49edf959034c8e6d45320fe1562ee44eeace6efced3161775a72e96a089c0a47e568b
7
+ data.tar.gz: 8908a1addd1f71c87c15ac9033d5c0ad27a6ae8fde08616cc398e159a721267a946fd7b528450427528b9d5c992967af6592246eef967a16a4e581e05b536ee2
@@ -21,8 +21,8 @@ module Translatable
21
21
  stash.contains?(locale, name)
22
22
  end
23
23
 
24
- def fetch(locale, name)
25
- value = stash_contains?(locale, name) ? fetch_stash(locale, name) : fetch_attribute(locale, name)
24
+ def fetch(locale, name, value = nil)
25
+ value = stash_contains?(locale, name) ? fetch_stash(locale, name) : fetch_attribute(locale, name, value)
26
26
 
27
27
  return value
28
28
  end
@@ -33,9 +33,14 @@ module Translatable
33
33
 
34
34
  protected
35
35
 
36
- def fetch_attribute(locale, name)
37
- translation = record.translation_for(locale, name, false)
38
- return translation && translation.send(:value)
36
+ def fetch_attribute(locale, name, value = nil)
37
+ if value.nil?
38
+ translation = record.translation_for(locale, name)
39
+ return translation && translation.send(:value)
40
+ else
41
+ translation = record.translation_for_serialized(locale, name, value)
42
+ return translation
43
+ end
39
44
  end
40
45
 
41
46
  end
@@ -6,7 +6,8 @@ module Translatable
6
6
  end
7
7
 
8
8
  def translated?(name)
9
- translated_attribute_names.include?(name.to_sym)
9
+ included = translated_attribute_names.detect { |attr| attr.is_a?(Hash) ? attr.keys.include?(name.to_sym) : attr == name.to_sym }
10
+ !included.nil?
10
11
  end
11
12
 
12
13
  protected
@@ -53,7 +53,8 @@ module Translatable
53
53
  def read_attribute(name, options = {})
54
54
  options = {:translated => true, :locale => nil}.merge(options)
55
55
  if translated?(name) and options[:translated]
56
- if translate? && (value = translatable.fetch(options[:locale] || Translatable.locale, name))
56
+ serialized_value = super(name) if self.serialized_attributes.has_key?(name)
57
+ if translate? && (value = translatable.fetch(options[:locale] || Translatable.locale, name, serialized_value))
57
58
  value
58
59
  else
59
60
  super(name)
@@ -77,6 +78,45 @@ module Translatable
77
78
  translation_caches["#{locale}_#{name}"]
78
79
  end
79
80
 
81
+ # Fetch translations per keys in the form
82
+ # model_attr_serialized_attribute
83
+ # E.G.1: ```Model``` has attribute ```config``` which has a key ```auto_save```
84
+ # will have a translation key ```config_auto_save```
85
+ # E.G.2: ```Model``` has attribute ```config``` which is an array of ```user_id => ([0-9]+)```
86
+ # will have translations key containing the index: ```config_user_id_0```, ```config_user_id_1```...
87
+ def translation_for_serialized(locale, name, value, build_if_missing = false)
88
+
89
+ unless translation_caches["#{locale}_#{name}"]
90
+ engine = self.serialized_attributes.has_key?(name) ? nil : JSON
91
+ deserialized_value = engine.nil? ? value : engine.load(value)
92
+
93
+ only = self.translated_serialized_attributes[name.to_sym].map(&:to_s)
94
+ if only.empty?
95
+ regex_keys = /\A#{name.to_s}_([a-z_]+[a-z])(?:_([0-9]*))?\Z/
96
+ else
97
+ regex_keys = /\A#{name.to_s}_(#{only.join('|')})(?:_([0-9]*))?\Z/
98
+ end
99
+ # Fetch translations from database as those in the translation collection may be incomplete
100
+ _translations = translations.select{|t| t.locale.to_s == locale.to_s && t.key.to_s =~ regex_keys }
101
+ _translations.each do |t|
102
+ matched = t.key.match regex_keys
103
+ unless matched.nil?
104
+ if matched.size == 3
105
+ sub_attr = matched[1]
106
+ index = matched[2].to_i
107
+ value[index][sub_attr] = t.value if value.size > index && value[index].has_key?(sub_attr)
108
+ elsif matched.size == 3
109
+ sub_attr = matched[1]
110
+ value[sub_attr] = t.value if value.has_key?(sub_attr)
111
+ end
112
+ end
113
+ end
114
+
115
+ translation_caches["#{locale}_#{name}"] = value
116
+ end
117
+ translation_caches["#{locale}_#{name}"]
118
+ end
119
+
80
120
  def translation_caches
81
121
  @translation_caches ||= {}
82
122
  end
@@ -19,7 +19,9 @@ module Translatable
19
19
 
20
20
  # Add attribute to the list.
21
21
  self.translated_attribute_names << attr_name
22
- self.translated_serialized_attributes[attr_name] = options[:json] if options[:json]
22
+ if self.serialized_attributes.has_key?(attr_name) || options[:only]
23
+ self.translated_serialized_attributes[attr_name] = options[:only] ? options[:only] : []
24
+ end
23
25
  end
24
26
 
25
27
  Translatable.add_translatable self
@@ -48,7 +50,7 @@ module Translatable
48
50
  self.translated_attribute_names = []
49
51
  self.translation_options = options
50
52
  self.fallbacks_for_empty_translations = options[:fallbacks_for_empty_translations]
51
- self.translated_serialized_attributes = Hash.new if options[:json]
53
+ self.translated_serialized_attributes = Hash.new
52
54
 
53
55
  include InstanceMethods
54
56
  extend ClassMethods
data/lib/translatable.rb CHANGED
@@ -44,7 +44,10 @@ module Translatable
44
44
  end
45
45
 
46
46
  unless klass.translated_serialized_attributes.nil?
47
- @@translatable[klass.name].map!{ |attr| klass.translated_serialized_attributes.reject{|k,v| k != attr} }
47
+ @@translatable[klass.name].map! do |attr|
48
+ serialized = klass.translated_serialized_attributes.reject{|k,v| k != attr}
49
+ serialized.empty? ? attr : serialized
50
+ end
48
51
  end
49
52
  end
50
53
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: easy_translatable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul Bonaud