module BunqRb::Shared::ClassMethods

Public Instance Methods

implements(*calls) click to toggle source
# File lib/bunq_rb/client.rb, line 15
def implements(*calls)
  calls.each do |call|
    case call
    when :get
      implements_get
    when :list
      implements_list
    when :delete
      implements_delete
    else
      puts "ERROR for: #{call}"
    end
  end
end

Private Instance Methods

counted_url(args) click to toggle source
# File lib/bunq_rb/client.rb, line 65
def counted_url(args)
  page_size = BunqRb.configuration.page_size
  arged_url = Addressable::Template.new("#{url(*args)}{?query*}")
  params = page_size == 10 ? {} : { count: page_size }
  arged_url.expand(query: params).to_s
end
implements_delete() click to toggle source
# File lib/bunq_rb/client.rb, line 32
def implements_delete
  define_singleton_method(:delete) do |*args|
    id = args.pop
    full_uri = [url(*args), id].join("/")
    response = Client.send_method(:delete, full_uri)
    []
  end
end
implements_get() click to toggle source
# File lib/bunq_rb/client.rb, line 41
def implements_get
  define_singleton_method(:find) do |*args|
    id = args.pop
    full_uri = [url(*args), id].join("/")
    response = Client.send_method(:get, full_uri)
    new(response[0].values.first)
  end
end
implements_list() click to toggle source
# File lib/bunq_rb/client.rb, line 50
def implements_list
  define_singleton_method(:all) do |*args|
    Enumerator.new do |yielder|
      older_url = counted_url(args)
      loop do
        results = Client.raw_send_method(:get, older_url)
        json = JSON.parse(results.body)
        json["Response"].map { |item| yielder << new(item.values.first) }
        raise StopIteration if json["Pagination"].nil? || json["Pagination"]["older_url"].nil?
        older_url = json["Pagination"]["older_url"]
      end
    end.lazy
  end
end