mobility 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +2 -2
  3. data.tar.gz.sig +0 -0
  4. data/CHANGELOG.md +41 -1
  5. data/Gemfile.lock +3 -58
  6. data/README.md +22 -21
  7. data/lib/mobility.rb +3 -2
  8. data/lib/mobility/accumulator.rb +1 -2
  9. data/lib/mobility/active_model/backend_resetter.rb +1 -1
  10. data/lib/mobility/active_record.rb +12 -9
  11. data/lib/mobility/active_record/backend_resetter.rb +6 -7
  12. data/lib/mobility/active_record/uniqueness_validator.rb +12 -2
  13. data/lib/mobility/adapter.rb +1 -0
  14. data/lib/mobility/attributes.rb +3 -13
  15. data/lib/mobility/backends/active_record/column.rb +1 -0
  16. data/lib/mobility/backends/active_record/column/query_methods.rb +25 -20
  17. data/lib/mobility/backends/active_record/container/json_query_methods.rb +22 -16
  18. data/lib/mobility/backends/active_record/container/jsonb_query_methods.rb +19 -19
  19. data/lib/mobility/backends/active_record/hstore.rb +14 -12
  20. data/lib/mobility/backends/active_record/hstore/query_methods.rb +14 -5
  21. data/lib/mobility/backends/active_record/json.rb +21 -19
  22. data/lib/mobility/backends/active_record/json/query_methods.rb +16 -11
  23. data/lib/mobility/backends/active_record/jsonb.rb +21 -19
  24. data/lib/mobility/backends/active_record/jsonb/query_methods.rb +14 -5
  25. data/lib/mobility/backends/active_record/key_value.rb +9 -9
  26. data/lib/mobility/backends/active_record/key_value/query_methods.rb +53 -46
  27. data/lib/mobility/backends/active_record/pg_hash.rb +29 -25
  28. data/lib/mobility/backends/active_record/pg_query_methods.rb +76 -40
  29. data/lib/mobility/backends/active_record/query_methods.rb +17 -10
  30. data/lib/mobility/backends/active_record/serialized.rb +4 -2
  31. data/lib/mobility/backends/active_record/serialized/query_methods.rb +18 -15
  32. data/lib/mobility/backends/active_record/table.rb +21 -12
  33. data/lib/mobility/backends/active_record/table/query_methods.rb +82 -83
  34. data/lib/mobility/backends/hash_valued.rb +19 -0
  35. data/lib/mobility/backends/hstore.rb +3 -1
  36. data/lib/mobility/backends/json.rb +3 -1
  37. data/lib/mobility/backends/jsonb.rb +3 -1
  38. data/lib/mobility/backends/key_value.rb +32 -15
  39. data/lib/mobility/backends/sequel/column/query_methods.rb +16 -12
  40. data/lib/mobility/backends/sequel/container/json_query_methods.rb +25 -18
  41. data/lib/mobility/backends/sequel/container/jsonb_query_methods.rb +25 -18
  42. data/lib/mobility/backends/sequel/hstore.rb +14 -12
  43. data/lib/mobility/backends/sequel/hstore/query_methods.rb +18 -11
  44. data/lib/mobility/backends/sequel/json.rb +21 -19
  45. data/lib/mobility/backends/sequel/json/query_methods.rb +18 -11
  46. data/lib/mobility/backends/sequel/jsonb.rb +21 -19
  47. data/lib/mobility/backends/sequel/jsonb/query_methods.rb +18 -11
  48. data/lib/mobility/backends/sequel/key_value.rb +10 -11
  49. data/lib/mobility/backends/sequel/key_value/query_methods.rb +39 -34
  50. data/lib/mobility/backends/sequel/pg_hash.rb +37 -25
  51. data/lib/mobility/backends/sequel/pg_query_methods.rb +45 -20
  52. data/lib/mobility/backends/sequel/query_methods.rb +5 -0
  53. data/lib/mobility/backends/sequel/serialized.rb +18 -13
  54. data/lib/mobility/backends/sequel/serialized/query_methods.rb +10 -7
  55. data/lib/mobility/backends/sequel/table.rb +1 -1
  56. data/lib/mobility/backends/sequel/table/query_methods.rb +40 -35
  57. data/lib/mobility/plugins/cache/translation_cacher.rb +15 -15
  58. data/lib/mobility/plugins/default.rb +0 -7
  59. data/lib/mobility/plugins/fallbacks.rb +4 -0
  60. data/lib/mobility/sequel.rb +11 -5
  61. data/lib/mobility/sequel/backend_resetter.rb +6 -7
  62. data/lib/mobility/sequel/column_changes.rb +4 -4
  63. data/lib/mobility/version.rb +1 -1
  64. data/lib/rails/generators/mobility/backend_generators/base.rb +4 -0
  65. data/lib/rails/generators/mobility/backend_generators/table_backend.rb +0 -12
  66. data/lib/rails/generators/mobility/templates/column_translations.rb +2 -2
  67. data/lib/rails/generators/mobility/templates/create_string_translations.rb +5 -5
  68. data/lib/rails/generators/mobility/templates/create_text_translations.rb +5 -5
  69. data/lib/rails/generators/mobility/templates/initializer.rb +8 -0
  70. data/lib/rails/generators/mobility/templates/table_migration.rb +2 -3
  71. data/lib/rails/generators/mobility/templates/table_translations.rb +3 -4
  72. data/lib/rails/generators/mobility/translations_generator.rb +6 -5
  73. metadata +2 -3
  74. metadata.gz.sig +0 -0
  75. data/lib/mobility/backend/stringify_locale.rb +0 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e0b92c27c73b5d4052c752d8d63a5b6790696f89
4
- data.tar.gz: b58166a5c8ef6acdb721b5d4976be04834b65031
3
+ metadata.gz: aa18719235ac4c4f4dc7a50391d1aaa98e9963a0
4
+ data.tar.gz: 2aea9e420788a09176509fff75f1eb397656d6cd
5
5
  SHA512:
6
- metadata.gz: 497358cffc62727e4197b38cca78eb7b7fec7b591921fc814ee84c915be6925f3082d7820f07541212ad42704e6dd55a89503b59ce56b14c56aaa8823108b7d8
7
- data.tar.gz: 82b9f2c2de83f49ba2b2bc2f716d3aacc61631cb430e29977c6d7281b87f85b871b73aa6b71f5dce9b2e54f15f4bbf0659c48c3ec462753f5012aa602eb9d9c6
6
+ metadata.gz: d59832bfc7f2e3b0672b5f8d690ec167731e49225cd2d135f1325fd4ac934a22bf040c3ddaaed9a56cb7e6d9ac6b050f0fb7458f6f7f8e456a6391a9337ad6ec
7
+ data.tar.gz: 8a0dde22222134bad52a65e47a83e4cc6829d3a5273aef7be06ca25491c01bdc3e53bd609079c65d45c16328506b1f4a88fc9ab43612ac8272f3d4485fc073a7
checksums.yaml.gz.sig CHANGED
@@ -1,2 +1,2 @@
1
- $��y�;i�����I�mLJ�(������xeܧ��U��R�ˀ� "<֋�ժb]a����NB��s�.p���:^6 ��n�f���?^��=��z�҇q��';��.�����A_P0F%�b�-Ub��V��fqW*#&��#�M:W �-���'��I%����
2
- ���o�A��v��uh���gH�����ȠtSڽ�Y�<P-ba�,�X�S�B�� G�4�v�E$�ź�B��,J
1
+ �=^��&(�2x�P�f�^�n_BEi�ԟ;42?���ƴ�Ǿާ��Q���v����~l�YwW�w@��!
2
+ ��ƕyi���ϟ�
data.tar.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -1,6 +1,44 @@
1
1
  # Mobility Changelog
2
2
 
3
- ## 0.4
3
+ ## 0.6
4
+
5
+ ### 0.6.1 (April 26, 2018)
6
+
7
+ * Add column_prefix/column_suffix options to hash backends
8
+ ([#200](https://github.com/shioyama/mobility/pull/199) and
9
+ [#201](https://github.com/shioyama/mobility/pull/201))
10
+ * Require specifying type for KeyValue backends
11
+ ([#200](https://github.com/shioyama/mobility/pull/200))
12
+ * Remove table backend index on foreign key alone
13
+ ([#198](https://github.com/shioyama/mobility/pull/198))
14
+ * Test/cleanup index name truncation in backend generators
15
+ ([#197](https://github.com/shioyama/mobility/pull/197))
16
+ * Improve translations generators
17
+ ([#196](https://github.com/shioyama/mobility/pull/196))
18
+ * Enforce null: false constraint on columns consistently
19
+ ([#205](https://github.com/shioyama/mobility/pull/205))
20
+ * Add extension to find translations in a locale for Table backend
21
+ ([#202](https://github.com/shioyama/mobility/pull/202))
22
+ * Ignore non-arel nodes in joins_values
23
+ ([#206](https://github.com/shioyama/mobility/pull/206))
24
+ * Collapse duplicates in array-valued query hash
25
+ ([#207](https://github.com/shioyama/mobility/pull/207))
26
+ * Remove unneeded anonymous module in backend resetters
27
+ ([#213](https://github.com/shioyama/mobility/pull/213))
28
+ * Make constants private
29
+ ([#214](https://github.com/shioyama/mobility/pull/214))
30
+ * Use IN when querying on array values with PG backends
31
+ ([#209](https://github.com/shioyama/mobility/pull/209))
32
+ * Remove some deprecated methods
33
+ ([#215](https://github.com/shioyama/mobility/pull/215))
34
+ * Explicitly implement matches/has_locale methods everywhere
35
+ ([#194](https://github.com/shioyama/mobility/pull/194))
36
+ * Refactor Mobility::Backends::AR::QueryMethods using MobilityWhereChain module
37
+ ([#193](https://github.com/shioyama/mobility/pull/193))
38
+ * Add missing documentation
39
+ ([#192](https://github.com/shioyama/mobility/pull/192))
40
+
41
+ ## 0.5
4
42
 
5
43
  ### 0.5.1 (March 21, 2018)
6
44
  * Fix issues with Dirty plugin in ActiveRecord 5.2.0.rc2
@@ -17,6 +55,8 @@
17
55
  * Use pragma comments to freeze strings everywhere
18
56
  ([#177](https://github.com/shioyama/mobility/pull/177))
19
57
 
58
+ ## 0.4
59
+
20
60
  ### 0.4.3 (February 18, 2018)
21
61
  * Add missing require in container backend
22
62
  ([#174](https://github.com/shioyama/mobility/pull/174))
data/Gemfile.lock CHANGED
@@ -1,52 +1,21 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mobility (0.5.0)
4
+ mobility (0.6.0)
5
5
  i18n (>= 0.6.10, < 1.1)
6
6
  request_store (~> 1.0)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- actionpack (5.2.0.rc2)
12
- actionview (= 5.2.0.rc2)
13
- activesupport (= 5.2.0.rc2)
14
- rack (~> 2.0)
15
- rack-test (>= 0.6.3)
16
- rails-dom-testing (~> 2.0)
17
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
18
- actionview (5.2.0.rc2)
19
- activesupport (= 5.2.0.rc2)
20
- builder (~> 3.1)
21
- erubi (~> 1.4)
22
- rails-dom-testing (~> 2.0)
23
- rails-html-sanitizer (~> 1.0, >= 1.0.3)
24
- activemodel (5.2.0.rc2)
25
- activesupport (= 5.2.0.rc2)
26
- activerecord (5.2.0.rc2)
27
- activemodel (= 5.2.0.rc2)
28
- activesupport (= 5.2.0.rc2)
29
- arel (>= 9.0)
30
- activesupport (5.2.0.rc2)
31
- concurrent-ruby (~> 1.0, >= 1.0.2)
32
- i18n (>= 0.7, < 2)
33
- minitest (~> 5.1)
34
- tzinfo (~> 1.1)
35
- arel (9.0.0)
36
11
  benchmark-ips (2.7.2)
37
- builder (3.2.3)
38
12
  byebug (10.0.0)
39
13
  coderay (1.1.2)
40
14
  concurrent-ruby (1.0.5)
41
- crass (1.0.3)
42
15
  database_cleaner (1.6.2)
43
16
  diff-lcs (1.3)
44
- erubi (1.7.1)
45
17
  ffi (1.9.23)
46
18
  formatador (0.2.5)
47
- generator_spec (0.9.4)
48
- activesupport (>= 3.0.0)
49
- railties (>= 3.0.0)
50
19
  guard (2.14.2)
51
20
  formatador (>= 0.2.4)
52
21
  listen (>= 2.7, < 4.0)
@@ -67,17 +36,10 @@ GEM
67
36
  rb-fsevent (~> 0.9, >= 0.9.4)
68
37
  rb-inotify (~> 0.9, >= 0.9.7)
69
38
  ruby_dep (~> 1.2)
70
- loofah (2.2.1)
71
- crass (~> 1.0.2)
72
- nokogiri (>= 1.5.9)
73
39
  lumberjack (1.0.12)
74
40
  method_source (0.9.0)
75
- mini_portile2 (2.3.0)
76
- minitest (5.11.3)
77
41
  mysql2 (0.4.10)
78
42
  nenv (0.3.0)
79
- nokogiri (1.8.2)
80
- mini_portile2 (~> 2.3.0)
81
43
  notiffany (0.1.1)
82
44
  nenv (~> 0.1)
83
45
  shellany (~> 0.0)
@@ -89,19 +51,6 @@ GEM
89
51
  byebug (~> 10.0)
90
52
  pry (~> 0.10)
91
53
  rack (2.0.4)
92
- rack-test (0.8.3)
93
- rack (>= 1.0, < 3)
94
- rails-dom-testing (2.0.3)
95
- activesupport (>= 4.2.0)
96
- nokogiri (>= 1.6)
97
- rails-html-sanitizer (1.0.3)
98
- loofah (~> 2.0)
99
- railties (5.2.0.rc2)
100
- actionpack (= 5.2.0.rc2)
101
- activesupport (= 5.2.0.rc2)
102
- method_source
103
- rake (>= 0.8.7)
104
- thor (>= 0.18.1, < 2.0)
105
54
  rake (12.3.0)
106
55
  rb-fsevent (0.10.3)
107
56
  rb-inotify (0.9.10)
@@ -122,31 +71,27 @@ GEM
122
71
  rspec-support (~> 3.7.0)
123
72
  rspec-support (3.7.1)
124
73
  ruby_dep (1.5.0)
74
+ sequel (5.7.1)
125
75
  shellany (0.0.1)
126
76
  sqlite3 (1.3.13)
127
77
  thor (0.20.0)
128
- thread_safe (0.3.6)
129
- tzinfo (1.2.5)
130
- thread_safe (~> 0.1)
131
78
  yard (0.9.12)
132
79
 
133
80
  PLATFORMS
134
81
  ruby
135
82
 
136
83
  DEPENDENCIES
137
- activerecord (>= 5.2.0.rc2, < 5.3)
138
84
  benchmark-ips
139
85
  bundler (~> 1.12)
140
86
  database_cleaner (~> 1.5, >= 1.5.3)
141
- generator_spec (~> 0.9.4)
142
87
  guard-rspec
143
88
  mobility!
144
89
  mysql2 (~> 0.4.9)
145
90
  pg (< 1.0)
146
91
  pry-byebug
147
- railties (>= 5.2.0.rc2, < 5.3)
148
92
  rake (~> 12, >= 12.2.1)
149
93
  rspec (~> 3.0)
94
+ sequel (>= 5.0.0, < 6.0.0)
150
95
  sqlite3
151
96
  yard (~> 0.9.0)
152
97
 
data/README.md CHANGED
@@ -54,7 +54,7 @@ Installation
54
54
  Add this line to your application's Gemfile:
55
55
 
56
56
  ```ruby
57
- gem 'mobility', '~> 0.5.1'
57
+ gem 'mobility', '~> 0.6.0'
58
58
  ```
59
59
 
60
60
  Mobility is cryptographically signed. To be sure the gem you install hasn't
@@ -107,8 +107,12 @@ possibilities [below](#backends)).
107
107
 
108
108
  You will likely also want to set default values for the various translation
109
109
  options described below. You can set these defaults by assigning values to keys
110
- on the `config.default_options` hash, like this (to set the default value for
111
- the `dirty` option to `true`):
110
+ on the `config.default_options` hash. Below, we turn on the Dirty plugin by
111
+ default, so it will be enabled for all models.
112
+
113
+ You can also set defaults for backend-specific options. Below, we set the
114
+ default `type` option for the KeyValue backend to `:string` (this is
115
+ unnecessary and will be ignored if you are using a different backend).
112
116
 
113
117
  ```diff
114
118
  Mobility.configure do |config|
@@ -116,11 +120,12 @@ the `dirty` option to `true`):
116
120
  config.accessor_method = :translates
117
121
  config.query_method = :i18n
118
122
  + config.default_options[:dirty] = true
123
+ + config.default_options[:type] = :string
119
124
  end
120
125
  ```
121
126
 
122
- Other configuration options are
123
- described in the [API
127
+ We will assume the configuration above in the examples that follow. Other
128
+ configuration options are described in the [API
124
129
  docs](http://www.rubydoc.info/gems/mobility/Mobility/Configuration).
125
130
 
126
131
  See [Getting Started](#quickstart) to get started translating your models.
@@ -136,8 +141,7 @@ You can extend `Mobility` just like in ActiveRecord, or you can use the
136
141
  ```ruby
137
142
  class Word < ::Sequel::Model
138
143
  plugin :mobility
139
- translates :name, type: :string
140
- translates :meaning, type: :text
144
+ translates :name, :meaning
141
145
  end
142
146
  ```
143
147
 
@@ -161,15 +165,12 @@ of options, like this:
161
165
  ```ruby
162
166
  class Word < ApplicationRecord
163
167
  extend Mobility
164
- translates :name, type: :string
165
- translates :meaning, type: :text
168
+ translates :name, :meaning
166
169
  end
167
170
  ```
168
171
 
169
- You now have translated attributes `name` (as a string column) and `meaning`
170
- (as a text column) on the model `Word`. You can set their values like you
171
- would any other attribute:
172
-
172
+ You now have translated attributes `name` and `meaning` on the model `Word`.
173
+ You can set their values like you would any other attribute:
173
174
 
174
175
  ```ruby
175
176
  word = Word.new
@@ -262,7 +263,7 @@ option when defining translated attributes on the model class:
262
263
  ```ruby
263
264
  class Word < ApplicationRecord
264
265
  extend Mobility
265
- translates :name, type: :string, locale_accessors: [:en, :ja]
266
+ translates :name, locale_accessors: [:en, :ja]
266
267
  end
267
268
  ```
268
269
 
@@ -302,7 +303,7 @@ For example, if we define `Word` this way:
302
303
  ```ruby
303
304
  class Word < ApplicationRecord
304
305
  extend Mobility
305
- translates :name, type: :string, fallthrough_accessors: true
306
+ translates :name, fallthrough_accessors: true
306
307
  end
307
308
  ```
308
309
 
@@ -368,7 +369,7 @@ reading and writing from the backend instance this way.
368
369
 
369
370
  The `write` methods do not call underlying backend's methods to persist the change.
370
371
  This is up to the user (e.g. with ActiveRecord you should call `save` write
371
- the changes to the database.
372
+ the changes to the database).
372
373
 
373
374
  ### Setting the Locale
374
375
 
@@ -416,8 +417,8 @@ translated attributes on a class:
416
417
  ```ruby
417
418
  class Word < ApplicationRecord
418
419
  extend Mobility
419
- translates :name, type: :string, fallbacks: { de: :ja, fr: :ja }, locale_accessors: true
420
- translates :meaning, type: :text, fallbacks: { de: :ja, fr: :ja }, locale_accessors: true
420
+ translates :name, fallbacks: { de: :ja, fr: :ja }, locale_accessors: true
421
+ translates :meaning, fallbacks: { de: :ja, fr: :ja }, locale_accessors: true
421
422
  end
422
423
  ```
423
424
 
@@ -511,7 +512,7 @@ Another option is to assign a default value, which will be used if the result of
511
512
  ```ruby
512
513
  class Word < ApplicationRecord
513
514
  extend Mobility
514
- translates :name, type: :string, default: 'foo'
515
+ translates :name, default: 'foo'
515
516
  end
516
517
 
517
518
  Mobility.locale = :ja
@@ -559,7 +560,7 @@ dirty tracking is not specific to AR and works for non-persisted models as well)
559
560
  ```ruby
560
561
  class Post < ApplicationRecord
561
562
  extend Mobility
562
- translates :title, type: :string, dirty: true
563
+ translates :title, dirty: true
563
564
  end
564
565
  ```
565
566
 
@@ -644,7 +645,7 @@ false` when defining an attribute, like this:
644
645
  ```ruby
645
646
  class Word < ApplicationRecord
646
647
  extend Mobility
647
- translates :name, type: :string, cache: false
648
+ translates :name, cache: false
648
649
  end
649
650
  ```
650
651
 
data/lib/mobility.rb CHANGED
@@ -143,7 +143,7 @@ module Mobility
143
143
  # @!group Configuration Methods
144
144
  # @return [Mobility::Configuration] Mobility configuration
145
145
  def config
146
- @configuration ||= Mobility::Configuration.new
146
+ @configuration ||= Configuration.new
147
147
  end
148
148
 
149
149
  # (see Mobility::Configuration#accessor_method)
@@ -271,7 +271,7 @@ instead.}
271
271
  include Translates
272
272
 
273
273
  def mobility
274
- @mobility ||= Mobility::Accumulator.new
274
+ @mobility ||= Accumulator.new
275
275
  end
276
276
 
277
277
  def translated_attribute_names
@@ -283,6 +283,7 @@ instead.}
283
283
  super
284
284
  end
285
285
  end
286
+ private_constant :ClassMethods, :InstanceMethods
286
287
 
287
288
  class BackendRequired < ArgumentError; end
288
289
  class InvalidLocale < I18n::InvalidLocale; end
@@ -2,8 +2,7 @@ module Mobility
2
2
  =begin
3
3
 
4
4
  Class to access Mobility across backends. In particular, keeps a record of
5
- which {Attributes} modules have been included on the model class. It is also a
6
- simple delegator, so any missing method will be delegated to the model class.
5
+ which {Attributes} modules have been included on the model class.
7
6
 
8
7
  =end
9
8
  class Accumulator
@@ -9,7 +9,7 @@ Backend resetter for ActiveModel models. Adds hook to reset backend when
9
9
  class BackendResetter < Mobility::BackendResetter
10
10
 
11
11
  # (see Mobility::BackendResetter#initialize)
12
- def initialize(attribute_names)
12
+ def initialize(attribute_names, &block)
13
13
  super
14
14
 
15
15
  model_reset_method = @model_reset_method
@@ -8,6 +8,17 @@ Module loading ActiveRecord-specific classes for Mobility models.
8
8
  module ActiveRecord
9
9
  require "mobility/active_record/uniqueness_validator"
10
10
 
11
+ def self.included(model_class)
12
+ model_class.class_eval do
13
+ extend QueryMethod.new(Mobility.query_method)
14
+ unless const_defined?(:UniquenessValidator)
15
+ const_set(:UniquenessValidator,
16
+ Class.new(::Mobility::ActiveRecord::UniquenessValidator))
17
+ end
18
+ delegate :translated_attribute_names, to: :class
19
+ end
20
+ end
21
+
11
22
  class QueryMethod < Module
12
23
  def initialize(query_method)
13
24
  module_eval <<-EOM, __FILE__, __LINE__ + 1
@@ -17,14 +28,6 @@ Module loading ActiveRecord-specific classes for Mobility models.
17
28
  EOM
18
29
  end
19
30
  end
20
-
21
- def self.included(model_class)
22
- model_class.extend QueryMethod.new(Mobility.query_method)
23
- unless model_class.const_defined?(:UniquenessValidator)
24
- model_class.const_set(:UniquenessValidator,
25
- Class.new(::Mobility::ActiveRecord::UniquenessValidator))
26
- end
27
- model_class.delegate :translated_attribute_names, to: :class
28
- end
31
+ private_constant :QueryMethod
29
32
  end
30
33
  end
@@ -11,16 +11,15 @@ Backend resetter for ActiveRecord models. Adds hook on +reload+ event to
11
11
  =end
12
12
  class BackendResetter < Mobility::ActiveModel::BackendResetter
13
13
 
14
- # @param [Class] model_class Class of model to which backend resetter will be applied
15
- def included(model_class)
14
+ # (see Mobility::BackendResetter#initialize)
15
+ def initialize(attribute_names, &block)
16
+ super
17
+
16
18
  model_reset_method = @model_reset_method
17
19
 
18
- mod = Module.new do
19
- define_method :reload do |*args|
20
- super(*args).tap { instance_eval(&model_reset_method) }
21
- end
20
+ define_method :reload do |*args|
21
+ super(*args).tap { instance_eval(&model_reset_method) }
22
22
  end
23
- model_class.include mod
24
23
  end
25
24
  end
26
25
  end
@@ -3,10 +3,20 @@ module Mobility
3
3
  =begin
4
4
 
5
5
  A backend-agnostic uniqueness validator for ActiveRecord translated attributes.
6
+ To use the validator, you must +extend Mobility+ before calling +validates+
7
+ (see example below).
6
8
 
7
9
  @note This validator does not support case sensitivity, since doing so would
8
10
  significantly complicate implementation.
9
11
 
12
+ @example Validating uniqueness on translated model
13
+ class Post < ActiveRecord::Base
14
+ extend Mobility
15
+ translates :title
16
+
17
+ # This must come *after* extending Mobility.
18
+ validates :title, uniqueness: true
19
+ end
10
20
  =end
11
21
  class UniquenessValidator < ::ActiveRecord::Validations::UniquenessValidator
12
22
  # @param [ActiveRecord::Base] record Translated model
@@ -15,7 +25,7 @@ A backend-agnostic uniqueness validator for ActiveRecord translated attributes.
15
25
  def validate_each(record, attribute, value)
16
26
  klass = record.class
17
27
 
18
- if ((Array(options[:scope]) + [attribute]).map(&:to_s) & klass.translated_attribute_names).present?
28
+ if (([*options[:scope]] + [attribute]).map(&:to_s) & klass.translated_attribute_names).present?
19
29
  warn %{
20
30
  WARNING: The Mobility uniqueness validator for translated attributes does not
21
31
  support case-insensitive validation. This option will be ignored for: #{attribute}
@@ -40,7 +50,7 @@ support case-insensitive validation. This option will be ignored for: #{attribut
40
50
  private
41
51
 
42
52
  def mobility_scope_relation(record, relation)
43
- Array(options[:scope]).inject(relation) do |scoped_relation, scope_item|
53
+ [*options[:scope]].inject(relation) do |scoped_relation, scope_item|
44
54
  scoped_relation.where(scope_item => record.send(scope_item))
45
55
  end
46
56
  end