createsend-sendowlfork 6.1.0.pre.hashie5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.coveralls.yml +1 -0
- data/.gitignore +9 -0
- data/.travis.yml +7 -0
- data/CONTRIBUTING.md +8 -0
- data/Gemfile +3 -0
- data/HISTORY.md +299 -0
- data/LICENSE +19 -0
- data/README.md +220 -0
- data/RELEASE.md +53 -0
- data/Rakefile +24 -0
- data/createsend.gemspec +31 -0
- data/lib/createsend/administrator.rb +49 -0
- data/lib/createsend/cacert.pem +3849 -0
- data/lib/createsend/campaign.rb +202 -0
- data/lib/createsend/client.rb +224 -0
- data/lib/createsend/createsend.rb +291 -0
- data/lib/createsend/journey.rb +58 -0
- data/lib/createsend/list.rb +258 -0
- data/lib/createsend/person.rb +59 -0
- data/lib/createsend/segment.rb +81 -0
- data/lib/createsend/subscriber.rb +113 -0
- data/lib/createsend/template.rb +42 -0
- data/lib/createsend/transactional_classic_email.rb +32 -0
- data/lib/createsend/transactional_smart_email.rb +31 -0
- data/lib/createsend/transactional_timeline.rb +45 -0
- data/lib/createsend/version.rb +3 -0
- data/lib/createsend.rb +17 -0
- data/samples/authentication_sample.rb +64 -0
- data/samples/clients_sample.rb +79 -0
- data/samples/journey_sample.rb +87 -0
- data/samples/lists_sample.rb +51 -0
- data/samples/segments_sample.rb +21 -0
- data/samples/subscribers_sample.rb +51 -0
- data/test/administrator_test.rb +37 -0
- data/test/campaign_test.rb +296 -0
- data/test/client_test.rb +253 -0
- data/test/createsend_test.rb +321 -0
- data/test/fixtures/active_subscribers.json +87 -0
- data/test/fixtures/add_admin.json +3 -0
- data/test/fixtures/add_person.json +3 -0
- data/test/fixtures/add_subscriber.json +1 -0
- data/test/fixtures/admin_details.json +5 -0
- data/test/fixtures/admin_get_primary_contact.json +3 -0
- data/test/fixtures/admin_set_primary_contact.json +3 -0
- data/test/fixtures/administrators.json +12 -0
- data/test/fixtures/billingdetails.json +3 -0
- data/test/fixtures/bounced_subscribers.json +20 -0
- data/test/fixtures/campaign_bounces.json +25 -0
- data/test/fixtures/campaign_clicks.json +50 -0
- data/test/fixtures/campaign_listsandsegments.json +15 -0
- data/test/fixtures/campaign_opens.json +71 -0
- data/test/fixtures/campaign_recipients.json +91 -0
- data/test/fixtures/campaign_spam.json +16 -0
- data/test/fixtures/campaign_summary.json +16 -0
- data/test/fixtures/campaign_unsubscribes.json +17 -0
- data/test/fixtures/campaigns.json +37 -0
- data/test/fixtures/client_details.json +28 -0
- data/test/fixtures/client_get_primary_contact.json +3 -0
- data/test/fixtures/client_set_primary_contact.json +3 -0
- data/test/fixtures/clients.json +10 -0
- data/test/fixtures/countries.json +247 -0
- data/test/fixtures/create_campaign.json +1 -0
- data/test/fixtures/create_client.json +1 -0
- data/test/fixtures/create_custom_field.json +1 -0
- data/test/fixtures/create_list.json +1 -0
- data/test/fixtures/create_list_webhook.json +1 -0
- data/test/fixtures/create_segment.json +1 -0
- data/test/fixtures/create_template.json +1 -0
- data/test/fixtures/custom_api_error.json +4 -0
- data/test/fixtures/custom_fields.json +23 -0
- data/test/fixtures/deleted_subscribers.json +61 -0
- data/test/fixtures/drafts.json +26 -0
- data/test/fixtures/email_client_usage.json +38 -0
- data/test/fixtures/expired_oauth_token_api_error.json +4 -0
- data/test/fixtures/external_session.json +3 -0
- data/test/fixtures/import_subscribers.json +7 -0
- data/test/fixtures/import_subscribers_partial_success.json +17 -0
- data/test/fixtures/invalid_oauth_token_api_error.json +4 -0
- data/test/fixtures/journey_bounces.json +35 -0
- data/test/fixtures/journey_clicks.json +35 -0
- data/test/fixtures/journey_opens.json +55 -0
- data/test/fixtures/journey_recipients.json +27 -0
- data/test/fixtures/journey_summary.json +18 -0
- data/test/fixtures/journey_unsubscribes.json +26 -0
- data/test/fixtures/journeys.json +20 -0
- data/test/fixtures/list_details.json +8 -0
- data/test/fixtures/list_stats.json +26 -0
- data/test/fixtures/list_webhooks.json +18 -0
- data/test/fixtures/lists.json +10 -0
- data/test/fixtures/listsforemail.json +14 -0
- data/test/fixtures/oauth_exchange_token.json +5 -0
- data/test/fixtures/oauth_exchange_token_error.json +4 -0
- data/test/fixtures/oauth_refresh_token_error.json +4 -0
- data/test/fixtures/people.json +14 -0
- data/test/fixtures/person_details.json +6 -0
- data/test/fixtures/refresh_oauth_token.json +5 -0
- data/test/fixtures/revoked_oauth_token_api_error.json +4 -0
- data/test/fixtures/scheduled_campaigns.json +30 -0
- data/test/fixtures/segment_details.json +24 -0
- data/test/fixtures/segment_subscribers.json +27 -0
- data/test/fixtures/segments.json +12 -0
- data/test/fixtures/subscriber_details.json +23 -0
- data/test/fixtures/subscriber_details_with_track_and_sms_pref.json +25 -0
- data/test/fixtures/subscriber_history.json +45 -0
- data/test/fixtures/suppressionlist.json +41 -0
- data/test/fixtures/systemdate.json +3 -0
- data/test/fixtures/tags.json +10 -0
- data/test/fixtures/template_details.json +6 -0
- data/test/fixtures/templates.json +14 -0
- data/test/fixtures/timezones.json +99 -0
- data/test/fixtures/transfer_credits.json +4 -0
- data/test/fixtures/tx_classicemail_groups.json +14 -0
- data/test/fixtures/tx_message_details.json +36 -0
- data/test/fixtures/tx_message_details_with_statistics.json +72 -0
- data/test/fixtures/tx_messages.json +38 -0
- data/test/fixtures/tx_messages_classic.json +15 -0
- data/test/fixtures/tx_messages_smart.json +15 -0
- data/test/fixtures/tx_resend_message.json +6 -0
- data/test/fixtures/tx_send_multiple.json +12 -0
- data/test/fixtures/tx_send_single.json +7 -0
- data/test/fixtures/tx_smartemail_details.json +23 -0
- data/test/fixtures/tx_smartemails.json +15 -0
- data/test/fixtures/tx_statistics_classic.json +14 -0
- data/test/fixtures/tx_statistics_smart.json +14 -0
- data/test/fixtures/unconfirmed_subscribers.json +43 -0
- data/test/fixtures/unsubscribed_subscribers.json +61 -0
- data/test/fixtures/update_custom_field.json +1 -0
- data/test/helper.rb +79 -0
- data/test/journey_test.rb +156 -0
- data/test/list_test.rb +288 -0
- data/test/person_test.rb +39 -0
- data/test/segment_test.rb +74 -0
- data/test/subscriber_test.rb +177 -0
- data/test/template_test.rb +36 -0
- data/test/transactional_classic_email_test.rb +60 -0
- data/test/transactional_smart_email_test.rb +83 -0
- data/test/transactional_timeline_test.rb +110 -0
- metadata +431 -0
@@ -0,0 +1,202 @@
|
|
1
|
+
module CreateSend
|
2
|
+
# Represents a campaign and provides associated functionality.
|
3
|
+
class Campaign < CreateSend
|
4
|
+
attr_reader :campaign_id
|
5
|
+
|
6
|
+
def initialize(auth, campaign_id)
|
7
|
+
@campaign_id = campaign_id
|
8
|
+
super
|
9
|
+
end
|
10
|
+
|
11
|
+
# Creates a new campaign for a client.
|
12
|
+
# client_id - String representing the ID of the client for whom the
|
13
|
+
# campaign will be created.
|
14
|
+
# subject - String representing the subject of the campaign.
|
15
|
+
# name - String representing the name of the campaign.
|
16
|
+
# from_name - String representing the from name for the campaign.
|
17
|
+
# from_email - String representing the from address for the campaign.
|
18
|
+
# reply_to - String representing the reply-to address for the campaign.
|
19
|
+
# html_url - String representing the URL for the campaign HTML content.
|
20
|
+
# text_url - String representing the URL for the campaign text content.
|
21
|
+
# Note that text_url is optional and if nil or an empty string, text
|
22
|
+
# content will be automatically generated from the HTML content.
|
23
|
+
# list_ids - Array of Strings representing the IDs of the lists to
|
24
|
+
# which the campaign will be sent.
|
25
|
+
# segment_ids - Array of Strings representing the IDs of the segments to
|
26
|
+
# which the campaign will be sent.
|
27
|
+
def self.create(auth, client_id, subject, name, from_name, from_email,
|
28
|
+
reply_to, html_url, text_url, list_ids, segment_ids)
|
29
|
+
options = { :body => {
|
30
|
+
:Subject => subject,
|
31
|
+
:Name => name,
|
32
|
+
:FromName => from_name,
|
33
|
+
:FromEmail => from_email,
|
34
|
+
:ReplyTo => reply_to,
|
35
|
+
:HtmlUrl => html_url,
|
36
|
+
:TextUrl => text_url,
|
37
|
+
:ListIDs => list_ids,
|
38
|
+
:SegmentIDs => segment_ids }.to_json }
|
39
|
+
cs = CreateSend.new auth
|
40
|
+
response = cs.post "/campaigns/#{client_id}.json", options
|
41
|
+
response.parsed_response
|
42
|
+
end
|
43
|
+
|
44
|
+
# Creates a new campaign for a client, from a template.
|
45
|
+
# client_id - String representing the ID of the client for whom the
|
46
|
+
# campaign will be created.
|
47
|
+
# subject - String representing the subject of the campaign.
|
48
|
+
# name - String representing the name of the campaign.
|
49
|
+
# from_name - String representing the from name for the campaign.
|
50
|
+
# from_email - String representing the from address for the campaign.
|
51
|
+
# reply_to - String representing the reply-to address for the campaign.
|
52
|
+
# list_ids - Array of Strings representing the IDs of the lists to
|
53
|
+
# which the campaign will be sent.
|
54
|
+
# segment_ids - Array of Strings representing the IDs of the segments to
|
55
|
+
# which the campaign will be sent.
|
56
|
+
# template_id - String representing the ID of the template on which
|
57
|
+
# the campaign will be based.
|
58
|
+
# template_content - Hash representing the content to be used for the
|
59
|
+
# editable areas of the template. See documentation at
|
60
|
+
# campaignmonitor.com/api/campaigns/#creating_a_campaign_from_template
|
61
|
+
# for full details of template content format.
|
62
|
+
def self.create_from_template(auth, client_id, subject, name, from_name,
|
63
|
+
from_email, reply_to, list_ids, segment_ids, template_id,
|
64
|
+
template_content)
|
65
|
+
options = { :body => {
|
66
|
+
:Subject => subject,
|
67
|
+
:Name => name,
|
68
|
+
:FromName => from_name,
|
69
|
+
:FromEmail => from_email,
|
70
|
+
:ReplyTo => reply_to,
|
71
|
+
:ListIDs => list_ids,
|
72
|
+
:SegmentIDs => segment_ids,
|
73
|
+
:TemplateID => template_id,
|
74
|
+
:TemplateContent => template_content }.to_json }
|
75
|
+
cs = CreateSend.new auth
|
76
|
+
response = cs.post(
|
77
|
+
"/campaigns/#{client_id}/fromtemplate.json", options)
|
78
|
+
response.parsed_response
|
79
|
+
end
|
80
|
+
|
81
|
+
# Sends a preview of this campaign.
|
82
|
+
def send_preview(recipients, personalize="fallback")
|
83
|
+
options = { :body => {
|
84
|
+
:PreviewRecipients => recipients.kind_of?(String) ?
|
85
|
+
[ recipients ] : recipients,
|
86
|
+
:Personalize => personalize }.to_json }
|
87
|
+
post "sendpreview", options
|
88
|
+
end
|
89
|
+
|
90
|
+
# Sends this campaign.
|
91
|
+
def send(confirmation_email, send_date="immediately")
|
92
|
+
options = { :body => {
|
93
|
+
:ConfirmationEmail => confirmation_email,
|
94
|
+
:SendDate => send_date }.to_json }
|
95
|
+
post "send", options
|
96
|
+
end
|
97
|
+
|
98
|
+
# Unschedules this campaign if it is currently scheduled.
|
99
|
+
def unschedule
|
100
|
+
options = { :body => "" }
|
101
|
+
post "unschedule", options
|
102
|
+
end
|
103
|
+
|
104
|
+
# Deletes this campaign.
|
105
|
+
def delete
|
106
|
+
super "/campaigns/#{campaign_id}.json", {}
|
107
|
+
end
|
108
|
+
|
109
|
+
# Gets a summary of this campaign
|
110
|
+
def summary
|
111
|
+
response = get "summary", {}
|
112
|
+
Hashie::Mash.new(response)
|
113
|
+
end
|
114
|
+
|
115
|
+
# Gets the email clients that subscribers used to open the campaign
|
116
|
+
def email_client_usage
|
117
|
+
response = get "emailclientusage", {}
|
118
|
+
response.map{|item| Hashie::Mash.new(item)}
|
119
|
+
end
|
120
|
+
|
121
|
+
# Retrieves the lists and segments to which this campaaign will
|
122
|
+
# be (or was) sent.
|
123
|
+
def lists_and_segments
|
124
|
+
response = get "listsandsegments", {}
|
125
|
+
Hashie::Mash.new(response)
|
126
|
+
end
|
127
|
+
|
128
|
+
# Retrieves the recipients of this campaign.
|
129
|
+
def recipients(page=1, page_size=1000, order_field="email",
|
130
|
+
order_direction="asc")
|
131
|
+
options = { :query => {
|
132
|
+
:page => page,
|
133
|
+
:pagesize => page_size,
|
134
|
+
:orderfield => order_field,
|
135
|
+
:orderdirection => order_direction } }
|
136
|
+
response = get 'recipients', options
|
137
|
+
Hashie::Mash.new(response)
|
138
|
+
end
|
139
|
+
|
140
|
+
# Retrieves the opens for this campaign.
|
141
|
+
def opens(date="", page=1, page_size=1000, order_field="date",
|
142
|
+
order_direction="asc")
|
143
|
+
paged_result_by_date("opens", date, page, page_size, order_field,
|
144
|
+
order_direction)
|
145
|
+
end
|
146
|
+
|
147
|
+
# Retrieves the subscriber clicks for this campaign.
|
148
|
+
def clicks(date="", page=1, page_size=1000, order_field="date",
|
149
|
+
order_direction="asc")
|
150
|
+
paged_result_by_date("clicks", date, page, page_size, order_field,
|
151
|
+
order_direction)
|
152
|
+
end
|
153
|
+
|
154
|
+
# Retrieves the unsubscribes for this campaign.
|
155
|
+
def unsubscribes(date="", page=1, page_size=1000, order_field="date",
|
156
|
+
order_direction="asc")
|
157
|
+
paged_result_by_date("unsubscribes", date, page, page_size, order_field,
|
158
|
+
order_direction)
|
159
|
+
end
|
160
|
+
|
161
|
+
# Retrieves the spam complaints for this campaign.
|
162
|
+
def spam(date="", page=1, page_size=1000, order_field="date",
|
163
|
+
order_direction="asc")
|
164
|
+
paged_result_by_date("spam", date, page, page_size, order_field,
|
165
|
+
order_direction)
|
166
|
+
end
|
167
|
+
|
168
|
+
# Retrieves the bounces for this campaign.
|
169
|
+
def bounces(date="", page=1, page_size=1000, order_field="date",
|
170
|
+
order_direction="asc")
|
171
|
+
paged_result_by_date("bounces", date, page, page_size, order_field,
|
172
|
+
order_direction)
|
173
|
+
end
|
174
|
+
|
175
|
+
private
|
176
|
+
|
177
|
+
def paged_result_by_date(resource, date, page, page_size, order_field,
|
178
|
+
order_direction)
|
179
|
+
options = { :query => {
|
180
|
+
:date => date,
|
181
|
+
:page => page,
|
182
|
+
:pagesize => page_size,
|
183
|
+
:orderfield => order_field,
|
184
|
+
:orderdirection => order_direction } }
|
185
|
+
response = get resource, options
|
186
|
+
Hashie::Mash.new(response)
|
187
|
+
end
|
188
|
+
|
189
|
+
def get(action, options = {})
|
190
|
+
super uri_for(action), options
|
191
|
+
end
|
192
|
+
|
193
|
+
def post(action, options = {})
|
194
|
+
super uri_for(action), options
|
195
|
+
end
|
196
|
+
|
197
|
+
def uri_for(action)
|
198
|
+
"/campaigns/#{campaign_id}/#{action}.json"
|
199
|
+
end
|
200
|
+
|
201
|
+
end
|
202
|
+
end
|
@@ -0,0 +1,224 @@
|
|
1
|
+
module CreateSend
|
2
|
+
# Represents a client and associated functionality.
|
3
|
+
class Client < CreateSend
|
4
|
+
attr_reader :client_id
|
5
|
+
|
6
|
+
def initialize(auth, client_id)
|
7
|
+
@client_id = client_id
|
8
|
+
super
|
9
|
+
end
|
10
|
+
|
11
|
+
# Creates a client.
|
12
|
+
def self.create(auth, company, timezone, country)
|
13
|
+
options = { :body => {
|
14
|
+
:CompanyName => company,
|
15
|
+
:TimeZone => timezone,
|
16
|
+
:Country => country }.to_json }
|
17
|
+
cs = CreateSend.new auth
|
18
|
+
cs.post "/clients.json", options
|
19
|
+
end
|
20
|
+
|
21
|
+
# Gets the details of this client.
|
22
|
+
def details
|
23
|
+
response = cs_get "/clients/#{client_id}.json", {}
|
24
|
+
Hashie::Mash.new(response)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Gets the sent campaigns belonging to this client.
|
28
|
+
def campaigns(page=1, page_size=1000, order_direction="desc",
|
29
|
+
sent_from_date='', sent_to_date='', tags='')
|
30
|
+
options = { :query => {
|
31
|
+
:page => page,
|
32
|
+
:pagesize => page_size,
|
33
|
+
:orderdirection => order_direction,
|
34
|
+
:sentfromdate => sent_from_date,
|
35
|
+
:senttodate => sent_to_date,
|
36
|
+
:tags => tags
|
37
|
+
}}
|
38
|
+
|
39
|
+
response = get 'campaigns', options
|
40
|
+
Hashie::Mash.new(response)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Gets the currently scheduled campaigns belonging to this client.
|
44
|
+
def scheduled
|
45
|
+
response = get 'scheduled'
|
46
|
+
response.map{|item| Hashie::Mash.new(item)}
|
47
|
+
end
|
48
|
+
|
49
|
+
# Gets the draft campaigns belonging to this client.
|
50
|
+
def drafts
|
51
|
+
response = get 'drafts'
|
52
|
+
response.map{|item| Hashie::Mash.new(item)}
|
53
|
+
end
|
54
|
+
|
55
|
+
# Gets all the tags belonging to this client.
|
56
|
+
def tags
|
57
|
+
response = get 'tags'
|
58
|
+
response.map{|item| Hashie::Mash.new(item)}
|
59
|
+
end
|
60
|
+
|
61
|
+
# Gets the subscriber lists belonging to this client.
|
62
|
+
def lists
|
63
|
+
response = get 'lists'
|
64
|
+
response.map{|item| Hashie::Mash.new(item)}
|
65
|
+
end
|
66
|
+
|
67
|
+
# Gets the lists across a client, to which a subscriber with a particular
|
68
|
+
# email address belongs.
|
69
|
+
# email_address - A String representing the subcriber's email address
|
70
|
+
def lists_for_email(email_address)
|
71
|
+
options = { :query => { :email => email_address } }
|
72
|
+
response = get 'listsforemail', options
|
73
|
+
response.map{|item| Hashie::Mash.new(item)}
|
74
|
+
end
|
75
|
+
|
76
|
+
# Gets the segments belonging to this client.
|
77
|
+
def segments
|
78
|
+
response = get 'segments'
|
79
|
+
response.map{|item| Hashie::Mash.new(item)}
|
80
|
+
end
|
81
|
+
|
82
|
+
# Gets the people associated with this client
|
83
|
+
def people
|
84
|
+
response = get "people"
|
85
|
+
response.map{|item| Hashie::Mash.new(item)}
|
86
|
+
end
|
87
|
+
|
88
|
+
def get_primary_contact
|
89
|
+
response = get "primarycontact"
|
90
|
+
Hashie::Mash.new(response)
|
91
|
+
end
|
92
|
+
|
93
|
+
def set_primary_contact(email)
|
94
|
+
options = { :query => { :email => email } }
|
95
|
+
response = put "primarycontact", options
|
96
|
+
Hashie::Mash.new(response)
|
97
|
+
end
|
98
|
+
|
99
|
+
# Gets this client's suppression list.
|
100
|
+
def suppressionlist(page=1, page_size=1000, order_field="email",
|
101
|
+
order_direction="asc")
|
102
|
+
options = { :query => {
|
103
|
+
:page => page,
|
104
|
+
:pagesize => page_size,
|
105
|
+
:orderfield => order_field,
|
106
|
+
:orderdirection => order_direction } }
|
107
|
+
response = get 'suppressionlist', options
|
108
|
+
Hashie::Mash.new(response)
|
109
|
+
end
|
110
|
+
|
111
|
+
# Adds email addresses to a client's suppression list
|
112
|
+
def suppress(emails)
|
113
|
+
options = { :body => {
|
114
|
+
:EmailAddresses => emails.kind_of?(String) ?
|
115
|
+
[ emails ] : emails }.to_json }
|
116
|
+
post "suppress", options
|
117
|
+
end
|
118
|
+
|
119
|
+
# Unsuppresses an email address by removing it from the the client's
|
120
|
+
# suppression list
|
121
|
+
def unsuppress(email)
|
122
|
+
options = { :query => { :email => email }, :body => '' }
|
123
|
+
put "unsuppress", options
|
124
|
+
end
|
125
|
+
|
126
|
+
# Gets the templates belonging to this client.
|
127
|
+
def templates
|
128
|
+
response = get 'templates'
|
129
|
+
response.map{|item| Hashie::Mash.new(item)}
|
130
|
+
end
|
131
|
+
|
132
|
+
# Sets the basic details for this client.
|
133
|
+
def set_basics(company, timezone, country)
|
134
|
+
options = { :body => {
|
135
|
+
:CompanyName => company,
|
136
|
+
:TimeZone => timezone,
|
137
|
+
:Country => country }.to_json }
|
138
|
+
put 'setbasics', options
|
139
|
+
end
|
140
|
+
|
141
|
+
# Sets the PAYG billing settings for this client.
|
142
|
+
def set_payg_billing(currency, can_purchase_credits, client_pays,
|
143
|
+
markup_percentage, markup_on_delivery=0, markup_per_recipient=0,
|
144
|
+
markup_on_design_spam_test=0)
|
145
|
+
options = { :body => {
|
146
|
+
:Currency => currency,
|
147
|
+
:CanPurchaseCredits => can_purchase_credits,
|
148
|
+
:ClientPays => client_pays,
|
149
|
+
:MarkupPercentage => markup_percentage,
|
150
|
+
:MarkupOnDelivery => markup_on_delivery,
|
151
|
+
:MarkupPerRecipient => markup_per_recipient,
|
152
|
+
:MarkupOnDesignSpamTest => markup_on_design_spam_test }.to_json }
|
153
|
+
put 'setpaygbilling', options
|
154
|
+
end
|
155
|
+
|
156
|
+
# Sets the monthly billing settings for this client.
|
157
|
+
# monthly_scheme must be nil, Basic or Unlimited
|
158
|
+
def set_monthly_billing(currency, client_pays, markup_percentage,
|
159
|
+
monthly_scheme = nil)
|
160
|
+
options = { :body => {
|
161
|
+
:Currency => currency,
|
162
|
+
:ClientPays => client_pays,
|
163
|
+
:MarkupPercentage => markup_percentage,
|
164
|
+
:MonthlyScheme => monthly_scheme }.to_json }
|
165
|
+
put 'setmonthlybilling', options
|
166
|
+
end
|
167
|
+
|
168
|
+
# Transfer credits to or from this client.
|
169
|
+
#
|
170
|
+
# credits - An Integer representing the number of credits to transfer.
|
171
|
+
# This value may be either positive if you want to allocate credits from
|
172
|
+
# your account to the client, or negative if you want to deduct credits
|
173
|
+
# from the client back into your account.
|
174
|
+
# can_use_my_credits_when_they_run_out - A Boolean value representing
|
175
|
+
# which, if set to true, will allow the client to continue sending using
|
176
|
+
# your credits or payment details once they run out of credits, and if
|
177
|
+
# set to false, will prevent the client from using your credits to
|
178
|
+
# continue sending until you allocate more credits to them.
|
179
|
+
#
|
180
|
+
# Returns an object of the following form representing the result:
|
181
|
+
# {
|
182
|
+
# AccountCredits # Integer representing credits in your account now
|
183
|
+
# ClientCredits # Integer representing credits in this client's
|
184
|
+
# account now
|
185
|
+
# }
|
186
|
+
def transfer_credits(credits, can_use_my_credits_when_they_run_out)
|
187
|
+
options = { :body => {
|
188
|
+
:Credits => credits,
|
189
|
+
:CanUseMyCreditsWhenTheyRunOut => can_use_my_credits_when_they_run_out
|
190
|
+
}.to_json }
|
191
|
+
response = post 'credits', options
|
192
|
+
Hashie::Mash.new(response)
|
193
|
+
end
|
194
|
+
|
195
|
+
# Deletes this client.
|
196
|
+
def delete
|
197
|
+
super "/clients/#{client_id}.json", {}
|
198
|
+
end
|
199
|
+
|
200
|
+
# Gets the journeys belonging to this client.
|
201
|
+
def journeys
|
202
|
+
response = get 'journeys'
|
203
|
+
response.map{|item| Hashie::Mash.new(item)}
|
204
|
+
end
|
205
|
+
|
206
|
+
private
|
207
|
+
|
208
|
+
def get(action, options = {})
|
209
|
+
super uri_for(action), options
|
210
|
+
end
|
211
|
+
|
212
|
+
def post(action, options = {})
|
213
|
+
super uri_for(action), options
|
214
|
+
end
|
215
|
+
|
216
|
+
def put(action, options = {})
|
217
|
+
super uri_for(action), options
|
218
|
+
end
|
219
|
+
|
220
|
+
def uri_for(action)
|
221
|
+
"/clients/#{client_id}/#{action}.json"
|
222
|
+
end
|
223
|
+
end
|
224
|
+
end
|