has_localization_table 0.3.7 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- Yzc3NzlkNWU5NWExNjhhZWM1YmVmOWM5YTI2YmQxYjk4ZDk2M2JlYQ==
4
+ NTI1M2E1MmY0ODY5NGE5YzU4Y2JiZGEzNGVmZmU1YjA0NDUzYWFiNg==
5
5
  data.tar.gz: !binary |-
6
- MjY5YzZlZGRlYWQ1ZGYyYmUwYTI1MDJlYzI5ZGQwZDM1NDVkODkxYQ==
6
+ ZDQwNGY1ZTVmN2NlM2M0MjEyYjk5N2YzMzY0NjYxMzVlMTllOWMxNg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZmRlZDE3OGI2MDA3ZDllZjk0MDcwNzhjYjkwYjk3NGE4NDdlMTkzYjBjYzE2
10
- ZGQyZDZhZmZmOGMxMDRkZjNjN2Q5YTUxODAxOTAxN2Q4ODQ4NTQ3ODIyOTgy
11
- ZDM1MmViN2U2NzkzNjgyYWQ1YzViN2MxYzJkMTRmOGIwMzk0Nzk=
9
+ MzMyOTAwZmFlYjk3MmQ0YWE5Y2Q4NDZkMzA1NzIyM2U3YjJiMTNhOGI2Yzlj
10
+ NWUwMzc4YTRjNGY0ODU5ZGI2ZDYxMTRjOWYzYzY5ZDIzOWI0YTdlOGViMGFl
11
+ ZmIxZGIxMjhlMmZhOWY3MDUwNWQzOWI5MTI0N2ZiNjE1MWVkYjI=
12
12
  data.tar.gz: !binary |-
13
- Mzk3ZjRkNTIzMWU5MTA1OTg5ZjYyMjM4MTBlNzI0MmZmZWRhNGEzMzA0N2I0
14
- NWEwODYzOTAwNmVlYjE0YWFhZmE1NTg4MmQyMzBmYjBhNzc1YmNiZDlhM2U3
15
- OTY4MmY5OGM2ZGM2YjYwZmZkYzMwMmMyMTZlMWZlNWViMDdjMmY=
13
+ NWFkYmJlMzM1MTE5YWRjNDBjMzQ4NmU2OTVlMzBkNDk0MDU3MzY3NzdhMTA3
14
+ MmYzNmMzM2E1MDg4YWExNTY4MGVhNGQ0YmYzNzdlZDgzOTMzMGQ5YTFkMWZi
15
+ NzZkZmM4ZWM4ZmNmYWI0ODYxMmE0ZDUwNzg4NjE5ZGY4M2E4MDA=
@@ -1,8 +1,17 @@
1
1
  module HasLocalizationTable
2
2
  module ActiveRecord
3
3
  module Attributes
4
- def read_localized_attribute(attribute, locale = HasLocalizationTable.current_locale)
5
- attribute_cache[attribute.to_sym][locale.id] ||= localization_association.detect{ |a| a.send(HasLocalizationTable.locale_foreign_key) == locale.id }.send(attribute) rescue nil
4
+ def read_localized_attribute(attribute, locale = HasLocalizationTable.current_locale, options = {})
5
+ locale ||= HasLocalizationTable.current_locale
6
+
7
+ attribute_cache[attribute.to_sym][locale.id] ||= begin
8
+ attr = localization_association.detect{ |a| a.send(HasLocalizationTable.locale_foreign_key) == locale.id }.send(attribute) rescue nil
9
+ if options[:fallback] && !attr
10
+ fallback = options[:fallback].respond_to?(:call) ? options[:fallback].call(self) : options[:fallback]
11
+ attr = read_localized_attribute(attribute, fallback)
12
+ end
13
+ attr
14
+ end
6
15
  end
7
16
 
8
17
  def write_localized_attribute(attribute, value, locale = HasLocalizationTable.current_locale)
@@ -22,7 +31,8 @@ module HasLocalizationTable
22
31
  # Try to load a string for the given locale
23
32
  # If that fails, try for the primary locale
24
33
  raise ArgumentError, "wrong number of arguments (#{args.size} for 0 or 1)" unless args.size.between?(0, 1)
25
- return read_localized_attribute($1, *args) || read_localized_attribute($1, HasLocalizationTable.primary_locale)
34
+ options = args.extract_options!
35
+ return read_localized_attribute($1, args.first, options) || read_localized_attribute($1, HasLocalizationTable.primary_locale, options)
26
36
  else
27
37
  raise ArgumentError, "wrong number of arguments (#{args.size} for 1)" unless args.size == 1
28
38
  return write_localized_attribute($1, args.first)
@@ -1,3 +1,3 @@
1
1
  module HasLocalizationTable
2
- VERSION = "0.3.7"
2
+ VERSION = "0.3.8"
3
3
  end
@@ -135,4 +135,26 @@ describe HasLocalizationTable do
135
135
  aa.name.must_equal "French Name"
136
136
  aa.description.must_equal "French Description"
137
137
  end
138
+
139
+ describe 'when a fallback is provided' do
140
+ let(:es) { Locale.create!(name: 'Spanish') }
141
+
142
+ before do
143
+ HasLocalizationTable.config.current_locale = es
144
+ a.save!
145
+ HasLocalizationTable.config.current_locale = Locale.first
146
+ end
147
+
148
+ it "should return the fallback locale's string" do
149
+ a.name(fallback: Locale.find(3)).must_equal 'Test'
150
+ end
151
+
152
+ it "should evaluate a proc" do
153
+ a.name(fallback: -> * { Locale.find(3) }).must_equal 'Test'
154
+ end
155
+
156
+ it 'should return a given locale when specified' do
157
+ a.name(Locale.find(3)).must_equal 'Test'
158
+ end
159
+ end
138
160
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: has_localization_table
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.7
4
+ version: 0.3.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Vandersluis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-28 00:00:00.000000000 Z
11
+ date: 2014-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  type: :runtime