class Airtable::Table
Constants
- LIMIT_MAX
Maximum results per request
Public Instance Methods
all(options={})
click to toggle source
Fetch all records iterating through offsets until retrieving the entire collection all(:sort => [“Name”, :desc])
# File lib/airtable/table.rb, line 9 def all(options={}) offset = nil results = [] begin options.merge!(:limit => LIMIT_MAX, :offset => offset) response = records(options) results += response.records offset = response.offset end until offset.nil? || offset.empty? || results.empty? results end
create(record)
click to toggle source
Creates a record by posting to airtable
# File lib/airtable/table.rb, line 59 def create(record) result = self.class.post(worksheet_url, :body => { "fields" => record.fields }.to_json, :headers => { "Content-type" => "application/json" }).parsed_response if result.present? && result["id"].present? record.override_attributes!(result_attributes(result)) record else # failed false end end
destroy(id)
click to toggle source
Deletes record in table based on id
# File lib/airtable/table.rb, line 96 def destroy(id) self.class.delete(worksheet_url + "/" + id).parsed_response end
find(id)
click to toggle source
Returns record based given row id
# File lib/airtable/table.rb, line 53 def find(id) result = self.class.get(worksheet_url + "/" + id).parsed_response Record.new(result_attributes(result)) if result.present? && result["id"] end
raise_bad_formula_error()
click to toggle source
# File lib/airtable/table.rb, line 48 def raise_bad_formula_error raise ArgumentError.new("The value for filter should be a String.") end
records(options={})
click to toggle source
Fetch records from the sheet given the list options Options: limit = 100, offset = “as345g”, sort = [“Name”, “asc”] records(:sort => [“Name”, :desc], :limit => 50, :offset => “as345g”)
# File lib/airtable/table.rb, line 24 def records(options={}) options["sortField"], options["sortDirection"] = options.delete(:sort) if options[:sort] results = self.class.get(worksheet_url, query: options).parsed_response RecordSet.new(results) end
select(options={})
click to toggle source
Query for records using a string formula Options: limit = 100, offset = “as345g”, sort = [“Name”, “asc”],
fields = [Name, Email], formula = "Count > 5", view = "Main View"
select(limit: 10, sort: [“Name”, “asc”], formula: “Order < 2”)
# File lib/airtable/table.rb, line 35 def select(options={}) options['sortField'], options['sortDirection'] = options.delete(:sort) if options[:sort] options['maxRecords'] = options.delete(:limit) if options[:limit] if options[:formula] raise_bad_formula_error unless options[:formula].is_a? String options['filterByFormula'] = options.delete(:formula) end results = self.class.get(worksheet_url, query: options).parsed_response RecordSet.new(results) end
update(record)
click to toggle source
Replaces record in airtable based on id
# File lib/airtable/table.rb, line 72 def update(record) result = self.class.put(worksheet_url + "/" + record.id, :body => { "fields" => record.fields_for_update }.to_json, :headers => { "Content-type" => "application/json" }).parsed_response if result.present? && result["id"].present? record.override_attributes!(result_attributes(result)) record else # failed false end end
update_record_fields(record_id, fields_for_update)
click to toggle source
# File lib/airtable/table.rb, line 84 def update_record_fields(record_id, fields_for_update) result = self.class.patch(worksheet_url + "/" + record_id, :body => { "fields" => fields_for_update }.to_json, :headers => { "Content-type" => "application/json" }).parsed_response if result.present? && result["id"].present? Record.new(result_attributes(result)) else # failed false end end
Protected Instance Methods
result_attributes(res)
click to toggle source
# File lib/airtable/table.rb, line 102 def result_attributes(res) res["fields"].merge("id" => res["id"]) if res.present? && res["id"] end
worksheet_url()
click to toggle source
# File lib/airtable/table.rb, line 106 def worksheet_url "/#{app_token}/#{CGI.escape(worksheet_name)}" end