lib/mobility/backends/sequel/table/query_methods.rb in mobility-0.5.1 vs lib/mobility/backends/sequel/table/query_methods.rb in mobility-0.6.0
- old
+ new
@@ -1,53 +1,58 @@
# frozen_string_literal: true
require "mobility/backends/sequel/query_methods"
module Mobility
module Backends
- class Sequel::Table::QueryMethods < Sequel::QueryMethods
- def initialize(attributes, association_name: nil, model_class: nil, subclass_name: nil, **options)
- super
- translation_class = model_class.const_get(subclass_name)
+ module Sequel
+ class Table::QueryMethods < QueryMethods
+ def initialize(attributes, association_name: nil, model_class: nil, subclass_name: nil, **options)
+ super
+ translation_class = model_class.const_get(subclass_name)
- define_join_method(association_name, translation_class, **options)
- define_query_methods(association_name, translation_class, **options)
- end
+ define_join_method(association_name, translation_class, **options)
+ define_query_methods(association_name, translation_class, **options)
+ end
- def define_join_method(association_name, translation_class, table_name: nil, foreign_key: nil, **)
- define_method :"join_#{association_name}" do |**options|
- if joins = @opts[:join]
- # Return self if we've already joined this table
- return self if joins.any? { |clause| clause.table_expr == table_name }
- end
+ def define_join_method(association_name, translation_class, table_name: nil, foreign_key: nil, **)
+ define_method :"join_#{association_name}" do |**options|
+ if joins = @opts[:join]
+ # Return self if we've already joined this table
+ return self if joins.any? { |clause| clause.table_expr == table_name }
+ end
- join_type = options[:outer_join] ? :left_outer : :inner
- join_table(join_type,
- translation_class.table_name,
- {
- locale: Mobility.locale.to_s,
- foreign_key => ::Sequel[model.table_name][:id]
- })
+ join_type = options[:outer_join] ? :left_outer : :inner
+ join_table(join_type,
+ translation_class.table_name,
+ {
+ locale: Mobility.locale.to_s,
+ foreign_key => ::Sequel[model.table_name][:id]
+ })
+ end
end
- end
- def define_query_methods(association_name, translation_class, **)
- q = self
+ def define_query_methods(association_name, translation_class, **)
+ q = self
- # See note in AR Table QueryMethods class about limitations of
- # query methods on translated attributes when searching on nil values.
- #
- %w[exclude or where].each do |method_name|
- define_method method_name do |*conds, &block|
- if i18n_keys = q.extract_attributes(conds.first)
- cond = conds.first.dup
- outer_join = method_name == "or" || i18n_keys.all? { |key| cond[key].nil? }
- i18n_keys.each { |attr| cond[::Sequel[translation_class.table_name][attr]] = cond.delete(attr) }
- super(cond, &block).send("join_#{association_name}", outer_join: outer_join)
- else
- super(*conds, &block)
+ # See note in AR Table QueryMethods class about limitations of
+ # query methods on translated attributes when searching on nil values.
+ #
+ %w[exclude or where].each do |method_name|
+ define_method method_name do |*conds, &block|
+ if i18n_keys = q.extract_attributes(conds.first)
+ cond = conds.first.dup
+ outer_join = method_name == "or" || i18n_keys.all? { |key| cond[key].nil? }
+ i18n_keys.each do |attr|
+ cond[::Sequel[translation_class.table_name][attr]] = q.collapse cond.delete(attr)
+ end
+ super(cond, &block).send("join_#{association_name}", outer_join: outer_join)
+ else
+ super(*conds, &block)
+ end
end
end
end
end
+ Table.private_constant :QueryMethods
end
end
end