mobility 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +3 -2
- data.tar.gz.sig +0 -0
- data/CHANGELOG.md +39 -1
- data/Gemfile.lock +65 -10
- data/README.md +63 -27
- data/lib/mobility.rb +16 -31
- data/lib/mobility/active_record.rb +2 -12
- data/lib/mobility/active_record/uniqueness_validator.rb +9 -8
- data/lib/mobility/arel.rb +20 -0
- data/lib/mobility/arel/nodes.rb +16 -0
- data/lib/mobility/arel/nodes/pg_ops.rb +136 -0
- data/lib/mobility/arel/visitor.rb +61 -0
- data/lib/mobility/attributes.rb +82 -19
- data/lib/mobility/backend.rb +53 -8
- data/lib/mobility/backend_resetter.rb +2 -1
- data/lib/mobility/backends/active_record.rb +31 -11
- data/lib/mobility/backends/active_record/column.rb +7 -3
- data/lib/mobility/backends/active_record/container.rb +23 -21
- data/lib/mobility/backends/active_record/hstore.rb +11 -6
- data/lib/mobility/backends/active_record/json.rb +22 -16
- data/lib/mobility/backends/active_record/jsonb.rb +22 -16
- data/lib/mobility/backends/active_record/key_value.rb +123 -15
- data/lib/mobility/backends/active_record/pg_hash.rb +1 -2
- data/lib/mobility/backends/active_record/serialized.rb +7 -6
- data/lib/mobility/backends/active_record/table.rb +145 -24
- data/lib/mobility/backends/hash_valued.rb +15 -10
- data/lib/mobility/backends/key_value.rb +12 -12
- data/lib/mobility/backends/sequel/container.rb +3 -9
- data/lib/mobility/backends/sequel/hstore.rb +2 -2
- data/lib/mobility/backends/sequel/json.rb +15 -15
- data/lib/mobility/backends/sequel/jsonb.rb +14 -14
- data/lib/mobility/backends/sequel/key_value.rb +0 -11
- data/lib/mobility/backends/sequel/pg_hash.rb +2 -3
- data/lib/mobility/backends/sequel/pg_query_methods.rb +1 -1
- data/lib/mobility/backends/sequel/query_methods.rb +3 -3
- data/lib/mobility/backends/sequel/serialized.rb +2 -2
- data/lib/mobility/backends/sequel/table.rb +10 -11
- data/lib/mobility/backends/table.rb +17 -8
- data/lib/mobility/configuration.rb +4 -1
- data/lib/mobility/interface.rb +0 -0
- data/lib/mobility/plugins.rb +1 -0
- data/lib/mobility/plugins/active_record/query.rb +192 -0
- data/lib/mobility/plugins/cache.rb +1 -2
- data/lib/mobility/plugins/default.rb +28 -14
- data/lib/mobility/plugins/fallbacks.rb +1 -1
- data/lib/mobility/plugins/locale_accessors.rb +13 -9
- data/lib/mobility/plugins/presence.rb +15 -7
- data/lib/mobility/plugins/query.rb +28 -0
- data/lib/mobility/translates.rb +9 -9
- data/lib/mobility/version.rb +1 -1
- data/lib/rails/generators/mobility/templates/initializer.rb +1 -0
- metadata +10 -15
- metadata.gz.sig +0 -0
- data/lib/mobility/accumulator.rb +0 -33
- data/lib/mobility/adapter.rb +0 -20
- data/lib/mobility/backends/active_record/column/query_methods.rb +0 -42
- data/lib/mobility/backends/active_record/container/json_query_methods.rb +0 -36
- data/lib/mobility/backends/active_record/container/jsonb_query_methods.rb +0 -33
- data/lib/mobility/backends/active_record/hstore/query_methods.rb +0 -25
- data/lib/mobility/backends/active_record/json/query_methods.rb +0 -30
- data/lib/mobility/backends/active_record/jsonb/query_methods.rb +0 -26
- data/lib/mobility/backends/active_record/key_value/query_methods.rb +0 -76
- data/lib/mobility/backends/active_record/pg_query_methods.rb +0 -154
- data/lib/mobility/backends/active_record/serialized/query_methods.rb +0 -34
- data/lib/mobility/backends/active_record/table/query_methods.rb +0 -105
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e5043fe3bb4af2f09abf2cb81541680639b650777657e4ca776e178295b17ef8
|
4
|
+
data.tar.gz: cc8bead5891cd7ddcaf3d1166eb03102705c820551ffd75563219d293a2badc8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b2753f7b33cac63eba6f8edee4a328cea6cc2f9f5ec36cf19a50a71731b7c1b1474b061c86ec82abd8b096b8aeb43d1e5900da8f17fd9e8c72d70052dbc8672b
|
7
|
+
data.tar.gz: 3eee2b8e73d06235472c3f1766eb64d2da8fd0367710d69865442c93c38a555fef6a8155f797d0e221ebb1fa74498786221b2da7896760841aaa2f20b2bf99ac
|
checksums.yaml.gz.sig
CHANGED
@@ -1,2 +1,3 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
#G��j�*l�:�)��y ��[��w� 33��d�Nz����`
|
2
|
+
�<�[��P����$�;����tS/趔9�v��Itm �\eP����F�_�y�n�WJܔhM������ES�;�� ���F,��x%�E�t7����aՑ��I��edd����&��)ױv����MB��,�l�d��eS�e���t3�3�:eQ�؛H����q��eJ9������N/�p<_���
|
3
|
+
n2Ў �g���.����ߋ,K
|
data.tar.gz.sig
CHANGED
Binary file
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,46 @@
|
|
1
1
|
# Mobility Changelog
|
2
2
|
|
3
|
+
## 0.7
|
4
|
+
|
5
|
+
### 0.7.0 (May 30, 2018)
|
6
|
+
|
7
|
+
* Restructure querying into plugin (ActiveRecord only)
|
8
|
+
([#216](https://github.com/shioyama/mobility/pull/216),
|
9
|
+
[#225](https://github.com/shioyama/mobility/pull/225),
|
10
|
+
[#222](https://github.com/shioyama/mobility/pull/222),
|
11
|
+
* Support querying on multiple locales at once
|
12
|
+
([#232](https://github.com/shioyama/mobility/pull/232))
|
13
|
+
* Allow passing locale to query methods
|
14
|
+
([#233](https://github.com/shioyama/mobility/pull/233))
|
15
|
+
* Support matches and lower predicate methods
|
16
|
+
([#235](https://github.com/shioyama/mobility/pull/235))
|
17
|
+
* Implement case-insensitive uniqueness validation
|
18
|
+
([#236](https://github.com/shioyama/mobility/pull/236),
|
19
|
+
[#237](https://github.com/shioyama/mobility/pull/237))
|
20
|
+
* Support equality predicates between jsonb nodes
|
21
|
+
([#240](https://github.com/shioyama/mobility/pull/240))
|
22
|
+
* Prefer -> operator when comparing jsonb columns
|
23
|
+
([#241](https://github.com/shioyama/mobility/pull/241))
|
24
|
+
* Define options on subclassed backend class
|
25
|
+
([#218](https://github.com/shioyama/mobility/pull/218))
|
26
|
+
* Add column_affix
|
27
|
+
* Use module_eval to define locale_accessors
|
28
|
+
([#219](https://github.com/shioyama/mobility/pull/219))
|
29
|
+
* Improve performance of getters/setters
|
30
|
+
([#220](https://github.com/shioyama/mobility/pull/220))
|
31
|
+
* Do not include Default plugin by default
|
32
|
+
([#223](https://github.com/shioyama/mobility/pull/223))
|
33
|
+
* Add specific attribute types to basic usage example
|
34
|
+
([#228](https://github.com/shioyama/mobility/pull/228)). Thanks
|
35
|
+
[thatguysimon](https://github.com/thatguysimon)!
|
36
|
+
* Remove Mobility::Interface
|
37
|
+
([#229](https://github.com/shioyama/mobility/pull/229))
|
38
|
+
* Freeze attributes array
|
39
|
+
([#230](https://github.com/shioyama/mobility/pull/230))
|
40
|
+
|
3
41
|
## 0.6
|
4
42
|
|
5
|
-
### 0.6.
|
43
|
+
### 0.6.0 (April 26, 2018)
|
6
44
|
|
7
45
|
* Add column_prefix/column_suffix options to hash backends
|
8
46
|
([#200](https://github.com/shioyama/mobility/pull/199) and
|
data/Gemfile.lock
CHANGED
@@ -8,14 +8,45 @@ PATH
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
+
actionpack (5.2.0)
|
12
|
+
actionview (= 5.2.0)
|
13
|
+
activesupport (= 5.2.0)
|
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)
|
19
|
+
activesupport (= 5.2.0)
|
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)
|
25
|
+
activesupport (= 5.2.0)
|
26
|
+
activerecord (5.2.0)
|
27
|
+
activemodel (= 5.2.0)
|
28
|
+
activesupport (= 5.2.0)
|
29
|
+
arel (>= 9.0)
|
30
|
+
activesupport (5.2.0)
|
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)
|
11
36
|
benchmark-ips (2.7.2)
|
12
|
-
|
37
|
+
builder (3.2.3)
|
38
|
+
byebug (10.0.2)
|
13
39
|
coderay (1.1.2)
|
14
40
|
concurrent-ruby (1.0.5)
|
15
|
-
|
41
|
+
crass (1.0.4)
|
42
|
+
database_cleaner (1.7.0)
|
16
43
|
diff-lcs (1.3)
|
44
|
+
erubi (1.7.1)
|
17
45
|
ffi (1.9.23)
|
18
46
|
formatador (0.2.5)
|
47
|
+
generator_spec (0.9.4)
|
48
|
+
activesupport (>= 3.0.0)
|
49
|
+
railties (>= 3.0.0)
|
19
50
|
guard (2.14.2)
|
20
51
|
formatador (>= 0.2.4)
|
21
52
|
listen (>= 2.7, < 4.0)
|
@@ -30,16 +61,23 @@ GEM
|
|
30
61
|
guard (~> 2.1)
|
31
62
|
guard-compat (~> 1.1)
|
32
63
|
rspec (>= 2.99.0, < 4.0)
|
33
|
-
i18n (1.0.
|
64
|
+
i18n (1.0.1)
|
34
65
|
concurrent-ruby (~> 1.0)
|
35
66
|
listen (3.1.5)
|
36
67
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
37
68
|
rb-inotify (~> 0.9, >= 0.9.7)
|
38
69
|
ruby_dep (~> 1.2)
|
39
|
-
|
70
|
+
loofah (2.2.2)
|
71
|
+
crass (~> 1.0.2)
|
72
|
+
nokogiri (>= 1.5.9)
|
73
|
+
lumberjack (1.0.13)
|
40
74
|
method_source (0.9.0)
|
75
|
+
mini_portile2 (2.3.0)
|
76
|
+
minitest (5.11.3)
|
41
77
|
mysql2 (0.4.10)
|
42
78
|
nenv (0.3.0)
|
79
|
+
nokogiri (1.8.2)
|
80
|
+
mini_portile2 (~> 2.3.0)
|
43
81
|
notiffany (0.1.1)
|
44
82
|
nenv (~> 0.1)
|
45
83
|
shellany (~> 0.0)
|
@@ -50,8 +88,21 @@ GEM
|
|
50
88
|
pry-byebug (3.6.0)
|
51
89
|
byebug (~> 10.0)
|
52
90
|
pry (~> 0.10)
|
53
|
-
rack (2.0.
|
54
|
-
|
91
|
+
rack (2.0.5)
|
92
|
+
rack-test (1.0.0)
|
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.4)
|
98
|
+
loofah (~> 2.2, >= 2.2.2)
|
99
|
+
railties (5.2.0)
|
100
|
+
actionpack (= 5.2.0)
|
101
|
+
activesupport (= 5.2.0)
|
102
|
+
method_source
|
103
|
+
rake (>= 0.8.7)
|
104
|
+
thor (>= 0.18.1, < 2.0)
|
105
|
+
rake (12.3.1)
|
55
106
|
rb-fsevent (0.10.3)
|
56
107
|
rb-inotify (0.9.10)
|
57
108
|
ffi (>= 0.5.0, < 2)
|
@@ -71,29 +122,33 @@ GEM
|
|
71
122
|
rspec-support (~> 3.7.0)
|
72
123
|
rspec-support (3.7.1)
|
73
124
|
ruby_dep (1.5.0)
|
74
|
-
sequel (5.7.1)
|
75
125
|
shellany (0.0.1)
|
76
126
|
sqlite3 (1.3.13)
|
77
127
|
thor (0.20.0)
|
78
|
-
|
128
|
+
thread_safe (0.3.6)
|
129
|
+
tzinfo (1.2.5)
|
130
|
+
thread_safe (~> 0.1)
|
131
|
+
yard (0.9.13)
|
79
132
|
|
80
133
|
PLATFORMS
|
81
134
|
ruby
|
82
135
|
|
83
136
|
DEPENDENCIES
|
137
|
+
activerecord (>= 5.2.0.rc2, < 5.3)
|
84
138
|
benchmark-ips
|
85
139
|
bundler (~> 1.12)
|
86
140
|
database_cleaner (~> 1.5, >= 1.5.3)
|
141
|
+
generator_spec (~> 0.9.4)
|
87
142
|
guard-rspec
|
88
143
|
mobility!
|
89
144
|
mysql2 (~> 0.4.9)
|
90
145
|
pg (< 1.0)
|
91
146
|
pry-byebug
|
147
|
+
railties (>= 5.2.0.rc2, < 5.3)
|
92
148
|
rake (~> 12, >= 12.2.1)
|
93
149
|
rspec (~> 3.0)
|
94
|
-
sequel (>= 5.0.0, < 6.0.0)
|
95
150
|
sqlite3
|
96
151
|
yard (~> 0.9.0)
|
97
152
|
|
98
153
|
BUNDLED WITH
|
99
|
-
1.16.
|
154
|
+
1.16.1
|
data/README.md
CHANGED
@@ -3,14 +3,11 @@ Mobility
|
|
3
3
|
|
4
4
|
[][gem]
|
5
5
|
[][travis]
|
6
|
-
[][gemnasium]
|
7
6
|
[][codeclimate]
|
8
|
-
|
9
7
|
[](https://gitter.im/mobility-ruby/mobility)
|
10
8
|
|
11
9
|
[gem]: https://rubygems.org/gems/mobility
|
12
10
|
[travis]: https://travis-ci.org/shioyama/mobility
|
13
|
-
[gemnasium]: https://gemnasium.com/shioyama/mobility
|
14
11
|
[codeclimate]: https://codeclimate.com/github/shioyama/mobility
|
15
12
|
[docs]: http://www.rubydoc.info/gems/mobility
|
16
13
|
[wiki]: https://github.com/shioyama/mobility/wiki
|
@@ -54,7 +51,7 @@ Installation
|
|
54
51
|
Add this line to your application's Gemfile:
|
55
52
|
|
56
53
|
```ruby
|
57
|
-
gem 'mobility', '~> 0.
|
54
|
+
gem 'mobility', '~> 0.7.0'
|
58
55
|
```
|
59
56
|
|
60
57
|
Mobility is cryptographically signed. To be sure the gem you install hasn't
|
@@ -169,6 +166,18 @@ class Word < ApplicationRecord
|
|
169
166
|
end
|
170
167
|
```
|
171
168
|
|
169
|
+
Note: When using the KeyValue backend, use the options hash to pass each attribute's type:
|
170
|
+
|
171
|
+
```ruby
|
172
|
+
class Word < ApplicationRecord
|
173
|
+
extend Mobility
|
174
|
+
translates :name, type: :string
|
175
|
+
translates :meaning, type: :text
|
176
|
+
end
|
177
|
+
```
|
178
|
+
|
179
|
+
This is important because this is how Mobility knows to which of the [two translation tables](https://github.com/shioyama/mobility/wiki/KeyValue-Backend) it should save your translation.
|
180
|
+
|
172
181
|
You now have translated attributes `name` and `meaning` on the model `Word`.
|
173
182
|
You can set their values like you would any other attribute:
|
174
183
|
|
@@ -658,13 +667,13 @@ complex implementations.
|
|
658
667
|
|
659
668
|
### <a name="querying"></a>Querying
|
660
669
|
|
661
|
-
|
662
|
-
|
663
|
-
`except`
|
664
|
-
class method, which will return a model relation extended
|
665
|
-
Mobility-specific query method overrides.
|
670
|
+
Mobility backends also support querying on translated attributes, in two
|
671
|
+
different ways. The first is via query methods like `where` (and `not` and
|
672
|
+
`find_by` in ActiveRecord, and `except` in Sequel). To query this way, use the
|
673
|
+
`i18n` class method, which will return a model relation or dataset extended
|
674
|
+
with Mobility-specific query method overrides.
|
666
675
|
|
667
|
-
So assuming a model:
|
676
|
+
So for ActiveRecord, assuming a model:
|
668
677
|
|
669
678
|
```ruby
|
670
679
|
class Post < ApplicationRecord
|
@@ -686,29 +695,29 @@ results in the SQL:
|
|
686
695
|
|
687
696
|
```sql
|
688
697
|
SELECT "posts".* FROM "posts"
|
689
|
-
INNER JOIN "mobility_string_translations" "
|
690
|
-
ON "
|
691
|
-
AND "
|
692
|
-
AND "
|
693
|
-
AND "
|
694
|
-
INNER JOIN "mobility_text_translations" "
|
695
|
-
ON "
|
696
|
-
AND "
|
697
|
-
AND "
|
698
|
-
AND "
|
699
|
-
WHERE "
|
700
|
-
AND "
|
698
|
+
INNER JOIN "mobility_string_translations" "Post_title_en_string_translations"
|
699
|
+
ON "Post_title_en_string_translations"."key" = 'title'
|
700
|
+
AND "Post_title_en_string_translations"."locale" = 'en'
|
701
|
+
AND "Post_title_en_string_translations"."translatable_type" = 'Post'
|
702
|
+
AND "Post_title_en_string_translations"."translatable_id" = "posts"."id"
|
703
|
+
INNER JOIN "mobility_text_translations" "Post_content_en_text_translations"
|
704
|
+
ON "Post_content_en_text_translations"."key" = 'content'
|
705
|
+
AND "Post_content_en_text_translations"."locale" = 'en'
|
706
|
+
AND "Post_content_en_text_translations"."translatable_type" = 'Post'
|
707
|
+
AND "Post_content_en_text_translations"."translatable_id" = "posts"."id"
|
708
|
+
WHERE "Post_title_en_string_translations"."value" = 'foo'
|
709
|
+
AND "Post_content_en_text_translations"."value" = 'bar'
|
701
710
|
```
|
702
711
|
|
703
712
|
As can be seen in the query above, behind the scenes Mobility joins two tables,
|
704
713
|
one with string translations and one with text translations, and aliases the
|
705
|
-
joins for each attribute so as to match the particular
|
706
|
-
query. Details of how this is done can
|
707
|
-
KeyValue
|
714
|
+
joins for each attribute so as to match the particular model, attribute(s),
|
715
|
+
locale(s) and value(s) passed in to the query. Details of how this is done can
|
716
|
+
be found in the [Wiki page for the KeyValue
|
708
717
|
backend](https://github.com/shioyama/mobility/wiki/KeyValue-Backend#querying).
|
709
718
|
|
710
|
-
If you would prefer to avoid the `i18n` scope everywhere, define it as
|
711
|
-
default scope on your model:
|
719
|
+
If you would prefer to avoid the `i18n` scope everywhere, you can define it as
|
720
|
+
a default scope on your model:
|
712
721
|
|
713
722
|
```ruby
|
714
723
|
class Post < ApplicationRecord
|
@@ -726,6 +735,29 @@ Post.find_by(title: "Introducing Mobility")
|
|
726
735
|
#=> finds post with English title "Introducing Mobility"
|
727
736
|
```
|
728
737
|
|
738
|
+
If you want more fine-grained control over your queries, you can alternatively
|
739
|
+
pass a block to the query method and call attribute names from the block scope
|
740
|
+
to build Arel predicates:
|
741
|
+
|
742
|
+
```ruby
|
743
|
+
Post.i18n do |title, content|
|
744
|
+
title.matches("foo").and(content.matches("bar"))
|
745
|
+
end
|
746
|
+
```
|
747
|
+
|
748
|
+
which generates the same SQL as above, except the `WHERE` clause becomes:
|
749
|
+
|
750
|
+
```sql
|
751
|
+
SELECT "posts".* FROM "posts"
|
752
|
+
...
|
753
|
+
WHERE "Post_title_en_string_translations"."value" ILIKE 'foo'
|
754
|
+
AND "Post_content_en_text_translations"."value" ILIKE 'bar'
|
755
|
+
```
|
756
|
+
|
757
|
+
The block-format query format is very powerful and allows you to build complex
|
758
|
+
backend-independent queries on translated and untranslated attributes without
|
759
|
+
having to deal with the details of how these translations are stored.
|
760
|
+
|
729
761
|
<a name="backends"></a>Backends
|
730
762
|
--------
|
731
763
|
|
@@ -817,6 +849,10 @@ pages of the wiki and in the API documentation
|
|
817
849
|
and
|
818
850
|
[`Mobility::Backend::Hstore`](http://www.rubydoc.info/gems/mobility/Mobility/Backends/Hstore)).
|
819
851
|
|
852
|
+
*Note: The Json backend (`:json`) may also work with recent versions of MySQL
|
853
|
+
with JSON column support, although this backend/db combination is not tested.
|
854
|
+
See [this issue](https://github.com/shioyama/mobility/issues/226) for details.*
|
855
|
+
|
820
856
|
Development
|
821
857
|
-----------
|
822
858
|
|
data/lib/mobility.rb
CHANGED
@@ -25,8 +25,6 @@ in backends to define gem-dependent behavior.
|
|
25
25
|
|
26
26
|
=end
|
27
27
|
module Mobility
|
28
|
-
require "mobility/adapter"
|
29
|
-
require "mobility/accumulator"
|
30
28
|
require "mobility/attributes"
|
31
29
|
require "mobility/backend"
|
32
30
|
require "mobility/backends"
|
@@ -83,8 +81,9 @@ module Mobility
|
|
83
81
|
def extended(model_class)
|
84
82
|
return if model_class.respond_to? :mobility_accessor
|
85
83
|
|
86
|
-
model_class.
|
87
|
-
|
84
|
+
model_class.extend Translates
|
85
|
+
#TODO: Remove in v1.0
|
86
|
+
model_class.include InstanceMethods
|
88
87
|
|
89
88
|
if translates = Mobility.config.accessor_method
|
90
89
|
model_class.singleton_class.send(:alias_method, translates, :mobility_accessor)
|
@@ -177,6 +176,7 @@ module Mobility
|
|
177
176
|
config.public_send(:default_fallbacks, *args)
|
178
177
|
end
|
179
178
|
|
179
|
+
# TODO: Make private in v1.0
|
180
180
|
def new_fallbacks(*args)
|
181
181
|
config.public_send(:new_fallbacks, *args)
|
182
182
|
end
|
@@ -244,48 +244,33 @@ EOL
|
|
244
244
|
end
|
245
245
|
end
|
246
246
|
|
247
|
+
# TODO: Remove entire module in v1.0
|
247
248
|
module InstanceMethods
|
248
249
|
# Fetch backend for an attribute
|
249
|
-
# @deprecated Use
|
250
|
+
# @deprecated Use mobility_backends[:<attribute>] instead.
|
250
251
|
# @param [String] attribute Attribute
|
251
|
-
# TODO: Remove in v1.0
|
252
252
|
def mobility_backend_for(attribute)
|
253
253
|
warn %{
|
254
254
|
WARNING: mobility_backend_for is deprecated and will be removed in the next
|
255
|
-
|
256
|
-
|
257
|
-
mobility.backend_for(attribute)
|
258
|
-
end
|
259
|
-
|
260
|
-
def initialize_dup(other)
|
261
|
-
@mobility_backends = nil
|
262
|
-
super
|
255
|
+
version of Mobility. Use <post>.<attribute>_backend instead.}
|
256
|
+
mobility_backends[attribute.to_sym]
|
263
257
|
end
|
264
258
|
|
265
259
|
def mobility
|
260
|
+
warn %{
|
261
|
+
WARNING: <post>.mobility is deprecated and will be removed in the next
|
262
|
+
version of Mobility. To get backends, use <post>.<attribute>_backend instead.}
|
266
263
|
@mobility ||= Adapter.new(self)
|
267
264
|
end
|
268
|
-
end
|
269
|
-
|
270
|
-
module ClassMethods
|
271
|
-
include Translates
|
272
|
-
|
273
|
-
def mobility
|
274
|
-
@mobility ||= Accumulator.new
|
275
|
-
end
|
276
265
|
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
def inherited(subclass)
|
282
|
-
subclass.instance_variable_set(:@mobility, mobility.dup)
|
283
|
-
super
|
266
|
+
class Adapter < Struct.new(:model)
|
267
|
+
def backend_for(attribute)
|
268
|
+
model.mobility_backends[attribute.to_sym]
|
269
|
+
end
|
284
270
|
end
|
271
|
+
private_constant :Adapter
|
285
272
|
end
|
286
|
-
private_constant :ClassMethods, :InstanceMethods
|
287
273
|
|
288
|
-
class BackendRequired < ArgumentError; end
|
289
274
|
class InvalidLocale < I18n::InvalidLocale; end
|
290
275
|
class NotImplementedError < StandardError; end
|
291
276
|
end
|
@@ -1,4 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
require "mobility/arel"
|
3
|
+
|
2
4
|
module Mobility
|
3
5
|
=begin
|
4
6
|
|
@@ -10,7 +12,6 @@ Module loading ActiveRecord-specific classes for Mobility models.
|
|
10
12
|
|
11
13
|
def self.included(model_class)
|
12
14
|
model_class.class_eval do
|
13
|
-
extend QueryMethod.new(Mobility.query_method)
|
14
15
|
unless const_defined?(:UniquenessValidator)
|
15
16
|
const_set(:UniquenessValidator,
|
16
17
|
Class.new(::Mobility::ActiveRecord::UniquenessValidator))
|
@@ -18,16 +19,5 @@ Module loading ActiveRecord-specific classes for Mobility models.
|
|
18
19
|
delegate :translated_attribute_names, to: :class
|
19
20
|
end
|
20
21
|
end
|
21
|
-
|
22
|
-
class QueryMethod < Module
|
23
|
-
def initialize(query_method)
|
24
|
-
module_eval <<-EOM, __FILE__, __LINE__ + 1
|
25
|
-
def #{query_method}
|
26
|
-
all
|
27
|
-
end
|
28
|
-
EOM
|
29
|
-
end
|
30
|
-
end
|
31
|
-
private_constant :QueryMethod
|
32
22
|
end
|
33
23
|
end
|