From 1532dc68d934bd03fcaab66d5cf875a6c13e02bb Mon Sep 17 00:00:00 2001 From: Chris Marques Date: Wed, 27 May 2015 09:58:29 -0400 Subject: [PATCH 01/17] Add /users/:id/contacts_lists support to Chiketto::User --- lib/chiketto.rb | 1 + lib/chiketto/contact_list.rb | 5 +++++ lib/chiketto/user.rb | 9 +++++++++ test/contact_list_test.rb | 8 ++++++++ test/user_test.rb | 8 ++++++++ 5 files changed, 31 insertions(+) create mode 100644 lib/chiketto/contact_list.rb create mode 100644 test/contact_list_test.rb diff --git a/lib/chiketto.rb b/lib/chiketto.rb index 44a4462..b7ac4e5 100644 --- a/lib/chiketto.rb +++ b/lib/chiketto.rb @@ -20,6 +20,7 @@ module Chiketto require 'chiketto/ticket_class' require 'chiketto/user' require 'chiketto/venue' + require 'chiketto/contact_list' class << self attr_writer :api_key diff --git a/lib/chiketto/contact_list.rb b/lib/chiketto/contact_list.rb new file mode 100644 index 0000000..0f7c4df --- /dev/null +++ b/lib/chiketto/contact_list.rb @@ -0,0 +1,5 @@ +module Chiketto + class ContactList < Resource + attr_reader :name + end +end diff --git a/lib/chiketto/user.rb b/lib/chiketto/user.rb index 0bbec6d..61d6058 100644 --- a/lib/chiketto/user.rb +++ b/lib/chiketto/user.rb @@ -32,6 +32,11 @@ def organizers organizers['organizers'].map { |o| Organizer.new o } end + def contact_lists(params = {}) + contact_lists = User.paginated(:contact_lists, @id, params) + contact_lists.map { |cl| ContactList.new cl } + end + private def self.find_attendees(id, params) @@ -46,6 +51,10 @@ def self.find_organizers(id) get "users/#{id}/organizers" end + def self.find_contact_lists(id, params) + get "users/#{id}/contact_lists" + end + def self.paginated_events(id, params) paginated(:events, id, params) end diff --git a/test/contact_list_test.rb b/test/contact_list_test.rb new file mode 100644 index 0000000..d0a9e21 --- /dev/null +++ b/test/contact_list_test.rb @@ -0,0 +1,8 @@ +require 'test_helper' + +class ContactListTest < MiniTest::Test + def test_contact_list_exposes_data + contact_list = Chiketto::ContactList.new + assert_respond_to contact_list, :name + end +end diff --git a/test/user_test.rb b/test/user_test.rb index b50744a..c08831f 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -64,4 +64,12 @@ def test_user_has_organizers assert_kind_of Chiketto::Organizer, @user.organizers.first end end + + def test_user_has_contact_lists + find_me + + VCR.use_cassette 'user-contact-lists' do + assert_kind_of Chiketto::ContactList, @user.contact_lists.first + end + end end From a7c803490200e37fabd7f88514bf146d2a359a2f Mon Sep 17 00:00:00 2001 From: Chris Marques Date: Wed, 27 May 2015 10:57:57 -0400 Subject: [PATCH 02/17] Add /users/:id/contact_lists/:contact_list_id support to Chiketto::User --- lib/chiketto/user.rb | 7 ++++++- test/user_test.rb | 8 ++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/chiketto/user.rb b/lib/chiketto/user.rb index 61d6058..bacf1de 100644 --- a/lib/chiketto/user.rb +++ b/lib/chiketto/user.rb @@ -37,6 +37,11 @@ def contact_lists(params = {}) contact_lists.map { |cl| ContactList.new cl } end + def find_contact_list(contact_list_id) + contact_list = User.get "users/#{@id}/contact_lists/#{contact_list_id}" + ContactList.new contact_list + end + private def self.find_attendees(id, params) @@ -52,7 +57,7 @@ def self.find_organizers(id) end def self.find_contact_lists(id, params) - get "users/#{id}/contact_lists" + get "users/#{id}/contact_lists", params end def self.paginated_events(id, params) diff --git a/test/user_test.rb b/test/user_test.rb index c08831f..d495048 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -72,4 +72,12 @@ def test_user_has_contact_lists assert_kind_of Chiketto::ContactList, @user.contact_lists.first end end + + def test_user_find_contact_list_returns_contact_list + find_me + + VCR.use_cassette 'user-find-contact-list' do + assert_kind_of Chiketto::ContactList, @user.find_contact_list(411987) + end + end end From 2bfd4247283ea43d36bd35c10c0ab31882b2215f Mon Sep 17 00:00:00 2001 From: Chris Marques Date: Wed, 27 May 2015 11:28:36 -0400 Subject: [PATCH 03/17] Add POST /users/:id/contact_lists suppot to Chiketto::User --- lib/chiketto/user.rb | 5 +++++ test/user_test.rb | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/lib/chiketto/user.rb b/lib/chiketto/user.rb index bacf1de..5a5da0c 100644 --- a/lib/chiketto/user.rb +++ b/lib/chiketto/user.rb @@ -42,6 +42,11 @@ def find_contact_list(contact_list_id) ContactList.new contact_list end + def create_contact_list(params) + response = User.post "users/#{@id}/contact_lists/", params + ContactList.new response + end + private def self.find_attendees(id, params) diff --git a/test/user_test.rb b/test/user_test.rb index d495048..5f0d211 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -80,4 +80,16 @@ def test_user_find_contact_list_returns_contact_list assert_kind_of Chiketto::ContactList, @user.find_contact_list(411987) end end + + def test_create_contact_list + find_me + + VCR.use_cassette 'user-create-contact-list' do + contact_list = @user.create_contact_list({ + 'contact_list.name' => 'Test Contact List Creation' + }) + assert_kind_of Chiketto::ContactList, contact_list + assert_equal 'Test Contact List Creation', contact_list.name + end + end end From 922f1761696aa73ebbe70b0bfcba8d0a8baf72d4 Mon Sep 17 00:00:00 2001 From: Chris Marques Date: Wed, 27 May 2015 11:41:17 -0400 Subject: [PATCH 04/17] Extract contact list id to a constant --- test/user_test.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/user_test.rb b/test/user_test.rb index 5f0d211..0e66da8 100644 --- a/test/user_test.rb +++ b/test/user_test.rb @@ -2,6 +2,7 @@ class UserTest < MiniTest::Test USER_ID = 72013652427 + CONTACT_LIST_ID = 411987 def find_me VCR.use_cassette 'user-me' do @@ -77,7 +78,7 @@ def test_user_find_contact_list_returns_contact_list find_me VCR.use_cassette 'user-find-contact-list' do - assert_kind_of Chiketto::ContactList, @user.find_contact_list(411987) + assert_kind_of Chiketto::ContactList, @user.find_contact_list(CONTACT_LIST_ID) end end From eb257ce87321252f8e9b2679d53868823e4c774e Mon Sep 17 00:00:00 2001 From: Chris Marques Date: Fri, 29 May 2015 14:48:20 -0400 Subject: [PATCH 05/17] Add home and work phone access to AttendeeProfile --- lib/chiketto/attendee_profile.rb | 2 ++ test/attendee_profile_test.rb | 2 ++ 2 files changed, 4 insertions(+) diff --git a/lib/chiketto/attendee_profile.rb b/lib/chiketto/attendee_profile.rb index d030c2b..956d155 100644 --- a/lib/chiketto/attendee_profile.rb +++ b/lib/chiketto/attendee_profile.rb @@ -13,6 +13,8 @@ class AttendeeProfile < Resource :blog, :gender, :birth_date, + :home_phone, + :work_phone, :cell_phone def addresses diff --git a/test/attendee_profile_test.rb b/test/attendee_profile_test.rb index c680664..f3fd89a 100644 --- a/test/attendee_profile_test.rb +++ b/test/attendee_profile_test.rb @@ -16,6 +16,8 @@ def test_exposes_data assert_respond_to attendee_profile, :blog assert_respond_to attendee_profile, :gender assert_respond_to attendee_profile, :birth_date + assert_respond_to attendee_profile, :home_phone + assert_respond_to attendee_profile, :work_phone assert_respond_to attendee_profile, :cell_phone assert_respond_to attendee_profile, :addresses end From 83980567750e4f185ce327199af5114aae43ba1d Mon Sep 17 00:00:00 2001 From: Chris Marques Date: Fri, 29 May 2015 16:31:39 -0400 Subject: [PATCH 06/17] Introduce Contact object. ContactList can now retrive its Contacts --- lib/chiketto.rb | 1 + lib/chiketto/contact.rb | 9 +++++++++ lib/chiketto/contact_list.rb | 17 ++++++++++++++++- test/contact_list_test.rb | 17 +++++++++++++++++ test/contact_test.rb | 16 ++++++++++++++++ 5 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 lib/chiketto/contact.rb create mode 100644 test/contact_test.rb diff --git a/lib/chiketto.rb b/lib/chiketto.rb index b7ac4e5..8b694ae 100644 --- a/lib/chiketto.rb +++ b/lib/chiketto.rb @@ -21,6 +21,7 @@ module Chiketto require 'chiketto/user' require 'chiketto/venue' require 'chiketto/contact_list' + require 'chiketto/contact' class << self attr_writer :api_key diff --git a/lib/chiketto/contact.rb b/lib/chiketto/contact.rb new file mode 100644 index 0000000..518d28c --- /dev/null +++ b/lib/chiketto/contact.rb @@ -0,0 +1,9 @@ +module Chiketto + class Contact < Resource + attr_reader :first_name, + :last_name, + :email + + attr_date :created + end +end diff --git a/lib/chiketto/contact_list.rb b/lib/chiketto/contact_list.rb index 0f7c4df..04ec98c 100644 --- a/lib/chiketto/contact_list.rb +++ b/lib/chiketto/contact_list.rb @@ -1,5 +1,20 @@ module Chiketto class ContactList < Resource - attr_reader :name + attr_reader :name, + :user_id + + def contacts + raise Exception.new("ContactList must have an id and user_id to get its Contacts") unless id && user_id + + contacts = self.class.paginated(:contacts, id, { user_id: user_id }) + contacts.map { |c| Contact.new c } + end + + private + + def self.find_contacts(id, params) + user_id = params.delete(:user_id) + get "users/#{user_id}/contact_lists/#{id}/contacts", params + end end end diff --git a/test/contact_list_test.rb b/test/contact_list_test.rb index d0a9e21..9bb43c7 100644 --- a/test/contact_list_test.rb +++ b/test/contact_list_test.rb @@ -1,8 +1,25 @@ require 'test_helper' class ContactListTest < MiniTest::Test + USER_ID = 72013652427 + CONTACT_LIST_ID = 411987 + def test_contact_list_exposes_data contact_list = Chiketto::ContactList.new assert_respond_to contact_list, :name end + + def test_contact_list_has_contacts + contact_list = Chiketto::ContactList.new({ id: CONTACT_LIST_ID, user_id: USER_ID }) + VCR.use_cassette 'contact-list-contacts' do + assert_kind_of Chiketto::Contact, contact_list.contacts.first + end + end + + def test_contact_list_without_user_id_contacts_raises_error + contact_list = Chiketto::ContactList.new({ id: CONTACT_LIST_ID }) + assert_raises Chiketto::Exception do + contact_list.contacts + end + end end diff --git a/test/contact_test.rb b/test/contact_test.rb new file mode 100644 index 0000000..c1a57f4 --- /dev/null +++ b/test/contact_test.rb @@ -0,0 +1,16 @@ +require 'test_helper' + +class ContactTest < MiniTest::Test + def test_exposes_data + contact = Chiketto::Contact.new + assert_respond_to contact, :first_name + assert_respond_to contact, :last_name + assert_respond_to contact, :email + assert_respond_to contact, :created + end + + def test_attr_date_types + contact = Chiketto::Contact.new created: "2014-02-11T02:52:10Z" + assert_kind_of DateTime, contact.created + end +end From f299be636974d6074b32753f316d1a8168d1ca24 Mon Sep 17 00:00:00 2001 From: Chris Marques Date: Fri, 29 May 2015 16:38:15 -0400 Subject: [PATCH 07/17] Expose Event data of Attendee --- lib/chiketto/attendee.rb | 4 ++++ test/attendee_test.rb | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/lib/chiketto/attendee.rb b/lib/chiketto/attendee.rb index 8090697..e0d625e 100644 --- a/lib/chiketto/attendee.rb +++ b/lib/chiketto/attendee.rb @@ -15,5 +15,9 @@ class Attendee < Resource def profile AttendeeProfile.new @profile.to_h end + + def event + Event.new @event.to_h + end end end diff --git a/test/attendee_test.rb b/test/attendee_test.rb index 993198e..b3c040d 100644 --- a/test/attendee_test.rb +++ b/test/attendee_test.rb @@ -26,6 +26,11 @@ def test_attendee_returns_profile assert_kind_of Chiketto::AttendeeProfile, attendee.profile end + def test_attendee_returns_event + attendee = Chiketto::Attendee.new + assert_kind_of Chiketto::Event, attendee.event + end + def test_assigned_number_is_handled attendee = Chiketto::Attendee.new assigned_number: 1 assert_equal attendee.assigned_number, 1 From 51a494a266bdf85268b0ae75ea0a22438f5a6416 Mon Sep 17 00:00:00 2001 From: Chris Marques Date: Wed, 3 Jun 2015 15:34:23 -0400 Subject: [PATCH 08/17] Add checked_in and costs to Attendee accessible data --- lib/chiketto/attendee.rb | 2 ++ test/attendee_test.rb | 2 ++ 2 files changed, 4 insertions(+) diff --git a/lib/chiketto/attendee.rb b/lib/chiketto/attendee.rb index e0d625e..baf66e1 100644 --- a/lib/chiketto/attendee.rb +++ b/lib/chiketto/attendee.rb @@ -2,6 +2,8 @@ module Chiketto class Attendee < Resource attr_accessor :quantity, :status, + :checked_in, + :costs, :ticket_class_id, :event_id, :order_id, diff --git a/test/attendee_test.rb b/test/attendee_test.rb index b3c040d..54da8c6 100644 --- a/test/attendee_test.rb +++ b/test/attendee_test.rb @@ -6,6 +6,8 @@ def test_exposes_data assert_respond_to attendee, :ticket_class_id assert_respond_to attendee, :quantity assert_respond_to attendee, :status + assert_respond_to attendee, :checked_in + assert_respond_to attendee, :costs assert_respond_to attendee, :profile assert_respond_to attendee, :event_id assert_respond_to attendee, :order_id From a7fa517bd81e0843357b4fb8328e5fa1ff8c5f2d Mon Sep 17 00:00:00 2001 From: Chris Marques Date: Thu, 4 Jun 2015 15:31:08 -0400 Subject: [PATCH 09/17] Add ability to add and delete contacts to ContactList --- lib/chiketto/contact_list.rb | 12 ++++++++++++ lib/chiketto/resource.rb | 15 +++++++++------ test/contact_list_test.rb | 33 +++++++++++++++++++++++++++++++-- 3 files changed, 52 insertions(+), 8 deletions(-) diff --git a/lib/chiketto/contact_list.rb b/lib/chiketto/contact_list.rb index 04ec98c..6c81503 100644 --- a/lib/chiketto/contact_list.rb +++ b/lib/chiketto/contact_list.rb @@ -10,6 +10,18 @@ def contacts contacts.map { |c| Contact.new c } end + def add_contact(params) + raise Exception.new("ContactList must have an id and user_id to add a Contact") unless id && user_id + response = self.class.post("users/#{user_id}/contact_lists/#{id}/contacts", params) + response["created"] + end + + def delete_contact(email) + raise Exception.new("ContactList must have an id and user_id to delete its Contacts") unless id && user_id + response = self.class.delete("users/#{user_id}/contact_lists/#{id}/contacts", { email: email }) + response["deleted"] + end + private def self.find_contacts(id, params) diff --git a/lib/chiketto/resource.rb b/lib/chiketto/resource.rb index cb32f0b..c24b8c8 100644 --- a/lib/chiketto/resource.rb +++ b/lib/chiketto/resource.rb @@ -21,25 +21,28 @@ def self.get(uri, params = {}) end def self.post(uri, params = {}) - uri = URI.parse endpoint(uri) + query(params) - resource = open_post uri - JSON.parse resource + http_call(Net::HTTP::Post, uri, params) + end + + def self.delete(uri, params = {}) + http_call(Net::HTTP::Delete, uri, params) end def self.endpoint(uri) ENDPOINT + uri + token end - def self.open_post(uri) + def self.http_call(type, uri, params) + uri = URI.parse endpoint(uri) + query(params) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true - request = Net::HTTP::Post.new(uri.request_uri) + request = type.new(uri.request_uri) request.add_field 'Authorization', "Bearer #{Chiketto.api_key}" response = http.request(request) if response.code !~ /20\d/ raise Chiketto::Exception, JSON.parse(response.body) end - response.body + JSON.parse response.body end def self.query(params) diff --git a/test/contact_list_test.rb b/test/contact_list_test.rb index 9bb43c7..9f4dc8d 100644 --- a/test/contact_list_test.rb +++ b/test/contact_list_test.rb @@ -1,8 +1,8 @@ require 'test_helper' class ContactListTest < MiniTest::Test - USER_ID = 72013652427 - CONTACT_LIST_ID = 411987 + USER_ID = 56727857661 + CONTACT_LIST_ID = 859438 def test_contact_list_exposes_data contact_list = Chiketto::ContactList.new @@ -22,4 +22,33 @@ def test_contact_list_without_user_id_contacts_raises_error contact_list.contacts end end + + def test_contact_list_add_contact_returns_true + contact_list = Chiketto::ContactList.new({ id: CONTACT_LIST_ID, user_id: USER_ID }) + params = { "contact.email" => "foo@bar.com", "contact.first_name" => "foo", "contact.last_name" => "bar" } + VCR.use_cassette 'contact-list-add-contact' do + assert_kind_of TrueClass, contact_list.add_contact(params) + end + end + + def test_contact_list_without_user_id_add_contact_raises_error + contact_list = Chiketto::ContactList.new({ id: CONTACT_LIST_ID }) + assert_raises Chiketto::Exception do + contact_list.add_contact({}) + end + end + + def test_contact_list_delete_contact_returns_true + contact_list = Chiketto::ContactList.new({ id: CONTACT_LIST_ID, user_id: USER_ID }) + VCR.use_cassette 'contact-list-delete-contact' do + assert_kind_of TrueClass, contact_list.delete_contact("foo@bar.com") + end + end + + def test_contact_list_without_user_id_delete_contact_raises_error + contact_list = Chiketto::ContactList.new({ id: CONTACT_LIST_ID }) + assert_raises Chiketto::Exception do + contact_list.delete_contact("") + end + end end From 5e36cb0030f0350c9ce4ca7357e2fb0bf021a8f0 Mon Sep 17 00:00:00 2001 From: Chris Marques Date: Tue, 9 Jun 2015 13:41:13 -0400 Subject: [PATCH 10/17] Add Webhook resource. Supports index, create and delete --- lib/chiketto.rb | 1 + lib/chiketto/webhook.rb | 31 +++++++++++++++++++++++++++++++ test/webhook_test.rb | 37 +++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 lib/chiketto/webhook.rb create mode 100644 test/webhook_test.rb diff --git a/lib/chiketto.rb b/lib/chiketto.rb index 8b694ae..5278947 100644 --- a/lib/chiketto.rb +++ b/lib/chiketto.rb @@ -22,6 +22,7 @@ module Chiketto require 'chiketto/venue' require 'chiketto/contact_list' require 'chiketto/contact' + require 'chiketto/webhook' class << self attr_writer :api_key diff --git a/lib/chiketto/webhook.rb b/lib/chiketto/webhook.rb new file mode 100644 index 0000000..db56a0d --- /dev/null +++ b/lib/chiketto/webhook.rb @@ -0,0 +1,31 @@ +module Chiketto + class Webhook < Resource + attr_accessor :endpoint_url, + :actions, + :user_id, + :event_id + + attr_date :created + + def delete + response = Webhook.delete "webhooks/#{id}" + response["success"] + end + + def self.all(params = {}) + hooks = paginated(:webhooks, nil, params) + hooks.map { |wh| Webhook.new wh } + end + + def self.create(params) + webhook = post 'webhooks', params + Webhook.new webhook + end + + private + + def self.find_webhooks(id, params) + get 'webhooks', params + end + end +end diff --git a/test/webhook_test.rb b/test/webhook_test.rb new file mode 100644 index 0000000..b1d60cf --- /dev/null +++ b/test/webhook_test.rb @@ -0,0 +1,37 @@ +require 'test_helper' + +class WebhookTest < MiniTest::Test + def test_exposes_data + webhook = Chiketto::Webhook.new + assert_respond_to webhook, :id + assert_respond_to webhook, :endpoint_url + assert_respond_to webhook, :user_id + assert_respond_to webhook, :event_id + assert_respond_to webhook, :created + end + + def test_attr_date_types + webhook = Chiketto::Webhook.new created: "2014-02-11T02:52:10Z" + assert_kind_of DateTime, webhook.created + end + + def test_all + VCR.use_cassette 'webhooks-all' do + assert_kind_of Chiketto::Webhook, Chiketto::Webhook.all.first + end + end + + def test_create + VCR.use_cassette 'webhooks-create' do + webhook = Chiketto::Webhook.create 'endpoint_url' => 'http://requestb.in/y3jdgay3' + assert_kind_of Chiketto::Webhook, webhook + end + end + + def test_delete + webhook = Chiketto::Webhook.new id: 19185 + VCR.use_cassette 'webhooks-delete' do + assert_kind_of TrueClass, webhook.delete + end + end +end From 808fae9eac06c036d77db0cb5c1ed86f3a83a2b3 Mon Sep 17 00:00:00 2001 From: Chris Marques Date: Tue, 9 Jun 2015 16:19:16 -0400 Subject: [PATCH 11/17] Order resource and find/show functionality --- lib/chiketto.rb | 1 + lib/chiketto/order.rb | 27 +++++++++++++++++++++++++++ test/order_test.rb | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 lib/chiketto/order.rb create mode 100644 test/order_test.rb diff --git a/lib/chiketto.rb b/lib/chiketto.rb index 5278947..4e4bf42 100644 --- a/lib/chiketto.rb +++ b/lib/chiketto.rb @@ -23,6 +23,7 @@ module Chiketto require 'chiketto/contact_list' require 'chiketto/contact' require 'chiketto/webhook' + require 'chiketto/order' class << self attr_writer :api_key diff --git a/lib/chiketto/order.rb b/lib/chiketto/order.rb new file mode 100644 index 0000000..78b242d --- /dev/null +++ b/lib/chiketto/order.rb @@ -0,0 +1,27 @@ +module Chiketto + class Order < Resource + attr_accessor :name, + :first_name, + :last_name, + :email, + :costs, + :status, + :event_id + + attr_date :created, + :changed + + def event + Event.new @event.to_h + end + + def attendees + @attendees.map { |attendee| Attendee.new attendee } + end + + def self.find(id) + order = get "orders/#{id}" + Order.new order + end + end +end diff --git a/test/order_test.rb b/test/order_test.rb new file mode 100644 index 0000000..2462af9 --- /dev/null +++ b/test/order_test.rb @@ -0,0 +1,43 @@ +require 'test_helper' + +class OrderTest < MiniTest::Test + ORDER_ID = 431012219 + + def find_order + VCR.use_cassette 'order-find' do + Chiketto::Order.find ORDER_ID + end + end + + def test_exposes_data + order = Chiketto::Order.new + assert_respond_to order, :id + assert_respond_to order, :name + assert_respond_to order, :first_name + assert_respond_to order, :last_name + assert_respond_to order, :email + assert_respond_to order, :costs + assert_respond_to order, :status + assert_respond_to order, :event_id + end + + def test_attr_date_types + order = Chiketto::Order.new created: "2014-02-11T02:52:10Z", changed: "2014-02-11T02:52:10Z" + assert_kind_of DateTime, order.created + assert_kind_of DateTime, order.changed + end + + def test_order_find + assert_kind_of Chiketto::Order, find_order + end + + def test_order_has_event + order = find_order + assert_kind_of Chiketto::Event, order.event + end + + def test_order_has_attendees + order = find_order + assert_kind_of Chiketto::Attendee, order.attendees.first + end +end From 0e117a178ad1237c4ab6e46c0a72ad8a10108313 Mon Sep 17 00:00:00 2001 From: Chris Marques Date: Tue, 23 Jun 2015 10:25:27 -0400 Subject: [PATCH 12/17] Allow Event.find to take params so expansion params can be provided --- lib/chiketto/event.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/chiketto/event.rb b/lib/chiketto/event.rb index 26352c6..3ca34ae 100644 --- a/lib/chiketto/event.rb +++ b/lib/chiketto/event.rb @@ -20,8 +20,8 @@ def self.create(params) Event.new response end - def self.find(id) - event = get "events/#{id}" + def self.find(id, params = {}) + event = get "events/#{id}", params Event.new event end From 929be01fa496d03dc2fed06bd4aee5638556f000 Mon Sep 17 00:00:00 2001 From: Chris Marques Date: Thu, 25 Jun 2015 12:03:01 -0400 Subject: [PATCH 13/17] Allow .find to take params so expansions can be provided --- lib/chiketto/order.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/chiketto/order.rb b/lib/chiketto/order.rb index 78b242d..ba4f7c3 100644 --- a/lib/chiketto/order.rb +++ b/lib/chiketto/order.rb @@ -19,8 +19,8 @@ def attendees @attendees.map { |attendee| Attendee.new attendee } end - def self.find(id) - order = get "orders/#{id}" + def self.find(id, params = {}) + order = get "orders/#{id}", params Order.new order end end From 449cacf07b97abecc17c3f988954cc3afba52b25 Mon Sep 17 00:00:00 2001 From: Chris Marques Date: Wed, 22 Jul 2015 11:52:04 -0400 Subject: [PATCH 14/17] Instead of adding onto Hash, just build the query in Resource --- lib/chiketto.rb | 2 -- lib/chiketto/resource.rb | 24 +++++++++++++++++++++++- lib/hash_ext.rb | 27 --------------------------- 3 files changed, 23 insertions(+), 30 deletions(-) delete mode 100644 lib/hash_ext.rb diff --git a/lib/chiketto.rb b/lib/chiketto.rb index 4e4bf42..1b79cdd 100644 --- a/lib/chiketto.rb +++ b/lib/chiketto.rb @@ -1,8 +1,6 @@ module Chiketto ENDPOINT = 'https://www.eventbriteapi.com/v3/' - require 'hash_ext' - require 'chiketto/exception' require 'chiketto/version' require 'chiketto/attribute' diff --git a/lib/chiketto/resource.rb b/lib/chiketto/resource.rb index c24b8c8..28c2532 100644 --- a/lib/chiketto/resource.rb +++ b/lib/chiketto/resource.rb @@ -46,7 +46,29 @@ def self.http_call(type, uri, params) end def self.query(params) - params.to_params + query_params = '' + stack = [] + + params.each do |k, v| + if v.is_a?(Hash) + stack << [k, v] + else + query_params << "#{k}=#{CGI::escape(v || "")}&" + end + end + + stack.each do |parent, hash| + hash.each do |k, v| + if v.is_a?(Hash) + stack << ["#{parent}[#{k}]", v] + else + query_params << "#{parent}[#{k}]=#{CGI::escape(v || "")}&" + end + end + end + + query_params.chop! + "&#{query_params}" end def self.token diff --git a/lib/hash_ext.rb b/lib/hash_ext.rb deleted file mode 100644 index b6001ba..0000000 --- a/lib/hash_ext.rb +++ /dev/null @@ -1,27 +0,0 @@ -class Hash - def to_params - params = '' - stack = [] - - each do |k, v| - if v.is_a?(Hash) - stack << [k, v] - else - params << "#{k}=#{CGI::escape(v)}&" - end - end - - stack.each do |parent, hash| - hash.each do |k, v| - if v.is_a?(Hash) - stack << ["#{parent}[#{k}]", v] - else - params << "#{parent}[#{k}]=#{CGI::escape(v)}&" - end - end - end - - params.chop! - "&#{params}" - end -end From 02c3b5eccb1cc3bff724d0fc080b897db82d3bea Mon Sep 17 00:00:00 2001 From: Chris Marques Date: Wed, 22 Jul 2015 15:20:22 -0400 Subject: [PATCH 15/17] Allow access to if an attendee has cancelled --- lib/chiketto/attendee.rb | 3 ++- test/attendee_test.rb | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/chiketto/attendee.rb b/lib/chiketto/attendee.rb index baf66e1..5d10ac6 100644 --- a/lib/chiketto/attendee.rb +++ b/lib/chiketto/attendee.rb @@ -9,7 +9,8 @@ class Attendee < Resource :order_id, :assigned_number, :answers, - :barcodes + :barcodes, + :cancelled attr_date :changed, :created diff --git a/test/attendee_test.rb b/test/attendee_test.rb index 54da8c6..cb344d1 100644 --- a/test/attendee_test.rb +++ b/test/attendee_test.rb @@ -14,6 +14,7 @@ def test_exposes_data assert_respond_to attendee, :assigned_number assert_respond_to attendee, :answers assert_respond_to attendee, :barcodes + assert_respond_to attendee, :cancelled end def test_attr_date_types From 81861435ee0e24fe6b9f14fa503cbc39d5dd28c1 Mon Sep 17 00:00:00 2001 From: Chris Marques Date: Tue, 15 Sep 2015 16:51:19 -0400 Subject: [PATCH 16/17] #events now loads all events. Provide #owned_events to get only owned events --- lib/chiketto/user.rb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lib/chiketto/user.rb b/lib/chiketto/user.rb index 5a5da0c..7451c1b 100644 --- a/lib/chiketto/user.rb +++ b/lib/chiketto/user.rb @@ -22,6 +22,11 @@ def events(params = {}) events.map { |e| Event.new e } end + def owned_events(params ={}) + events = User.paginated_owned_events @id, params + events.map { |e| Event.new e } + end + def event_attendees(params = {}) attendees = User.paginated_attendees @id, params attendees.map { |e| Attendee.new e } @@ -54,6 +59,10 @@ def self.find_attendees(id, params) end def self.find_events(id, params) + get "users/#{id}/events", params + end + + def self.find_owned_events(id, params) get "users/#{id}/owned_events", params end From 53a278bdf0a342a629e56c2a0e259a61710bec8b Mon Sep 17 00:00:00 2001 From: Jason Rankin Date: Tue, 20 Mar 2018 16:23:23 -0400 Subject: [PATCH 17/17] Force TLSv1.2 since EB is dropping support for 1.0 and 1.1 at the end of the month This requires dumping open-uri for gets --- lib/chiketto/resource.rb | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/chiketto/resource.rb b/lib/chiketto/resource.rb index 28c2532..84a5574 100644 --- a/lib/chiketto/resource.rb +++ b/lib/chiketto/resource.rb @@ -1,5 +1,4 @@ require 'json' -require 'open-uri' require 'net/http' module Chiketto @@ -15,9 +14,7 @@ def initialize(args = {}) end def self.get(uri, params = {}) - uri = endpoint(uri) + query(params) - resource = open uri - JSON.parse resource.read + http_call(Net::HTTP::Get, uri, params) end def self.post(uri, params = {}) @@ -36,6 +33,7 @@ def self.http_call(type, uri, params) uri = URI.parse endpoint(uri) + query(params) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true + http.ssl_version = :TLSv1_2 request = type.new(uri.request_uri) request.add_field 'Authorization', "Bearer #{Chiketto.api_key}" response = http.request(request)