module Mobility::Plugins::Sequel::Query::QueryBuilder
Constants
- IDENTITY
Public Class Methods
build(dataset, query_method, query_conds) { || ... }
click to toggle source
# File lib/mobility/plugins/sequel/query.rb, line 123 def build(dataset, query_method, query_conds, &block) return yield unless ::Hash === query_conds.first cond = query_conds.first.dup locale = cond.delete(:locale) || Mobility.locale _build(dataset, cond, locale, query_method, &block) end
Private Class Methods
_build(dataset, cond, locale, query_method) { || ... }
click to toggle source
# File lib/mobility/plugins/sequel/query.rb, line 134 def _build(dataset, cond, locale, query_method) keys, predicates = cond.keys, [] model = dataset.model query_map = attribute_modules(model).inject(IDENTITY) do |qm, mod| i18n_keys = mod.names.map(&:to_sym) & keys next qm if i18n_keys.empty? mod_predicates = i18n_keys.map do |key| build_predicate(dataset.backend_op(key, locale), cond.delete(key)) end predicates += mod_predicates ->(ds) { mod.backend_class.prepare_dataset(qm[ds], mod_predicates, locale) } end return yield if query_map == IDENTITY predicates = ::Sequel.&(*predicates, cond) unless cond.empty? query_map[dataset.public_send(query_method, ::Sequel.&(*predicates))] end
attribute_modules(model)
click to toggle source
# File lib/mobility/plugins/sequel/query.rb, line 156 def attribute_modules(model) model.ancestors.grep(::Mobility::Translations) end
build_predicate(op, values)
click to toggle source
# File lib/mobility/plugins/sequel/query.rb, line 160 def build_predicate(op, values) vals = values.is_a?(Array) ? values.uniq: [values] vals = vals.first if vals.size == 1 op =~ vals end