From 824b352a4bccedae652c207a49b0b5f4a0069533 Mon Sep 17 00:00:00 2001 From: Tinco Andringa Date: Thu, 7 Nov 2024 10:33:44 +0100 Subject: [PATCH] support listing with a block --- lib/frontapp/client.rb | 8 ++++- lib/frontapp/client/conversations.rb | 4 +-- lib/frontapp/version.rb | 2 +- spec/client_spec.rb | 44 ++++++++++++++++++++++++++++ 4 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 spec/client_spec.rb diff --git a/lib/frontapp/client.rb b/lib/frontapp/client.rb index 1d72f93..1c1c7ea 100644 --- a/lib/frontapp/client.rb +++ b/lib/frontapp/client.rb @@ -61,7 +61,13 @@ def list(path, params = {}) raise Error.from_response(res) end response = JSON.parse(res.to_s) - items.concat(response["_results"]) if response["_results"] + + if block_given? + yield(response) + else + items.concat(response["_results"]) if response["_results"] + end + pagination = response["_pagination"] if pagination.nil? || pagination["next"].nil? last_page = true diff --git a/lib/frontapp/client/conversations.rb b/lib/frontapp/client/conversations.rb index 1e76c23..83d4947 100644 --- a/lib/frontapp/client/conversations.rb +++ b/lib/frontapp/client/conversations.rb @@ -2,8 +2,8 @@ module Frontapp class Client module Conversations - def conversations(params = {}) - list("conversations", params) + def conversations(params = {}, &block) + list("conversations", params, &block) end # Parameters diff --git a/lib/frontapp/version.rb b/lib/frontapp/version.rb index 2a36e33..bfadcc5 100644 --- a/lib/frontapp/version.rb +++ b/lib/frontapp/version.rb @@ -1,3 +1,3 @@ module Frontapp - VERSION = "0.0.12" + VERSION = "0.0.13" end diff --git a/spec/client_spec.rb b/spec/client_spec.rb new file mode 100644 index 0000000..d448dca --- /dev/null +++ b/spec/client_spec.rb @@ -0,0 +1,44 @@ +require 'spec_helper' +require 'frontapp' + +RSpec.describe 'Client' do + let(:headers) { + { + "Accept" => "application/json", + "Authorization" => "Bearer #{auth_token}", + } + } + let(:frontapp) { Frontapp::Client.new(auth_token: auth_token) } + + let(:result_1) { { "id" => "1" } } + let(:result_2) { { "id" => "2" } } + let(:pagination) { { "next" => "#{base_url}/conversations?page=2" } } + let(:response_1) { { "_results" => [result_1], "_pagination" => pagination } } + let(:response_2) { { "_results" => [result_2], "_pagination" => {} } } + + it "can list without a block" do + stub_request(:get, "#{base_url}/conversations"). + with(headers: headers). + to_return(status: 200, body: JSON.generate(response_1)) + stub_request(:get, "#{base_url}/conversations?page=2"). + with(headers: headers). + to_return(status: 200, body: JSON.generate(response_2)) + results = frontapp.conversations + expect(results).to eq([result_1, result_2]) + end + + it "can list with a block" do + stub_request(:get, "#{base_url}/conversations"). + with(headers: headers). + to_return(status: 200, body: JSON.generate(response_1)) + stub_request(:get, "#{base_url}/conversations?page=2"). + with(headers: headers). + to_return(status: 200, body: JSON.generate(response_2)) + results = [] + frontapp.conversations do |response| + results.concat(response["_results"]) + end + expect(results).to eq([result_1, result_2]) + end + +end