mobility 0.1.3 → 0.1.4
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 +4 -4
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +7 -65
- data/README.md +35 -14
- data/lib/mobility.rb +2 -1
- data/lib/mobility/active_model/backend_resetter.rb +1 -1
- data/lib/mobility/active_record/backend_resetter.rb +1 -1
- data/lib/mobility/attributes.rb +10 -10
- data/lib/mobility/backend.rb +1 -1
- data/lib/mobility/backend/active_model/dirty.rb +2 -2
- data/lib/mobility/backend/active_record/column/query_methods.rb +8 -9
- data/lib/mobility/backend/active_record/hash_valued.rb +2 -2
- data/lib/mobility/backend/active_record/hstore.rb +1 -1
- data/lib/mobility/backend/active_record/hstore/query_methods.rb +1 -1
- data/lib/mobility/backend/active_record/jsonb/query_methods.rb +1 -1
- data/lib/mobility/backend/active_record/key_value.rb +3 -3
- data/lib/mobility/backend/active_record/query_methods.rb +1 -1
- data/lib/mobility/backend/active_record/serialized.rb +2 -2
- data/lib/mobility/backend/active_record/serialized/query_methods.rb +1 -1
- data/lib/mobility/backend/active_record/table.rb +3 -3
- data/lib/mobility/backend/cache.rb +3 -3
- data/lib/mobility/backend/column.rb +2 -2
- data/lib/mobility/backend/sequel/column/query_methods.rb +1 -1
- data/lib/mobility/backend/sequel/dirty.rb +4 -2
- data/lib/mobility/backend/sequel/hash_valued.rb +2 -2
- data/lib/mobility/backend/sequel/hstore.rb +1 -1
- data/lib/mobility/backend/sequel/hstore/query_methods.rb +1 -1
- data/lib/mobility/backend/sequel/jsonb/query_methods.rb +1 -1
- data/lib/mobility/backend/sequel/key_value.rb +2 -2
- data/lib/mobility/backend/sequel/query_methods.rb +1 -1
- data/lib/mobility/backend/sequel/serialized.rb +2 -2
- data/lib/mobility/backend/sequel/serialized/query_methods.rb +1 -1
- data/lib/mobility/backend/sequel/table.rb +3 -3
- data/lib/mobility/sequel/backend_resetter.rb +1 -1
- data/lib/mobility/version.rb +1 -1
- data/lib/sequel/plugins/mobility.rb +11 -0
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 459bb89be95d70ecd22eed9ea9b0672615428a1f
|
|
4
|
+
data.tar.gz: a8a96d4906781731c7cb00da31850f2493d1d9e9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2f6e6dbbe8085153bc920405dd9c95f988c2b215108b23e0d2330bcc44e286b2860f30cc51a4fa351614365777a3a4c2193699369b6b98233c11e46ef03deeb4
|
|
7
|
+
data.tar.gz: c506df78bcabef6249efa7aedea2e6753c6e453c670cd097a155be7ca5649a3a6c29c051192cac2caa2980b130ab23c2a59e723c8f17c4fd4902244a6f43e496
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
## 0.1
|
|
4
4
|
|
|
5
|
+
### 0.1.4
|
|
6
|
+
* Fix configuration reload issue ([#1](https://github.com/shioyama/mobility/issues/1), fixed in [478b669dae90edf9feb7c011ae93e8157dc4e2b4](https://github.com/shioyama/mobility/commit/478b669dae90edf9feb7c011ae93e8157dc4e2b4))
|
|
7
|
+
* Code refactoring/cleanup ([e4dcc791c246e377352b9ac154d2b1c4aec8e98e](https://github.com/shioyama/mobility/commit/e4dcc791c246e377352b9ac154d2b1c4aec8e98e), [64f434ea7a46c9353c3638c58a3258f0fcb81821](https://github.com/shioyama/mobility/commit/64f434ea7a46c9353c3638c58a3258f0fcb81821), [8df2bbdead883725d2c87020f836b644b4d28e5c](https://github.com/shioyama/mobility/commit/8df2bbdead883725d2c87020f836b644b4d28e5c), [326a0977c98348dad85a927c20dd69fe5acb2a9e](https://github.com/shioyama/mobility/commit/326a0977c98348dad85a927c20dd69fe5acb2a9e))
|
|
8
|
+
* Allow using Sequel `plugin` to include Mobility in model ([b0db7cc28a47e13c6888ef263260e8dff281543d](https://github.com/shioyama/mobility/commit/b0db7cc28a47e13c6888ef263260e8dff281543d))
|
|
9
|
+
|
|
5
10
|
### 0.1.3
|
|
6
11
|
|
|
7
12
|
* Add homepage to gemspec
|
data/Gemfile.lock
CHANGED
|
@@ -1,52 +1,20 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
mobility (0.1.
|
|
4
|
+
mobility (0.1.3)
|
|
5
5
|
i18n (>= 0.6.10)
|
|
6
6
|
request_store (~> 1.0)
|
|
7
7
|
|
|
8
8
|
GEM
|
|
9
9
|
remote: https://rubygems.org/
|
|
10
10
|
specs:
|
|
11
|
-
actionpack (4.2.7.1)
|
|
12
|
-
actionview (= 4.2.7.1)
|
|
13
|
-
activesupport (= 4.2.7.1)
|
|
14
|
-
rack (~> 1.6)
|
|
15
|
-
rack-test (~> 0.6.2)
|
|
16
|
-
rails-dom-testing (~> 1.0, >= 1.0.5)
|
|
17
|
-
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
|
18
|
-
actionview (4.2.7.1)
|
|
19
|
-
activesupport (= 4.2.7.1)
|
|
20
|
-
builder (~> 3.1)
|
|
21
|
-
erubis (~> 2.7.0)
|
|
22
|
-
rails-dom-testing (~> 1.0, >= 1.0.5)
|
|
23
|
-
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
|
24
|
-
activemodel (4.2.7.1)
|
|
25
|
-
activesupport (= 4.2.7.1)
|
|
26
|
-
builder (~> 3.1)
|
|
27
|
-
activerecord (4.2.7.1)
|
|
28
|
-
activemodel (= 4.2.7.1)
|
|
29
|
-
activesupport (= 4.2.7.1)
|
|
30
|
-
arel (~> 6.0)
|
|
31
|
-
activesupport (4.2.7.1)
|
|
32
|
-
i18n (~> 0.7)
|
|
33
|
-
json (~> 1.7, >= 1.7.7)
|
|
34
|
-
minitest (~> 5.1)
|
|
35
|
-
thread_safe (~> 0.3, >= 0.3.4)
|
|
36
|
-
tzinfo (~> 1.1)
|
|
37
|
-
arel (6.0.4)
|
|
38
|
-
builder (3.2.3)
|
|
39
11
|
byebug (9.0.6)
|
|
40
12
|
coderay (1.1.1)
|
|
41
13
|
database_cleaner (1.5.3)
|
|
42
14
|
diff-lcs (1.3)
|
|
43
|
-
|
|
44
|
-
ffi (1.9.17)
|
|
15
|
+
ffi (1.9.18)
|
|
45
16
|
formatador (0.2.5)
|
|
46
|
-
|
|
47
|
-
activesupport (>= 3.0.0)
|
|
48
|
-
railties (>= 3.0.0)
|
|
49
|
-
guard (2.14.0)
|
|
17
|
+
guard (2.14.1)
|
|
50
18
|
formatador (>= 0.2.4)
|
|
51
19
|
listen (>= 2.7, < 4.0)
|
|
52
20
|
lumberjack (~> 1.0)
|
|
@@ -60,22 +28,15 @@ GEM
|
|
|
60
28
|
guard (~> 2.1)
|
|
61
29
|
guard-compat (~> 1.1)
|
|
62
30
|
rspec (>= 2.99.0, < 4.0)
|
|
63
|
-
i18n (0.
|
|
64
|
-
json (1.8.6)
|
|
31
|
+
i18n (0.8.1)
|
|
65
32
|
listen (3.1.5)
|
|
66
33
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
|
67
34
|
rb-inotify (~> 0.9, >= 0.9.7)
|
|
68
35
|
ruby_dep (~> 1.2)
|
|
69
|
-
loofah (2.0.3)
|
|
70
|
-
nokogiri (>= 1.5.9)
|
|
71
36
|
lumberjack (1.0.11)
|
|
72
37
|
method_source (0.8.2)
|
|
73
|
-
mini_portile2 (2.1.0)
|
|
74
|
-
minitest (5.10.1)
|
|
75
38
|
mysql2 (0.3.21)
|
|
76
39
|
nenv (0.3.0)
|
|
77
|
-
nokogiri (1.6.8.1)
|
|
78
|
-
mini_portile2 (~> 2.1.0)
|
|
79
40
|
notiffany (0.1.1)
|
|
80
41
|
nenv (~> 0.1)
|
|
81
42
|
shellany (~> 0.0)
|
|
@@ -87,25 +48,9 @@ GEM
|
|
|
87
48
|
pry-byebug (3.4.2)
|
|
88
49
|
byebug (~> 9.0)
|
|
89
50
|
pry (~> 0.10)
|
|
90
|
-
rack (1.6.5)
|
|
91
|
-
rack-test (0.6.3)
|
|
92
|
-
rack (>= 1.0)
|
|
93
|
-
rails-deprecated_sanitizer (1.0.3)
|
|
94
|
-
activesupport (>= 4.2.0.alpha)
|
|
95
|
-
rails-dom-testing (1.0.7)
|
|
96
|
-
activesupport (>= 4.2.0.beta, < 5.0)
|
|
97
|
-
nokogiri (~> 1.6.0)
|
|
98
|
-
rails-deprecated_sanitizer (>= 1.0.1)
|
|
99
|
-
rails-html-sanitizer (1.0.3)
|
|
100
|
-
loofah (~> 2.0)
|
|
101
|
-
railties (4.2.7.1)
|
|
102
|
-
actionpack (= 4.2.7.1)
|
|
103
|
-
activesupport (= 4.2.7.1)
|
|
104
|
-
rake (>= 0.8.7)
|
|
105
|
-
thor (>= 0.18.1, < 2.0)
|
|
106
51
|
rake (10.5.0)
|
|
107
52
|
rb-fsevent (0.9.8)
|
|
108
|
-
rb-inotify (0.9.
|
|
53
|
+
rb-inotify (0.9.8)
|
|
109
54
|
ffi (>= 0.5.0)
|
|
110
55
|
request_store (1.3.2)
|
|
111
56
|
rspec (3.5.0)
|
|
@@ -125,23 +70,19 @@ GEM
|
|
|
125
70
|
rspec-support (~> 3.5.0)
|
|
126
71
|
rspec-support (3.5.0)
|
|
127
72
|
ruby_dep (1.5.0)
|
|
73
|
+
sequel (4.42.1)
|
|
128
74
|
shellany (0.0.1)
|
|
129
75
|
slop (3.6.0)
|
|
130
76
|
sqlite3 (1.3.13)
|
|
131
77
|
thor (0.19.4)
|
|
132
|
-
thread_safe (0.3.5)
|
|
133
|
-
tzinfo (1.2.2)
|
|
134
|
-
thread_safe (~> 0.1)
|
|
135
78
|
yard (0.9.8)
|
|
136
79
|
|
|
137
80
|
PLATFORMS
|
|
138
81
|
ruby
|
|
139
82
|
|
|
140
83
|
DEPENDENCIES
|
|
141
|
-
activerecord (>= 4.2.6, < 5.0)
|
|
142
84
|
bundler (~> 1.12)
|
|
143
85
|
database_cleaner (~> 1.5.3)
|
|
144
|
-
generator_spec (~> 0.9.3)
|
|
145
86
|
guard-rspec
|
|
146
87
|
mobility!
|
|
147
88
|
mysql2 (~> 0.3.10)
|
|
@@ -150,6 +91,7 @@ DEPENDENCIES
|
|
|
150
91
|
rake (~> 10.0)
|
|
151
92
|
rspec (~> 3.0)
|
|
152
93
|
rspec-its (~> 1.2.0)
|
|
94
|
+
sequel (>= 4.0.0, < 5.0)
|
|
153
95
|
sqlite3
|
|
154
96
|
yard (~> 0.9.0)
|
|
155
97
|
|
data/README.md
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
[travis]: https://travis-ci.org/shioyama/mobility
|
|
3
3
|
[gemnasium]: https://gemnasium.com/shioyama/mobility
|
|
4
4
|
[codeclimate]: https://codeclimate.com/github/shioyama/mobility
|
|
5
|
+
[docs]: http://www.rubydoc.info/gems/mobility/0.1.4
|
|
5
6
|
|
|
6
7
|
# Mobility
|
|
7
8
|
|
|
@@ -16,12 +17,17 @@ pluggable, customizable "backends" implemented via a common interface.
|
|
|
16
17
|
|
|
17
18
|
Out of the box, Mobility supports:
|
|
18
19
|
|
|
19
|
-
- translations as localized columns on the model table (like [
|
|
20
|
-
- translations on a model-specific table (like [
|
|
20
|
+
- translations as localized columns on the model table (like [traco](https://rubygems.org/gems/traco))
|
|
21
|
+
- translations on a model-specific table (like [globalize](https://rubygems.org/gems/globalize), [rails-translate-models](https://rubygems.org/gems/rails-translate-models), [puret](https://rubygems.org/gems/puret), etc)
|
|
21
22
|
- translations as values on globally shared key-value tables (the default, see [below](#backend))
|
|
22
|
-
- translations as values of a hash serialized on a text column of the model table (like [
|
|
23
|
-
- translations as values of a hash stored as an hstore column on a Postgres
|
|
24
|
-
|
|
23
|
+
- translations as values of a hash serialized on a text column of the model table (like [multilang](https://rubygems.org/gems/multilang))
|
|
24
|
+
- translations as values of a hash stored as an hstore column on a Postgres
|
|
25
|
+
model table (like [trasto](https://rubygems.org/gems/trasto),
|
|
26
|
+
[multilang-hstore](https://rubygems.org/gems/multilang-hstore),
|
|
27
|
+
[hstore_translate](https://rubygems.org/gems/hstore_translate),
|
|
28
|
+
[sequel-hstore-translate](https://rubygems.org/gems/sequel-hstore-translate),
|
|
29
|
+
etc.)
|
|
30
|
+
- translations as values of a hash stored as a jsonb column on a Postgres model table (like [json_translate](https://rubygems.org/gems/json_translate))
|
|
25
31
|
|
|
26
32
|
Each backend is implemented for both
|
|
27
33
|
[ActiveRecord](http://api.rubyonrails.org/classes/ActiveRecord/Base.html) and
|
|
@@ -42,12 +48,15 @@ features, including:
|
|
|
42
48
|
the form `<attribute>_<locale>` (similar to
|
|
43
49
|
[globalize-accessors](https://github.com/globalize/globalize-accessors))
|
|
44
50
|
|
|
51
|
+
For a detailed introduction to Mobility, see [Translating with
|
|
52
|
+
Mobility](http://dejimata.com/2017/3/3/translating-with-mobility).
|
|
53
|
+
|
|
45
54
|
## Installation
|
|
46
55
|
|
|
47
56
|
Add this line to your application's Gemfile:
|
|
48
57
|
|
|
49
58
|
```ruby
|
|
50
|
-
gem 'mobility', '~> 0.1.
|
|
59
|
+
gem 'mobility', '~> 0.1.4'
|
|
51
60
|
```
|
|
52
61
|
|
|
53
62
|
To translate attributes on a model, you must include (or extend) `Mobility`,
|
|
@@ -95,8 +104,9 @@ a class to add translated attributes:
|
|
|
95
104
|
|
|
96
105
|
```ruby
|
|
97
106
|
class Post < ActiveRecord::Base
|
|
107
|
+
include Mobility
|
|
98
108
|
translates :title, type: :string
|
|
99
|
-
translates :content, type: :
|
|
109
|
+
translates :content, type: :text
|
|
100
110
|
end
|
|
101
111
|
```
|
|
102
112
|
|
|
@@ -104,7 +114,7 @@ You now have translated attributes `title` and `content` on the model:
|
|
|
104
114
|
|
|
105
115
|
```ruby
|
|
106
116
|
I18n.locale = :en
|
|
107
|
-
post = Post.create(title: "
|
|
117
|
+
post = Post.create(title: "Mobility")
|
|
108
118
|
post.title #=> "Mobility"
|
|
109
119
|
I18n.locale = :ja
|
|
110
120
|
post.title #=> nil
|
|
@@ -123,9 +133,20 @@ else Mobility can do.
|
|
|
123
133
|
Requirements:
|
|
124
134
|
- Sequel >= 4.0
|
|
125
135
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
136
|
+
You can include `Mobility` just like in ActiveRecord, or you can use the
|
|
137
|
+
`mobility` plugin, which does the same thing:
|
|
138
|
+
|
|
139
|
+
```ruby
|
|
140
|
+
class Post < ::Sequel::Model
|
|
141
|
+
plugin :mobility
|
|
142
|
+
translates :title, type: :string
|
|
143
|
+
translates :content, type: :text
|
|
144
|
+
end
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Otherwise everything is almost identical to AR, with the exception that there
|
|
148
|
+
is no equivalent to a Rails generator (so you will need to create the migration
|
|
149
|
+
for any translation table(s) yourself, see the API docs for details).
|
|
129
150
|
|
|
130
151
|
## Usage
|
|
131
152
|
|
|
@@ -567,7 +588,7 @@ To this end, Mobility backends strictly enforce the rule that *no backend
|
|
|
567
588
|
should modify a parent class in any way which would interfere with other
|
|
568
589
|
backends operating on the same class*. This is done using a heavy dose of
|
|
569
590
|
metaprogramming, details of which can be found in the [API
|
|
570
|
-
documentation]
|
|
591
|
+
documentation][docs]
|
|
571
592
|
|
|
572
593
|
In practice, this means that you can use different backends for different
|
|
573
594
|
attributes *on the same class* without any conflict, e.g. (assuming we
|
|
@@ -647,7 +668,7 @@ end
|
|
|
647
668
|
|
|
648
669
|
For details on how to define a backend class, see the {Mobility::Backend}
|
|
649
670
|
module and other classes defined in the [API
|
|
650
|
-
documentation]
|
|
671
|
+
documentation][docs]
|
|
651
672
|
|
|
652
673
|
### Testing Backends
|
|
653
674
|
|
|
@@ -692,7 +713,7 @@ particular implementations.
|
|
|
692
713
|
## More Information
|
|
693
714
|
|
|
694
715
|
- [Github repository](https://www.github.com/shioyama/mobility)
|
|
695
|
-
- [API documentation]
|
|
716
|
+
- [API documentation][docs]
|
|
696
717
|
|
|
697
718
|
## License
|
|
698
719
|
|
data/lib/mobility.rb
CHANGED
|
@@ -67,6 +67,7 @@ module Mobility
|
|
|
67
67
|
begin
|
|
68
68
|
require "sequel"
|
|
69
69
|
raise VersionNotSupportedError, "Mobility is only compatible with Sequel 4.0 and greater" if ::Sequel::MAJOR < 4
|
|
70
|
+
require "sequel/plugins/mobility"
|
|
70
71
|
require "sequel/extensions/inflector"
|
|
71
72
|
require "sequel/plugins/dirty"
|
|
72
73
|
autoload :Sequel, "mobility/sequel"
|
|
@@ -149,7 +150,7 @@ module Mobility
|
|
|
149
150
|
# @!group Configuration Methods
|
|
150
151
|
# @return [Mobility::Configuration] Mobility configuration
|
|
151
152
|
def config
|
|
152
|
-
|
|
153
|
+
@configuration ||= Mobility::Configuration.new
|
|
153
154
|
end
|
|
154
155
|
|
|
155
156
|
# (see Mobility::Configuration#accessor_method)
|
|
@@ -17,7 +17,7 @@ Backend resetter for ActiveModel models. Adds hook to reset backend when
|
|
|
17
17
|
%i[changes_applied clear_changes_information].each do |method|
|
|
18
18
|
define_method method do
|
|
19
19
|
super()
|
|
20
|
-
instance_eval
|
|
20
|
+
instance_eval(&model_reset_method)
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
end
|
|
@@ -15,7 +15,7 @@ Backend resetter for ActiveRecord models. Adds hook on +reload+ event to
|
|
|
15
15
|
model_class.class_eval do
|
|
16
16
|
mod = Module.new do
|
|
17
17
|
define_method :reload do
|
|
18
|
-
super().tap { instance_eval
|
|
18
|
+
super().tap { instance_eval(&model_reset_method) }
|
|
19
19
|
end
|
|
20
20
|
end
|
|
21
21
|
include mod
|
data/lib/mobility/attributes.rb
CHANGED
|
@@ -112,20 +112,20 @@ with other backends.
|
|
|
112
112
|
attr_reader :backend_name
|
|
113
113
|
|
|
114
114
|
# @param [Symbol] method One of: [reader, writer, accessor]
|
|
115
|
-
# @param [Array<String>]
|
|
116
|
-
# @param [Hash]
|
|
117
|
-
# @option
|
|
118
|
-
# @option
|
|
115
|
+
# @param [Array<String>] attributes_ Attributes to define backend for
|
|
116
|
+
# @param [Hash] options_ Backend options hash
|
|
117
|
+
# @option options_ [Class] model_class Class of model
|
|
118
|
+
# @option options_ [Boolean, Array<Symbol>] locale_accessors Enable locale
|
|
119
119
|
# accessors or specify locales for which accessors should be defined on
|
|
120
120
|
# this model backend. Will default to +true+ if +dirty+ option is +true+.
|
|
121
|
-
# @option
|
|
122
|
-
# @option
|
|
123
|
-
# @option
|
|
121
|
+
# @option options_ [Boolean] cache (true) Enable cache for this model backend
|
|
122
|
+
# @option options_ [Boolean, Hash] fallbacks Enable fallbacks or specify fallbacks for this model backend
|
|
123
|
+
# @option options_ [Boolean] dirty Enable dirty tracking for this model backend
|
|
124
124
|
# @raise [ArgumentError] if method is not reader, writer or accessor
|
|
125
|
-
def initialize(method, *
|
|
125
|
+
def initialize(method, *attributes_, **options_)
|
|
126
126
|
raise ArgumentError, "method must be one of: reader, writer, accessor" unless %i[reader writer accessor].include?(method)
|
|
127
|
-
@options =
|
|
128
|
-
@attributes =
|
|
127
|
+
@options = options_
|
|
128
|
+
@attributes = attributes_.map &:to_s
|
|
129
129
|
model_class = options[:model_class]
|
|
130
130
|
@backend_name = options.delete(:backend) || Mobility.config.default_backend
|
|
131
131
|
@backend_class = Class.new(get_backend_class(backend: @backend_name,
|
data/lib/mobility/backend.rb
CHANGED
|
@@ -23,7 +23,7 @@ value of the translated attribute if passed to it.
|
|
|
23
23
|
module ActiveModel::Dirty
|
|
24
24
|
# @!group Backend Accessors
|
|
25
25
|
# @!macro backend_writer
|
|
26
|
-
def write(locale, value, **
|
|
26
|
+
def write(locale, value, **)
|
|
27
27
|
locale_accessor = "#{attribute}_#{locale}"
|
|
28
28
|
if model.changed_attributes.has_key?(locale_accessor) && model.changed_attributes[locale_accessor] == value
|
|
29
29
|
model.attributes_changed_by_setter.except!(locale_accessor)
|
|
@@ -43,7 +43,7 @@ value of the translated attribute if passed to it.
|
|
|
43
43
|
# methods for translated attributes onto model class.
|
|
44
44
|
module ClassMethods
|
|
45
45
|
# (see Mobility::Backend::Setup#setup_model)
|
|
46
|
-
def setup_model(model_class, attributes, **
|
|
46
|
+
def setup_model(model_class, attributes, **)
|
|
47
47
|
super
|
|
48
48
|
model_class.class_eval do
|
|
49
49
|
%w[changed? change was will_change! previously_changed? previous_change].each do |suffix|
|
|
@@ -4,13 +4,16 @@ module Mobility
|
|
|
4
4
|
def initialize(attributes, **options)
|
|
5
5
|
super
|
|
6
6
|
attributes_extractor = @attributes_extractor
|
|
7
|
-
|
|
8
|
-
define_method :where! do |opts, *rest|
|
|
7
|
+
@opts_converter = opts_converter = lambda do |opts|
|
|
9
8
|
if i18n_keys = attributes_extractor.call(opts)
|
|
10
9
|
opts = opts.with_indifferent_access
|
|
11
10
|
i18n_keys.each { |attr| opts[Column.column_name_for(attr)] = opts.delete(attr) }
|
|
12
11
|
end
|
|
13
|
-
|
|
12
|
+
return opts
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
define_method :where! do |opts, *rest|
|
|
16
|
+
super(opts_converter.call(opts), *rest)
|
|
14
17
|
end
|
|
15
18
|
|
|
16
19
|
attributes.each do |attribute|
|
|
@@ -22,15 +25,11 @@ module Mobility
|
|
|
22
25
|
|
|
23
26
|
def extended(relation)
|
|
24
27
|
super
|
|
25
|
-
|
|
28
|
+
opts_converter = @opts_converter
|
|
26
29
|
|
|
27
30
|
mod = Module.new do
|
|
28
31
|
define_method :not do |opts, *rest|
|
|
29
|
-
|
|
30
|
-
opts = opts.with_indifferent_access
|
|
31
|
-
i18n_keys.each { |attr| opts[Column.column_name_for(attr)] = opts.delete(attr) }
|
|
32
|
-
end
|
|
33
|
-
super(opts, *rest)
|
|
32
|
+
super(opts_converter.call(opts), *rest)
|
|
34
33
|
end
|
|
35
34
|
end
|
|
36
35
|
relation.model.mobility_where_chain.prepend(mod)
|
|
@@ -11,12 +11,12 @@ Internal class used by ActiveRecord backends that store values as a hash.
|
|
|
11
11
|
# @!group Backend Accessors
|
|
12
12
|
#
|
|
13
13
|
# @!macro backend_reader
|
|
14
|
-
def read(locale, **
|
|
14
|
+
def read(locale, **)
|
|
15
15
|
translations[locale]
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
# @!macro backend_writer
|
|
19
|
-
def write(locale, value, **
|
|
19
|
+
def write(locale, value, **)
|
|
20
20
|
translations[locale] = value
|
|
21
21
|
end
|
|
22
22
|
# @!endgroup
|
|
@@ -18,7 +18,7 @@ Implements the {Mobility::Backend::Hstore} backend for ActiveRecord models.
|
|
|
18
18
|
|
|
19
19
|
# @!group Backend Accessors
|
|
20
20
|
# @!macro backend_writer
|
|
21
|
-
def write(locale, value, **
|
|
21
|
+
def write(locale, value, **)
|
|
22
22
|
translations[locale] = value && value.to_s
|
|
23
23
|
end
|
|
24
24
|
# @!endgroup
|
|
@@ -28,19 +28,19 @@ Implements the {Mobility::Backend::KeyValue} backend for ActiveRecord models.
|
|
|
28
28
|
|
|
29
29
|
# @!macro backend_constructor
|
|
30
30
|
# @option options [Symbol] association_name Name of association
|
|
31
|
-
def initialize(model, attribute, **
|
|
31
|
+
def initialize(model, attribute, **)
|
|
32
32
|
super
|
|
33
33
|
@association_name = options[:association_name]
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
# @!group Backend Accessors
|
|
37
37
|
# @!macro backend_reader
|
|
38
|
-
def read(locale, **
|
|
38
|
+
def read(locale, **)
|
|
39
39
|
translation_for(locale).value
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
# @!macro backend_reader
|
|
43
|
-
def write(locale, value, **
|
|
43
|
+
def write(locale, value, **)
|
|
44
44
|
translation_for(locale).tap { |t| t.value = value }.value
|
|
45
45
|
end
|
|
46
46
|
# @!endgroup
|
|
@@ -10,7 +10,7 @@ models. For details see backend-specific subclasses.
|
|
|
10
10
|
class QueryMethods < Module
|
|
11
11
|
# @param [Array<String>] attributes Translated attributes
|
|
12
12
|
# @param [Hash] options Backend options
|
|
13
|
-
def initialize(attributes, **
|
|
13
|
+
def initialize(attributes, **)
|
|
14
14
|
@attributes = attributes
|
|
15
15
|
@attributes_extractor = lambda do |opts|
|
|
16
16
|
opts.is_a?(Hash) && (opts.keys.map(&:to_s) & attributes).presence
|
|
@@ -28,12 +28,12 @@ Implements {Mobility::Backend::Serialized} backend for ActiveRecord models.
|
|
|
28
28
|
# @!group Backend Accessors
|
|
29
29
|
#
|
|
30
30
|
# @!macro backend_reader
|
|
31
|
-
def read(locale, **
|
|
31
|
+
def read(locale, **)
|
|
32
32
|
translations[locale]
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
# @!macro backend_reader
|
|
36
|
-
def write(locale, value, **
|
|
36
|
+
def write(locale, value, **)
|
|
37
37
|
translations[locale] = value
|
|
38
38
|
end
|
|
39
39
|
# @!endgroup
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module Mobility
|
|
2
2
|
module Backend
|
|
3
3
|
class ActiveRecord::Serialized::QueryMethods < ActiveRecord::QueryMethods
|
|
4
|
-
def initialize(attributes, **
|
|
4
|
+
def initialize(attributes, **)
|
|
5
5
|
super
|
|
6
6
|
attributes_extractor = @attributes_extractor
|
|
7
7
|
opts_checker = @opts_checker = lambda do |opts|
|
|
@@ -82,19 +82,19 @@ Implements the {Mobility::Backend::Table} backend for ActiveRecord models.
|
|
|
82
82
|
|
|
83
83
|
# @!macro backend_constructor
|
|
84
84
|
# @option options [Symbol] association_name Name of association
|
|
85
|
-
def initialize(model, attribute, **
|
|
85
|
+
def initialize(model, attribute, **)
|
|
86
86
|
super
|
|
87
87
|
@association_name = options[:association_name]
|
|
88
88
|
end
|
|
89
89
|
|
|
90
90
|
# @!group Backend Accessors
|
|
91
91
|
# @!macro backend_reader
|
|
92
|
-
def read(locale, **
|
|
92
|
+
def read(locale, **)
|
|
93
93
|
translation_for(locale).send(attribute)
|
|
94
94
|
end
|
|
95
95
|
|
|
96
96
|
# @!macro backend_reader
|
|
97
|
-
def write(locale, value, **
|
|
97
|
+
def write(locale, value, **)
|
|
98
98
|
translation_for(locale).tap { |t| t.send("#{attribute}=", value) }.send(attribute)
|
|
99
99
|
end
|
|
100
100
|
# @!endgroup
|
|
@@ -35,7 +35,7 @@ this).
|
|
|
35
35
|
module Cache
|
|
36
36
|
# @group Backend Accessors
|
|
37
37
|
# @!macro backend_reader
|
|
38
|
-
def read(locale, **
|
|
38
|
+
def read(locale, **)
|
|
39
39
|
if write_to_cache? || cache.has_key?(locale)
|
|
40
40
|
cache[locale]
|
|
41
41
|
else
|
|
@@ -44,7 +44,7 @@ this).
|
|
|
44
44
|
end
|
|
45
45
|
|
|
46
46
|
# @!macro backend_writer
|
|
47
|
-
def write(locale, value, **
|
|
47
|
+
def write(locale, value, **)
|
|
48
48
|
cache[locale] = write_to_cache? ? value : super
|
|
49
49
|
end
|
|
50
50
|
# @!endgroup
|
|
@@ -57,7 +57,7 @@ this).
|
|
|
57
57
|
# @param model_class Model class
|
|
58
58
|
# @param [Array<String>] attributes Backend attributes
|
|
59
59
|
# @param [Hash] options Backend options
|
|
60
|
-
def setup_model(model_class, attributes, **
|
|
60
|
+
def setup_model(model_class, attributes, **)
|
|
61
61
|
super
|
|
62
62
|
model_class.include BackendResetter.for(model_class).new(attributes) { clear_cache }
|
|
63
63
|
end
|
|
@@ -22,12 +22,12 @@ be ignored if set, since it would cause a conflict with column accessors.
|
|
|
22
22
|
# @!group Backend Accessors
|
|
23
23
|
#
|
|
24
24
|
# @!macro backend_reader
|
|
25
|
-
def read(locale, **
|
|
25
|
+
def read(locale, **)
|
|
26
26
|
model.send(column(locale))
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
# @!macro backend_writer
|
|
30
|
-
def write(locale, value, **
|
|
30
|
+
def write(locale, value, **)
|
|
31
31
|
model.send("#{column(locale)}=", value)
|
|
32
32
|
end
|
|
33
33
|
# @!endgroup
|
|
@@ -3,6 +3,7 @@ module Mobility
|
|
|
3
3
|
=begin
|
|
4
4
|
|
|
5
5
|
Dirty tracking for Sequel models which use the +Sequel::Plugins::Dirty+ plugin.
|
|
6
|
+
Automatically includes dirty plugin in model class when enabled.
|
|
6
7
|
|
|
7
8
|
@see http://sequel.jeremyevans.net/rdoc-plugins/index.html Sequel dirty plugin
|
|
8
9
|
|
|
@@ -10,7 +11,7 @@ Dirty tracking for Sequel models which use the +Sequel::Plugins::Dirty+ plugin.
|
|
|
10
11
|
module Sequel::Dirty
|
|
11
12
|
# @!group Backend Accessors
|
|
12
13
|
# @!macro backend_writer
|
|
13
|
-
def write(locale, value, **
|
|
14
|
+
def write(locale, value, **)
|
|
14
15
|
locale_accessor = "#{attribute}_#{locale}".to_sym
|
|
15
16
|
if model.column_changes.has_key?(locale_accessor) && model.initial_values[locale_accessor] == value
|
|
16
17
|
super
|
|
@@ -31,8 +32,9 @@ Dirty tracking for Sequel models which use the +Sequel::Plugins::Dirty+ plugin.
|
|
|
31
32
|
# methods for translated attributes onto model class.
|
|
32
33
|
module ClassMethods
|
|
33
34
|
# (see Mobility::Backend::Setup#setup_model)
|
|
34
|
-
def setup_model(model_class, attributes, **
|
|
35
|
+
def setup_model(model_class, attributes, **)
|
|
35
36
|
super
|
|
37
|
+
model_class.plugin :dirty
|
|
36
38
|
model_class.class_eval do
|
|
37
39
|
mod = Module.new do
|
|
38
40
|
%w[initial_value column_change column_changed? reset_column].each do |method_name|
|
|
@@ -9,12 +9,12 @@ Internal class used by Sequel backends that store values as a hash.
|
|
|
9
9
|
include Backend
|
|
10
10
|
|
|
11
11
|
# @!macro backend_reader
|
|
12
|
-
def read(locale, **
|
|
12
|
+
def read(locale, **)
|
|
13
13
|
translations[locale.to_s]
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
# @!macro backend_writer
|
|
17
|
-
def write(locale, value, **
|
|
17
|
+
def write(locale, value, **)
|
|
18
18
|
translations[locale.to_s] = value
|
|
19
19
|
end
|
|
20
20
|
|
|
@@ -18,7 +18,7 @@ Implements the {Mobility::Backend::Hstore} backend for Sequel models.
|
|
|
18
18
|
|
|
19
19
|
# @!group Backend Accessors
|
|
20
20
|
# @!macro backend_writer
|
|
21
|
-
def write(locale, value, **
|
|
21
|
+
def write(locale, value, **)
|
|
22
22
|
translations[locale.to_s] = value && value.to_s
|
|
23
23
|
end
|
|
24
24
|
# @!endgroup
|
|
@@ -3,7 +3,7 @@ Sequel.extension :pg_hstore, :pg_hstore_ops
|
|
|
3
3
|
module Mobility
|
|
4
4
|
module Backend
|
|
5
5
|
class Sequel::Hstore::QueryMethods < Sequel::QueryMethods
|
|
6
|
-
def initialize(attributes, **
|
|
6
|
+
def initialize(attributes, **)
|
|
7
7
|
super
|
|
8
8
|
attributes_extractor = @attributes_extractor
|
|
9
9
|
|
|
@@ -31,12 +31,12 @@ Implements the {Mobility::Backend::KeyValue} backend for Sequel models.
|
|
|
31
31
|
|
|
32
32
|
# @!group Backend Accessors
|
|
33
33
|
# @!macro backend_reader
|
|
34
|
-
def read(locale, **
|
|
34
|
+
def read(locale, **)
|
|
35
35
|
translation_for(locale).value
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
# @!macro backend_writer
|
|
39
|
-
def write(locale, value, **
|
|
39
|
+
def write(locale, value, **)
|
|
40
40
|
translation_for(locale).tap { |t| t.value = value }.value
|
|
41
41
|
end
|
|
42
42
|
# @!endgroup
|
|
@@ -10,7 +10,7 @@ models. For details see backend-specific subclasses.
|
|
|
10
10
|
class QueryMethods < Module
|
|
11
11
|
# @param [Array<String>] attributes Translated attributes
|
|
12
12
|
# @param [Hash] options Backend options
|
|
13
|
-
def initialize(attributes, **
|
|
13
|
+
def initialize(attributes, **)
|
|
14
14
|
@attributes = attributes.map! &:to_sym
|
|
15
15
|
@attributes_extractor = lambda do |cond|
|
|
16
16
|
cond.is_a?(Hash) && (cond.keys & attributes).presence
|
|
@@ -35,12 +35,12 @@ Sequel serialization plugin.
|
|
|
35
35
|
# @!group Backend Accessors
|
|
36
36
|
#
|
|
37
37
|
# @!macro backend_reader
|
|
38
|
-
def read(locale, **
|
|
38
|
+
def read(locale, **)
|
|
39
39
|
translations[locale]
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
# @!macro backend_reader
|
|
43
|
-
def write(locale, value, **
|
|
43
|
+
def write(locale, value, **)
|
|
44
44
|
translations[locale] = value
|
|
45
45
|
end
|
|
46
46
|
# @!endgroup
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module Mobility
|
|
2
2
|
module Backend
|
|
3
3
|
class Sequel::Serialized::QueryMethods < Sequel::QueryMethods
|
|
4
|
-
def initialize(attributes, **
|
|
4
|
+
def initialize(attributes, **)
|
|
5
5
|
super
|
|
6
6
|
attributes_extractor = @attributes_extractor
|
|
7
7
|
cond_checker = @cond_checker = lambda do |cond|
|
|
@@ -15,19 +15,19 @@ Implements the {Mobility::Backend::Table} backend for Sequel models.
|
|
|
15
15
|
|
|
16
16
|
# @!macro backend_constructor
|
|
17
17
|
# @option options [Symbol] association_name Name of association
|
|
18
|
-
def initialize(model, attribute, **
|
|
18
|
+
def initialize(model, attribute, **)
|
|
19
19
|
super
|
|
20
20
|
@association_name = options[:association_name]
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
# @!group Backend Accessors
|
|
24
24
|
# @!macro backend_reader
|
|
25
|
-
def read(locale, **
|
|
25
|
+
def read(locale, **)
|
|
26
26
|
translation_for(locale).send(attribute)
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
# @!macro backend_reader
|
|
30
|
-
def write(locale, value, **
|
|
30
|
+
def write(locale, value, **)
|
|
31
31
|
translation_for(locale).tap { |t| t.send("#{attribute}=", value) }.send(attribute)
|
|
32
32
|
end
|
|
33
33
|
|
data/lib/mobility/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mobility
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Chris Salzberg
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-
|
|
11
|
+
date: 2017-03-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: request_store
|
|
@@ -213,6 +213,7 @@ files:
|
|
|
213
213
|
- lib/mobility/translates.rb
|
|
214
214
|
- lib/mobility/version.rb
|
|
215
215
|
- lib/mobility/wrapper.rb
|
|
216
|
+
- lib/sequel/plugins/mobility.rb
|
|
216
217
|
homepage: https://github.com/shioyama/mobility
|
|
217
218
|
licenses:
|
|
218
219
|
- MIT
|