mobility 0.7.6 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/CHANGELOG.md +14 -3
- data/Gemfile.lock +57 -0
- data/README.md +15 -4
- data/lib/mobility.rb +17 -1
- data/lib/mobility/active_record/uniqueness_validator.rb +1 -1
- data/lib/mobility/arel/nodes.rb +0 -3
- data/lib/mobility/arel/nodes/pg_ops.rb +0 -4
- data/lib/mobility/attributes.rb +42 -25
- data/lib/mobility/backends/active_record.rb +2 -2
- data/lib/mobility/backends/active_record/column.rb +2 -2
- data/lib/mobility/backends/active_record/key_value.rb +6 -9
- data/lib/mobility/backends/active_record/table.rb +6 -7
- data/lib/mobility/backends/column.rb +2 -2
- data/lib/mobility/backends/key_value.rb +5 -0
- data/lib/mobility/backends/sequel.rb +24 -11
- data/lib/mobility/backends/sequel/column.rb +4 -3
- data/lib/mobility/backends/sequel/container.rb +21 -12
- data/lib/mobility/backends/sequel/hstore.rb +11 -3
- data/lib/mobility/backends/sequel/json.rb +11 -3
- data/lib/mobility/backends/sequel/jsonb.rb +35 -3
- data/lib/mobility/backends/sequel/key_value.rb +97 -17
- data/lib/mobility/backends/sequel/serialized.rb +5 -4
- data/lib/mobility/backends/sequel/table.rb +95 -26
- data/lib/mobility/backends/table.rb +4 -0
- data/lib/mobility/configuration.rb +1 -1
- data/lib/mobility/plugins/active_record/query.rb +52 -26
- data/lib/mobility/plugins/locale_accessors.rb +3 -2
- data/lib/mobility/plugins/query.rb +3 -0
- data/lib/mobility/plugins/sequel/query.rb +140 -0
- data/lib/mobility/sequel.rb +0 -14
- data/lib/mobility/sequel/sql.rb +16 -0
- data/lib/mobility/version.rb +1 -1
- data/lib/rails/generators/mobility/templates/column_translations.rb +1 -1
- data/lib/rails/generators/mobility/templates/initializer.rb +3 -2
- data/lib/rails/generators/mobility/translations_generator.rb +1 -1
- metadata +27 -46
- metadata.gz.sig +1 -1
- data/lib/mobility/backends/active_record/query_methods.rb +0 -50
- data/lib/mobility/backends/sequel/column/query_methods.rb +0 -29
- data/lib/mobility/backends/sequel/container/json_query_methods.rb +0 -41
- data/lib/mobility/backends/sequel/container/jsonb_query_methods.rb +0 -41
- data/lib/mobility/backends/sequel/hstore/query_methods.rb +0 -34
- data/lib/mobility/backends/sequel/json/query_methods.rb +0 -34
- data/lib/mobility/backends/sequel/jsonb/query_methods.rb +0 -34
- data/lib/mobility/backends/sequel/key_value/query_methods.rb +0 -58
- data/lib/mobility/backends/sequel/pg_query_methods.rb +0 -114
- data/lib/mobility/backends/sequel/query_methods.rb +0 -36
- data/lib/mobility/backends/sequel/serialized/query_methods.rb +0 -22
- data/lib/mobility/backends/sequel/table/query_methods.rb +0 -58
@@ -126,10 +126,10 @@ columns to that table.
|
|
126
126
|
# query.
|
127
127
|
# @param [ActiveRecord::Relation] relation Relation to scope
|
128
128
|
# @param [Object] predicate Arel predicate
|
129
|
-
# @param [Symbol] locale Locale
|
129
|
+
# @param [Symbol] locale (Mobility.locale) Locale
|
130
130
|
# @option [Boolean] invert
|
131
131
|
# @return [ActiveRecord::Relation] relation Relation with joins applied (if needed)
|
132
|
-
def apply_scope(relation, predicate, locale, invert: false)
|
132
|
+
def apply_scope(relation, predicate, locale = Mobility.locale, invert: false)
|
133
133
|
visitor = Visitor.new(self, locale)
|
134
134
|
if join_type = visitor.accept(predicate)
|
135
135
|
join_type &&= Visitor::INNER_JOIN if invert
|
@@ -141,10 +141,6 @@ columns to that table.
|
|
141
141
|
|
142
142
|
private
|
143
143
|
|
144
|
-
def table_alias(locale)
|
145
|
-
"#{table_name}_#{Mobility.normalize_locale(locale)}"
|
146
|
-
end
|
147
|
-
|
148
144
|
def join_translations(relation, locale, join_type)
|
149
145
|
return relation if already_joined?(relation, locale, join_type)
|
150
146
|
m = model_class.arel_table
|
@@ -179,7 +175,10 @@ columns to that table.
|
|
179
175
|
# end
|
180
176
|
#
|
181
177
|
# backend_class = Post.mobility_backend_class(:title)
|
182
|
-
# visitor = Mobility::Backends::ActiveRecord::Table::Visitor.new(backend_class)
|
178
|
+
# visitor = Mobility::Backends::ActiveRecord::Table::Visitor.new(backend_class, :en)
|
179
|
+
#
|
180
|
+
# title = backend_class.build_node("title", :en) # arel node for title
|
181
|
+
# content = backend_class.build_node("content", :en) # arel node for content
|
183
182
|
#
|
184
183
|
# visitor.accept(title.eq(nil).and(content.eq(nil)))
|
185
184
|
# #=> Arel::Nodes::OuterJoin
|
@@ -6,7 +6,7 @@ module Mobility
|
|
6
6
|
|
7
7
|
Stores translated attribute as a column on the model table. To use this
|
8
8
|
backend, ensure that the model table has columns named +<attribute>_<locale>+
|
9
|
-
for every locale in +I18n.available_locales
|
9
|
+
for every locale in +Mobility.available_locales+ (i.e. +I18n.available_locales+).
|
10
10
|
|
11
11
|
If you are using Rails, you can use the +mobility:translations+ generator to
|
12
12
|
create a migration adding these columns to the model table with:
|
@@ -14,7 +14,7 @@ create a migration adding these columns to the model table with:
|
|
14
14
|
rails generate mobility:translations post title:string
|
15
15
|
|
16
16
|
The generated migration will add columns +title_<locale>+ for every locale in
|
17
|
-
+
|
17
|
+
+Mobility.available_locales+. (The generator can be run again to add new attributes
|
18
18
|
or locales.)
|
19
19
|
|
20
20
|
==Backend Options
|
@@ -81,6 +81,7 @@ other backends on model (otherwise one will overwrite the other).
|
|
81
81
|
backend_class.extend ClassMethods
|
82
82
|
backend_class.option_reader :association_name
|
83
83
|
backend_class.option_reader :class_name
|
84
|
+
backend_class.option_reader :table_alias_affix
|
84
85
|
end
|
85
86
|
|
86
87
|
module ClassMethods
|
@@ -119,6 +120,10 @@ each translated model, or set a default option in your configuration.
|
|
119
120
|
super
|
120
121
|
end
|
121
122
|
end
|
123
|
+
|
124
|
+
def table_alias(attr, locale)
|
125
|
+
table_alias_affix % "#{attr}_#{Mobility.normalize_locale(locale)}"
|
126
|
+
end
|
122
127
|
end
|
123
128
|
|
124
129
|
module Cache
|
@@ -1,19 +1,32 @@
|
|
1
1
|
module Mobility
|
2
2
|
module Backends
|
3
3
|
module Sequel
|
4
|
-
def setup_query_methods(query_methods)
|
5
|
-
setup do |attributes, options|
|
6
|
-
extend(Module.new do
|
7
|
-
define_method ::Mobility.query_method do
|
8
|
-
super().with_extend(query_methods.new(attributes, options))
|
9
|
-
end
|
10
|
-
end)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
4
|
def self.included(backend_class)
|
15
5
|
backend_class.include(Backend)
|
16
|
-
backend_class.extend(
|
6
|
+
backend_class.extend(ClassMethods)
|
7
|
+
end
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
# @param [Symbol] name Attribute name
|
11
|
+
# @param [Symbol] locale Locale
|
12
|
+
def [](name, locale)
|
13
|
+
build_op(name.to_s, locale)
|
14
|
+
end
|
15
|
+
|
16
|
+
# @param [String] _attr Attribute name
|
17
|
+
# @param [Symbol] _locale Locale
|
18
|
+
# @return Op for this translated attribute
|
19
|
+
def build_op(_attr, _locale)
|
20
|
+
raise NotImplementedError
|
21
|
+
end
|
22
|
+
|
23
|
+
# @param [Sequel::Dataset] dataset Dataset to prepare
|
24
|
+
# @param [Object] predicate Predicate
|
25
|
+
# @param [Symbol] locale Locale
|
26
|
+
# @return [Sequel::Dataset] Prepared dataset
|
27
|
+
def prepare_dataset(dataset, _predicate, _locale)
|
28
|
+
dataset
|
29
|
+
end
|
17
30
|
end
|
18
31
|
end
|
19
32
|
end
|
@@ -13,8 +13,6 @@ Implements the {Mobility::Backends::Column} backend for Sequel models.
|
|
13
13
|
include Sequel
|
14
14
|
include Column
|
15
15
|
|
16
|
-
require 'mobility/backends/sequel/column/query_methods'
|
17
|
-
|
18
16
|
# @!group Backend Accessors
|
19
17
|
# @!macro backend_reader
|
20
18
|
def read(locale, _options = nil)
|
@@ -34,7 +32,10 @@ Implements the {Mobility::Backends::Column} backend for Sequel models.
|
|
34
32
|
available_locales.each { |l| yield(l) if present?(l) }
|
35
33
|
end
|
36
34
|
|
37
|
-
|
35
|
+
def self.build_op(attr, locale)
|
36
|
+
::Sequel::SQL::QualifiedIdentifier.new(model_class.table_name,
|
37
|
+
Column.column_name_for(attr, locale))
|
38
|
+
end
|
38
39
|
|
39
40
|
private
|
40
41
|
|
@@ -1,3 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require "mobility/backends/sequel/json"
|
3
|
+
require "mobility/backends/sequel/jsonb"
|
4
|
+
|
1
5
|
module Mobility
|
2
6
|
module Backends
|
3
7
|
=begin
|
@@ -8,9 +12,6 @@ Implements the {Mobility::Backends::Container} backend for Sequel models.
|
|
8
12
|
class Sequel::Container
|
9
13
|
include Sequel
|
10
14
|
|
11
|
-
require 'mobility/backends/sequel/container/json_query_methods'
|
12
|
-
require 'mobility/backends/sequel/container/jsonb_query_methods'
|
13
|
-
|
14
15
|
# @!method column_name
|
15
16
|
# @return [Symbol] (:translations) Name of translations column
|
16
17
|
option_reader :column_name
|
@@ -58,8 +59,6 @@ Implements the {Mobility::Backends::Container} backend for Sequel models.
|
|
58
59
|
end
|
59
60
|
end
|
60
61
|
|
61
|
-
backend_class = self
|
62
|
-
|
63
62
|
setup do |attributes, options|
|
64
63
|
column_name = options[:column_name]
|
65
64
|
before_validation = Module.new do
|
@@ -76,13 +75,6 @@ Implements the {Mobility::Backends::Container} backend for Sequel models.
|
|
76
75
|
|
77
76
|
plugin :defaults_setter
|
78
77
|
attributes.each { |attribute| default_values[attribute.to_sym] = {} }
|
79
|
-
|
80
|
-
query_methods = backend_class.const_get("#{options[:column_type].capitalize}QueryMethods")
|
81
|
-
extend(Module.new do
|
82
|
-
define_method ::Mobility.query_method do
|
83
|
-
super().with_extend(query_methods.new(attributes, options))
|
84
|
-
end
|
85
|
-
end)
|
86
78
|
end
|
87
79
|
|
88
80
|
private
|
@@ -104,6 +96,23 @@ Implements the {Mobility::Backends::Container} backend for Sequel models.
|
|
104
96
|
end
|
105
97
|
|
106
98
|
class InvalidColumnType < StandardError; end
|
99
|
+
|
100
|
+
# @param [Symbol] name Attribute name
|
101
|
+
# @param [Symbol] locale Locale
|
102
|
+
# @return [Mobility::Backends::Sequel::Container::JSONOp,Mobility::Backends::Sequel::Container::JSONBOp]
|
103
|
+
def self.build_op(attr, locale)
|
104
|
+
klass = const_get("#{options[:column_type].upcase}Op")
|
105
|
+
klass.new(klass.new(column_name.to_sym)[locale.to_s]).get_text(attr)
|
106
|
+
end
|
107
|
+
|
108
|
+
class JSONOp < ::Sequel::Postgres::JSONOp; end
|
109
|
+
|
110
|
+
class JSONBOp < Jsonb::JSONBOp
|
111
|
+
def to_question
|
112
|
+
left = @value.args[0].value
|
113
|
+
JSONBOp === left ? ::Sequel.&(super, left.to_question) : super
|
114
|
+
end
|
115
|
+
end
|
107
116
|
end
|
108
117
|
end
|
109
118
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'mobility/backends/sequel/pg_hash'
|
2
2
|
|
3
|
+
Sequel.extension :pg_hstore, :pg_hstore_ops
|
4
|
+
|
3
5
|
module Mobility
|
4
6
|
module Backends
|
5
7
|
=begin
|
@@ -11,8 +13,6 @@ Implements the {Mobility::Backends::Hstore} backend for Sequel models.
|
|
11
13
|
=end
|
12
14
|
module Sequel
|
13
15
|
class Hstore < PgHash
|
14
|
-
require 'mobility/backends/sequel/hstore/query_methods'
|
15
|
-
|
16
16
|
# @!group Backend Accessors
|
17
17
|
# @!macro backend_reader
|
18
18
|
# @!method read(locale, options = {})
|
@@ -24,7 +24,15 @@ Implements the {Mobility::Backends::Hstore} backend for Sequel models.
|
|
24
24
|
end
|
25
25
|
# @!endgroup
|
26
26
|
|
27
|
-
|
27
|
+
# @param [Symbol] name Attribute name
|
28
|
+
# @param [Symbol] locale Locale
|
29
|
+
# @return [Mobility::Backends::Sequel::Hstore::HStoreOp]
|
30
|
+
def self.build_op(attr, locale)
|
31
|
+
column_name = column_affix % attr
|
32
|
+
HStoreOp.new(column_name.to_sym)[locale.to_s]
|
33
|
+
end
|
34
|
+
|
35
|
+
class HStoreOp < ::Sequel::Postgres::HStoreOp; end
|
28
36
|
end
|
29
37
|
end
|
30
38
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'mobility/backends/sequel/pg_hash'
|
2
2
|
|
3
|
+
Sequel.extension :pg_json, :pg_json_ops
|
4
|
+
|
3
5
|
module Mobility
|
4
6
|
module Backends
|
5
7
|
=begin
|
@@ -11,8 +13,6 @@ Implements the {Mobility::Backends::Json} backend for Sequel models.
|
|
11
13
|
=end
|
12
14
|
module Sequel
|
13
15
|
class Json < PgHash
|
14
|
-
require 'mobility/backends/sequel/json/query_methods'
|
15
|
-
|
16
16
|
# @!group Backend Accessors
|
17
17
|
#
|
18
18
|
# @!method read(locale, options = {})
|
@@ -31,7 +31,15 @@ Implements the {Mobility::Backends::Json} backend for Sequel models.
|
|
31
31
|
# @return [String,Integer,Boolean] Updated value
|
32
32
|
# @!endgroup
|
33
33
|
|
34
|
-
|
34
|
+
# @param [Symbol] name Attribute name
|
35
|
+
# @param [Symbol] locale Locale
|
36
|
+
# @return [Mobility::Backends::Sequel::Json::JSONOp]
|
37
|
+
def self.build_op(attr, locale)
|
38
|
+
column_name = column_affix % attr
|
39
|
+
JSONOp.new(column_name.to_sym).get_text(locale.to_s)
|
40
|
+
end
|
41
|
+
|
42
|
+
class JSONOp < ::Sequel::Postgres::JSONOp; end
|
35
43
|
end
|
36
44
|
end
|
37
45
|
end
|
@@ -1,5 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'mobility/backends/sequel/pg_hash'
|
2
3
|
|
4
|
+
Sequel.extension :pg_json, :pg_json_ops
|
5
|
+
|
3
6
|
module Mobility
|
4
7
|
module Backends
|
5
8
|
=begin
|
@@ -11,8 +14,6 @@ Implements the {Mobility::Backends::Jsonb} backend for Sequel models.
|
|
11
14
|
=end
|
12
15
|
module Sequel
|
13
16
|
class Jsonb < PgHash
|
14
|
-
require 'mobility/backends/sequel/jsonb/query_methods'
|
15
|
-
|
16
17
|
# @!group Backend Accessors
|
17
18
|
#
|
18
19
|
# @!method read(locale, **options)
|
@@ -31,7 +32,38 @@ Implements the {Mobility::Backends::Jsonb} backend for Sequel models.
|
|
31
32
|
# @return [String,Integer,Boolean] Updated value
|
32
33
|
# @!endgroup
|
33
34
|
|
34
|
-
|
35
|
+
# @param [Symbol] name Attribute name
|
36
|
+
# @param [Symbol] locale Locale
|
37
|
+
# @return [Mobility::Backends::Sequel::Jsonb::JSONBOp]
|
38
|
+
def self.build_op(attr, locale)
|
39
|
+
column_name = column_affix % attr
|
40
|
+
JSONBOp.new(column_name.to_sym).get_text(locale.to_s)
|
41
|
+
end
|
42
|
+
|
43
|
+
class JSONBOp < ::Sequel::Postgres::JSONBOp
|
44
|
+
def to_dash_arrow
|
45
|
+
column = @value.args[0].value
|
46
|
+
locale = @value.args[1]
|
47
|
+
::Sequel.pg_jsonb_op(column)[locale]
|
48
|
+
end
|
49
|
+
|
50
|
+
def to_question
|
51
|
+
column = @value.args[0].value
|
52
|
+
locale = @value.args[1]
|
53
|
+
::Sequel.pg_jsonb_op(column).has_key?(locale)
|
54
|
+
end
|
55
|
+
|
56
|
+
def =~(other)
|
57
|
+
case other
|
58
|
+
when Integer, Hash
|
59
|
+
to_dash_arrow =~ other.to_json
|
60
|
+
when NilClass
|
61
|
+
~to_question
|
62
|
+
else
|
63
|
+
super
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
35
67
|
end
|
36
68
|
end
|
37
69
|
end
|
@@ -6,6 +6,7 @@ require "mobility/sequel/column_changes"
|
|
6
6
|
require "mobility/sequel/hash_initializer"
|
7
7
|
require "mobility/sequel/string_translation"
|
8
8
|
require "mobility/sequel/text_translation"
|
9
|
+
require "mobility/sequel/sql"
|
9
10
|
|
10
11
|
module Mobility
|
11
12
|
module Backends
|
@@ -23,23 +24,104 @@ Implements the {Mobility::Backends::KeyValue} backend for Sequel models.
|
|
23
24
|
include KeyValue
|
24
25
|
include Util
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
27
|
+
class << self
|
28
|
+
# @!group Backend Configuration
|
29
|
+
# @option (see Mobility::Backends::KeyValue::ClassMethods#configure)
|
30
|
+
# @raise (see Mobility::Backends::KeyValue::ClassMethods#configure)
|
31
|
+
# @raise [CacheRequired] if cache is disabled
|
32
|
+
def configure(options)
|
33
|
+
raise CacheRequired, "Cache required for Sequel::KeyValue backend" if options[:cache] == false
|
34
|
+
super
|
35
|
+
if type = options[:type]
|
36
|
+
options[:association_name] ||= :"#{options[:type]}_translations"
|
37
|
+
options[:class_name] ||= Mobility::Sequel.const_get("#{type.capitalize}Translation")
|
38
|
+
end
|
39
|
+
options[:table_alias_affix] = "#{options[:model_class]}_%s_#{options[:association_name]}"
|
40
|
+
rescue NameError
|
41
|
+
raise ArgumentError, "You must define a Mobility::Sequel::#{type.capitalize}Translation class."
|
42
|
+
end
|
43
|
+
# @!endgroup
|
44
|
+
|
45
|
+
def build_op(attr, locale)
|
46
|
+
::Mobility::Sequel::SQL::QualifiedIdentifier.new(table_alias(attr, locale), :value, locale, self, attribute_name: attr)
|
47
|
+
end
|
48
|
+
|
49
|
+
# @param [Sequel::Dataset] dataset Dataset to prepare
|
50
|
+
# @param [Object] predicate Predicate
|
51
|
+
# @param [Symbol] locale Locale
|
52
|
+
# @return [Sequel::Dataset] Prepared dataset
|
53
|
+
def prepare_dataset(dataset, predicate, locale)
|
54
|
+
visit(predicate, locale).inject(dataset) do |ds, (attr, join_type)|
|
55
|
+
join_translations(ds, attr, locale, join_type)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def join_translations(dataset, attr, locale, join_type)
|
62
|
+
dataset.join_table(join_type,
|
63
|
+
class_name.table_name,
|
64
|
+
{
|
65
|
+
key: attr.to_s,
|
66
|
+
locale: locale.to_s,
|
67
|
+
translatable_type: model_class.name,
|
68
|
+
translatable_id: ::Sequel[:"#{model_class.table_name}"][:id]
|
69
|
+
},
|
70
|
+
table_alias: table_alias(attr, locale))
|
71
|
+
end
|
72
|
+
|
73
|
+
# @return [Hash] Hash of attribute/join_type pairs
|
74
|
+
def visit(predicate, locale)
|
75
|
+
case predicate
|
76
|
+
when Array
|
77
|
+
visit_collection(predicate, locale)
|
78
|
+
when ::Mobility::Sequel::SQL::QualifiedIdentifier
|
79
|
+
visit_sql_identifier(predicate, locale)
|
80
|
+
when ::Sequel::SQL::BooleanExpression
|
81
|
+
visit_boolean(predicate, locale)
|
82
|
+
when ::Sequel::SQL::Expression
|
83
|
+
visit(predicate.args, locale)
|
84
|
+
else
|
85
|
+
{}
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def visit_boolean(boolean, locale)
|
90
|
+
if boolean.op == :IS
|
91
|
+
nils, ops = boolean.args.partition(&:nil?)
|
92
|
+
if hash = visit(ops, locale)
|
93
|
+
join_type = nils.empty? ? :inner : :left_outer
|
94
|
+
# TODO: simplify to hash.transform_values { join_type } when
|
95
|
+
# support for Ruby 2.3 is deprecated
|
96
|
+
Hash[hash.keys.map { |key| [key, join_type] }]
|
97
|
+
else
|
98
|
+
{}
|
99
|
+
end
|
100
|
+
elsif boolean.op == :OR
|
101
|
+
hash = boolean.args.map { |op| visit(op, locale) }.
|
102
|
+
compact.inject(&:merge)
|
103
|
+
# TODO: simplify to hash.transform_values { :left_outer } when
|
104
|
+
# support for Ruby 2.3 is deprecated
|
105
|
+
Hash[hash.keys.map { |key| [key, :left_outer] }]
|
106
|
+
else
|
107
|
+
visit(boolean.args, locale)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def visit_collection(collection, locale)
|
112
|
+
collection.map { |p| visit(p, locale) }.compact.inject do |hash, visited|
|
113
|
+
visited.merge(hash) { |_, old, new| old == :inner ? old : new }
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def visit_sql_identifier(identifier, locale)
|
118
|
+
if identifier.backend_class == self && identifier.locale == locale
|
119
|
+
{ identifier.attribute_name => :inner }
|
120
|
+
else
|
121
|
+
{}
|
122
|
+
end
|
38
123
|
end
|
39
|
-
rescue NameError
|
40
|
-
raise ArgumentError, "You must define a Mobility::Sequel::#{type.capitalize}Translation class."
|
41
124
|
end
|
42
|
-
# @!endgroup
|
43
125
|
|
44
126
|
setup do |attributes, options|
|
45
127
|
association_name = options[:association_name]
|
@@ -75,8 +157,6 @@ Implements the {Mobility::Backends::KeyValue} backend for Sequel models.
|
|
75
157
|
include Mobility::Sequel::ColumnChanges.new(attributes)
|
76
158
|
end
|
77
159
|
|
78
|
-
setup_query_methods(QueryMethods)
|
79
|
-
|
80
160
|
# Returns translation for a given locale, or initializes one if none is present.
|
81
161
|
# @param [Symbol] locale
|
82
162
|
# @return [Mobility::Sequel::TextTranslation,Mobility::Sequel::StringTranslation]
|