maropost-api 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 65c966cdbe544cf0e317c740454efb0f39b5f6d8
4
- data.tar.gz: 35cc46edca3426bfd5e9bd05f111893bb720694f
3
+ metadata.gz: 211695842efe51cb9cad9fd34f899de04eb3e7a8
4
+ data.tar.gz: 0af58ab0257785ccf166461f399cedfe4f311e79
5
5
  SHA512:
6
- metadata.gz: 09b2daa87ba1acacdfd2fd58b83ae95fd08db22663a55eb3e047457e3637bb6d46a503be34e61916e85b45b49ab450ce1ef7bd386f876ed5cc2cee296c4857cc
7
- data.tar.gz: 46304b217b24685987656402d885684d9d8d2179a31cb6ac5cbdb9efdba47caeccc177b981e900c8416996f2fc2fbbfb9751b92449f49b0fd72c739a4a4c9a7c
6
+ metadata.gz: 0dddbf3b9edcb4d6956ed192ca00a3a0d182db059e0d09bbb75f669796988c1f41a2e5fceaf06d14a55fd8bf7c9a5d35e19fcc43f27705a94d1f5a3ad60fa5af
7
+ data.tar.gz: fa457ec6d11c2d2ab4b403eb1aefbac4093c8971861cf0eb428935df6654b72f1a9b7a90201822630760b76e739f47d5e2cf7247dde0bca37a063794f572e46a
data/README.md CHANGED
@@ -15,19 +15,20 @@ service, execute:
15
15
 
16
16
  reports = MaropostApi::Reports.new(account_id, auth_token)
17
17
  result = reports.Get(1);
18
- if result.success {
18
+ if (result.success) {
19
19
  myReports = result.data;
20
20
  }
21
21
 
22
- The result object contains two fields:
22
+ The result object contains three fields:
23
23
 
24
24
  - `success` (bool)
25
25
  - `errors` (object)
26
+ - `data` (Hash|Mixed)
26
27
 
27
28
  If `success` is `false`, then `errors` will have details about the reason for
28
29
  failure. If `errors` is not `nil`, then `success` will always be `false`.
29
30
 
30
- The object might also contain one property, `data` (dynamic), which contains whatever
31
+ The object also contains accessor, `data`, which contains whatever
31
32
  data the operation itself provides. Some operations, such as `delete()`
32
33
  operations, might not provide any data.
33
34
 
@@ -39,7 +40,7 @@ The specific APIs contained are:
39
40
  - [Transactional Campaigns](#transactional-campaigns)
40
41
  - [Contacts](#contacts)
41
42
  - [Journeys](#journeys)
42
- - [Product and Revenue](#product-and-revenue)
43
+ - [Products and Revenue](#products-and-revenue)
43
44
  - [Relational Table Rows](#relational-table-rows)
44
45
  - [Reports](#reports)
45
46
 
@@ -94,26 +95,28 @@ The specific APIs contained are:
94
95
  ### Available Methods:
95
96
  - `create_ab_test(name, from_email, address, language, campaign_groups_attributes,`
96
97
  `commit, sendAt, brand_id: nil, suppressed_list_ids: [],`
97
- `suppressed_journey_ids: [], suppressed_segment_ids: [], emailPreviewLink: nil,`
98
+ `suppressed_journey_ids: [], suppressed_segment_ids: [], email_preview_link: nil,`
98
99
  `decided_by: nil, lists: [], ctags: [], segments: [])`
99
100
  * Creates an Ab Test campaign
100
101
  - `name`: name of the new campaign
101
102
  - `from_email`: default sender email address for campaign emails
102
103
  - `address`: default physical address included on campaign emails
103
104
  - `language`: ISO 639-1 language code (e.g., "en"). 2 characters
104
- - `campaign_groups_attributes`: array of attributes. Each attribute is itself a hash with the following properties (all strings):
105
+ - `campaign_groups_attributes`: array of attributes. Each attribute is itself a hash with the following fields (all strings):
105
106
  - `name`: name of the group
106
107
  - `content_id`: content ID
107
108
  - `subject`: subject line of emails
108
109
  - `from_name`: "from name" on emails
109
110
  - `percentage`: percentage of emails that should be send with these settings
111
+ - `preheader`:
112
+ - `sendAt`: DateTime string having the format `YYYY-MM-DD HH:mm:ss`
110
113
  - `commit`: allowed values: 'Save as Draft' or 'Send Test' or 'Schedule'
111
114
  - `sendAt`: should be in "yyyy-mm-dd %H:%M:%S" where %H - Hour of the day, 24-hour clock (00..23), %M - Minute of the hour (00..59), %S - Second of the minute (00..60)
112
115
  - `brand_id`: brand ID as a string
113
116
  - `suppressed_list_ids`: array of list IDs in string format
114
117
  - `suppressed_journey_ids`: array of journey IDs in string format
115
118
  - `suppressed_segment_ids`: array of segment IDs in string format
116
- - `email_preview_link`: (string)
119
+ - `email_preview_link`: "0" for false. "1" for true.
117
120
  - `decided_by`: allowed values: ('TopChoice' for Top Choices) or ('Opens' for Highest Open Rate) or ('Clicks' for Highest Click Rate) or ('Manual' for Manual Selection) or ('click_to_open' for Highest Click-to-Open Rate) or ('conversions' for Highest Conversion Rate)
118
121
  - `lists`: array of list IDs in string format
119
122
  - `ctags`: array of tags in string format
@@ -132,17 +135,17 @@ The specific APIs contained are:
132
135
  - `create(name, subject, preheader, from_name, from_email, reply_to,`
133
136
  `content_id, email_preview_link, address, language, add_ctags)`
134
137
  * Creates a Transactional Campaign
135
- - `name` campaign name
136
- - `subject` campaign subject
137
- - `preheader` campaign preheader
138
- - `from_name` sender name in the email
139
- - `from_email` sender email address
140
- - `reply_to` reply-to email address
141
- - `content_id`
142
- - `email_preview_link`
143
- - `address` physical address
144
- - `language` ISO 639-1 language code
145
- - `add_ctags` array of campaign tags
138
+ - `name`: campaign name
139
+ - `subject`: campaign subject
140
+ - `preheader`: campaign preheader
141
+ - `from_name`: sender name in the email
142
+ - `from_email`: sender email address
143
+ - `reply_to`: reply-to email address
144
+ - `content_id`:
145
+ - `email_preview_link`: boolean. `true` to send email; `false` otherwise.
146
+ - `address`: physical address
147
+ - `language`: ISO 639-1 language code (e.g., "en"). 2 characters
148
+ - `add_ctags`: array of campaign tags
146
149
 
147
150
  - `send_email(campaign_id,
148
151
  content: {},
@@ -160,7 +163,7 @@ The specific APIs contained are:
160
163
  * Sends a transactional campaign email to a recipient contact. Sender's information will be automatically fetched from the transactional campaign, unless provided in the function arguments.
161
164
  - `campaign_id`: must be a campaign that already exists when you call `get()`. If you don't have one, first call `create(...)`.
162
165
  - `content`: hash with the following fields: `name`, `html_part`, `text_part`
163
- - `ignoreDnm`: If true, ignores the Do Not Mail list for the recipient contact.
166
+ - `ignore_dnm`: If true, ignores the Do Not Mail list for the recipient contact.
164
167
  - `contact`: hash defining the recipient with the following fields: `email`, `first_name`, `last_name`, `custom_field`
165
168
  - `custom_field`: is a hash of the custom fields.
166
169
  - `send_time`: hash with the following string fields: `hour` ("1" - "12") and `minute` ("00" - "59")
@@ -185,7 +188,7 @@ The specific APIs contained are:
185
188
 
186
189
  - `get_for_email(email)`
187
190
  * Gets the contact according to email address
188
- - `email`: email address of the contact
191
+ * `email`: email address of the contact
189
192
 
190
193
  - `get_opens(contact_id, page)`
191
194
  * Gets the list of opens for the specified contact
@@ -240,52 +243,43 @@ The specific APIs contained are:
240
243
  - `remove_tags`: tags to remove from the contact. Simple array of tag names (strings).
241
244
  - `remove_from_dnm`: Set this true to subscribe contact to the list, and remove it from DNM.
242
245
  - `subscribe`: true to subscribe the contact to the list; false otherwise.
243
-
244
- - `create_or_update_contact(email, first_name: nil, last_name: nil, phone: nil, fax: nil, uid: nil,`
245
- `custom_field: nil, add_tags: nil, remove_tags: nil, remove_from_dnm: true, subscribe: true)`
246
- * Creates a contact without a list. Updates if already existing email is passed.
247
- - `contact_id`: ID of the contact
248
- - `email`: Email address for the contact to be created|updated
249
- - `first_name`: first name of Contact
250
- - `last_name`: last Name of Contact
251
- - `phone`: phone number of Contact
252
- - `fax`: fax number of Contact
253
- - `uid`: UID for the contact
254
- - `custom_field`: custom fields passed as associative array. Keys represent the field names while values represent the values
255
- - `add_tags`: tags to add to the contact. Simple array of tag names (strings).
256
- - `remove_tags`: tags to remove from the contact. Simple array of tag names (strings).
257
- - `remove_from_dnm`: set this true to subscribe contact to the list, and remove it from DNM
258
- - `subscribe`: true to subscribe the contact to the list; false otherwise.
259
-
260
- - `create_or_update_for_list_and_workflows(email, first_name: nil, last_name: nil, phone: nil, fax: nil, uid: nil,`
261
- `custom_field: nil, add_tags: nil, remove_tags: nil, remove_from_dnm: false, subscribe_list_ids: nil,`
262
- `unsubscribe_list_ids: nil, unsubscribe_workflow_ids: nil, unsubscribe_campaign: nil)`
246
+
247
+ - `create_or_update_for_lists_and_workflows(
248
+ email,
249
+ first_name,
250
+ last_name,
251
+ phone,
252
+ fax,
253
+ uid = nil,
254
+ custom_field = {},
255
+ add_tags = [],
256
+ remove_tags = [],
257
+ remove_from_dnm = true,
258
+ **options
259
+ )`
263
260
  * Creates or updates Contact
264
261
  - Multiple lists can be subscribed, unsubscribed.
265
262
  - Multiple workflows can be unsubscribed.
266
- - `email`: email address for the contact to be created|updated
267
- - `first_name`: first name of Contact
268
- - `last_name`: last name of Contact
269
- - `phone`: phone number of Contact
270
- - `fax`: fax number of Contact
271
- - `uid`: UID for the Contact
272
- - `custom_field`: custom fields passed as associative array. Keys represent the field names while values represent the values
273
- - `add_tags`: tags to add to the contact. Simple array of tag names (strings)
274
- - `remove_tags`: tags to remove from the contact. Simple array of tag names (strings)
275
- - `remove_from_dnm`: set this true to subscribe contact to the list, and remove it from DNM
276
- - `subscribe_list_ids`: simple array of IDs of lists to subscribe the contact to
277
- - `unsubscribe_list_ids`: simple array of IDs of Lists to unsubscribe the contact from
278
- - `unsubscribe_workflow_ids`: simple array of list of IDs of workflows to unsubscribe the contact from
279
- - `unsubscribe_campaign`: campaign_id to unsubscribe the contact from
263
+ * `email`: [String] must be an email
264
+ * `first_name`: [String] Contact First Name
265
+ * `last_name`: [String] Contact Last Name
266
+ * `phone`: [String] Contact's phone number
267
+ * `fax`: [String] Contacts' fax number
268
+ * `uid`: [String] Unique identifier
269
+ * `custom_field`: [Hash] list of custom_fields addable for the new contact
270
+ * `add_tags`: [Array] list of tags to be added to the contact
271
+ * `remove_tags`: [Array] list of tags to be removed from the contact
272
+ * `remove_from_dnm`: [Boolean] decides whether to remove contact from dnm or not
273
+ * `options`: [Hash] Key value pairs containing other different properties for the new contact
280
274
 
281
275
  - `delete_from_all_lists(email)`
282
276
  * Deletes specified contact from all lists
283
- - `email`: email address of the contact
277
+ * `email`: email address of the contact
284
278
 
285
- - `delete_from_lists(contact_id, list_ids: nil)`
279
+ - `delete_from_lists(contact_id, lists_to_delete_from)`
286
280
  * Deletes the specified contact from the specified lists
287
- - `contact_id`: id of the contact
288
- - `list_ids`: simple array of ids of the lists
281
+ * `contact_id`: id of the contact
282
+ * `lists_to_delete_from`: simple array of ids of the lists
289
283
 
290
284
  - `delete_contact_for_uid(uid)`
291
285
  * Deletes contact having the specified UID
@@ -298,8 +292,9 @@ The specific APIs contained are:
298
292
 
299
293
  - `unsubscribe_all(contact_field_value, contact_field_name: "email")`
300
294
  * Unsubscribes contact having the specified field name/value.
301
- - `contact_field_value`: the value of the field for the contact(s) being unsubscribed
302
- - `contact_field_name`: the name of the field being checked for the value. At present, the accepted field names are: 'email' or 'uid'
295
+ * `contact_field_value`: the value of the field for the contact(s) being unsubscribed
296
+ * `contact_field_name`: the name of the field being checked for the value. At present, the
297
+ accepted field names are: 'email' or 'uid'
303
298
 
304
299
  ## Journeys
305
300
 
@@ -323,44 +318,53 @@ The specific APIs contained are:
323
318
  - `journey_id`: get contacts filtered with journey_id
324
319
  - `page` : page # (>= 1). Up to 200 records returned per page.
325
320
 
326
- - `stop_all(contact_id, recipientEmail, uid, page)`
321
+ - `stop_all(contact_id: nil, uid: nil, email_recipient: nil)`
327
322
  * Stops all journeys, filtered for the matching parameters
328
- - `contact_id`: this filter ignored unless greater than 0
329
- - `recipientEmail`: this filter ignored if nil
330
- - `uid`: this filter ignored if nil
331
- - `page`: page # (>= 1). Up to 200 record returned per page.
323
+ * `contact_id:`: this filter ignored unless greater than 0
324
+ * `uid:`: this filter ignored if null
325
+ * `email_recipient:`: this filter ignored if null
332
326
 
333
- - `pause_journey_for_contact(journey_id, contact_id)`
327
+ - `pause_for_contact(journey_id, contact_id)`
334
328
  * Pause the specified journey for the specified contact
335
329
  - `journey_id`: journey to pause
336
330
  - `contact_id`: pause journey for specified contact id
337
331
 
338
- - `pause_journey_for_uid(journey_id, uid)`
332
+ - `pause_for_uid(journey_id, uid)`
339
333
  * Pause the specified journey for the contact having the specified UID
340
334
  - `journey_id`: journey to pause
341
335
  - `uid`: pause journey for specified uid
342
336
 
343
- - `reset_journey_for_contact(journey_id, contact_id)`
344
- * Reset the specified journey for the specified active/paused contact. Resetting a contact to the beginning of the journeys will result in sending of the same journey campaigns as originally sent.
337
+ - `reset_for_contact(journey_id, contact_id)`
338
+ * Reset the specified journey for the specified active/paused contact.
339
+ Resetting a contact to the beginning of the journeys will result in
340
+ sending of the same journey campaigns as originally sent.
345
341
  - `journey_id`: journey to reset
346
342
  - `contact_id`: reset journey for specified contact id
347
343
 
348
- - `reset_journey_for_uid(journey_id, uid)`
349
- * Restarts a journey for a paused contact having the specified UID. Adds a new contact in journey. Retriggers the journey for a contact who has finished its journey once. (To retrigger, *make sure* that "Retrigger Journey" option is enabled.)
344
+ - `reset_for_uid(journey_id, uid)`
345
+ * Reset the specified journey for the active/paused contact having the
346
+ specified UID. Resetting a contact to the beginning of the journeys
347
+ will result in sending of the same journey campaigns as originally sent.
350
348
  - `journey_id`: journey to reset
351
349
  - `uid`: uid of contact to reset journey
352
350
 
353
- - `start_journey_for_contact(journey_id, contact_id)`
354
- * Starts a journey for contact having specified journey_id
351
+ - `start_for_contact(journey_id, contact_id)`
352
+ * Restarts a journey for a paused contact. Adds a new contact in
353
+ journey. Retriggers the journey for a contact who has finished its
354
+ journey once. (To retrigger, *make sure* that "Retrigger Journey" option
355
+ is enabled.)
355
356
  - `journey_id`: journey to start
356
357
  - `contact_id`: contact id of contact to start journey
357
358
 
358
- - `start_journey_for_uid(journey_id, uid)`
359
- * Starts a journey for contact having specified uid and journey_id
359
+ - `start_for_uid(journey_id, uid)`
360
+ * Restarts a journey for a paused contact having the specified UID.
361
+ Adds a new contact in journey. Retriggers the journey for a contact
362
+ who has finished its journey once. (To retrigger, *make sure* that
363
+ "Retrigger Journey" option is enabled.)
360
364
  - 'journey_id': journey to start
361
365
  - 'uid': uid of contact to start journey
362
366
 
363
- ## Product and Revenue
367
+ ## Products and Revenue
364
368
 
365
369
  ### Instantiation:
366
370
 
@@ -398,34 +402,28 @@ The specific APIs contained are:
398
402
  - `campaign_id`: campaign id
399
403
  - `coupon_code`: coupon code
400
404
 
401
- - `update_order_for_original_order_id(original_order_id,`
402
- `order_date_time,`
403
- `order_status,`
404
- `order_items,`
405
- `campaign_id: nil,`
406
- `coupon_code: nil)`
407
- * Updates an existing eCommerce order using unique original_order_id if the details are changed due to partial return or some other update.
408
- - `original_order_id`: matches the original_order_id field of the order
409
- - `order_date_time`: uses the format: YYYY-MM-DDTHH:MM:SS-05:00
410
- - `order_status`: order status
411
- - `order_items`: must contain at least one order_item.
412
- - `campaign_id`: campaign id
413
- - `coupon_code`: coupon code
405
+ - `update_order_for_original_order_id(original_order_id, order: {})`
406
+ * Updates an existing eCommerce order using unique original_order_id if the details are changed due to partial
407
+ return or some other update.
408
+ * `original_order_id:`: [String] Orginal Order Id of the Order
409
+ * `order:`: [Hash] Contains the following fields:
410
+ - `order_date_time`: uses the format: YYYY-MM-DDTHH:MM:SS-05:00
411
+ - `order_status`: order status
412
+ - `order_items`: must contain at least one order_item.
413
+ - `campaign_id`: campaign id
414
+ - `coupon_code`: coupon code
415
+
416
+ - `update_order_for_order_id(order_id, order: {})`
417
+ * Updates an existing eCommerce order using unique order_id if the details are changed due to partial return or
418
+ * some other update.
419
+ * `original_order_id:`: [String] Original Order Id of the Order
420
+ * `order:`: [Hash] Contains the following fields:
421
+ - `order_date`: uses the format: YYYY-MM-DDTHH:MM:SS-05:00
422
+ - `order_status`: order status
423
+ - `order_items`: must contain at least one order_item.
424
+ - `campaign_id`: campaign id
425
+ - `coupon_code`: coupon code
414
426
 
415
- - `update_order_for_order_id(order_id,`
416
- `order_date_time,`
417
- `order_status,`
418
- `order_items,`
419
- `campaign_id: nil,`
420
- `coupon_code: nil)`
421
- * Updates an existing eCommerce order using unique order_id if the details are changed due to partial return or some other update.
422
- - `order_id`: matches the Maropost order_id field of the order
423
- - `order_date_time`: uses the format: YYYY-MM-DDTHH:MM:SS-05:00
424
- - `order_status`: order status
425
- - `order_items`: must contain at least one order_item.
426
- - `campaign_id`: campaign id
427
- - `coupon_code`: coupon code
428
-
429
427
  - `delete_for_original_order_id(original_order_id)`
430
428
  * Deletes the complete eCommerce order if the order is cancelled or returned
431
429
  - `original_order_id` matches the original_order_id field of the order
@@ -435,14 +433,16 @@ The specific APIs contained are:
435
433
  - `id`: Maropost order_id
436
434
 
437
435
  - `delete_products_for_original_order_id(original_order_id, product_ids)`
438
- * Deletes the specified product(s) from a complete eCommerce order if the product(s) is cancelled or returned
439
- - `original_order_id`: matches the original_order_id field of the order
440
- - `product_ids`: the product(s) to delete from the order
436
+ * Deletes the specified product(s) from a complete eCommerce order if
437
+ the product(s) is cancelled or returned
438
+ * `original_order_id`: matches the original_order_id field of the order
439
+ * `product_ids`: the product(s) to delete from the order
441
440
 
442
- - `delete_products_for_order_id(id, product_ids)`
443
- * Deletes the specified product(s) from a complete eCommerce order if the product(s) is cancelled or returned
444
- - `id`: Maropost order_id
445
- - `product_ids`: the product(s) to delete from the order
441
+ - `delete_products_for_order_id(order_id, product_ids)`
442
+ * Deletes the specified product(s) from a complete eCommerce order if
443
+ the product(s) is cancelled or returned
444
+ * `order_ids`: Maropost order_id
445
+ * `product_ids`: the product(s) to delete from the order
446
446
 
447
447
  ## Relational Table Rows
448
448
 
@@ -470,21 +470,21 @@ To switch tables, you do not need to re-instantiate the service. Simply update t
470
470
 
471
471
  - `create(key_value_col, *key_value_cols)`
472
472
  * Adds a record to the Relational Table
473
- * `key_value_col`: object hash containing the fields of the
474
- record to be created, each item consisting of two fields.
475
- - NOTE: One of the fields must represent the unique identifier.
473
+ * `key_value_col`: object hash representing the unique identifier of the record to add.
474
+ * hash key represents the column name and the hash value is the column value.
475
+ * `*key_value_cols`: other hashes representing other columns to add
476
476
 
477
477
  - `update(key_value_col, *key_value_cols)`
478
478
  * Updates a record in the Relational Table.
479
- * `key_value_col`: object hash containing the fields of the
480
- record to be created, each item consisting of two fields.
481
- - NOTE: One of the KeyValues must represent the unique identifier.
479
+ * `key_value_col`: object hash representing the unique identifier of the record to add.
480
+ * hash key represents the column name and the hash value is the column value.
481
+ * `*key_value_cols`: other hashes representing other columns to add
482
482
 
483
483
  - `upsert(key_value_col, *key_value_cols)`
484
484
  * Creates or updates a record in the Relational Table.
485
- * `key_value_col`: object hash containing the fields of the
486
- record to be created, each item consisting of two fields.
487
- - NOTE: One of the KeyValues must represent the unique identifier.
485
+ * `key_value_col`: object hash representing the unique identifier of the record to add.
486
+ * hash key represents the column name and the hash value is the column value.
487
+ * `*key_value_cols`: other hashes representing other columns to add
488
488
 
489
489
  - `delete(unique_field_name, value)`
490
490
  * Deletes the given record of the Relational Table
@@ -610,6 +610,6 @@ To switch tables, you do not need to re-instantiate the service. Simply update t
610
610
  * `to`: end of date range filter
611
611
  * `per`: gets the mentioned number of reports
612
612
 
613
- - `get_journey(page)`
613
+ - `get_journeys(page)`
614
614
  * returns the list of all Journeys
615
615
  * `page`: page # (>= 1). Up to 200 records returned per page.
@@ -1,40 +1,65 @@
1
1
  require 'maropost_api/custom_types/order_item'
2
2
 
3
3
  module MaropostApi
4
-
4
+
5
+ ##
6
+ # Contains methods that will create, update, read and delete the services
7
+ # provided in the Product and Revenue Api
5
8
  class ProductsAndRevenue
6
-
9
+ ##
10
+ # Creates a new instance of Reports class.
11
+ # @param account [Integer] is authentic user account id (Integer) provided by maropost.com
12
+ # @param api_key [String] is the auth token (String) that is validated on the server to authenticate the user
7
13
  def initialize(account = ENV["ACCOUNT"], api_key = ENV["API_KEY"])
8
14
  MaropostApi.instance_variable_set(:@api_key, api_key)
9
15
  MaropostApi.instance_variable_set(:@account, account)
10
16
  end
11
-
17
+
18
+ ##
19
+ # Gets the order for the specified id
20
+ # @param id [Integer] unique identifier of the order
12
21
  def get_order(id)
13
22
  full_path = full_resource_path("/find")
14
23
  query_params = MaropostApi.set_query_params({"where[id]" => id})
15
-
24
+
16
25
  MaropostApi.get_result(full_path, query_params)
17
26
  end
18
-
27
+
28
+ ##
29
+ # gets the order for the specified original order id
30
+ # @param original_order_id [String] A unique identifier that's not changed since the creation date
19
31
  def get_order_for_original_order_id(original_order_id)
20
32
  full_path = full_resource_path("/#{original_order_id}")
21
33
  query_params = MaropostApi.set_query_params
22
-
34
+
23
35
  MaropostApi.get_result(full_path, query_params)
24
36
  end
25
-
37
+
38
+ ##
39
+ # Creates a new order from the given parameters
40
+ # @param require_unique [Boolean] validates that the order has a unique original_order_id for the given contact.
41
+ # @param contact [Hash] Named parameter, which if exists, must contain :email as its key
42
+ # @param order [Hash] Named parameter, which must contain :order_date, :order_status, :original_order_id, :order_items as its keys
43
+ # @param @order_items [OrderItem] Custom Type containing key value pair to reference an order item
44
+ # @param add_tags [Array] List of string tags to be added in the new order
45
+ # @param remove_tags [Array] List of string tags to be removed from the new order
46
+ # @param uid [String] Unique Identifier
47
+ # @param list_ids [String|CSV] A csv list fo list ids
48
+ # @param grand_total [Float] An amount referencing the total of the order
49
+ # @param campaing_id [Integer] ID of the Campaign the order belongs to
50
+ # @param coupon_code [String]
26
51
  def create_order(
27
- require_unique,
28
- contact: {},
29
- order: {},
30
- order_items: [],
31
- add_tags: [],
32
- remove_tags: [],
33
- uid: nil,
34
- list_ids: nil,
35
- grand_total: nil,
36
- campaign_id: nil,
37
- coupon_code: nil
52
+ require_unique,
53
+ contact: {},
54
+ order: {},
55
+ order_items: [],
56
+ add_tags: [],
57
+ remove_tags: [],
58
+ uid: nil,
59
+ list_ids: nil,
60
+ grand_total: nil,
61
+ campaign_id: nil,
62
+ coupon_code: nil
38
63
  )
39
64
  # required contacts fields to check for
40
65
  [:email,].each do |contact_field|
@@ -59,15 +84,19 @@ module MaropostApi
59
84
  params[:grand_total] = grand_total
60
85
  params[:campaign_id] = campaign_id
61
86
  params[:coupon_code] = coupon_code
62
-
87
+
63
88
  full_path = full_resource_path
64
-
89
+
65
90
  MaropostApi.post_result(full_path, {"order" => params})
66
91
  end
67
-
92
+
93
+ ##
94
+ # updates an order fo the given original order id
95
+ # @param original_order_id [String] Orginal Order Id of the Order
96
+ # @param order [Hash] Key value pairs that must contain at least :order_date, :order_status and :order_items as its keys
68
97
  def update_order_for_original_order_id(original_order_id, order: {})
69
98
  raise ArgumentError.new('original_order_id is required') if original_order_id.nil?
70
-
99
+
71
100
  [:order_date, :order_status, :order_items].each do |f|
72
101
  raise ArgumentError.new("order[:#{f}] is required") unless order.has_key?(f)
73
102
  end
@@ -75,16 +104,20 @@ module MaropostApi
75
104
  raise TypeError.new('each order item should be a type of ' << OrderItem.class.to_s) unless oi.kind_of? OrderItem
76
105
  end
77
106
  order[:order_items].map! {|i| i.to_hash }
78
-
107
+
79
108
  full_path = full_resource_path("/#{original_order_id}")
80
109
  form_body = {order: order}
81
-
82
- MaropostApi.put_result(full_path, form_body)
110
+
111
+ MaropostApi.put_result(full_path, form_body)
83
112
  end
84
-
113
+
114
+ ##
115
+ # updates an order fo the given original order id
116
+ # @param original_order_id [String] Id of the Order
117
+ # @param order [Hash] Key value pairs that must contain at least :order_date, :order_status and :order_items as its keys
85
118
  def update_order_for_order_id(order_id, order: {})
86
119
  raise ArgumentError.new('order_id is required') if order_id.nil?
87
-
120
+
88
121
  [:order_date, :order_status, :order_items].each do |f|
89
122
  raise ArgumentError.new("order[:#{f}] is required") unless order.has_key?(f)
90
123
  end
@@ -92,50 +125,61 @@ module MaropostApi
92
125
  raise TypeError.new('each order item should be a type of ' << OrderItem.class.to_s) unless oi.kind_of? OrderItem
93
126
  end
94
127
  order[:order_items].map! {|i| i.to_hash }
95
-
128
+
96
129
  full_path = full_resource_path("/find")
97
130
  query_params = MaropostApi.set_query_params({"where[id]" => order_id})
98
-
131
+
99
132
  MaropostApi.put_result(full_path, {order: order}, query_params)
100
133
  end
101
-
134
+
135
+ ##
136
+ # deletes an order fo the given original order id
137
+ # @param original_order_id [String] Orginal Order Id of the Order
102
138
  def delete_for_original_order_id(original_order_id)
103
139
  full_path = full_resource_path("/#{original_order_id}")
104
140
  query_params = MaropostApi.set_query_params
105
-
141
+
106
142
  MaropostApi.delete_result(full_path, query_params)
107
143
  end
108
-
144
+
109
145
  def delete_for_order_id(order_id)
110
146
  full_path = full_resource_path('/find')
111
147
  query_params = MaropostApi.set_query_params({'where[id]' => order_id})
112
-
148
+
113
149
  MaropostApi.delete_result(full_path, query_params)
114
150
  end
115
-
151
+
152
+ ##
153
+ # deletes products for the given original order id
154
+ # @param original_order_id [String] Orginal Order Id of the Order
155
+ # @param product_ids [Array] List of product ids to delete
116
156
  def delete_products_for_original_order_id(original_order_id, product_ids)
117
- raise TypeError.new('product_ids should be an Array') if ! product_ids.kind_of? Array
157
+ raise TypeError.new('product_ids should be an Array') until product_ids.is_a? Array
118
158
  full_path = full_resource_path("/#{original_order_id}")
119
159
  query_params = MaropostApi.set_query_params({"product_ids" => product_ids.join(',')})
120
-
160
+
121
161
  MaropostApi.delete_result(full_path, query_params)
122
162
  end
123
-
163
+
164
+ ##
165
+ # deletes products for the specified order id
166
+ # @param order_id [Integer] ID of the order
167
+ # @param product_ids [Array] List of product IDs to be deleted
124
168
  def delete_products_for_order_id(order_id, product_ids)
125
169
  raise TypeError.new('product_ids should be an Array') if ! product_ids.kind_of? Array
126
170
  full_path = full_resource_path("/find")
127
171
  query_params = MaropostApi.set_query_params({"product_ids" => product_ids.join(','), 'where[id]' => order_id})
128
-
172
+
129
173
  MaropostApi.delete_result(full_path, query_params)
130
174
  end
131
-
132
- private
133
-
134
- def full_resource_path(specifics = '', root_resource = 'orders')
135
- account = MaropostApi.instance_variable_get(:@account)
136
- "/accounts/#{account}/#{root_resource}" << specifics
137
- end
138
-
175
+
176
+ private
177
+
178
+ def full_resource_path(specifics = '', root_resource = 'orders')
179
+ account = MaropostApi.instance_variable_get(:@account)
180
+ "/accounts/#{account}/#{root_resource}" << specifics
181
+ end
182
+
139
183
  end
140
-
184
+
141
185
  end
@@ -1,8 +1,17 @@
1
- module MaropostApi
1
+ module MaropostApi
2
+
3
+ ##
4
+ # Contains methods to operate various operations like create, update, delete or read
5
+ # from the Relational Table Api
2
6
  class RelationalTableRows
3
7
 
4
8
  attr_accessor :table_name
5
-
9
+
10
+ ##
11
+ # Creates a new instance of Reports class.
12
+ # @param account [Integer] is authentic user account id (Integer) provided by maropost.com
13
+ # @param api_key [String] is the auth token (String) that is validated on the server to authenticate the user
14
+ # @param table_name [String] sets which relational table the service's operations should act against
6
15
  def initialize(account = ENV["ACCOUNT"], api_key = ENV["API_KEY"], table_name:)
7
16
  MaropostApi.instance_variable_set(:@api_key, api_key)
8
17
  MaropostApi.instance_variable_set(:@account, account)
@@ -10,14 +19,20 @@ module MaropostApi
10
19
 
11
20
  MaropostApi.base_uri "https://rdb.maropost.com/#{account}"
12
21
  end
13
-
22
+
23
+ ##
24
+ # Gets the records of the relational table
14
25
  def get
15
26
  full_path = full_resource_path
16
27
  query_params = MaropostApi.set_query_params
17
28
 
18
29
  MaropostApi.get_result(full_path, query_params)
19
30
  end
20
-
31
+
32
+ ##
33
+ # Gets the specified record from the relational table
34
+ # @param unique_field_name [String] the name of the field to retrieve
35
+ # @param value [Mixed] Value of the unique_field_name
21
36
  def show(unique_field_name, value)
22
37
  raise TypeError.new("#{unique_field_name.inspect} should be a string") unless unique_field_name.is_a? String
23
38
  params = {:record => {}}
@@ -26,7 +41,11 @@ module MaropostApi
26
41
 
27
42
  MaropostApi.post_result(full_path, params)
28
43
  end
29
-
44
+
45
+ ##
46
+ # Adds a record to the Relational Table
47
+ # @param key_value_col [Hash] A key value pair to be added to the table
48
+ # @param key_value_cols [Hash] Other multile key value pairs that can be added at once in the table
30
49
  def create(key_value_col, *key_value_cols)
31
50
  raise TypeError.new("#{key_value_col.inspect} is not type of Hash") unless key_value_col.kind_of? Hash
32
51
  if (key_value_cols)
@@ -38,7 +57,11 @@ module MaropostApi
38
57
 
39
58
  MaropostApi.post_result(full_path, :record => all_key_values)
40
59
  end
41
-
60
+
61
+ ##
62
+ # Updates a record in the Relational Table
63
+ # @param key_value_col [Hash] A key value to be updated in the table
64
+ # @param key_value_cols [Hash] Rest of the key value pairs to be updated if there are multiple
42
65
  def update(key_value_col, *key_value_cols)
43
66
  raise TypeError.new("#{key_value_col.inspect} is not type of Hash") unless key_value_col.kind_of? Hash
44
67
  if (key_value_cols)
@@ -51,7 +74,11 @@ module MaropostApi
51
74
 
52
75
  MaropostApi.put_result(full_path, {:record => all_key_values}, query_params)
53
76
  end
54
-
77
+
78
+ ##
79
+ # Creates or updates a record in the Relational Table
80
+ # @param key_value_col [Hash] A key value to be updated inthe table
81
+ # @param key_value_cols [Hash] Rest of the key value pairs to be added/updated in case of multiple fields
55
82
  def upsert(key_value_col, *key_value_cols)
56
83
  raise TypeError.new("#{key_value_col.inspect} is not type of Hash") unless key_value_col.kind_of? Hash
57
84
  if (key_value_cols)
@@ -65,7 +92,11 @@ module MaropostApi
65
92
 
66
93
  MaropostApi.put_result(full_path, {:record => all_key_values}, query_params)
67
94
  end
68
-
95
+
96
+ ##
97
+ # Deletes the given record from the Relational Table
98
+ # @param unique_field_name [String] name of the unique identifier of the record to be deleted
99
+ # @param value [Mixed] value matching the unique identifier
69
100
  def delete(unique_field_name, value)
70
101
  raise TypeError.new("#{unique_field_name.inspect} is not a String") unless unique_field_name.is_a? String
71
102
  record = {:record => {}}
@@ -57,7 +57,9 @@ module MaropostApi
57
57
  raise ArgumentError.new('from_email must be a valid email address') until from_email.nil? or from_email.match? email_regex
58
58
  raise ArgumentError.new('reply_to must be a valid email address') until reply_to.nil? or reply_to.match? email_regex
59
59
  raise ArgumentError.new('add_ctags must be a valid Array of string') until add_ctags.is_a? Array and add_ctags.all?{|t| t.is_a? String }
60
-
60
+ raise ArgumentError.new('send_time must have two keys viz. :hour, :minute') until send_time.has_key?(:hour) and send_time.has_key?(:minute)
61
+ raise ArgumentError.new('send_time[:hour] must be between 1-12 and send_time[:minute] must be between 0-59') until (1..12).to_a.include?(send_time[:hour]) and (0..59).to_a.include?(send_time[:minute])
62
+
61
63
  params = {}
62
64
  method(__method__).parameters.each{|p| params[p[1]] = eval(p[1].to_s)}
63
65
  params.reject!{|k,v| v.nil? or (v.respond_to? :empty? and v.empty?) }
@@ -1,3 +1,3 @@
1
1
  module MaropostApi
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: maropost-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ashish Acharya
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2019-06-08 00:00:00.000000000 Z
12
+ date: 2019-06-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httparty