Skip to content

Commit

Permalink
support listing with a block
Browse files Browse the repository at this point in the history
  • Loading branch information
tinco committed Nov 7, 2024
1 parent 1a9f298 commit 824b352
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 4 deletions.
8 changes: 7 additions & 1 deletion lib/frontapp/client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions lib/frontapp/client/conversations.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion lib/frontapp/version.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module Frontapp
VERSION = "0.0.12"
VERSION = "0.0.13"
end
44 changes: 44 additions & 0 deletions spec/client_spec.rb
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 824b352

Please sign in to comment.