class Lard

A set of utility functions for working with the Larder HTTP API

Constants

VERSION

Public Class Methods

new(token = nil) click to toggle source
# File lib/lard.rb, line 8
def initialize(token = nil)
  @token = token
  @folders = []
end

Public Instance Methods

api_url_prefix() click to toggle source
# File lib/lard.rb, line 17
def api_url_prefix
  'https://larder.io/api/1/@me/'
end
authorized() click to toggle source
# File lib/lard.rb, line 13
def authorized
  !@token.nil?
end
bookmarks(folder_id) click to toggle source
# File lib/lard.rb, line 40
def bookmarks(folder_id)
  res = get "folders/#{folder_id}", limit: 200
  bookmarks = res[:results] || []

  until res[:next].nil?
    res = get res[:next]
    bookmarks.push(*res[:results])
  end

  bookmarks
end
folders() click to toggle source
# File lib/lard.rb, line 52
def folders
  res = get 'folders', limit: 200
  @folders = res[:results] || @folders

  until res[:next].nil?
    res = get res[:next]
    @folders.push(*res[:results])
  end

  @folders
end
get(url, params = nil) click to toggle source

Perform a GET request to an endpoint in the Larder API

# File lib/lard.rb, line 65
def get(url, params = nil)
  raise "You're not logged in! Run 'lard login' first." unless authorized

  # Make a URI based on whether we received a full URL or just endpoint
  uri = prepare_uri url
  uri.query = URI.encode_www_form params unless params.nil?

  res = Net::HTTP.start uri.host, uri.port, use_ssl: true do |http|
    http.request prepare_request 'get', uri
  end
  parse_response res
end
get_folder_by_name(name) click to toggle source
# File lib/lard.rb, line 21
def get_folder_by_name(name)
  folders if @folders.empty?
  @folders.find do |folder|
    folder[:name] == name
  end
end
post(endpoint, args = {}) click to toggle source

Perform a POST request to an endpoint in the Larder API Posts args as JSON in the post body, where args is a hash

# File lib/lard.rb, line 80
def post(endpoint, args = {})
  raise "You're not logged in! Run 'lard login' first." unless authorized

  uri = prepare_uri endpoint
  request = prepare_request 'post', uri
  request.set_form_data args
  res = Net::HTTP.start uri.host, uri.port, use_ssl: true do |http|
    http.request request
  end
  parse_response res
end
tags() click to toggle source
# File lib/lard.rb, line 28
def tags
  res = get 'tags', limit: 200
  tags = res[:results] || []

  until res[:next].nil?
    res = get res[:next]
    tags.push(*res[:results])
  end

  tags
end

Private Instance Methods

parse_response(res) click to toggle source
# File lib/lard.rb, line 116
def parse_response(res)
  JSON.parse res.body, symbolize_names: true
end
prepare_request(method, uri) click to toggle source
# File lib/lard.rb, line 102
def prepare_request(method, uri)
  case method
  when 'get'
    request = Net::HTTP::Get.new uri
  when 'post'
    request = Net::HTTP::Post.new uri
    request.add_field 'Content-Type', 'application/json'
  end
  request.add_field 'Authorization', "Token #{@token}"
  # TODO: How can we ensure this gets updated with every new version?
  request.add_field 'User-Agent', "Lard/#{VERSION}"
  request
end
prepare_uri(url) click to toggle source
# File lib/lard.rb, line 94
def prepare_uri(url)
  if url.start_with?('http://', 'https://')
    URI url
  else
    URI "#{api_url_prefix}#{url}/"
  end
end