mailup 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +22 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +79 -0
  6. data/Rakefile +7 -0
  7. data/lib/mailup.rb +206 -0
  8. data/lib/mailup/console/base.rb +115 -0
  9. data/lib/mailup/console/email.rb +35 -0
  10. data/lib/mailup/console/group.rb +111 -0
  11. data/lib/mailup/console/images.rb +69 -0
  12. data/lib/mailup/console/import.rb +38 -0
  13. data/lib/mailup/console/list.rb +863 -0
  14. data/lib/mailup/console/recipient.rb +69 -0
  15. data/lib/mailup/console/user.rb +77 -0
  16. data/lib/mailup/errors.rb +18 -0
  17. data/lib/mailup/public/base.rb +18 -0
  18. data/lib/mailup/public/console.rb +75 -0
  19. data/lib/mailup/stats/base.rb +41 -0
  20. data/lib/mailup/stats/message.rb +284 -0
  21. data/lib/mailup/stats/recipient.rb +303 -0
  22. data/lib/mailup/version.rb +4 -0
  23. data/mailup.gemspec +25 -0
  24. data/rails/init.rb +1 -0
  25. data/spec/mailup/console/base_spec.rb +33 -0
  26. data/spec/mailup/console/email_spec.rb +19 -0
  27. data/spec/mailup/console/group_spec.rb +42 -0
  28. data/spec/mailup/console/images_spec.rb +29 -0
  29. data/spec/mailup/console/import_spec.rb +17 -0
  30. data/spec/mailup/console/list_spec.rb +164 -0
  31. data/spec/mailup/console/recipient_spec.rb +11 -0
  32. data/spec/mailup/console/user_spec.rb +16 -0
  33. data/spec/mailup/mailup_spec.rb +36 -0
  34. data/spec/mailup/public/base_spec.rb +22 -0
  35. data/spec/mailup/public/console_spec.rb +24 -0
  36. data/spec/mailup/stats/base_spec.rb +22 -0
  37. data/spec/mailup/stats/message_spec.rb +35 -0
  38. data/spec/mailup/stats/recipient_spec.rb +40 -0
  39. data/spec/spec_helper.rb +37 -0
  40. metadata +138 -0
@@ -0,0 +1,69 @@
1
+ module MailUp
2
+ module Console
3
+ class Recipient
4
+ attr_accessor :api
5
+
6
+ def initialize(api)
7
+ @api = api
8
+ end
9
+
10
+ # Update a recipient with the specified details into address book.
11
+ #
12
+ # @param [Hash] recipient A hash of recipient attributes:
13
+ # @option recipient [String] :Name of the recipient (required).
14
+ # @option recipient [String] :Email of the recipient (required).
15
+ # @option recipient [String] :MobilePrefix of the recipient.
16
+ # @option recipient [String] :MobileNumber of the recipient.
17
+ # @option recipient [Array] :Fields to include.
18
+ #
19
+ # @return [JSON] The updated Recipient object with the following attributes:
20
+ # * idRecipient [Integer]
21
+ # * Name [String]
22
+ # * Email [String]
23
+ # * MobilePrefix [String]
24
+ # * MobileNumber [String]
25
+ # * Fields [Array]
26
+ #
27
+ # @see http://help.mailup.com/display/mailupapi/Console+methods+v1.1#Consolemethodsv1.1-UpdateRecipientDetail
28
+ #
29
+ # @example
30
+ #
31
+ # recipient = {
32
+ # :Name => "Joe Public",
33
+ # :Email => "joe@public.com"
34
+ # }
35
+ # updated_recipient = mailup.console.recipient.update(recipient)
36
+ # updated_recipient.Name
37
+ # => "Joe Public"
38
+ #
39
+ def update(recipient)
40
+ @api.put("#{@api.path}/Recipient/Detail", body: recipient)
41
+ end
42
+
43
+ # Retrieve recipient dynamic field definitions.
44
+ #
45
+ # @return [JSON] Results and data including:
46
+ # * IsPaginated [Boolean]
47
+ # * Items [Array<Hash>]
48
+ # * PageNumber [Integer]
49
+ # * PageSize [Integer]
50
+ # * Skipped [Integer]
51
+ # * TotalElementsCount [Integer]
52
+ #
53
+ # @see http://help.mailup.com/display/mailupapi/Console+methods+v1.1#Consolemethodsv1.1-GetDynamicFields
54
+ #
55
+ # @example
56
+ #
57
+ # fields = mailup.console.recipient.fields
58
+ # fields.size
59
+ # => 10
60
+ # fields['Items'].first['Description']
61
+ # => "Field description..."
62
+ #
63
+ def fields
64
+ @api.get("#{@api.path}/Recipient/DynamicFields")
65
+ end
66
+
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,77 @@
1
+ module MailUp
2
+ module Console
3
+ class User
4
+ attr_accessor :api
5
+
6
+ def initialize(api)
7
+ @api = api
8
+ end
9
+
10
+ # Retrieve the admin console lists for the current user.
11
+ #
12
+ # @param [Hash] params Optional params or filters:
13
+ # @option params [Integer] :pageNumber The page number to return.
14
+ # @option params [Integer] :pageSize The number of results to per page.
15
+ # @option params [String] :filterby A filtering expression.
16
+ # @option params [String] :orderby The sorting condition for the results.
17
+ #
18
+ # @return [JSON] Results and data including:
19
+ # * IsPaginated [Boolean]
20
+ # * Items [Array<Hash>]
21
+ # * PageNumber [Integer]
22
+ # * PageSize [Integer]
23
+ # * Skipped [Integer]
24
+ # * TotalElementsCount [Integer]
25
+ #
26
+ # @see http://help.mailup.com/display/mailupapi/Console+methods+v1.1#Consolemethodsv1.1-GetConsoleListsByUser
27
+ #
28
+ # @example
29
+ #
30
+ # lists = mailup.console.user.lists
31
+ # lists = mailup.console.user.lists
32
+ # lists['TotalElementsCount']
33
+ # => 10
34
+ # lists['Items'].first['Name']
35
+ # => "Test List"
36
+ #
37
+ # lists = mailup.console.user.lists(pageNumber: 0, pageSize: 250)
38
+ #
39
+ def lists(params = {})
40
+ @api.get("#{@api.path}/User/Lists", params: params)
41
+ end
42
+
43
+ # Retrieve the email messages (cloned and not cloned) for the current user.
44
+ #
45
+ # @param [Hash] params Optional params or filters:
46
+ # @option params [Integer] :pageNumber The page number to return.
47
+ # @option params [Integer] :pageSize The number of results to per page.
48
+ # @option params [String] :filterby A filtering expression.
49
+ # @option params [String] :orderby The sorting condition for the results.
50
+ #
51
+ # @return [JSON] Results and data including:
52
+ # * IsPaginated [Boolean]
53
+ # * Items [Array<Hash>]
54
+ # * PageNumber [Integer]
55
+ # * PageSize [Integer]
56
+ # * Skipped [Integer]
57
+ # * TotalElementsCount [Integer]
58
+ #
59
+ # @see http://help.mailup.com/display/mailupapi/Console+methods+v1.1#Consolemethodsv1.1-GetMailMessagesByUser
60
+ #
61
+ # @example
62
+ #
63
+ # emails = mailup.console.user.emails
64
+ # emails['TotalElementsCount']
65
+ # => 10
66
+ # emails['Items'].first['Subject']
67
+ # => "Test Subject"
68
+ #
69
+ # emails = mailup.console.user.emails(pageNumber: 0, pageSize: 1)
70
+ #
71
+ def emails(params={})
72
+ @api.get("#{@api.path}/User/Emails", params: params)
73
+ end
74
+
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,18 @@
1
+ module MailUp
2
+ class Error < StandardError
3
+ end
4
+ class BadRequest < Error
5
+ end
6
+ class ClientError < Error
7
+ end
8
+ class NotFound < Error
9
+ end
10
+ class ServerError < Error
11
+ end
12
+ class TooManyRequests < Error
13
+ end
14
+ class Unauthorized < Error
15
+ end
16
+ class Unavailable < Error
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ module MailUp
2
+ module Public
3
+ class Base
4
+ attr_accessor :api
5
+
6
+ def initialize(api) # :nodoc:
7
+ @api = api
8
+ @api.path = "/API/v#{MailUp::API_VERSION}/Rest/PublicService.svc"
9
+ end
10
+
11
+ # Resource nodes
12
+ def console
13
+ Console.new @api
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,75 @@
1
+ module MailUp
2
+ module Public
3
+ class Console
4
+ attr_accessor :api
5
+
6
+ def initialize(api)
7
+ @api = api
8
+ end
9
+
10
+ # Create a new trial console.
11
+ #
12
+ # @param [Hash] account A hash of account attributes.
13
+ # @option params [String] :NameAndSurname The company name.
14
+ # @option params [String] :Email The email address for the trial account.
15
+ # @option params [String] :Company The company name.
16
+ # @option params [String] :Language The account language.
17
+ # @option params [Boolean] :IsUSA Is this a US account?
18
+ # @option params [Boolean] :RegisterToNewsletter Does this account accept marketing?
19
+ #
20
+ # @return [JSON] The trial console including:
21
+ # * Hash [String]
22
+ # * Id [Integer]
23
+ #
24
+ # @see http://help.mailup.com/display/mailupapi/Public+methods+v1.1#Publicmethodsv1.1-RequestNewTrialConsole
25
+ #
26
+ # @example
27
+ #
28
+ # account = {
29
+ # NameAndSurname: "Joe Public",
30
+ # Email: "joe@public.com",
31
+ # Company: "ACME",
32
+ # PhoneNumber: "15555551212",
33
+ # Language: "En",
34
+ # IsUSA: true,
35
+ # RegisterToNewsletter: true
36
+ # }
37
+ # trial = mailup.public.console.new(account)
38
+ # trial['id']
39
+ # => 1329874
40
+ #
41
+ def new(account = {})
42
+ @api.post("#{@api.path}/Console/TrialActivation", body: account)
43
+ end
44
+
45
+ # Retrieve the information about current trial activation status.
46
+ #
47
+ # @param [Hash] account A hash of account attributes.
48
+ # @option params [String] :Hash The Hash of the trial activation request.
49
+ # @option params [Integer] :Id The Id of the trial activation request.
50
+ #
51
+ # @return [JSON] An activation status object including:
52
+ # * Code [Integer]
53
+ # * Descriptin [String]
54
+ #
55
+ # @see http://help.mailup.com/display/mailupapi/Public+methods+v1.1#Publicmethodsv1.1-RequestTrialConsoleActivationStatus
56
+ #
57
+ # @example
58
+ #
59
+ # account = {
60
+ # Hash: "1k23hj432jh4kh3j24k",
61
+ # Id: "1324"
62
+ # }
63
+ # status = mailup.public.console.status(account)
64
+ # status['Code']
65
+ # => 1234
66
+ # status['Description']
67
+ # => "Status description..."
68
+ #
69
+ def status(account = {})
70
+ @api.post("#{@api.path}/Console/TrialActivationStatus", body: account)
71
+ end
72
+
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,41 @@
1
+ module MailUp
2
+ module Stats
3
+ class Base
4
+ attr_accessor :api
5
+
6
+ def initialize(api) # :nodoc:
7
+ @api = api
8
+ @api.path = "/API/v#{MailUp::API_VERSION}/Rest/MailStatisticsService.svc"
9
+ end
10
+
11
+ # Create a message object
12
+ #
13
+ # @param [Integer] id The message_id of the message to access.
14
+ #
15
+ # @return [MailUp::Stats::Message]
16
+ #
17
+ # @example
18
+ #
19
+ # message = mailup.stats.message(1)
20
+ #
21
+ def message(id)
22
+ Message.new id, @api
23
+ end
24
+
25
+ # Create a recipient object
26
+ #
27
+ # @param [Integer] id The recipient_id of the recipient to access.
28
+ #
29
+ # @return [MailUp::Stats::Recipient]
30
+ #
31
+ # @example
32
+ #
33
+ # recipient = mailup.stats.recipient(154)
34
+ #
35
+ def recipient(id)
36
+ Recipient.new id, @api
37
+ end
38
+
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,284 @@
1
+ module MailUp
2
+ module Stats
3
+ class Message
4
+ attr_accessor :api
5
+
6
+ def initialize(id, api)
7
+ @api = api
8
+ @id = id
9
+ end
10
+
11
+ # Paged list of recipients who received the specified email.
12
+ #
13
+ # @param [Hash] params Optional params or filters:
14
+ # @option params [Integer] :pageNumber The page number to return.
15
+ # @option params [Integer] :pageSize The number of results to per page.
16
+ # @option params [String] :filterby A filtering expression.
17
+ # @option params [String] :orderby The sorting condition for the results.
18
+ #
19
+ # @return [JSON] Results and data including:
20
+ # * IsPaginated [Boolean]
21
+ # * Items [Array<Hash>]
22
+ # * PageNumber [Integer]
23
+ # * PageSize [Integer]
24
+ # * Skipped [Integer]
25
+ # * TotalElementsCount [Integer]
26
+ #
27
+ # @see http://help.mailup.com/display/mailupapi/Email+statistics+methods+v1.1#Emailstatisticsmethodsv1.1-ListMessageRecipients
28
+ #
29
+ # @example
30
+ #
31
+ # recipients = mailup.stats.message(9).recipients
32
+ # recipients['TotalElementsCount']
33
+ # => 10
34
+ # recipients['Items'].first['Email']
35
+ # => "joe@public.com"
36
+ #
37
+ def recipients(params = {})
38
+ @api.get("#{@api.path}/Message/#{@id}/List/Recipients", params: params)
39
+ end
40
+
41
+ # Count of recipients who received the specified email.
42
+ #
43
+ #
44
+ # @return [Integer] Count of recipients.
45
+ #
46
+ # @see http://help.mailup.com/display/mailupapi/Email+statistics+methods+v1.1#Emailstatisticsmethodsv1.1-CountMessageRecipients
47
+ #
48
+ # @example
49
+ #
50
+ # recipients = mailup.stats.message(9).recipients_count
51
+ # => 10
52
+ #
53
+ def recipients_count
54
+ @api.get("#{@api.path}/Message/#{@id}/Count/Recipients")
55
+ end
56
+ alias_method :received_count, :recipients_count
57
+
58
+ # Paged list of views of the specified email.
59
+ #
60
+ # @param [Hash] params Optional params or filters:
61
+ # @option params [Integer] :pageNumber The page number to return.
62
+ # @option params [Integer] :pageSize The number of results to per page.
63
+ # @option params [String] :filterby A filtering expression.
64
+ # @option params [String] :orderby The sorting condition for the results.
65
+ #
66
+ # @return [JSON] Results and data including:
67
+ # * IsPaginated [Boolean]
68
+ # * Items [Array<Hash>]
69
+ # * PageNumber [Integer]
70
+ # * PageSize [Integer]
71
+ # * Skipped [Integer]
72
+ # * TotalElementsCount [Integer]
73
+ #
74
+ # @see http://help.mailup.com/display/mailupapi/Email+statistics+methods+v1.1#Emailstatisticsmethodsv1.1-ListMessageViews
75
+ #
76
+ # @example
77
+ #
78
+ # views = mailup.stats.message(9).views
79
+ # views['TotalElementsCount']
80
+ # => 10
81
+ #
82
+ def views(params = {})
83
+ @api.get("#{@api.path}/Message/#{@id}/List/Views", params: params)
84
+ end
85
+
86
+ # Count of views of the specified email.
87
+ #
88
+ #
89
+ # @return [Integer] Count of views.
90
+ #
91
+ # @see http://help.mailup.com/display/mailupapi/Email+statistics+methods+v1.1#Emailstatisticsmethodsv1.1-CountMessageViews
92
+ #
93
+ # @example
94
+ #
95
+ # views = mailup.stats.message(9).views_count
96
+ # => 3453
97
+ #
98
+ def views_count
99
+ @api.get("#{@api.path}/Message/#{@id}/Count/Views")
100
+ end
101
+
102
+ # Paged list of bounces from the specified email.
103
+ #
104
+ # @param [Hash] params Optional params or filters:
105
+ # @option params [Integer] :pageNumber The page number to return.
106
+ # @option params [Integer] :pageSize The number of results to per page.
107
+ # @option params [String] :filterby A filtering expression.
108
+ # @option params [String] :orderby The sorting condition for the results.
109
+ #
110
+ # @return [JSON] Results and data including:
111
+ # * IsPaginated [Boolean]
112
+ # * Items [Array<Hash>]
113
+ # * PageNumber [Integer]
114
+ # * PageSize [Integer]
115
+ # * Skipped [Integer]
116
+ # * TotalElementsCount [Integer]
117
+ #
118
+ # @see http://help.mailup.com/display/mailupapi/Email+statistics+methods+v1.1#Emailstatisticsmethodsv1.1-ListMessageBounces
119
+ #
120
+ # @example
121
+ #
122
+ # bounces = mailup.stats.message(9).bounces
123
+ # bounces['TotalElementsCount']
124
+ # => 10
125
+ #
126
+ def bounces(params = {})
127
+ @api.get("#{@api.path}/Message/#{@id}/List/Bounces", params: params)
128
+ end
129
+
130
+ # Count of bounces from the specified mail.
131
+ #
132
+ #
133
+ # @return [Integer] Count of bounces.
134
+ #
135
+ # @see http://help.mailup.com/display/mailupapi/Email+statistics+methods+v1.1#Emailstatisticsmethodsv1.1-CountMessageBounces
136
+ #
137
+ # @example
138
+ #
139
+ # bounces = mailup.stats.message(9).bounces_count
140
+ # => 3453
141
+ #
142
+ def bounces_count
143
+ @api.get("#{@api.path}/Message/#{@id}/Count/Bounces")
144
+ end
145
+
146
+ # Paged list of unsubscriptions from the specified email.
147
+ #
148
+ # @param [Hash] params Optional params or filters:
149
+ # @option params [Integer] :pageNumber The page number to return.
150
+ # @option params [Integer] :pageSize The number of results to per page.
151
+ # @option params [String] :filterby A filtering expression.
152
+ # @option params [String] :orderby The sorting condition for the results.
153
+ #
154
+ # @return [JSON] Results and data including:
155
+ # * IsPaginated [Boolean]
156
+ # * Items [Array<Hash>]
157
+ # * PageNumber [Integer]
158
+ # * PageSize [Integer]
159
+ # * Skipped [Integer]
160
+ # * TotalElementsCount [Integer]
161
+ #
162
+ # @see http://help.mailup.com/display/mailupapi/Email+statistics+methods+v1.1#Emailstatisticsmethodsv1.1-ListMessageUnsubscriptions
163
+ #
164
+ # @example
165
+ #
166
+ # unsubs = mailup.stats.message(9).unsubscribes
167
+ # unsubs['TotalElementsCount']
168
+ # => 10
169
+ #
170
+ def unsubscribes(params = {})
171
+ @api.get("#{@api.path}/Message/#{@id}/List/Unsubscriptions", params: params)
172
+ end
173
+
174
+ # Count of unsubscriptions from the specified email.
175
+ #
176
+ #
177
+ # @return [Integer] Count of unsubscribes.
178
+ #
179
+ # @see http://help.mailup.com/display/mailupapi/Email+statistics+methods+v1.1#Emailstatisticsmethodsv1.1-CountMessageUnsubscriptions
180
+ #
181
+ # @example
182
+ #
183
+ # unsubs = mailup.stats.message(9).unsubscribes_count
184
+ # => 234
185
+ #
186
+ def unsubscribes_count
187
+ @api.get("#{@api.path}/Message/#{@id}/Count/Unsubscriptions")
188
+ end
189
+
190
+ # Paged list of clicks on a link in the specified email.
191
+ #
192
+ # @param [Hash] params Optional params or filters:
193
+ # @option params [Integer] :pageNumber The page number to return.
194
+ # @option params [Integer] :pageSize The number of results to per page.
195
+ # @option params [String] :filterby A filtering expression.
196
+ # @option params [String] :orderby The sorting condition for the results.
197
+ #
198
+ # @return [JSON] Results and data including:
199
+ # * IsPaginated [Boolean]
200
+ # * Items [Array<Hash>]
201
+ # * PageNumber [Integer]
202
+ # * PageSize [Integer]
203
+ # * Skipped [Integer]
204
+ # * TotalElementsCount [Integer]
205
+ #
206
+ # @see http://help.mailup.com/display/mailupapi/Email+statistics+methods+v1.1#Emailstatisticsmethodsv1.1-ListMessageClicks
207
+ #
208
+ # @example
209
+ #
210
+ # clicks = mailup.stats.message(9).clicks
211
+ # clicks['TotalElementsCount']
212
+ # => 10
213
+ # clicks['Items'].first['Count']
214
+ # => 3
215
+ #
216
+ def clicks(params = {})
217
+ @api.get("#{@api.path}/Message/#{@id}/List/Clicks", params: params)
218
+ end
219
+
220
+ # Count of clicks on a link in the specified email.
221
+ #
222
+ #
223
+ # @return [Integer] Count of bounces.
224
+ #
225
+ # @see http://help.mailup.com/display/mailupapi/Email+statistics+methods+v1.1#Emailstatisticsmethodsv1.1-CountMessageClicks
226
+ #
227
+ # @example
228
+ #
229
+ # clicks = mailup.stats.message(9).clicks_count
230
+ # => 3453
231
+ #
232
+ def clicks_count
233
+ @api.get("#{@api.path}/Message/#{@id}/Count/Clicks")
234
+ end
235
+
236
+ # Paged list of clicks on a link in the specified email.
237
+ #
238
+ # @param [Hash] params Optional params or filters:
239
+ # @option params [Integer] :pageNumber The page number to return.
240
+ # @option params [Integer] :pageSize The number of results to per page.
241
+ # @option params [String] :filterby A filtering expression.
242
+ # @option params [String] :orderby The sorting condition for the results.
243
+ #
244
+ # @return [JSON] Results and data including:
245
+ # * IsPaginated [Boolean]
246
+ # * Items [Array<Hash>]
247
+ # * PageNumber [Integer]
248
+ # * PageSize [Integer]
249
+ # * Skipped [Integer]
250
+ # * TotalElementsCount [Integer]
251
+ #
252
+ # @see http://help.mailup.com/display/mailupapi/Email+statistics+methods+v1.1#Emailstatisticsmethodsv1.1-ListMessageUrlClicks
253
+ #
254
+ # @example
255
+ #
256
+ # url_clicks = mailup.stats.message(9).url_clicks
257
+ # url_clicks['TotalElementsCount']
258
+ # => 10
259
+ # url_clicks['Items'].first['Count']
260
+ # => 3
261
+ #
262
+ def url_clicks(params = {})
263
+ @api.get("#{@api.path}/Message/#{@id}/List/UrlClicks", params: params)
264
+ end
265
+
266
+ # Count of clicks on a link in the specified email.
267
+ #
268
+ #
269
+ # @return [Integer] Count of bounces.
270
+ #
271
+ # @see http://help.mailup.com/display/mailupapi/Email+statistics+methods+v1.1#Emailstatisticsmethodsv1.1-CountMessageClicks
272
+ #
273
+ # @example
274
+ #
275
+ # url_clicks = mailup.stats.message(9).url_clicks_count
276
+ # => 3453
277
+ #
278
+ def url_clicks_count
279
+ @api.get("#{@api.path}/Message/#{@id}/Count/UrlClicks")
280
+ end
281
+
282
+ end
283
+ end
284
+ end