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
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
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