Skip to content

Commit d500b21

Browse files
author
Artur Khabibullin
authored
Merge pull request #18 from messagebird/add-contacts
Add contacts
2 parents 04c1e28 + 003d457 commit d500b21

File tree

11 files changed

+407
-12
lines changed

11 files changed

+407
-12
lines changed

examples/contact_create.rb

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#!/usr/bin/env ruby
2+
3+
$:.unshift File.expand_path(File.dirname(__FILE__) + '/../lib/')
4+
require 'messagebird'
5+
6+
# ACCESS_KEY = 'YOUR KEY HERE'
7+
# PHONE_NUMBER = 'YOUR PHONE NUMBER HERE'
8+
9+
unless defined?(ACCESS_KEY)
10+
puts 'You need to set an ACCESS_KEY constant in this file'
11+
exit 1
12+
end
13+
14+
unless defined?(PHONE_NUMBER)
15+
puts 'You need to set an PHONE_NUMBER constant in this file'
16+
exit 1
17+
end
18+
19+
begin
20+
# Create a MessageBird client with the specified ACCESS_KEY.
21+
client = MessageBird::Client.new(ACCESS_KEY)
22+
23+
# Create a new Contact object.
24+
contact = client.contact_create(PHONE_NUMBER, { :firstName => 'Foo', :lastName => 'Bar'})
25+
26+
# Print the object information.
27+
puts
28+
puts " Contact :"
29+
puts
30+
puts " id : #{contact.id}"
31+
puts " href : #{contact.href}"
32+
puts " msisdn : #{contact.msisdn}"
33+
puts " firstName : #{contact.firstName}"
34+
puts " lastName : #{contact.lastName}"
35+
puts " groups : #{contact.groups.href}" # contact.groups.totalCount is also available.
36+
puts " messages : #{contact.messages.href}" # contact.messages.totalCount is also available.
37+
puts " custom1 : #{contact.customDetails.custom1}"
38+
puts " custom2 : #{contact.customDetails.custom2}"
39+
puts " custom3 : #{contact.customDetails.custom3}"
40+
puts " custom4 : #{contact.customDetails.custom4}"
41+
puts
42+
43+
rescue MessageBird::ErrorException => ex
44+
puts
45+
puts 'An error occurred while creating a contact:'
46+
puts
47+
48+
ex.errors.each do |error|
49+
puts " code : #{error.code}"
50+
puts " description : #{error.description}"
51+
puts " parameter : #{error.parameter}"
52+
puts
53+
end
54+
end

examples/contact_list.rb

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#!/usr/bin/env ruby
2+
3+
$:.unshift File.expand_path(File.dirname(__FILE__) + '/../lib/')
4+
require 'messagebird'
5+
6+
ACCESS_KEY = 'YOUR KEY HERE'
7+
8+
unless defined?(ACCESS_KEY)
9+
puts 'You need to set an ACCESS_KEY constant in this file'
10+
exit 1
11+
end
12+
13+
begin
14+
# Create a MessageBird client with the specified ACCESS_KEY.
15+
client = MessageBird::Client.new(ACCESS_KEY)
16+
17+
# Fetch the Contact list with pagination options (skip the first 5 objects and take 10).
18+
limit = 10
19+
offset = 5
20+
contacts = client.contact_list(limit, offset)
21+
22+
# Print the object information.
23+
puts
24+
puts "The following information was returned as a Contact list:"
25+
puts
26+
puts " count : #{contacts.count}"
27+
puts " limit : #{contacts.limit}"
28+
puts " offset : #{contacts.offset}"
29+
puts " totalCount : #{contacts.totalCount}"
30+
puts " links : #{contacts.links}"
31+
32+
unless contacts.items.empty?
33+
contact = contacts[0] # Equivalent to contacts.items[0]
34+
35+
puts " Contact :"
36+
puts " id : #{contact.id}"
37+
puts " href : #{contact.href}"
38+
puts " msisdn : #{contact.msisdn}"
39+
puts " firstName : #{contact.firstName}"
40+
puts " lastName : #{contact.lastName}"
41+
puts " groups : #{contact.groups.href}" # contact.groups.totalCount is also available.
42+
puts " messages : #{contact.messages.href}" # contact.messages.totalCount is also available.
43+
puts " custom1 : #{contact.customDetails.custom1}"
44+
puts " custom2 : #{contact.customDetails.custom2}"
45+
puts " custom3 : #{contact.customDetails.custom3}"
46+
puts " custom4 : #{contact.customDetails.custom4}"
47+
48+
end
49+
50+
rescue MessageBird::ErrorException => ex
51+
puts
52+
puts 'An error occurred while listing your contacts:'
53+
puts
54+
55+
ex.errors.each do |error|
56+
puts " code : #{error.code}"
57+
puts " description : #{error.description}"
58+
puts " parameter : #{error.parameter}"
59+
puts
60+
end
61+
end

lib/messagebird.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,12 @@ module MessageBird
88

99
require 'messagebird/balance'
1010
require 'messagebird/client'
11+
require 'messagebird/contact'
1112
require 'messagebird/error'
13+
require 'messagebird/group_reference'
1214
require 'messagebird/hlr'
15+
require 'messagebird/http_client'
16+
require 'messagebird/message_reference'
1317
require 'messagebird/verify'
1418
require 'messagebird/message'
1519
require 'messagebird/voicemessage'

lib/messagebird/client.rb

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,15 @@
33
require 'uri'
44

55
require 'messagebird/balance'
6+
require 'messagebird/contact'
67
require 'messagebird/error'
78
require 'messagebird/hlr'
89
require 'messagebird/http_client'
9-
require 'messagebird/verify'
10+
require 'messagebird/list'
11+
require 'messagebird/lookup'
1012
require 'messagebird/message'
13+
require 'messagebird/verify'
1114
require 'messagebird/voicemessage'
12-
require 'messagebird/lookup'
1315

1416
module MessageBird
1517
class ErrorException < StandardError
@@ -32,6 +34,8 @@ def initialize(access_key = nil, http_client = nil)
3234

3335
def request(method, path, params={})
3436
response_body = @http_client.request(method, path, params)
37+
return if response_body.empty?
38+
3539
json = JSON.parse(response_body)
3640

3741
# If the request returned errors, create Error objects and raise.
@@ -134,5 +138,28 @@ def lookup_hlr(phoneNumber, params={})
134138
HLR.new(request(:get, "lookup/#{phoneNumber}/hlr", params))
135139
end
136140

141+
def contact_create(phoneNumber, params={})
142+
Contact.new(request(
143+
:post,
144+
'contacts',
145+
params.merge({ :msisdn => phoneNumber.to_s })))
146+
end
147+
148+
def contact(id)
149+
Contact.new(request(:get, "contacts/#{id}"))
150+
end
151+
152+
def contact_delete(id)
153+
request(:delete, "contacts/#{id}")
154+
end
155+
156+
def contact_update(id, params={})
157+
request(:patch, "contacts/#{id}", params)
158+
end
159+
160+
def contact_list(limit = 0, offset = 0)
161+
List.new(Contact, request(:get, "contacts?limit=#{limit}&offset=#{offset}"))
162+
end
163+
137164
end
138165
end

lib/messagebird/contact.rb

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
require 'messagebird/base'
2+
require 'messagebird/custom_details'
3+
require 'messagebird/group_reference'
4+
require 'messagebird/message_reference'
5+
6+
module MessageBird
7+
class Contact < MessageBird::Base
8+
attr_accessor :id, :href, :msisdn, :firstName, :lastName, :customDetails,
9+
:groups, :messages, :createdDatetime, :updatedDatetime
10+
11+
def customDetails=(value)
12+
@customDetails = MessageBird::CustomDetails.new(value)
13+
end
14+
15+
def groups=(value)
16+
@groups = MessageBird::GroupReference.new(value)
17+
end
18+
19+
def messages=(value)
20+
@messages = MessageBird::MessageReference.new(value)
21+
end
22+
23+
def createdDatetime=(value)
24+
@createdDatetime = value_to_time(value)
25+
end
26+
27+
def updatedDatetime=(value)
28+
@updatedDatetime = value_to_time(value)
29+
end
30+
end
31+
end

lib/messagebird/custom_details.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
require 'messagebird/base'
2+
3+
module MessageBird
4+
class CustomDetails < MessageBird::Base
5+
# CustomDetails holds free-input fields for the Contact object.
6+
attr_accessor :custom1, :custom2, :custom3, :custom4
7+
end
8+
end

lib/messagebird/group_reference.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
require 'messagebird/base'
2+
3+
module MessageBird
4+
class GroupReference < MessageBird::Base
5+
attr_accessor :href, :totalCount
6+
end
7+
end

lib/messagebird/http_client.rb

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,22 @@ def request(method, path, params={}, check_json=true)
2222
http = Net::HTTP.new(uri.host, uri.port)
2323
http.use_ssl = true
2424

25-
# Construct the HTTP GET or POST request.
25+
request = prepare_request(method, uri, params)
26+
27+
# Execute the request and fetch the response.
28+
response = http.request(request)
29+
30+
assert_valid_response_code(response.code.to_i)
31+
assert_json_response_type(response['Content-Type']) unless check_json
32+
33+
response.body
34+
end
35+
36+
def prepare_request(method, uri, params={})
37+
# Construct the HTTP request.
2638
case method
39+
when :delete
40+
request = Net::HTTP::Delete.new(uri.request_uri)
2741
when :get
2842
request = Net::HTTP::Get.new(uri.request_uri)
2943
when :post
@@ -36,16 +50,9 @@ def request(method, path, params={}, check_json=true)
3650
request['Authorization'] = "AccessKey #{@access_key}"
3751
request['User-Agent'] = "MessageBird/ApiClient/#{CLIENT_VERSION} Ruby/#{RUBY_VERSION}"
3852

39-
# If present, add the HTTP POST parameters.
4053
request.set_form_data(params) if method == :post && !params.empty?
4154

42-
# Execute the request and fetch the response.
43-
response = http.request(request)
44-
45-
assert_valid_response_code(response.code.to_i)
46-
assert_json_response_type(response['Content-Type']) unless check_json
47-
48-
response.body
55+
request
4956
end
5057

5158
# Throw an exception if the response code is not one we expect from the
@@ -68,4 +75,4 @@ def assert_json_response_type(content_type)
6875

6976
end
7077

71-
end
78+
end

lib/messagebird/list.rb

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
require 'messagebird/base'
2+
3+
class List < MessageBird::Base
4+
5+
attr_accessor :offset, :limit, :count, :totalCount, :links, :items
6+
7+
# type will be used to create objects for the items, e.g.
8+
# List.new(Contact, {}).
9+
def initialize(type, json)
10+
@type = type
11+
12+
super(json)
13+
end
14+
15+
def items=(value)
16+
@items = value.map { |i| @type.new i }
17+
end
18+
19+
def [](index)
20+
@items[index]
21+
end
22+
23+
end
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
require 'messagebird/base'
2+
3+
module MessageBird
4+
class MessageReference < MessageBird::Base
5+
attr_accessor :href, :totalCount
6+
end
7+
end

0 commit comments

Comments
 (0)