Class: FastAPI::SQL

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/fastapi/sql.rb

Instance Method Summary collapse

Constructor Details

#initialize(filters, offset, count, klazz, whitelist, safe = false) ⇒ SQL

Returns a new instance of SQL.



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/fastapi/sql.rb', line 9

def initialize(filters, offset, count, klazz, whitelist, safe = false)

  results = filter_fields(klazz, whitelist)
  models, belongs, has_many, fields = results.values_at(:models, :belongs, :has_many, :fields)

  model_name = klazz.to_s.tableize.singularize
  table_name = klazz.to_s.tableize

  # Base fields
  field_list = generate_field_list(klazz, fields, table_name)

  # Belongs fields
  joins = parse_belongs(belongs, field_list, table_name)

  # Many fields (1 to many)
  parse_manys(has_many, filters, field_list, model_name, table_name)

  filter_string = filters[:main].size > 0 ? "WHERE #{filters[:main].join(' AND ')}" : nil
  order_string  = filters[:main_order] ? "ORDER BY #{filters[:main_order]}" : nil

  @sql = {
    query: [
      "SELECT #{field_list.join(', ')}",
      "FROM #{table_name}",
      joins.join(' '),
      filter_string,
      order_string,
      "LIMIT #{count}",
      "OFFSET #{offset}"
    ].compact.join(' '),
    count_query: [
      "SELECT COUNT(id) FROM #{table_name}",
      filter_string
    ].compact.join(' '),
    models: models
  }
end