has_localization_table 0.3.8 → 0.3.9

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
- NTI1M2E1MmY0ODY5NGE5YzU4Y2JiZGEzNGVmZmU1YjA0NDUzYWFiNg==
4
+ MmUyZDNjN2QwNTJmNDg0YWIzNjM3MjJmNzY4NWE5N2MxNTMyYWRhNg==
5
5
  data.tar.gz: !binary |-
6
- ZDQwNGY1ZTVmN2NlM2M0MjEyYjk5N2YzMzY0NjYxMzVlMTllOWMxNg==
6
+ MDgxYThkMzM3NGVkM2ZkZWNkNWFiYzAyYjcyM2VhMzEzN2ZkNDBhYw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MzMyOTAwZmFlYjk3MmQ0YWE5Y2Q4NDZkMzA1NzIyM2U3YjJiMTNhOGI2Yzlj
10
- NWUwMzc4YTRjNGY0ODU5ZGI2ZDYxMTRjOWYzYzY5ZDIzOWI0YTdlOGViMGFl
11
- ZmIxZGIxMjhlMmZhOWY3MDUwNWQzOWI5MTI0N2ZiNjE1MWVkYjI=
9
+ MWE3ZjVhY2I1YTE2YWQyYTAyMzY2NWUyNGI0YTc3Yjc5ODA1OTRmMTcxODky
10
+ OGE3MGViOWZhZDEyZmFmZDIwODAyYTE2MDY3MWY4MTk3ZjgyMTU4OWIyNjlm
11
+ N2RjZjk5MmRlZWU2YTllMWNjN2NjZWVjZTI0M2UyNjkyNTNiODY=
12
12
  data.tar.gz: !binary |-
13
- NWFkYmJlMzM1MTE5YWRjNDBjMzQ4NmU2OTVlMzBkNDk0MDU3MzY3NzdhMTA3
14
- MmYzNmMzM2E1MDg4YWExNTY4MGVhNGQ0YmYzNzdlZDgzOTMzMGQ5YTFkMWZi
15
- NzZkZmM4ZWM4ZmNmYWI0ODYxMmE0ZDUwNzg4NjE5ZGY4M2E4MDA=
13
+ NzNjZDg2ZDg5NzYxOTlkNjI5Y2QzNGYyNjIwYWQ0ZDNmNzE1M2EyNTc0M2Y5
14
+ YmI4YmMyYWVkMWUxY2RiYTVhNTllMmJlMjU3ZGM3YTI2ZGQ3OTk0NGI2NGQ5
15
+ NmU1MDM0OTQ0OGRiMmQ5ZjUzZjJjNmQ0YmVmMmEyODAxYzZlNDc=
@@ -12,4 +12,16 @@ module HasLocalizationTable
12
12
  val
13
13
  end
14
14
  end
15
+
16
+ def self.with_options(options, &block)
17
+ # Ugly but we need to make sure we don't clobber the existing configuration
18
+ old_config = @config.dup
19
+ old_config.instance_variable_set('@_config', @config.config.dup)
20
+
21
+ @config.config.merge!(options.slice(*HasLocalizationTable.config.config.keys))
22
+
23
+ yield
24
+
25
+ @config = old_config
26
+ end
15
27
  end
@@ -6,8 +6,9 @@ module HasLocalizationTable
6
6
 
7
7
  attribute_cache[attribute.to_sym][locale.id] ||= begin
8
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]
9
+ if options.fetch(:fallback, HasLocalizationTable.config.fallback_locale) && !attr
10
+ fallback = options.fetch(:fallback, HasLocalizationTable.config.fallback_locale)
11
+ fallback = fallback.call(self) if fallback.respond_to?(:call)
11
12
  attr = read_localized_attribute(attribute, fallback)
12
13
  end
13
14
  attr
@@ -28,6 +28,7 @@ module HasLocalizationTable
28
28
  config_accessor :class_suffix
29
29
  config_accessor :default_association_name
30
30
  config_accessor :create_has_one_by_default # Should a has_one association be automatically created?
31
+ config_accessor :fallback_locale
31
32
  end
32
33
 
33
34
  # this is ugly. why can't we pass the default value to config_accessor...?
@@ -40,5 +41,6 @@ module HasLocalizationTable
40
41
  config.current_locale = ->{ config.locale_class.constantize.first }
41
42
  config.all_locales = ->{ config.locale_class.constantize.all }
42
43
  config.create_has_one_by_default = true
44
+ config.fallback_locale = nil
43
45
  end
44
46
  end
@@ -1,3 +1,3 @@
1
1
  module HasLocalizationTable
2
- VERSION = "0.3.8"
2
+ VERSION = "0.3.9"
3
3
  end
@@ -156,5 +156,16 @@ describe HasLocalizationTable do
156
156
  it 'should return a given locale when specified' do
157
157
  a.name(Locale.find(3)).must_equal 'Test'
158
158
  end
159
+
160
+ it 'should not evaluate a proc if the fallback is not required' do
161
+ HasLocalizationTable.config.current_locale = es
162
+ a.name(fallback: -> * { raise ArgumentError }).must_equal 'Test'
163
+ end
164
+
165
+ it 'should use the fallback specified in configuration' do
166
+ HasLocalizationTable.with_options(fallback_locale: -> * { Locale.find(3) }) do
167
+ a.name.must_equal 'Test'
168
+ end
169
+ end
159
170
  end
160
171
  end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe HasLocalizationTable do
4
+ describe '.with_options' do
5
+ before do
6
+ HasLocalizationTable.configure do |c|
7
+ c.locale_class = 'Locale'
8
+ end
9
+ end
10
+
11
+ it 'should make the options available within the block' do
12
+ HasLocalizationTable.with_options(locale_class: 'Language') do
13
+ HasLocalizationTable.locale_class.must_equal 'Language'
14
+ end
15
+ end
16
+
17
+ it 'should revert to the original option values after the block' do
18
+ HasLocalizationTable.with_options(locale_class: 'Language') {}
19
+ HasLocalizationTable.locale_class.must_equal 'Locale'
20
+ end
21
+ end
22
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: has_localization_table
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.8
4
+ version: 0.3.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Vandersluis
@@ -111,6 +111,7 @@ files:
111
111
  - spec/active_record/relation_spec.rb
112
112
  - spec/active_record/validations_spec.rb
113
113
  - spec/active_record_spec.rb
114
+ - spec/has_localization_table_spec.rb
114
115
  - spec/spec_helper.rb
115
116
  - spec/support/setup.rb
116
117
  homepage: https://github.com/dvandersluis/has_localization_table
@@ -144,6 +145,7 @@ test_files:
144
145
  - spec/active_record/relation_spec.rb
145
146
  - spec/active_record/validations_spec.rb
146
147
  - spec/active_record_spec.rb
148
+ - spec/has_localization_table_spec.rb
147
149
  - spec/spec_helper.rb
148
150
  - spec/support/setup.rb
149
151
  has_rdoc: