unione-ruby 0.0.2 → 1.0.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 (57) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +90 -9
  3. data/Rakefile +49 -0
  4. data/config/response_schema/domain.yml +74 -0
  5. data/config/response_schema/email.yml +23 -0
  6. data/config/response_schema/event_dump.yml +75 -0
  7. data/config/response_schema/project.yml +59 -0
  8. data/config/response_schema/suppression.yml +71 -0
  9. data/config/response_schema/system.yml +33 -0
  10. data/config/response_schema/tag.yml +26 -0
  11. data/config/response_schema/template.yml +134 -0
  12. data/config/response_schema/unsubscribed.yml +45 -0
  13. data/config/response_schema/webhook.yml +141 -0
  14. data/examples/api/custom_api.rb +14 -0
  15. data/examples/api/domain.rb +14 -7
  16. data/examples/api/email/attachments.rb +28 -0
  17. data/examples/api/email/multiple_recipients.rb +24 -0
  18. data/examples/api/email/send.rb +25 -0
  19. data/examples/api/email/settings.rb +41 -0
  20. data/examples/api/email/subscribe.rb +14 -0
  21. data/examples/api/email/template.rb +26 -0
  22. data/examples/api/event_dump.rb +44 -0
  23. data/examples/api/project.rb +30 -23
  24. data/examples/api/suppression.rb +34 -0
  25. data/examples/api/system.rb +6 -6
  26. data/examples/api/tag.rb +15 -0
  27. data/examples/api/template.rb +40 -28
  28. data/examples/api/unsubscribed.rb +17 -11
  29. data/examples/api/webhook.rb +28 -25
  30. data/examples/helpers.rb +29 -0
  31. data/examples/send_mail.rb +44 -0
  32. data/examples/setup.rb +21 -14
  33. data/lib/unione/client/domain.rb +21 -45
  34. data/lib/unione/client/email.rb +16 -15
  35. data/lib/unione/client/event_dump.rb +37 -0
  36. data/lib/unione/client/project.rb +19 -61
  37. data/lib/unione/client/suppression.rb +38 -0
  38. data/lib/unione/client/system.rb +12 -17
  39. data/lib/unione/client/tag.rb +24 -0
  40. data/lib/unione/client/template.rb +19 -66
  41. data/lib/unione/client/unsubscribed.rb +18 -31
  42. data/lib/unione/client/webhook.rb +19 -65
  43. data/lib/unione/client.rb +33 -11
  44. data/lib/unione/connection.rb +7 -3
  45. data/lib/unione/helpers.rb +22 -0
  46. data/lib/unione/response/raise_error.rb +4 -5
  47. data/lib/unione/validation.rb +34 -9
  48. data/lib/unione/version.rb +1 -1
  49. data/lib/unione-ruby.rb +0 -3
  50. data/test/CONFIGFILE.yml +71 -0
  51. data/unione-ruby.gemspec +2 -2
  52. metadata +32 -10
  53. data/examples/api/email.rb +0 -51
  54. data/examples/sending_mail.rb +0 -32
  55. data/lib/unione/helpers/mail/mail.rb +0 -42
  56. data/lib/unione/helpers/template/template.rb +0 -32
  57. data/lib/unione/helpers/webhook/webhook.rb +0 -18
@@ -0,0 +1,45 @@
1
+ unsubscribe:
2
+ type: object
3
+ required:
4
+ - status
5
+ - address
6
+ - message
7
+ properties:
8
+ status:
9
+ type: string
10
+ address:
11
+ type: string
12
+ message:
13
+ type: string
14
+ check_unsubscribed:
15
+ type: object
16
+ required:
17
+ - status
18
+ - address
19
+ - is_unsubscribed
20
+ properties:
21
+ status:
22
+ type: string
23
+ address:
24
+ type: string
25
+ is_unsubscribed:
26
+ type: boolean
27
+ list_unsubscribed:
28
+ type: object
29
+ required:
30
+ - status
31
+ - unsubscribed
32
+ properties:
33
+ status:
34
+ type: string
35
+ unsubscribed:
36
+ items:
37
+ type: object
38
+ required:
39
+ - address
40
+ - unsubscribed_on
41
+ properties:
42
+ address:
43
+ type: string
44
+ unsubscribed_on:
45
+ type: string
@@ -0,0 +1,141 @@
1
+ set_webhook:
2
+ type: object
3
+ required:
4
+ - status
5
+ - object
6
+ properties:
7
+ status:
8
+ type: string
9
+ object:
10
+ type: object
11
+ required:
12
+ - url
13
+ - status
14
+ - events
15
+ - event_format
16
+ - delivery_info
17
+ - single_event
18
+ - max_parallel
19
+ properties:
20
+ id:
21
+ type: integer
22
+ url:
23
+ type: string
24
+ status:
25
+ type: string
26
+ event_format:
27
+ type: string
28
+ delivery_info:
29
+ type: integer
30
+ single_event:
31
+ type: integer
32
+ max_parallel:
33
+ type: integer
34
+ events:
35
+ type: object
36
+ required:
37
+ - email_status
38
+ - spam_block
39
+ properties:
40
+ email_status:
41
+ items:
42
+ type: string
43
+ spam_block:
44
+ items:
45
+ type: string
46
+ get_webhook:
47
+ type: object
48
+ required:
49
+ - status
50
+ - object
51
+ properties:
52
+ status:
53
+ type: string
54
+ object:
55
+ type: object
56
+ required:
57
+ - url
58
+ - status
59
+ - events
60
+ - event_format
61
+ - max_parallel
62
+ properties:
63
+ id:
64
+ type: integer
65
+ url:
66
+ type: string
67
+ status:
68
+ type: string
69
+ event_format:
70
+ type: string
71
+ max_parallel:
72
+ type: integer
73
+ events:
74
+ type: object
75
+ required:
76
+ - email_status
77
+ - spam_block
78
+ properties:
79
+ email_status:
80
+ items:
81
+ type: string
82
+ spam_block:
83
+ items:
84
+ type: string
85
+ list_webhooks:
86
+ type: object
87
+ required:
88
+ - status
89
+ - objects
90
+ properties:
91
+ status:
92
+ type: string
93
+ objects:
94
+ items:
95
+ type: object
96
+ required:
97
+ - id
98
+ - url
99
+ - status
100
+ - updated_at
101
+ - events
102
+ - event_format
103
+ - delivery_info
104
+ - single_event
105
+ - max_parallel
106
+ properties:
107
+ id:
108
+ type: integer
109
+ url:
110
+ type: string
111
+ status:
112
+ type: string
113
+ event_format:
114
+ type: string
115
+ delivery_info:
116
+ type: integer
117
+ single_event:
118
+ type: integer
119
+ max_parallel:
120
+ type: integer
121
+ updated_at:
122
+ type: string
123
+ events:
124
+ type: object
125
+ required:
126
+ - email_status
127
+ - spam_block
128
+ properties:
129
+ spam_block:
130
+ items:
131
+ type: string
132
+ email_status:
133
+ items:
134
+ type: string
135
+ delete_webhook:
136
+ type: object
137
+ required:
138
+ - status
139
+ properties:
140
+ status:
141
+ type: string
@@ -0,0 +1,14 @@
1
+ require 'unione-ruby'
2
+
3
+ unione = UniOne::Client.new(
4
+ hostname: 'eu1.unione.io',
5
+ lang: 'en',
6
+ api_key: ENV['UNIONE_API_KEY']
7
+ )
8
+
9
+ # Custom Api call
10
+ response =
11
+ unione.post(
12
+ 'domain/get-dns-records.json',
13
+ domain: 'example.com'
14
+ )
@@ -1,18 +1,25 @@
1
1
  require 'unione-ruby'
2
2
 
3
- unione = UniOne::Client.new(data_center: 'eu1', lang: 'en', api_key: ENV['UNIONE_API_KEY'])
3
+ unione = UniOne::Client.new(
4
+ hostname: 'eu1.unione.io',
5
+ lang: 'en',
6
+ api_key: ENV['UNIONE_API_KEY']
7
+ )
4
8
 
5
9
  # Generate/get DNS records for domain verification and DKIM signing
6
- response = unione.get_dns_records("example.com")
7
- puts response.status
8
- puts response.body.to_h
9
- puts response.headers
10
+ response = unione.get_dns_records(
11
+ domain: 'example.com'
12
+ )
10
13
 
11
14
  # Validate domain verification record before use
12
- response = unione.validate_verification_record('example.com')
15
+ response = unione.validate_verification_record(
16
+ domain: 'example.com'
17
+ )
13
18
 
14
19
  # Validate DKIM signature before sending
15
- response = unione.validate_dkim('example.com')
20
+ response = unione.validate_dkim(
21
+ domain: 'example.com'
22
+ )
16
23
 
17
24
  # Get a list of your domains and their verification/DKIM statuses
18
25
  response = unione.list_domains
@@ -0,0 +1,28 @@
1
+ require 'unione-ruby'
2
+ require 'json'
3
+
4
+ unione = UniOne::Client.new(
5
+ hostname: 'eu1.unione.io',
6
+ lang: 'en',
7
+ api_key: ENV['UNIONE_API_KEY']
8
+ )
9
+
10
+ # Send email with attachments
11
+ message = {}
12
+
13
+ message[:subject] = 'Subject'
14
+
15
+ message[:from_email] = 'test@qadns.net'
16
+ message[:from_name] = 'userName'
17
+
18
+ message[:body] = { html: '<b>Hello {{substitutionName}}</b>' }
19
+
20
+ message[:recipients] = []
21
+ message[:recipients] << { email: 'recipient@example.com' }
22
+
23
+ message[:attachments] = []
24
+ message[:attachments] << { type: 'text/plain', name: 'myfile.txt', content: 'ZXhhbXBsZSBmaWxl' }
25
+ message[:inline_attachments] = []
26
+ message[:inline_attachments] << { type: 'image/png', name: 'IMAGECID', content: 'iVBORw0KGgo' }
27
+
28
+ response = unione.send_email(message: message)
@@ -0,0 +1,24 @@
1
+ require 'unione-ruby'
2
+ require 'json'
3
+
4
+ unione = UniOne::Client.new(
5
+ hostname: 'eu1.unione.io',
6
+ lang: 'en',
7
+ api_key: ENV['UNIONE_API_KEY']
8
+ )
9
+
10
+ # Send email with multiple recipients
11
+ message = {}
12
+
13
+ message[:subject] = 'Subject'
14
+
15
+ message[:from_email] = 'test@qadns.net'
16
+ message[:from_name] = 'userName'
17
+
18
+ message[:body] = { html: '<b>Hello {{substitutionName}}</b>' }
19
+
20
+ message[:recipients] = []
21
+ message[:recipients] << { email: 'recipient1@example.com' }
22
+ message[:recipients] << { email: 'recipient2@example.com' }
23
+
24
+ response = unione.send_email(message: message)
@@ -0,0 +1,25 @@
1
+ require 'unione-ruby'
2
+ require 'json'
3
+
4
+ unione = UniOne::Client.new(
5
+ hostname: 'eu1.unione.io',
6
+ lang: 'en',
7
+ api_key: ENV['UNIONE_API_KEY']
8
+ )
9
+
10
+ message = {}
11
+
12
+ message[:subject] = 'Subject'
13
+
14
+ message[:from_email] = 'test@qadns.net'
15
+ message[:from_name] = 'userName'
16
+
17
+ message[:body] = { plaintext: 'Hello' }
18
+
19
+ # HTML body
20
+ message[:body] = { html: '<b>Hello {{substitutionName}}</b>' }
21
+
22
+ message[:recipients] = []
23
+ message[:recipients] << { email: 'recipient@example.com' }
24
+
25
+ response = unione.send_email(message: message)
@@ -0,0 +1,41 @@
1
+ require 'unione-ruby'
2
+ require 'json'
3
+
4
+ unione = UniOne::Client.new(
5
+ hostname: 'eu1.unione.io',
6
+ lang: 'en',
7
+ api_key: ENV['UNIONE_API_KEY']
8
+ )
9
+
10
+ message = {}
11
+
12
+ message[:subject] = 'Subject'
13
+
14
+ message[:from_email] = 'test@qadns.net'
15
+ message[:from_name] = 'userName'
16
+
17
+ message[:body] = { plaintext: 'Hello' }
18
+
19
+ message[:recipients] = []
20
+ message[:recipients] << { email: 'recipient@example.com' }
21
+
22
+ message[:global_metadata] = { key: 'val' }
23
+ message[:headers] = { 'X-ReplyTo' => 'reply@qadns.net' }
24
+
25
+ message[:track_links] = 1
26
+ message[:track_read] = 1
27
+
28
+ # Should have permissions to use this option
29
+ message[:skip_unsubscribe] = 1
30
+
31
+ # Language of the unsubscribe footer and unsubscribe page
32
+ message[:global_language] = 'en'
33
+
34
+ message[:options] = {
35
+ unsubscribe_url: 'https://domain.com/unsubscribe',
36
+ send_at: Time.now, # Or String: '2021-11-19 10:00:00'
37
+ custom_backend_id: 1, # Need permission
38
+ smtp_pool_id: 1 # Need permission
39
+ }
40
+
41
+ response = unione.send_email(message: message)
@@ -0,0 +1,14 @@
1
+ require 'unione-ruby'
2
+ require 'json'
3
+
4
+ unione = UniOne::Client.new(
5
+ hostname: 'eu1.unione.io',
6
+ lang: 'en',
7
+ api_key: ENV['UNIONE_API_KEY']
8
+ )
9
+
10
+ response = unione.subscribe_email(
11
+ from_email: 'from@qadns.net',
12
+ from_name: 'Example Sender',
13
+ to_email: 'blackhole@example.com'
14
+ )
@@ -0,0 +1,26 @@
1
+ require 'unione-ruby'
2
+ require 'json'
3
+
4
+ unione = UniOne::Client.new(
5
+ hostname: 'eu1.unione.io',
6
+ lang: 'en',
7
+ api_key: ENV['UNIONE_API_KEY']
8
+ )
9
+
10
+ # Send email using template
11
+ message = {}
12
+
13
+ message[:subject] = 'Subject'
14
+
15
+ message[:from_email] = 'test@qadns.net'
16
+ message[:from_name] = 'userName'
17
+
18
+ message[:recipients] = []
19
+ message[:recipients] << { email: 'recipient@example.com' }
20
+
21
+ message[:template_engine] = 'simple'
22
+ message[:template_id] = 'template_id'
23
+
24
+ message[:tags] = ['string1']
25
+
26
+ response = unione.send_email(message: message)
@@ -0,0 +1,44 @@
1
+ require 'unione-ruby'
2
+
3
+ unione = UniOne::Client.new(
4
+ hostname: 'eu1.unione.io',
5
+ lang: 'en',
6
+ api_key: ENV['UNIONE_API_KEY']
7
+ )
8
+
9
+ # Create event dump
10
+ filter = {
11
+ job_id: '1ZymBc-00041N-9X',
12
+ status: 'sent',
13
+ delivery_status: 'err_user_unknown',
14
+ email: 'david@example.org',
15
+ email_from: 'sender@example.com',
16
+ domain: 'example.org',
17
+ campaign_id: 'c77f4f4e-3561-49f7-9f07-c35be01b4f43'
18
+ }
19
+
20
+ response = unione.create_event_dump(
21
+ start_time: Time.now, # Or String: '2022-07-20 00:00:00'
22
+ end_time: Time.now, # Or String: '2022-07-21 00:00:00'
23
+ limit: 50,
24
+ all_projects: false,
25
+ filter: filter,
26
+ delimiter: ';',
27
+ format: 'csv'
28
+ )
29
+
30
+ # Get id of created event dump
31
+ dump_id = response.body.dump_id
32
+
33
+ # Get event dump
34
+ response = unione.get_event_dump(
35
+ dump_id: dump_id
36
+ )
37
+
38
+ # List event dumps
39
+ response = unione.list_event_dumps
40
+
41
+ # Delete event dump
42
+ response = unione.delete_event_dump(
43
+ dump_id: dump_id
44
+ )
@@ -1,37 +1,44 @@
1
1
  require 'unione-ruby'
2
2
 
3
- unione = UniOne::Client.new(data_center: 'eu1', lang: 'en', api_key: ENV['UNIONE_API_KEY'])
4
-
5
- # create project
6
- response = unione.create_project({
7
- name: 'Project Name',
8
- send_enabled: true,
9
- # custom_unsubscribe_url_enabled: true, # Should have rights to use
10
- })
3
+ unione = UniOne::Client.new(
4
+ hostname: 'eu1.unione.io',
5
+ lang: 'en',
6
+ api_key: ENV['UNIONE_API_KEY']
7
+ )
11
8
 
12
- puts response.status
13
- puts response.body.to_h
14
- puts response.headers
9
+ # Create project
10
+ response = unione.create_project(
11
+ project: {
12
+ name: 'Project Name',
13
+ country: 'ES',
14
+ send_enabled: true,
15
+ custom_unsubscribe_url_enabled: true # Need permission
16
+ }
17
+ )
15
18
 
19
+ # Get id of created project
16
20
  project_id = response.body.project_id
17
21
 
18
- # update project
22
+ # Update project
19
23
  response = unione.update_project(
20
- {
21
- project_id: project_id
22
- },
23
- {
24
- name: 'New Project Name',
24
+ project_id: project_id,
25
+ project: {
26
+ name: 'Project Name',
27
+ country: 'ES',
25
28
  send_enabled: true,
26
- # custom_unsubscribe_url_enabled: true, # Should have rights to use
29
+ custom_unsubscribe_url_enabled: true # Need permission
27
30
  }
28
31
  )
29
32
 
30
- # list all projects
33
+ # List projects
31
34
  response = unione.list_projects
32
35
 
33
- # list project by id
34
- response = unione.list_projects({ project_id: project_id })
36
+ # List project by id
37
+ response = unione.list_projects(
38
+ project_id: project_id
39
+ )
35
40
 
36
- # delete project
37
- response = unione.delete_project({ project_id: project_id })
41
+ # Delete project
42
+ response = unione.delete_project(
43
+ project_id: project_id
44
+ )
@@ -0,0 +1,34 @@
1
+ require 'unione-ruby'
2
+
3
+ unione = UniOne::Client.new(
4
+ hostname: 'eu1.unione.io',
5
+ lang: 'en',
6
+ api_key: ENV['UNIONE_API_KEY']
7
+ )
8
+
9
+ # Create suppression
10
+ response = unione.set_suppression(
11
+ email: 'user@example.com',
12
+ cause: 'unsubscribed',
13
+ created: Time.now, # Or String: '2021-12-19 10:15:49'
14
+ )
15
+
16
+ # Get suppression
17
+ response = unione.get_suppression(
18
+ email: 'user@example.com',
19
+ all_projects: false
20
+ )
21
+
22
+ # List suppressions
23
+ response = unione.list_suppressions(
24
+ cause: 'unsubscribed',
25
+ source: 'user',
26
+ start_time: Time.now, # Or String: '2021-12-19 10:15:49'
27
+ cursor: 'Ajfb6Hvdkn3hdhhvG57xbdufhG5',
28
+ limit: 50
29
+ )
30
+
31
+ # Delete suppression
32
+ response = unione.delete_suppression(
33
+ email: 'user@example.com'
34
+ )
@@ -1,10 +1,10 @@
1
1
  require 'unione-ruby'
2
2
 
3
- unione = UniOne::Client.new(data_center: 'eu1', lang: 'en', api_key: ENV['UNIONE_API_KEY'])
3
+ unione = UniOne::Client.new(
4
+ hostname: 'eu1.unione.io',
5
+ lang: 'en',
6
+ api_key: ENV['UNIONE_API_KEY']
7
+ )
4
8
 
5
- # get user or project information
9
+ # Get user or project info
6
10
  response = unione.info
7
-
8
- puts response.status
9
- puts response.body.to_h
10
- puts response.headers
@@ -0,0 +1,15 @@
1
+ require 'unione-ruby'
2
+
3
+ unione = UniOne::Client.new(
4
+ hostname: 'eu1.unione.io',
5
+ lang: 'en',
6
+ api_key: ENV['UNIONE_API_KEY']
7
+ )
8
+
9
+ # List tags
10
+ response = unione.list_tags
11
+
12
+ # Delete tag
13
+ response = unione.delete_tag(
14
+ tag_id: tag_id
15
+ )
@@ -1,42 +1,54 @@
1
1
  require 'unione-ruby'
2
2
  require 'json'
3
3
 
4
- unione = UniOne::Client.new(data_center: 'eu1', lang: 'en', api_key: ENV['UNIONE_API_KEY'])
4
+ unione = UniOne::Client.new(
5
+ hostname: 'eu1.unione.io',
6
+ lang: 'en',
7
+ api_key: ENV['UNIONE_API_KEY']
8
+ )
5
9
 
6
- # set template
7
- template = UniOne::Template.new
10
+ # Set template
11
+ template = {}
8
12
 
9
- template.name = 'Template Name'
10
- template.editor_type = 'html'
11
- template.subject = 'Email Subject'
12
- template.template_engine = 'simple'
13
+ template[:name] = 'Template Name 1'
14
+ template[:editor_type] = 'html'
15
+ template[:subject] = 'Email Subject'
16
+ template[:template_engine] = 'simple'
13
17
 
14
- template.global_substitutions = { 'someVar' => 'someVal' }
18
+ template[:global_substitutions] = {
19
+ 'someVar' => 'someVal'
20
+ }
15
21
 
16
- template.from = { from_email: 'test@example.com', from_name: 'userName' }
17
- template.headers = { 'X-ReplyTo' => 'reply@example.com' }
18
- template.body = { html: '<b>Hello {{substitutionName}}</b>' }
19
- template.options = { unsubscribe_url: 'someurl' }
22
+ template[:from_email] = 'test@example.com'
23
+ template[:from_name] = 'userName'
20
24
 
21
- template.attachments << { type: 'text/plain', name: 'myfile.txt', content: 'ZXhhbXBsZSBmaWxl' }
22
- template.inline_attachments << { type: 'image/png', name: 'IMAGECID', content: 'iVBORw0KGgo' }
25
+ template[:headers] = { 'X-ReplyTo' => 'reply@example.com' }
26
+ template[:body] = { html: '<b>Hello {{substitutionName}}</b>' }
27
+ template[:options] = { unsubscribe_url: 'someurl' }
23
28
 
24
- puts template.to_json
29
+ template[:attachments] = []
30
+ template[:attachments] << { type: 'text/plain', name: 'myfile.txt', content: 'ZXhhbXBsZSBmaWxl' }
25
31
 
26
- response = unione.set_template(template.to_json)
32
+ template[:inline_attachments] = []
33
+ template[:inline_attachments] << { type: 'image/png', name: 'IMAGECID', content: 'iVBORw0KGgo' }
27
34
 
28
- puts response.status
29
- puts response.body.to_h
30
- puts response.headers
35
+ response = unione.set_template(template: template)
31
36
 
32
- # get id of created template
37
+ # Get id of created template
33
38
  template_id = response.body.template.id
34
39
 
35
- # get template
36
- response = unione.get_template(template_id)
37
-
38
- # list all templates
39
- response = unione.list_templates(50, 0)
40
-
41
- # delete template
42
- response = unione.delete_template(template_id)
40
+ # Get template
41
+ response = unione.get_template(
42
+ id: template_id
43
+ )
44
+
45
+ # List templates
46
+ response = unione.list_templates(
47
+ limit: 50,
48
+ offset: 0
49
+ )
50
+
51
+ # Delete template
52
+ response = unione.delete_template(
53
+ id: template_id
54
+ )