Module: Globalize::ActiveRecord::QueryMethods
- Defined in:
- lib/globalize/active_record/query_methods.rb
Defined Under Namespace
Classes: WhereChain
Instance Method Summary collapse
- #exists?(conditions = :none) ⇒ Boolean
- #join_translations(relation = self, opts = {}) ⇒ Object
- #order(opts, *rest) ⇒ Object
- #parse_translated_conditions(opts) ⇒ Object
- #translated_vs_normal(opts) ⇒ Object
- #where(opts = :chain, *rest) ⇒ Object
- #where_values_hash(*args) ⇒ Object
- #with_translations_in_fallbacks ⇒ Object
Instance Method Details
#exists?(conditions = :none) ⇒ Boolean
35 36 37 38 39 40 41 |
# File 'lib/globalize/active_record/query_methods.rb', line 35 def exists?(conditions = :none) if parsed = parse_translated_conditions(conditions) with_translations_in_fallbacks.exists?(parsed) else super end end |
#join_translations(relation = self, opts = {}) ⇒ Object
82 83 84 85 86 87 88 89 |
# File 'lib/globalize/active_record/query_methods.rb', line 82 def join_translations(relation = self, opts = {}) if relation.joins_values.include?(:translations) rel = relation else rel = relation.with_translations_in_fallbacks end rel.with_where(opts) end |
#order(opts, *rest) ⇒ Object
27 28 29 30 31 32 33 |
# File 'lib/globalize/active_record/query_methods.rb', line 27 def order(opts, *rest) if respond_to?(:translated_attribute_names) && parsed = parse_translated_order(opts) join_translations super(parsed) else super end end |
#parse_translated_conditions(opts) ⇒ Object
58 59 60 61 62 63 64 |
# File 'lib/globalize/active_record/query_methods.rb', line 58 def parse_translated_conditions(opts) if opts.is_a?(Hash) && respond_to?(:translated_attribute_names) && (keys = opts.symbolize_keys.keys & translated_attribute_names).present? opts = opts.dup keys.each { |key| opts[translated_column_name(key)] = opts.delete(key) || opts.delete(key.to_s) } opts end end |
#translated_vs_normal(opts) ⇒ Object
43 44 45 46 47 48 49 50 51 52 |
# File 'lib/globalize/active_record/query_methods.rb', line 43 def translated_vs_normal(opts) translated = {} if opts.is_a?(Hash) && respond_to?(:translated_attribute_names) && (opts.symbolize_keys.keys & translated_attribute_names).present? opts = opts.dup opts.each do |k,v| translated[k] = opts.delete(k) || opts.delete(key.to_s) if translated_column? k.to_sym end end return translated, opts end |
#where(opts = :chain, *rest) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/globalize/active_record/query_methods.rb', line 14 def where(opts = :chain, *rest) if opts == :chain WhereChain.new(spawn) else translated, normal = translated_vs_normal(opts) if not translated.empty? join_translations(super(normal, *rest), translated) else super end end end |
#where_values_hash(*args) ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/globalize/active_record/query_methods.rb', line 66 def where_values_hash(*args) return super unless respond_to?(:translations_table_name) equalities = respond_to?(:with_default_scope) ? with_default_scope.where_values : where_values equalities = equalities.grep(Arel::Nodes::Equality).find_all { |node| node.left.relation.name == translations_table_name } binds = Hash[bind_values.find_all(&:first).map { |column, v| [column.name, v] }] super.merge(Hash[equalities.map { |where| name = where.left.name [name, binds.fetch(name.to_s) { right = where.right; right.is_a?(Arel::Nodes::Casted) ? right.val : right }] }]) end |