Skip to content
2 changes: 2 additions & 0 deletions lib/chiketto.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ module Chiketto
require 'chiketto/ticket_class'
require 'chiketto/user'
require 'chiketto/venue'
require 'chiketto/contact_list'
require 'chiketto/contact'

class << self
attr_writer :api_key
Expand Down
6 changes: 6 additions & 0 deletions lib/chiketto/attendee.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ module Chiketto
class Attendee < Resource
attr_accessor :quantity,
:status,
:checked_in,
:costs,
:ticket_class_id,
:event_id,
:order_id,
Expand All @@ -15,5 +17,9 @@ class Attendee < Resource
def profile
AttendeeProfile.new @profile.to_h
end

def event
Event.new @event.to_h
end
end
end
2 changes: 2 additions & 0 deletions lib/chiketto/attendee_profile.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ class AttendeeProfile < Resource
:blog,
:gender,
:birth_date,
:home_phone,
:work_phone,
:cell_phone

def addresses
Expand Down
9 changes: 9 additions & 0 deletions lib/chiketto/contact.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
module Chiketto
class Contact < Resource
attr_reader :first_name,
:last_name,
:email

attr_date :created
end
end
32 changes: 32 additions & 0 deletions lib/chiketto/contact_list.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
module Chiketto
class ContactList < Resource
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

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)
user_id = params.delete(:user_id)
get "users/#{user_id}/contact_lists/#{id}/contacts", params
end
end
end
15 changes: 9 additions & 6 deletions lib/chiketto/resource.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
19 changes: 19 additions & 0 deletions lib/chiketto/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,21 @@ 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

def find_contact_list(contact_list_id)
contact_list = User.get "users/#{@id}/contact_lists/#{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)
Expand All @@ -46,6 +61,10 @@ def self.find_organizers(id)
get "users/#{id}/organizers"
end

def self.find_contact_lists(id, params)
get "users/#{id}/contact_lists", params
end

def self.paginated_events(id, params)
paginated(:events, id, params)
end
Expand Down
2 changes: 2 additions & 0 deletions test/attendee_profile_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
7 changes: 7 additions & 0 deletions test/attendee_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -26,6 +28,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
Expand Down
54 changes: 54 additions & 0 deletions test/contact_list_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
require 'test_helper'

class ContactListTest < MiniTest::Test
USER_ID = 56727857661
CONTACT_LIST_ID = 859438

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

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
16 changes: 16 additions & 0 deletions test/contact_test.rb
Original file line number Diff line number Diff line change
@@ -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
29 changes: 29 additions & 0 deletions test/user_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

class UserTest < MiniTest::Test
USER_ID = 72013652427
CONTACT_LIST_ID = 411987

def find_me
VCR.use_cassette 'user-me' do
Expand Down Expand Up @@ -64,4 +65,32 @@ 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

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(CONTACT_LIST_ID)
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