Module: Globalize::ActiveRecord::TranslatedAttributesQuery

Defined in:
lib/globalize/active_record/translated_attributes_query.rb

Defined Under Namespace

Classes: WhereChain

Instance Method Summary collapse

Instance Method Details

#calculate(*args) ⇒ Object



72
73
74
75
76
77
78
79
80
# File 'lib/globalize/active_record/translated_attributes_query.rb', line 72

def calculate(*args)
  column_name = args[1]
  if respond_to?(:translated_attribute_names) && translated_column?(column_name)
    args[1] = translated_column_name(column_name)
    join_translations.calculate(*args)
  else
    super
  end
end

#exists?(conditions = :none) ⇒ Boolean

Returns:

  • (Boolean)


64
65
66
67
68
69
70
# File 'lib/globalize/active_record/translated_attributes_query.rb', line 64

def exists?(conditions = :none)
  if parsed = parse_translated_conditions(conditions)
    with_translations_in_fallbacks.exists?(parsed)
  else
    super
  end
end

#group(*columns) ⇒ Object



48
49
50
51
52
53
54
# File 'lib/globalize/active_record/translated_attributes_query.rb', line 48

def group(*columns)
  if respond_to?(:translated_attribute_names) && parsed = parse_translated_columns(columns)
    join_translations super(parsed)
  else
    super
  end
end

#having(opts, *rest) ⇒ Object



24
25
26
27
28
29
30
# File 'lib/globalize/active_record/translated_attributes_query.rb', line 24

def having(opts, *rest)
  if parsed = parse_translated_conditions(opts)
    join_translations(super(parsed, *rest))
  else
    super
  end
end

#join_translations(relation = self) ⇒ Object



119
120
121
122
123
124
125
# File 'lib/globalize/active_record/translated_attributes_query.rb', line 119

def join_translations(relation = self)
  if relation.joins_values.include?(:translations)
    relation
  else
    relation.with_translations_in_fallbacks
  end
end

#order(opts, *rest) ⇒ Object



32
33
34
35
36
37
38
# File 'lib/globalize/active_record/translated_attributes_query.rb', line 32

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



94
95
96
97
98
99
100
# File 'lib/globalize/active_record/translated_attributes_query.rb', line 94

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

#pluck(*column_names) ⇒ Object



82
83
84
85
86
87
88
# File 'lib/globalize/active_record/translated_attributes_query.rb', line 82

def pluck(*column_names)
  if respond_to?(:translated_attribute_names) && parsed = parse_translated_columns(column_names)
    join_translations.pluck(*parsed)
  else
    super
  end
end

#reorder(opts, *rest) ⇒ Object



40
41
42
43
44
45
46
# File 'lib/globalize/active_record/translated_attributes_query.rb', line 40

def reorder(opts, *rest)
  if respond_to?(:translated_attribute_names) && parsed = parse_translated_order(opts)
    join_translations super(parsed)
  else
    super
  end
end

#select(*columns) ⇒ Object



56
57
58
59
60
61
62
# File 'lib/globalize/active_record/translated_attributes_query.rb', line 56

def select(*columns)
  if respond_to?(:translated_attribute_names) && parsed = parse_translated_columns(columns)
    join_translations super(parsed)
  else
    super
  end
end

#where(opts = :chain, *rest) ⇒ Object



14
15
16
17
18
19
20
21
22
# File 'lib/globalize/active_record/translated_attributes_query.rb', line 14

def where(opts = :chain, *rest)
  if opts == :chain
    WhereChain.new(spawn)
  elsif parsed = parse_translated_conditions(opts)
    join_translations(super(parsed, *rest))
  else
    super
  end
end

#where_values_hash(*args) ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/globalize/active_record/translated_attributes_query.rb', line 103

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

#with_translations_in_fallbacksObject



90
91
92
# File 'lib/globalize/active_record/translated_attributes_query.rb', line 90

def with_translations_in_fallbacks
  with_translations(Globalize.fallbacks)
end