Class: Airmodel::Query
- Inherits:
-
Object
- Object
- Airmodel::Query
- Includes:
- Enumerable
- Defined in:
- lib/airmodel/query.rb
Instance Method Summary collapse
- #all ⇒ Object
- #by_formula(formula) ⇒ Object
- #each(&block) ⇒ Object
- #find_by(filters) ⇒ Object
-
#get_offset ⇒ Object
return saved airtable offset for this query.
-
#initialize(querying_class) ⇒ Query
constructor
A new instance of Query.
- #inspect ⇒ Object
- #last ⇒ Object
- #limit(lim) ⇒ Object
- #map(&block) ⇒ Object
- #offset(airtable_offset_key) ⇒ Object
- #order(order_string) ⇒ Object
- #params ⇒ Object
- #search(args = {}) ⇒ Object
-
#to_a ⇒ Object
add kicker methods.
- #where(args) ⇒ Object
Constructor Details
#initialize(querying_class) ⇒ Query
Returns a new instance of Query.
5 6 7 |
# File 'lib/airmodel/query.rb', line 5 def initialize() = end |
Instance Method Details
#all ⇒ Object
90 91 92 |
# File 'lib/airmodel/query.rb', line 90 def all to_a end |
#by_formula(formula) ⇒ Object
23 24 25 26 |
# File 'lib/airmodel/query.rb', line 23 def by_formula(formula) params[:formulas].push formula self end |
#each(&block) ⇒ Object
94 95 96 |
# File 'lib/airmodel/query.rb', line 94 def each(&block) to_a.each(&block) end |
#find_by(filters) ⇒ Object
110 111 112 113 114 |
# File 'lib/airmodel/query.rb', line 110 def find_by(filters) params[:limit] = 1 params[:where_clauses] = filters first end |
#get_offset ⇒ Object
return saved airtable offset for this query
71 72 73 |
# File 'lib/airmodel/query.rb', line 71 def get_offset @offset end |
#inspect ⇒ Object
102 103 104 |
# File 'lib/airmodel/query.rb', line 102 def inspect to_a.inspect end |
#last ⇒ Object
106 107 108 |
# File 'lib/airmodel/query.rb', line 106 def last to_a.last end |
#limit(lim) ⇒ Object
49 50 51 52 |
# File 'lib/airmodel/query.rb', line 49 def limit(lim) params[:limit] = lim ? lim.to_i : nil self end |
#map(&block) ⇒ Object
98 99 100 |
# File 'lib/airmodel/query.rb', line 98 def map(&block) to_a.map(&block) end |
#offset(airtable_offset_key) ⇒ Object
65 66 67 68 |
# File 'lib/airmodel/query.rb', line 65 def offset(airtable_offset_key) params[:offset] = airtable_offset_key self end |
#order(order_string) ⇒ Object
54 55 56 57 58 59 60 61 62 |
# File 'lib/airmodel/query.rb', line 54 def order(order_string) if order_string ordr = order_string.split(" ") column = ordr.first direction = ordr.length > 1 ? ordr.last.downcase : "asc" params[:order] = [column, direction] end self end |
#params ⇒ Object
9 10 11 12 13 14 15 16 |
# File 'lib/airmodel/query.rb', line 9 def params @params ||= { where_clauses: {}, formulas: [], order: .default_sort, offset: nil } end |
#search(args = {}) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/airmodel/query.rb', line 28 def search(args={}) if args && args[:q] && args[:fields] searchfields = if args[:fields].is_a?(String) args[:fields].split(",").map{|f| f.strip } else args[:fields] end query = if args[:q].respond_to?(:downcase) args[:q].downcase else args[:q] end f = "OR(" + searchfields.map{|field| # convert strings to case-insensitive searches "FIND('#{query}', LOWER({#{field}}))" }.join(',') + ")" params[:formulas].push f end self end |
#to_a ⇒ Object
add kicker methods
76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/airmodel/query.rb', line 76 def to_a puts "RUNNING EXPENSIVE API QUERY TO AIRTABLE (#{@querying_class.name})" # merge explicit formulas and abstracted where-clauses into one Airtable Formula formula = "AND(" + params[:where_clauses].map{|k,v| "{#{k}}='#{v}'" }.join(',') + params[:formulas].join(',') + ")" records = .table.records( sort: params[:order], filterByFormula: formula, limit: params[:limit], offset: params[:offset] ) @offset = records.offset .classify records end |
#where(args) ⇒ Object
18 19 20 21 |
# File 'lib/airmodel/query.rb', line 18 def where(args) params[:where_clauses].merge!(args) self end |