Module: ActiveHouse::Querying::Collect

Extended by:
ActiveSupport::Concern
Included in:
ActiveHouse::QueryBuilder
Defined in:
lib/active_house/querying/collect.rb

Instance Method Summary collapse

Instance Method Details

#build_queryObject



75
76
77
# File 'lib/active_house/querying/collect.rb', line 75

def build_query
  query_parts.reject(&:nil?).join("\n")
end

#collectionObject



53
54
55
# File 'lib/active_house/querying/collect.rb', line 53

def collection
  @collection ||= fetch_collection
end

#count(value = 'COUNT() AS cnt') ⇒ Object



97
98
99
100
# File 'lib/active_house/querying/collect.rb', line 97

def count(value = 'COUNT() AS cnt')
  return 0 if group_values
  except(:select, :limit, :offset, :order).pluck(value).first
end

#fetch_collectionObject



57
58
59
# File 'lib/active_house/querying/collect.rb', line 57

def fetch_collection
  to_hashes.map { |row| model_class.load!(row) }
end

#group_valuesObject



83
84
85
# File 'lib/active_house/querying/collect.rb', line 83

def group_values
  values[:group_by].empty? ? nil : values[:group_by]
end

#initializeObject



28
29
30
31
# File 'lib/active_house/querying/collect.rb', line 28

def initialize(*)
  @collection = nil
  super
end

#klassObject



79
80
81
# File 'lib/active_house/querying/collect.rb', line 79

def klass
  model_class
end

#loaded?Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/active_house/querying/collect.rb', line 41

def loaded?
  !@collection.nil?
end

#pluck(*fields) ⇒ Object



87
88
89
90
91
92
93
94
95
# File 'lib/active_house/querying/collect.rb', line 87

def pluck(*fields)
  result = except(:select).select(*fields).to_hashes
  return [] if result.empty?
  if result.first.keys.size == 1
    result.map { |row| row.values.first }
  else
    result.map(&:values)
  end
end

#query_partsObject



61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/active_house/querying/collect.rb', line 61

def query_parts
  [
      build_select_query_part,
      build_from_query_part,
      build_array_join_query_part,
      build_where_query_part,
      build_group_by_query_part,
      build_having_query_part,
      build_order_by_query_part,
      build_limit_query_part,
      build_union_query_part
  ]
end

#resetObject



37
38
39
# File 'lib/active_house/querying/collect.rb', line 37

def reset
  @collection = nil
end

#to_aObject



33
34
35
# File 'lib/active_house/querying/collect.rb', line 33

def to_a
  collection
end

#to_hashesObject



45
46
47
# File 'lib/active_house/querying/collect.rb', line 45

def to_hashes
  connection.select_rows(build_query.squish)
end

#to_queryObject



49
50
51
# File 'lib/active_house/querying/collect.rb', line 49

def to_query
  build_query
end