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