From e7504e02320cf0990495943f2e8f166a743727c6 Mon Sep 17 00:00:00 2001 From: Tsung-Yen Tsai Date: Wed, 19 Dec 2018 12:15:37 -0800 Subject: [PATCH] list all and tests --- lib/onfleet-ruby/actions/list.rb | 11 ++++++----- lib/onfleet-ruby/task.rb | 14 ++++++++++++++ onfleet-ruby.gemspec | 2 +- spec/onfleet/task_spec.rb | 19 +++++++++++++++++++ spec/support/http_requests/shared_examples.rb | 6 ++++++ 5 files changed, 46 insertions(+), 6 deletions(-) diff --git a/lib/onfleet-ruby/actions/list.rb b/lib/onfleet-ruby/actions/list.rb index 6bd10e3..67ad222 100644 --- a/lib/onfleet-ruby/actions/list.rb +++ b/lib/onfleet-ruby/actions/list.rb @@ -7,17 +7,18 @@ def list(filters = {}) response.compact.map { |item| new(item) } end + def query_params(filters) + filters && filters + .collect { |key, value| "#{key}=#{URI.encode_www_form_component(value)}" } + .join('&') + end + private def list_url_for(filters) [api_url, query_params(filters)].compact.join('?') end - def query_params(filters) - filters && filters - .collect { |key, value| "#{key}=#{URI.encode_www_form_component(value)}" } - .join('&') - end end def self.included(base) diff --git a/lib/onfleet-ruby/task.rb b/lib/onfleet-ruby/task.rb index 46749e5..3cb23f5 100644 --- a/lib/onfleet-ruby/task.rb +++ b/lib/onfleet-ruby/task.rb @@ -19,6 +19,20 @@ def complete Onfleet.request(url, :post, params) true end + + def self.list_all(filters) + response = Onfleet.request(list_all_url_for(filters), :get) + { + lastId: response['lastId'], + tasks: response['tasks'].compact.map { |item| new(item) } + } + end + + private + + def self.list_all_url_for(filters) + [api_url + '/all', query_params(filters)].compact.join('?') + end end end diff --git a/onfleet-ruby.gemspec b/onfleet-ruby.gemspec index f5ccc59..d2c257a 100644 --- a/onfleet-ruby.gemspec +++ b/onfleet-ruby.gemspec @@ -10,7 +10,7 @@ Gem::Specification.new do |s| s.license = 'MIT' s.add_dependency('activesupport', '>= 4.2') - s.add_dependency('rest-client', '~> 1.4') + s.add_dependency('rest-client', '~> 2.0') s.add_development_dependency('rake') s.add_development_dependency('rspec', '~> 3.3') diff --git a/spec/onfleet/task_spec.rb b/spec/onfleet/task_spec.rb index a2e95b6..4e12bbf 100644 --- a/spec/onfleet/task_spec.rb +++ b/spec/onfleet/task_spec.rb @@ -21,6 +21,25 @@ end end + describe ".list_all" do + subject { -> { described_class.list_all(query_params) } } + + context "with no filter" do + let(:query_params) { nil } + it_should_behave_like "list all tasks", path: 'tasks/all' + end + + context "with query params" do + let(:query_params) { { food: 'pizza', topping: 'mushroom' } } + it_should_behave_like "list all tasks", path: 'tasks/all?food=pizza&topping=mushroom' + end + + context "with a URL-unsafe query param" do + let(:query_params) { { food: 'green eggs & ham' } } + it_should_behave_like "list all tasks", path: 'tasks/all?food=green+eggs+%26+ham' + end + end + describe ".create" do subject { -> { described_class.create(params) } } it_should_behave_like Onfleet::Actions::Create, path: 'tasks' diff --git a/spec/support/http_requests/shared_examples.rb b/spec/support/http_requests/shared_examples.rb index 48d5c22..cfb19a3 100644 --- a/spec/support/http_requests/shared_examples.rb +++ b/spec/support/http_requests/shared_examples.rb @@ -52,6 +52,12 @@ it_should_behave_like "an action that makes a request to Onfleet", method: :get end +RSpec.shared_examples_for "list all tasks" do |path:| + set_up_request_stub(:get, path) + let(:response_body) { { 'lastId' => 'some-id', 'tasks' => [{ id: 'an-object' }, { id: 'another-object' }] } } + it_should_behave_like "an action that makes a request to Onfleet", method: :get +end + RSpec.shared_examples_for Onfleet::Actions::Create do |path:| set_up_request_stub(:post, path) let(:response_body) { { id: 'an-object' } }