mobility 0.0.1 → 0.1.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 +4 -4
- data/Gemfile +19 -0
- data/Gemfile.lock +153 -0
- data/Guardfile +70 -0
- data/README.md +603 -13
- data/Rakefile +42 -0
- data/lib/generators/mobility/install_generator.rb +45 -0
- data/lib/generators/mobility/templates/create_string_translations.rb +15 -0
- data/lib/generators/mobility/templates/create_text_translations.rb +15 -0
- data/lib/mobility.rb +203 -2
- data/lib/mobility/active_model.rb +6 -0
- data/lib/mobility/active_model/attribute_methods.rb +27 -0
- data/lib/mobility/active_model/backend_resetter.rb +26 -0
- data/lib/mobility/active_record.rb +39 -0
- data/lib/mobility/active_record/backend_resetter.rb +26 -0
- data/lib/mobility/active_record/model_translation.rb +14 -0
- data/lib/mobility/active_record/string_translation.rb +7 -0
- data/lib/mobility/active_record/text_translation.rb +7 -0
- data/lib/mobility/active_record/translation.rb +14 -0
- data/lib/mobility/attributes.rb +210 -0
- data/lib/mobility/backend.rb +152 -0
- data/lib/mobility/backend/active_model.rb +7 -0
- data/lib/mobility/backend/active_model/dirty.rb +84 -0
- data/lib/mobility/backend/active_record.rb +13 -0
- data/lib/mobility/backend/active_record/column.rb +52 -0
- data/lib/mobility/backend/active_record/column/query_methods.rb +40 -0
- data/lib/mobility/backend/active_record/hash_valued.rb +58 -0
- data/lib/mobility/backend/active_record/hstore.rb +36 -0
- data/lib/mobility/backend/active_record/hstore/query_methods.rb +53 -0
- data/lib/mobility/backend/active_record/jsonb.rb +43 -0
- data/lib/mobility/backend/active_record/jsonb/query_methods.rb +53 -0
- data/lib/mobility/backend/active_record/key_value.rb +126 -0
- data/lib/mobility/backend/active_record/key_value/query_methods.rb +63 -0
- data/lib/mobility/backend/active_record/query_methods.rb +36 -0
- data/lib/mobility/backend/active_record/serialized.rb +93 -0
- data/lib/mobility/backend/active_record/serialized/query_methods.rb +32 -0
- data/lib/mobility/backend/active_record/table.rb +197 -0
- data/lib/mobility/backend/active_record/table/query_methods.rb +91 -0
- data/lib/mobility/backend/cache.rb +110 -0
- data/lib/mobility/backend/column.rb +52 -0
- data/lib/mobility/backend/dirty.rb +28 -0
- data/lib/mobility/backend/fallbacks.rb +89 -0
- data/lib/mobility/backend/hstore.rb +21 -0
- data/lib/mobility/backend/jsonb.rb +21 -0
- data/lib/mobility/backend/key_value.rb +71 -0
- data/lib/mobility/backend/null.rb +24 -0
- data/lib/mobility/backend/orm_delegator.rb +33 -0
- data/lib/mobility/backend/sequel.rb +14 -0
- data/lib/mobility/backend/sequel/column.rb +40 -0
- data/lib/mobility/backend/sequel/column/query_methods.rb +24 -0
- data/lib/mobility/backend/sequel/dirty.rb +54 -0
- data/lib/mobility/backend/sequel/hash_valued.rb +51 -0
- data/lib/mobility/backend/sequel/hstore.rb +36 -0
- data/lib/mobility/backend/sequel/hstore/query_methods.rb +42 -0
- data/lib/mobility/backend/sequel/jsonb.rb +43 -0
- data/lib/mobility/backend/sequel/jsonb/query_methods.rb +42 -0
- data/lib/mobility/backend/sequel/key_value.rb +139 -0
- data/lib/mobility/backend/sequel/key_value/query_methods.rb +48 -0
- data/lib/mobility/backend/sequel/query_methods.rb +22 -0
- data/lib/mobility/backend/sequel/serialized.rb +133 -0
- data/lib/mobility/backend/sequel/serialized/query_methods.rb +20 -0
- data/lib/mobility/backend/sequel/table.rb +149 -0
- data/lib/mobility/backend/sequel/table/query_methods.rb +48 -0
- data/lib/mobility/backend/serialized.rb +53 -0
- data/lib/mobility/backend/table.rb +93 -0
- data/lib/mobility/backend_resetter.rb +44 -0
- data/lib/mobility/configuration.rb +31 -0
- data/lib/mobility/core_ext/nil.rb +10 -0
- data/lib/mobility/core_ext/object.rb +19 -0
- data/lib/mobility/core_ext/string.rb +16 -0
- data/lib/mobility/instance_methods.rb +34 -0
- data/lib/mobility/orm.rb +4 -0
- data/lib/mobility/sequel.rb +26 -0
- data/lib/mobility/sequel/backend_resetter.rb +26 -0
- data/lib/mobility/sequel/column_changes.rb +29 -0
- data/lib/mobility/sequel/model_translation.rb +20 -0
- data/lib/mobility/sequel/string_translation.rb +7 -0
- data/lib/mobility/sequel/text_translation.rb +7 -0
- data/lib/mobility/sequel/translation.rb +53 -0
- data/lib/mobility/translates.rb +75 -0
- data/lib/mobility/wrapper.rb +31 -0
- metadata +152 -12
- data/.gitignore +0 -9
- data/.rspec +0 -2
- data/.travis.yml +0 -5
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/mobility.gemspec +0 -32
@@ -0,0 +1,75 @@
|
|
1
|
+
module Mobility
|
2
|
+
=begin
|
3
|
+
|
4
|
+
Defines methods for attaching backends to a class. A block can optionally be
|
5
|
+
passed to accessors to configure backend (see example below).
|
6
|
+
|
7
|
+
@example Defining backend on a class
|
8
|
+
class MyClass
|
9
|
+
extend Translates
|
10
|
+
mobility_accessor :foo, option1: :value
|
11
|
+
end
|
12
|
+
|
13
|
+
@example Passing backend to a block
|
14
|
+
class MyClass
|
15
|
+
extend Translates
|
16
|
+
mobility_accessor :foo, option1: :value do |backend|
|
17
|
+
# do something with backend
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
@example Defining only a backend reader and presence method
|
22
|
+
class MyClass
|
23
|
+
extend Translates
|
24
|
+
mobility_reader :foo
|
25
|
+
end
|
26
|
+
|
27
|
+
instance = MyClass.new
|
28
|
+
instance.foo #=> (some value)
|
29
|
+
instance.foo? #=> true
|
30
|
+
instance.foo = "foo" #=> NoMethodError
|
31
|
+
|
32
|
+
@example Defining only a backend writer
|
33
|
+
class MyClass
|
34
|
+
extend Translates
|
35
|
+
mobility_writer :foo
|
36
|
+
end
|
37
|
+
|
38
|
+
instance = MyClass.new
|
39
|
+
instance.foo #=> NoMethodError
|
40
|
+
instance.foo? #=> NoMethodError
|
41
|
+
instance.foo = "foo" #=> (sets attribute to value "foo")
|
42
|
+
=end
|
43
|
+
module Translates
|
44
|
+
# Defines mobility accessor on model class.
|
45
|
+
# @param [Array<String>] attributes
|
46
|
+
# @param [Hash] options
|
47
|
+
# @yield [Object] Backend
|
48
|
+
# @!method mobility_accessor(*attributes, **options)
|
49
|
+
|
50
|
+
# Defines mobility reader and presence method on model class.
|
51
|
+
# @param [Array<String>] attributes
|
52
|
+
# @param [Hash] options
|
53
|
+
# @yield [Object] Backend
|
54
|
+
# @!method mobility_reader(*attributes, **options)
|
55
|
+
|
56
|
+
# Defines mobility writer on model class.
|
57
|
+
# @param [Array<String>] attributes
|
58
|
+
# @param [Hash] options
|
59
|
+
# @yield [Object] Backend
|
60
|
+
# @!method mobility_writer(*attributes, **options)
|
61
|
+
%w[accessor reader writer].each do |method|
|
62
|
+
class_eval <<-EOM, __FILE__, __LINE__ + 1
|
63
|
+
def mobility_#{method}(*args, **options)
|
64
|
+
attributes = Attributes.new(:#{method}, *args, options.merge(model_class: self))
|
65
|
+
yield(attributes.backend) if block_given?
|
66
|
+
attributes.each do |attribute|
|
67
|
+
alias_method "\#{attribute}_before_mobility", attribute if method_defined?(attribute) && #{%w[accessor reader].include? method}
|
68
|
+
alias_method "\#{attribute}_before_mobility=", "\#{attribute}=" if method_defined?("\#{attribute}=") && #{%w[accessor writer].include? method}
|
69
|
+
end
|
70
|
+
include attributes
|
71
|
+
end
|
72
|
+
EOM
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Mobility
|
2
|
+
=begin
|
3
|
+
|
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.
|
7
|
+
|
8
|
+
=end
|
9
|
+
class Wrapper < SimpleDelegator
|
10
|
+
# @return [Array<Attributes>]
|
11
|
+
attr_reader :modules
|
12
|
+
alias :model_class :__getobj__
|
13
|
+
|
14
|
+
# @param [Class] model_class Model class
|
15
|
+
def initialize(model_class)
|
16
|
+
super
|
17
|
+
@modules = []
|
18
|
+
end
|
19
|
+
|
20
|
+
# @return [Array<String>] Translated attributes defined on model
|
21
|
+
def translated_attribute_names
|
22
|
+
modules.map(&:attributes).flatten
|
23
|
+
end
|
24
|
+
|
25
|
+
# Appends backend module to +modules+ array for later reference.
|
26
|
+
# @param [Attributes] backend_module Attributes module
|
27
|
+
def << backend_module
|
28
|
+
modules << backend_module
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mobility
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Salzberg
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-02-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: request_store
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: i18n
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.6.10
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.6.10
|
13
41
|
- !ruby/object:Gem::Dependency
|
14
42
|
name: bundler
|
15
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -24,6 +52,20 @@ dependencies:
|
|
24
52
|
- - "~>"
|
25
53
|
- !ruby/object:Gem::Version
|
26
54
|
version: '1.12'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: database_cleaner
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.5.3
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.5.3
|
27
69
|
- !ruby/object:Gem::Dependency
|
28
70
|
name: rake
|
29
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,25 +94,124 @@ dependencies:
|
|
52
94
|
- - "~>"
|
53
95
|
- !ruby/object:Gem::Version
|
54
96
|
version: '3.0'
|
55
|
-
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rspec-its
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 1.2.0
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 1.2.0
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: yard
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 0.9.0
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 0.9.0
|
125
|
+
description: Stores and retrieves localized data through attributes on a Ruby class,
|
126
|
+
with flexible support for different storage strategies.
|
56
127
|
email:
|
57
128
|
- chris@dejimata.com
|
58
129
|
executables: []
|
59
130
|
extensions: []
|
60
131
|
extra_rdoc_files: []
|
61
132
|
files:
|
62
|
-
- ".gitignore"
|
63
|
-
- ".rspec"
|
64
|
-
- ".travis.yml"
|
65
133
|
- Gemfile
|
134
|
+
- Gemfile.lock
|
135
|
+
- Guardfile
|
66
136
|
- LICENSE.txt
|
67
137
|
- README.md
|
68
138
|
- Rakefile
|
69
|
-
-
|
70
|
-
-
|
139
|
+
- lib/generators/mobility/install_generator.rb
|
140
|
+
- lib/generators/mobility/templates/create_string_translations.rb
|
141
|
+
- lib/generators/mobility/templates/create_text_translations.rb
|
71
142
|
- lib/mobility.rb
|
143
|
+
- lib/mobility/active_model.rb
|
144
|
+
- lib/mobility/active_model/attribute_methods.rb
|
145
|
+
- lib/mobility/active_model/backend_resetter.rb
|
146
|
+
- lib/mobility/active_record.rb
|
147
|
+
- lib/mobility/active_record/backend_resetter.rb
|
148
|
+
- lib/mobility/active_record/model_translation.rb
|
149
|
+
- lib/mobility/active_record/string_translation.rb
|
150
|
+
- lib/mobility/active_record/text_translation.rb
|
151
|
+
- lib/mobility/active_record/translation.rb
|
152
|
+
- lib/mobility/attributes.rb
|
153
|
+
- lib/mobility/backend.rb
|
154
|
+
- lib/mobility/backend/active_model.rb
|
155
|
+
- lib/mobility/backend/active_model/dirty.rb
|
156
|
+
- lib/mobility/backend/active_record.rb
|
157
|
+
- lib/mobility/backend/active_record/column.rb
|
158
|
+
- lib/mobility/backend/active_record/column/query_methods.rb
|
159
|
+
- lib/mobility/backend/active_record/hash_valued.rb
|
160
|
+
- lib/mobility/backend/active_record/hstore.rb
|
161
|
+
- lib/mobility/backend/active_record/hstore/query_methods.rb
|
162
|
+
- lib/mobility/backend/active_record/jsonb.rb
|
163
|
+
- lib/mobility/backend/active_record/jsonb/query_methods.rb
|
164
|
+
- lib/mobility/backend/active_record/key_value.rb
|
165
|
+
- lib/mobility/backend/active_record/key_value/query_methods.rb
|
166
|
+
- lib/mobility/backend/active_record/query_methods.rb
|
167
|
+
- lib/mobility/backend/active_record/serialized.rb
|
168
|
+
- lib/mobility/backend/active_record/serialized/query_methods.rb
|
169
|
+
- lib/mobility/backend/active_record/table.rb
|
170
|
+
- lib/mobility/backend/active_record/table/query_methods.rb
|
171
|
+
- lib/mobility/backend/cache.rb
|
172
|
+
- lib/mobility/backend/column.rb
|
173
|
+
- lib/mobility/backend/dirty.rb
|
174
|
+
- lib/mobility/backend/fallbacks.rb
|
175
|
+
- lib/mobility/backend/hstore.rb
|
176
|
+
- lib/mobility/backend/jsonb.rb
|
177
|
+
- lib/mobility/backend/key_value.rb
|
178
|
+
- lib/mobility/backend/null.rb
|
179
|
+
- lib/mobility/backend/orm_delegator.rb
|
180
|
+
- lib/mobility/backend/sequel.rb
|
181
|
+
- lib/mobility/backend/sequel/column.rb
|
182
|
+
- lib/mobility/backend/sequel/column/query_methods.rb
|
183
|
+
- lib/mobility/backend/sequel/dirty.rb
|
184
|
+
- lib/mobility/backend/sequel/hash_valued.rb
|
185
|
+
- lib/mobility/backend/sequel/hstore.rb
|
186
|
+
- lib/mobility/backend/sequel/hstore/query_methods.rb
|
187
|
+
- lib/mobility/backend/sequel/jsonb.rb
|
188
|
+
- lib/mobility/backend/sequel/jsonb/query_methods.rb
|
189
|
+
- lib/mobility/backend/sequel/key_value.rb
|
190
|
+
- lib/mobility/backend/sequel/key_value/query_methods.rb
|
191
|
+
- lib/mobility/backend/sequel/query_methods.rb
|
192
|
+
- lib/mobility/backend/sequel/serialized.rb
|
193
|
+
- lib/mobility/backend/sequel/serialized/query_methods.rb
|
194
|
+
- lib/mobility/backend/sequel/table.rb
|
195
|
+
- lib/mobility/backend/sequel/table/query_methods.rb
|
196
|
+
- lib/mobility/backend/serialized.rb
|
197
|
+
- lib/mobility/backend/table.rb
|
198
|
+
- lib/mobility/backend_resetter.rb
|
199
|
+
- lib/mobility/configuration.rb
|
200
|
+
- lib/mobility/core_ext/nil.rb
|
201
|
+
- lib/mobility/core_ext/object.rb
|
202
|
+
- lib/mobility/core_ext/string.rb
|
203
|
+
- lib/mobility/instance_methods.rb
|
204
|
+
- lib/mobility/orm.rb
|
205
|
+
- lib/mobility/sequel.rb
|
206
|
+
- lib/mobility/sequel/backend_resetter.rb
|
207
|
+
- lib/mobility/sequel/column_changes.rb
|
208
|
+
- lib/mobility/sequel/model_translation.rb
|
209
|
+
- lib/mobility/sequel/string_translation.rb
|
210
|
+
- lib/mobility/sequel/text_translation.rb
|
211
|
+
- lib/mobility/sequel/translation.rb
|
212
|
+
- lib/mobility/translates.rb
|
72
213
|
- lib/mobility/version.rb
|
73
|
-
- mobility.
|
214
|
+
- lib/mobility/wrapper.rb
|
74
215
|
homepage:
|
75
216
|
licenses:
|
76
217
|
- MIT
|
@@ -83,7 +224,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
83
224
|
requirements:
|
84
225
|
- - ">="
|
85
226
|
- !ruby/object:Gem::Version
|
86
|
-
version:
|
227
|
+
version: 2.0.0
|
87
228
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
229
|
requirements:
|
89
230
|
- - ">="
|
@@ -94,6 +235,5 @@ rubyforge_project:
|
|
94
235
|
rubygems_version: 2.4.5.1
|
95
236
|
signing_key:
|
96
237
|
specification_version: 4
|
97
|
-
summary: Pluggable translation framework
|
238
|
+
summary: Pluggable Ruby translation framework
|
98
239
|
test_files: []
|
99
|
-
has_rdoc:
|
data/.gitignore
DELETED
data/.rspec
DELETED
data/.travis.yml
DELETED
data/bin/console
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require "bundler/setup"
|
4
|
-
require "mobility"
|
5
|
-
|
6
|
-
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
-
# with your gem easier. You can also use a different console, if you like.
|
8
|
-
|
9
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
-
# require "pry"
|
11
|
-
# Pry.start
|
12
|
-
|
13
|
-
require "irb"
|
14
|
-
IRB.start
|
data/bin/setup
DELETED
data/mobility.gemspec
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'mobility/version'
|
5
|
-
|
6
|
-
Gem::Specification.new do |spec|
|
7
|
-
spec.name = "mobility"
|
8
|
-
spec.version = "0.0.1"
|
9
|
-
spec.authors = ["Chris Salzberg"]
|
10
|
-
spec.email = ["chris@dejimata.com"]
|
11
|
-
|
12
|
-
spec.summary = %q{Pluggable translation framework for Ruby on Rails.}
|
13
|
-
# spec.homepage = "TODO: Put your gem's website or public repo URL here."
|
14
|
-
spec.license = "MIT"
|
15
|
-
|
16
|
-
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
17
|
-
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
18
|
-
if spec.respond_to?(:metadata)
|
19
|
-
# spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
|
20
|
-
else
|
21
|
-
raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
|
22
|
-
end
|
23
|
-
|
24
|
-
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
|
-
spec.bindir = "exe"
|
26
|
-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
27
|
-
spec.require_paths = ["lib"]
|
28
|
-
|
29
|
-
spec.add_development_dependency "bundler", "~> 1.12"
|
30
|
-
spec.add_development_dependency "rake", "~> 10.0"
|
31
|
-
spec.add_development_dependency "rspec", "~> 3.0"
|
32
|
-
end
|