Sha256: 3ab0ac03bcdb6e39be8e39988cab7289d0cb08b3480a7f9ef99c8ea6e9ab299b
Contents?: true
Size: 1.59 KB
Versions: 3
Compression:
Stored size: 1.59 KB
Contents
module Idonethis::UseCases module List class << self def apply(credential, args={}) log = args[:log] || fail("You need to supply :log adapter") view = args[:view] || fail("You need to supply :view adapter") list = get(credential, log, args).tap{|result| log.call(result)} view.call list end private def get(credential, log, args) result = [] page = 1 loop do reply = get_page(page, credential, log, args) result += reply["results"] page += 1 break if reply["next"].nil? end result end def get_page(page, credential, log, args) # https://idonethis.com/api/v0.1/dones/ params = {"order_by" => "-created", "page_size" => 100, "page" => page}. merge(done_date_from(args)) url = Idonethis::Index.dones(params) log.call "url: #{url}" internet = args[:internet] || fail("You need to supply :internet adapter") parse internet.get(url, { "Authorization" => "Token #{credential[:token]}", accept: "application/json"}) end def done_date_from(args) if args[:opts].include?("week") return { done_date_after: (Time.now - (7*24*60*60)).strftime("%F") } end intersection = (args[:opts] || []) & %W{ today yesterday } return intersection.empty? ? {} : { done_date: intersection.first } end def parse(reply) require 'json' JSON.parse(reply.body) end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
idonethis-cli-0.4.1 | lib/idonethis/use_cases/list.rb |
idonethis-cli-0.4.0 | lib/idonethis/use_cases/list.rb |
idonethis-cli-0.3.0 | lib/idonethis/use_cases/list.rb |