mobility 0.8.13 → 1.0.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
- checksums.yaml.gz.sig +2 -2
- data.tar.gz.sig +0 -0
- data/CHANGELOG.md +63 -0
- data/Gemfile +5 -2
- data/Gemfile.lock +39 -20
- data/README.md +183 -93
- data/lib/mobility.rb +101 -169
- data/lib/mobility/backend.rb +27 -51
- data/lib/mobility/backends.rb +20 -0
- data/lib/mobility/backends/active_record.rb +4 -0
- data/lib/mobility/backends/active_record/column.rb +3 -1
- data/lib/mobility/backends/active_record/container.rb +10 -11
- data/lib/mobility/backends/active_record/hstore.rb +6 -4
- data/lib/mobility/backends/active_record/json.rb +5 -3
- data/lib/mobility/backends/active_record/jsonb.rb +5 -3
- data/lib/mobility/backends/active_record/key_value.rb +31 -13
- data/lib/mobility/backends/active_record/pg_hash.rb +1 -1
- data/lib/mobility/backends/active_record/serialized.rb +6 -0
- data/lib/mobility/backends/active_record/table.rb +17 -10
- data/lib/mobility/backends/column.rb +0 -6
- data/lib/mobility/backends/container.rb +10 -1
- data/lib/mobility/backends/hash.rb +39 -0
- data/lib/mobility/backends/hash_valued.rb +4 -0
- data/lib/mobility/backends/hstore.rb +0 -1
- data/lib/mobility/backends/json.rb +0 -1
- data/lib/mobility/backends/jsonb.rb +1 -2
- data/lib/mobility/backends/key_value.rb +31 -26
- data/lib/mobility/backends/null.rb +2 -0
- data/lib/mobility/backends/sequel.rb +37 -2
- data/lib/mobility/backends/sequel/column.rb +2 -0
- data/lib/mobility/backends/sequel/container.rb +11 -9
- data/lib/mobility/backends/sequel/hstore.rb +3 -1
- data/lib/mobility/backends/sequel/json.rb +3 -0
- data/lib/mobility/backends/sequel/jsonb.rb +3 -1
- data/lib/mobility/backends/sequel/key_value.rb +87 -18
- data/lib/mobility/backends/sequel/pg_hash.rb +6 -6
- data/lib/mobility/backends/sequel/serialized.rb +6 -0
- data/lib/mobility/backends/sequel/table.rb +22 -9
- data/lib/mobility/backends/serialized.rb +1 -3
- data/lib/mobility/backends/table.rb +39 -31
- data/lib/mobility/pluggable.rb +56 -0
- data/lib/mobility/plugin.rb +260 -0
- data/lib/mobility/plugins.rb +27 -24
- data/lib/mobility/plugins/active_model.rb +17 -0
- data/lib/mobility/plugins/active_model/cache.rb +26 -0
- data/lib/mobility/plugins/active_model/dirty.rb +119 -78
- data/lib/mobility/plugins/active_record.rb +37 -0
- data/lib/mobility/plugins/active_record/backend.rb +27 -0
- data/lib/mobility/plugins/active_record/cache.rb +28 -0
- data/lib/mobility/plugins/active_record/dirty.rb +34 -17
- data/lib/mobility/plugins/active_record/query.rb +43 -31
- data/lib/mobility/plugins/active_record/uniqueness_validation.rb +64 -0
- data/lib/mobility/plugins/arel.rb +125 -0
- data/lib/mobility/plugins/arel/nodes.rb +15 -0
- data/lib/mobility/plugins/arel/nodes/pg_ops.rb +134 -0
- data/lib/mobility/plugins/attribute_methods.rb +29 -20
- data/lib/mobility/plugins/attributes.rb +72 -0
- data/lib/mobility/plugins/backend.rb +161 -0
- data/lib/mobility/plugins/backend_reader.rb +34 -0
- data/lib/mobility/plugins/cache.rb +68 -26
- data/lib/mobility/plugins/default.rb +22 -17
- data/lib/mobility/plugins/dirty.rb +12 -33
- data/lib/mobility/plugins/fallbacks.rb +52 -44
- data/lib/mobility/plugins/fallthrough_accessors.rb +19 -23
- data/lib/mobility/plugins/locale_accessors.rb +22 -35
- data/lib/mobility/plugins/presence.rb +28 -21
- data/lib/mobility/plugins/query.rb +8 -17
- data/lib/mobility/plugins/reader.rb +50 -0
- data/lib/mobility/plugins/sequel.rb +34 -0
- data/lib/mobility/plugins/sequel/backend.rb +25 -0
- data/lib/mobility/plugins/sequel/cache.rb +24 -0
- data/lib/mobility/plugins/sequel/dirty.rb +34 -23
- data/lib/mobility/plugins/sequel/query.rb +21 -6
- data/lib/mobility/plugins/writer.rb +44 -0
- data/lib/mobility/translations.rb +95 -0
- data/lib/mobility/version.rb +12 -1
- data/lib/rails/generators/mobility/templates/create_string_translations.rb +0 -1
- data/lib/rails/generators/mobility/templates/create_text_translations.rb +0 -1
- data/lib/rails/generators/mobility/templates/initializer.rb +104 -78
- metadata +35 -40
- metadata.gz.sig +0 -0
- data/lib/mobility/active_model.rb +0 -4
- data/lib/mobility/active_model/backend_resetter.rb +0 -26
- data/lib/mobility/active_record.rb +0 -23
- data/lib/mobility/active_record/backend_resetter.rb +0 -26
- data/lib/mobility/active_record/model_translation.rb +0 -14
- data/lib/mobility/active_record/string_translation.rb +0 -10
- data/lib/mobility/active_record/text_translation.rb +0 -10
- data/lib/mobility/active_record/translation.rb +0 -14
- data/lib/mobility/active_record/uniqueness_validator.rb +0 -60
- data/lib/mobility/arel.rb +0 -49
- data/lib/mobility/arel/nodes.rb +0 -13
- data/lib/mobility/arel/nodes/pg_ops.rb +0 -132
- data/lib/mobility/arel/visitor.rb +0 -61
- data/lib/mobility/attributes.rb +0 -324
- data/lib/mobility/backend/orm_delegator.rb +0 -44
- data/lib/mobility/backend_resetter.rb +0 -50
- data/lib/mobility/configuration.rb +0 -138
- data/lib/mobility/fallbacks.rb +0 -28
- data/lib/mobility/interface.rb +0 -0
- data/lib/mobility/loaded.rb +0 -4
- data/lib/mobility/plugins/active_record/attribute_methods.rb +0 -38
- data/lib/mobility/plugins/cache/translation_cacher.rb +0 -40
- data/lib/mobility/sequel.rb +0 -9
- data/lib/mobility/sequel/backend_resetter.rb +0 -23
- data/lib/mobility/sequel/column_changes.rb +0 -28
- data/lib/mobility/sequel/hash_initializer.rb +0 -21
- data/lib/mobility/sequel/model_translation.rb +0 -20
- data/lib/mobility/sequel/sql.rb +0 -16
- data/lib/mobility/sequel/string_translation.rb +0 -10
- data/lib/mobility/sequel/text_translation.rb +0 -10
- data/lib/mobility/sequel/translation.rb +0 -53
- data/lib/mobility/translates.rb +0 -73
data/lib/mobility/sequel/sql.rb
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
module Mobility
|
|
2
|
-
module Sequel
|
|
3
|
-
module SQL
|
|
4
|
-
class QualifiedIdentifier < ::Sequel::SQL::QualifiedIdentifier
|
|
5
|
-
attr_reader :backend_class, :locale, :attribute_name
|
|
6
|
-
|
|
7
|
-
def initialize(table, column, locale, backend_class, attribute_name: nil)
|
|
8
|
-
@backend_class = backend_class
|
|
9
|
-
@locale = locale
|
|
10
|
-
@attribute_name = attribute_name || column
|
|
11
|
-
super(table, column)
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
module Mobility
|
|
2
|
-
module Sequel
|
|
3
|
-
module Translation
|
|
4
|
-
def self.included(base)
|
|
5
|
-
base.class_eval do
|
|
6
|
-
plugin :validation_helpers
|
|
7
|
-
|
|
8
|
-
# Paraphased from sequel_polymorphic gem
|
|
9
|
-
#
|
|
10
|
-
model = underscore(self.to_s)
|
|
11
|
-
plural_model = pluralize(model)
|
|
12
|
-
many_to_one :translatable,
|
|
13
|
-
reciprocal: plural_model.to_sym,
|
|
14
|
-
reciprocal_type: :many_to_one,
|
|
15
|
-
setter: (proc do |able_instance|
|
|
16
|
-
self[:translatable_id] = (able_instance.pk if able_instance)
|
|
17
|
-
self[:translatable_type] = (able_instance.class.name if able_instance)
|
|
18
|
-
end),
|
|
19
|
-
dataset: (proc do
|
|
20
|
-
translatable_type = send :translatable_type
|
|
21
|
-
translatable_id = send :translatable_id
|
|
22
|
-
return if translatable_type.nil? || translatable_id.nil?
|
|
23
|
-
klass = self.class.send(:constantize, translatable_type)
|
|
24
|
-
klass.where(klass.primary_key => translatable_id)
|
|
25
|
-
end),
|
|
26
|
-
eager_loader: (proc do |eo|
|
|
27
|
-
id_map = {}
|
|
28
|
-
eo[:rows].each do |model|
|
|
29
|
-
model_able_type = model.send :translatable_type
|
|
30
|
-
model_able_id = model.send :translatable_id
|
|
31
|
-
model.associations[:translatable] = nil
|
|
32
|
-
((id_map[model_able_type] ||= {})[model_able_id] ||= []) << model if !model_able_type.nil? && !model_able_id.nil?
|
|
33
|
-
end
|
|
34
|
-
id_map.each do |klass_name, id_map|
|
|
35
|
-
klass = constantize(camelize(klass_name))
|
|
36
|
-
klass.where(klass.primary_key=>id_map.keys).all do |related_obj|
|
|
37
|
-
id_map[related_obj.pk].each do |model|
|
|
38
|
-
model.associations[:translatable] = related_obj
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
end)
|
|
43
|
-
|
|
44
|
-
def validate
|
|
45
|
-
super
|
|
46
|
-
validates_presence [:locale, :key, :translatable_id, :translatable_type]
|
|
47
|
-
validates_unique [:locale, :key, :translatable_id, :translatable_type]
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
data/lib/mobility/translates.rb
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Mobility
|
|
4
|
-
=begin
|
|
5
|
-
|
|
6
|
-
Defines methods for attaching backends to a class. A block can optionally be
|
|
7
|
-
passed to accessors to configure backend (see example below).
|
|
8
|
-
|
|
9
|
-
@example Defining backend on a class
|
|
10
|
-
class MyClass
|
|
11
|
-
extend Translates
|
|
12
|
-
mobility_accessor :foo, option: :value
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
@example Passing backend to a block
|
|
16
|
-
class MyClass
|
|
17
|
-
extend Translates
|
|
18
|
-
mobility_accessor :foo, option: :value do
|
|
19
|
-
# add custom code to backend class for this attribute only
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
@example Defining only a backend reader and presence method
|
|
24
|
-
class MyClass
|
|
25
|
-
extend Translates
|
|
26
|
-
mobility_reader :foo
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
instance = MyClass.new
|
|
30
|
-
instance.foo #=> (some value)
|
|
31
|
-
instance.foo? #=> true
|
|
32
|
-
instance.foo = "foo" #=> NoMethodError
|
|
33
|
-
|
|
34
|
-
@example Defining only a backend writer
|
|
35
|
-
class MyClass
|
|
36
|
-
extend Translates
|
|
37
|
-
mobility_writer :foo
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
instance = MyClass.new
|
|
41
|
-
instance.foo #=> NoMethodError
|
|
42
|
-
instance.foo? #=> NoMethodError
|
|
43
|
-
instance.foo = "foo" #=> (sets attribute to value "foo")
|
|
44
|
-
=end
|
|
45
|
-
module Translates
|
|
46
|
-
# Defines mobility accessor on model class.
|
|
47
|
-
# @!method mobility_accessor(*attributes, **options)
|
|
48
|
-
# @param [Array<String>] attributes
|
|
49
|
-
# @param [Hash] options
|
|
50
|
-
# @yield Yields to block with backend as context
|
|
51
|
-
|
|
52
|
-
# Defines mobility reader and presence method on model class.
|
|
53
|
-
# @!method mobility_reader(*attributes, **options)
|
|
54
|
-
# @param [Array<String>] attributes
|
|
55
|
-
# @param [Hash] options
|
|
56
|
-
# @yield Yields to block with backend as context
|
|
57
|
-
|
|
58
|
-
# Defines mobility writer on model class.
|
|
59
|
-
# @!method mobility_writer(*attributes, **options)
|
|
60
|
-
# @param [Array<String>] attributes
|
|
61
|
-
# @param [Hash] options
|
|
62
|
-
# @yield Yields to block with backend as context
|
|
63
|
-
%w[accessor reader writer].each do |method|
|
|
64
|
-
class_eval <<-EOM, __FILE__, __LINE__ + 1
|
|
65
|
-
def mobility_#{method}(*args, **options, &block)
|
|
66
|
-
attributes = Attributes.new(*args, method: :#{method}, **options)
|
|
67
|
-
attributes.backend.instance_eval(&block) if block_given?
|
|
68
|
-
include attributes
|
|
69
|
-
end
|
|
70
|
-
EOM
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end
|