unione-ruby 0.0.1 → 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 (58) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +99 -8
  3. data/Rakefile +52 -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 +35 -11
  24. data/examples/api/suppression.rb +34 -0
  25. data/examples/api/system.rb +10 -0
  26. data/examples/api/tag.rb +15 -0
  27. data/examples/api/template.rb +40 -22
  28. data/examples/api/unsubscribed.rb +20 -12
  29. data/examples/api/webhook.rb +34 -24
  30. data/examples/helpers.rb +29 -0
  31. data/examples/send_mail.rb +44 -0
  32. data/examples/setup.rb +34 -0
  33. data/lib/unione/client/domain.rb +19 -46
  34. data/lib/unione/client/email.rb +14 -21
  35. data/lib/unione/client/event_dump.rb +37 -0
  36. data/lib/unione/client/project.rb +19 -43
  37. data/lib/unione/client/suppression.rb +38 -0
  38. data/lib/unione/client/system.rb +19 -0
  39. data/lib/unione/client/tag.rb +24 -0
  40. data/lib/unione/client/template.rb +19 -65
  41. data/lib/unione/client/unsubscribed.rb +18 -31
  42. data/lib/unione/client/webhook.rb +19 -38
  43. data/lib/unione/client.rb +42 -17
  44. data/lib/unione/connection.rb +24 -16
  45. data/lib/unione/helpers.rb +22 -0
  46. data/lib/unione/response/raise_error.rb +4 -5
  47. data/lib/unione/validation.rb +32 -12
  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 +36 -11
  53. data/examples/1_setup.rb +0 -25
  54. data/examples/2_mail_sending.rb +0 -23
  55. data/examples/api/email.rb +0 -36
  56. data/lib/unione/helpers/mail/mail.rb +0 -37
  57. data/lib/unione/helpers/template/template.rb +0 -31
  58. data/lib/unione/helpers/webhook/webhook.rb +0 -17
@@ -1,53 +1,34 @@
1
1
  module UniOne
2
2
  class Client
3
-
4
3
  module Webhook
4
+ extend UniOne::Validation::ClassMethods
5
+ include UniOne::Validation::InstanceMethods
5
6
 
6
- def set_webhook(webhook)
7
- post 'webhook/set.json', webhook
8
- validate_response({'type' => 'object', 'required' => ['status', 'object'], 'properties' => {
9
- 'status' => {'type' => 'string'},
10
- 'object' => webhook_schema
11
- }})
7
+ def set_webhook(params = {})
8
+ post('webhook/set.json', params)
12
9
  end
13
10
 
14
- def get_webhook(url)
15
- params = { url: url }
16
- post 'webhook/get.json', params
17
- get_webhook_schema = remove_fields_from_schema(webhook_schema, ['delivery_info', 'single_event'])
18
- validate_response({'type' => 'object', 'required' => ['status', 'object'], 'properties' => {
19
- 'status' => {'type' => 'string'},
20
- 'object' => get_webhook_schema
21
- }})
11
+ def get_webhook(params = {})
12
+ post('webhook/get.json', params)
22
13
  end
23
14
 
24
- def delete_webhook(url)
25
- params = { url: url }
26
- post 'webhook/delete.json', params
27
- validate_response({'type' => 'object', 'required' => ['status'], 'properties' => {
28
- 'status' => {'type' => 'string'}
29
- }})
15
+ def list_webhooks(params = {})
16
+ post('webhook/list.json', params)
30
17
  end
31
18
 
32
- private
33
-
34
- def webhook_schema
35
- {'type' => 'object', 'required' => ['url', 'events', 'event_format', 'delivery_info', 'single_event', 'max_parallel'], 'properties' => {
36
- 'url' => {'type' => 'string'},
37
- 'events' => webhook_events_schema,
38
- 'event_format' => {'type' => 'string'},
39
- 'delivery_info' => {'type' => 'integer'},
40
- 'single_event' => {'type' => 'integer'},
41
- 'max_parallel' => {'type' => 'integer'}
42
- }}
19
+ def delete_webhook(params = {})
20
+ post('webhook/delete.json', params)
43
21
  end
44
22
 
45
- def webhook_events_schema
46
- {'type' => 'object', 'required' => ['email_status', 'spam_block'], 'properties' => {
47
- 'email_status' => {'items' => {'type' => 'string'}},
48
- 'spam_block' => {'items' => {'type' => 'string'}}
49
- }}
50
- end
23
+ add_response_validations(
24
+ :webhook,
25
+ %w(
26
+ set_webhook
27
+ get_webhook
28
+ list_webhooks
29
+ delete_webhook
30
+ )
31
+ )
51
32
  end
52
33
  end
53
34
  end
data/lib/unione/client.rb CHANGED
@@ -1,44 +1,69 @@
1
1
  require_relative 'connection'
2
2
  require_relative 'validation'
3
+ require_relative 'helpers'
3
4
  require_relative 'client/domain'
4
5
  require_relative 'client/email'
6
+ require_relative 'client/event_dump'
7
+ require_relative 'client/project'
8
+ require_relative 'client/suppression'
9
+ require_relative 'client/system'
10
+ require_relative 'client/tag'
5
11
  require_relative 'client/template'
6
- require_relative 'client/webhook'
7
12
  require_relative 'client/unsubscribed'
8
- require_relative 'client/project'
13
+ require_relative 'client/webhook'
9
14
 
10
15
  module UniOne
11
-
12
16
  class Client
13
-
14
17
  include UniOne::Connection
15
- include UniOne::Validation
18
+ extend UniOne::Validation::ClassMethods
19
+ include UniOne::Validation::InstanceMethods
20
+ include UniOne::Client::Helpers
16
21
  include UniOne::Client::Domain
17
22
  include UniOne::Client::Email
23
+ include UniOne::Client::EventDump
24
+ include UniOne::Client::Project
25
+ include UniOne::Client::Suppression
26
+ include UniOne::Client::System
27
+ include UniOne::Client::Tag
18
28
  include UniOne::Client::Template
19
- include UniOne::Client::Webhook
20
29
  include UniOne::Client::Unsubscribed
21
- include UniOne::Client::Project
30
+ include UniOne::Client::Webhook
31
+
32
+ class BaseException < StandardError; end
33
+ class InvalidCallbackAuth < BaseException; end
22
34
 
23
35
  API_ENDPOINT =
24
- 'https://%{data_center}.unione.io/%{lang}/transactional/api/v1/'
36
+ 'https://%{hostname}/%{lang}/transactional/api/v1/'
25
37
 
26
38
  # * *Args* :
27
- # - +data_center+ -> data center: ['eu1', 'us1']
28
- # - +lang+ -> Two-letter ISO 639-1 language abbreviation, e.g. 'en'
29
- # - +api_key+ -> your UniOne API key
30
- #
31
- def initialize(data_center:, lang:, api_key:)
32
- @data_center = data_center
33
- @lang = lang
34
- @api_key = api_key
39
+ # - +hostname+ -> string, API hostname, for example 'eu1.unione.io'
40
+ # - +lang+ -> string, two-letter ISO 639-1 language abbreviation, e.g. 'en'
41
+ # - +api_key+ -> string, your UniOne API key
42
+ # - +timeout+ -> integer, timeout in seconds, 5 by default
43
+ # - +api_key_in_params+ -> boolean, pass API key in parameters, otherwise pass in headers (default)
44
+ # - +enable_logging+ -> boolean, enable logging
45
+ def initialize(params = {})
46
+ @hostname = params[:hostname]
47
+ @lang = params[:lang]
48
+ @api_key = params[:api_key]
49
+ @timeout = params[:timeout] || 5
50
+ @api_key_in_params = params[:api_key_in_params]
51
+ @enable_logging = params[:enable_logging] || ENV['ENABLE_LOGGING']
35
52
  end
36
53
 
37
54
  private
38
55
 
39
56
  def api_endpoint
40
57
  @api_endpoint ||=
41
- API_ENDPOINT % { data_center: @data_center, lang: @lang }
58
+ API_ENDPOINT % { hostname: @hostname, lang: @lang }
59
+ end
60
+
61
+ def handle_time_param(param)
62
+ param.respond_to?(:strftime) ? param.strftime('%Y-%m-%d %H:%M:%S') : param
63
+ end
64
+
65
+ def handle_date_param(param)
66
+ param.respond_to?(:strftime) ? param.strftime('%Y-%m-%d') : param
42
67
  end
43
68
  end
44
69
  end
@@ -6,45 +6,53 @@ require 'hashie'
6
6
  module UniOne
7
7
  module Connection
8
8
 
9
- def get(url, params)
10
- params.merge!(default_params)
9
+ def get(url, params = {})
10
+ prepare_params!(params)
11
+
11
12
  # Assume HTTP library receives params as Hash
12
- request :get, url, params
13
+ request(:get, url, params)
13
14
  end
14
15
 
15
- def post(url, params)
16
- params.merge!(default_params)
16
+ def post(url, params = {})
17
+ prepare_params!(params)
18
+
17
19
  # Assume HTTP library receives payload body as String
18
- request :post, url, JSON.dump(params)
20
+ request(:post, url, JSON.dump(params))
19
21
  end
20
22
 
21
23
  private
22
24
 
23
25
  def request(method, path, data)
24
26
  path = add_version(path)
25
- begin
26
- @last_response = conn.send(method, path, data)
27
- rescue Faraday::Error => e
28
- puts e.response[:body]
29
- raise
30
- end
27
+ @last_response = conn.send(method, path, data)
31
28
  end
32
29
 
33
30
  def conn
31
+ headers = {'Content-Type' => 'application/json'}
32
+ prepare_headers!(headers)
33
+
34
34
  @conn ||= Faraday.new(
35
35
  url: api_endpoint,
36
- headers: {'Content-Type' => 'application/json'},
37
- request: { timeout: 30 }
36
+ headers: headers,
37
+ request: { timeout: @timeout }
38
38
  ) do |conn|
39
39
  conn.response :mashify, content_type: /\bjson$/
40
40
  conn.response :json, content_type: /\bjson$/
41
41
  conn.response :raise_error
42
42
  conn.adapter :net_http_persistent
43
+
44
+ if @enable_logging
45
+ conn.response(:logger, nil, { headers: true, bodies: true, errors: true })
46
+ end
43
47
  end
44
48
  end
45
49
 
46
- def default_params
47
- { api_key: @api_key }
50
+ def prepare_params!(params)
51
+ params.merge!({api_key: @api_key}) if @api_key_in_params
52
+ end
53
+
54
+ def prepare_headers!(headers)
55
+ headers.merge!('X-API-KEY' => @api_key) unless @api_key_in_params
48
56
  end
49
57
 
50
58
  def add_version(path)
@@ -0,0 +1,22 @@
1
+ require 'digest'
2
+
3
+ module UniOne
4
+ class Client
5
+ module Helpers
6
+ # Helper function for webhooks callback. It is checking auth field
7
+ # and if it is invalid, raises Unione::Client::InvalidCallbackAuth exception
8
+ def verify_callback_auth!(params)
9
+ params = params.transform_keys(&:to_sym)
10
+ auth = params[:auth]
11
+ unless auth == Digest::MD5.hexdigest(params.merge(auth: @api_key).to_json)
12
+ raise InvalidCallbackAuth
13
+ end
14
+ end
15
+
16
+ def callback_helper(params)
17
+ verify_callback_auth!(params)
18
+ yield params.dig('events_by_user', 0, 'events')
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,14 +1,13 @@
1
+ # UniOne response middleware
2
+
1
3
  require 'faraday'
2
4
  require 'unione/error'
3
5
 
4
6
  module UniOne
5
- # UniOne response middleware
6
7
  module Response
7
-
8
- # This class raises an UniOne-flavored exception based
9
- # HTTP status codes returned by the API
8
+ # This class raises an UniOne-flavored exception based on HTTP
9
+ # status codes returned by the API
10
10
  class RaiseError < Faraday::Response::Middleware
11
-
12
11
  private
13
12
 
14
13
  def on_complete(response)
@@ -1,24 +1,44 @@
1
1
  require 'json-schema'
2
+ require 'yaml'
2
3
 
3
4
  module UniOne
4
5
  module Validation
6
+ module ClassMethods
7
+ def add_response_validations(klass, methods)
8
+ methods.each do |method|
9
+ orig = "#{method}_without_hook"
10
+ alias_method orig, method
5
11
 
6
- private
12
+ define_method method do |*args|
13
+ send(orig, *args)
14
+ schema = get_response_schema(klass, method)
15
+ validate_response(schema)
16
+ end
17
+ end
18
+ end
19
+ end
7
20
 
8
- def validate_response(schema)
9
- begin
21
+ module InstanceMethods
22
+ private
23
+
24
+ def validate_response(schema)
10
25
  JSON::Validator.validate!(schema, @last_response.body)
11
- rescue JSON::Schema::ValidationError => e
12
- puts @last_response.body
13
- raise
26
+ @last_response
27
+ end
28
+
29
+ def get_response_schema(klass, method)
30
+ @response_schemas ||= {}
31
+ @response_schemas[klass] ||= begin
32
+ directory = File.join(File.dirname(__FILE__), '..', '..', 'config', 'response_schema')
33
+ filename = "#{klass}.yml"
34
+ YAML.load_file(File.join(directory, filename))
35
+ end
36
+
37
+ @response_schemas[klass][method]
14
38
  end
15
- @last_response
16
- end
17
39
 
18
- def remove_fields_from_schema(schema, fields)
19
- schema.dup.tap do |s|
20
- s['required'] = s['required'].reject { |f| fields.include?(f) }
21
- s['properties'] = s['properties'].reject { |f| fields.include?(f) }
40
+ def undescore_class_name(class_name)
41
+ class_name.gsub(/([^\^])([A-Z])/,'\1_\2').downcase
22
42
  end
23
43
  end
24
44
  end
@@ -1,3 +1,3 @@
1
1
  module UniOne
2
- VERSION = '0.0.1'
2
+ VERSION = '1.0.0'
3
3
  end
data/lib/unione-ruby.rb CHANGED
@@ -1,5 +1,2 @@
1
1
  require_relative 'unione/client'
2
2
  require_relative 'unione/version'
3
- require_relative 'unione/helpers/mail/mail'
4
- require_relative 'unione/helpers/template/template'
5
- require_relative 'unione/helpers/webhook/webhook'
@@ -0,0 +1,71 @@
1
+ - method: send_email
2
+ params:
3
+ message:
4
+ recipients:
5
+ - email: test@qadns.net
6
+ substitutions:
7
+ CustomerId: 12452
8
+ to_name: John Smith
9
+ metadata:
10
+ campaign_id: c77f4f4e-3561-49f7-9f07-c35be01b4f43
11
+ customer_hash: b253ac7
12
+ tags:
13
+ - string1
14
+ skip_unsubscribe: 0
15
+ global_language: en
16
+ template_engine: simple
17
+ global_substitutions:
18
+ property1: string
19
+ property2: string
20
+ global_metadata:
21
+ property1: string
22
+ property2: string
23
+ body:
24
+ html: "<b>Hello, {{to_name}}</b>"
25
+ plaintext: Hello, {{to_name}}
26
+ amp: <!doctype html><html amp4email><head> <meta charset="utf-8"><script async
27
+ src="https://cdn.ampproject.org/v0.js"></script> <style amp4email-boilerplate>body{visibility:hidden}</style></head><body>
28
+ Hello, AMP4EMAIL world.</body></html>
29
+ subject: string
30
+ from_email: test@qadns.net
31
+ from_name: John Smith
32
+ reply_to: test@qadns.net
33
+ track_links: 0
34
+ track_read: 0
35
+ bypass_global: 0
36
+ bypass_unavailable: 0
37
+ bypass_unsubscribed: 0
38
+ bypass_complained: 0
39
+ headers:
40
+ X-MyHeader: some data
41
+ List-Unsubscribe: "<mailto: unsubscribe@example.com?subject=unsubscribe>, <http://www.example.com/unsubscribe/{{CustomerId}}>"
42
+ attachments:
43
+ - type: text/plain
44
+ name: readme.txt
45
+ content: SGVsbG8sIHdvcmxkIQ==
46
+ inline_attachments:
47
+ - type: image/gif
48
+ name: IMAGECID1
49
+ content: R0lGODdhAwADAIABAP+rAP///ywAAAAAAwADAAACBIQRBwUAOw==
50
+ options:
51
+ unsubscribe_url: https://example.org/unsubscribe/{{CustomerId}}
52
+ - method: set_webhook
53
+ params:
54
+ url: http://example.com
55
+ status: active
56
+ event_format: json_post
57
+ delivery_info: 1
58
+ single_event: 0
59
+ max_parallel: 10
60
+ events:
61
+ email_status:
62
+ - sent
63
+ - delivered
64
+ - opened
65
+ - hard_bounced
66
+ - soft_bounced
67
+ - spam
68
+ - clicked
69
+ - unsubscribed
70
+ spam_block:
71
+ - '*'
data/unione-ruby.gemspec CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |spec|
7
7
  spec.add_dependency 'json', '~> 2.0'
8
8
  spec.add_dependency 'faraday', '~> 1.0'
9
9
  spec.add_dependency 'faraday_middleware', '~> 1.0'
10
- spec.add_dependency 'net-http-persistent', '~> 3.0'
10
+ spec.add_dependency 'net-http-persistent', '~> 4.0'
11
11
  spec.add_dependency 'hashie', '~> 4.0'
12
12
  spec.add_dependency 'json-schema', '~> 2.0'
13
13
  spec.authors = ['UniOne developer']
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.licenses = ['MIT']
19
19
  spec.name = 'unione-ruby'
20
20
  spec.require_paths = ['lib']
21
- spec.required_ruby_version = '>= 2.4'
21
+ spec.required_ruby_version = '>= 2.5'
22
22
  spec.summary = 'Official UniOne Gem'
23
23
  spec.version = UniOne::VERSION
24
24
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unione-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - UniOne developer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-22 00:00:00.000000000 Z
11
+ date: 2023-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '3.0'
61
+ version: '4.0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '3.0'
68
+ version: '4.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: hashie
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -102,29 +102,54 @@ extra_rdoc_files: []
102
102
  files:
103
103
  - LICENSE
104
104
  - README.md
105
- - examples/1_setup.rb
106
- - examples/2_mail_sending.rb
105
+ - Rakefile
106
+ - config/response_schema/domain.yml
107
+ - config/response_schema/email.yml
108
+ - config/response_schema/event_dump.yml
109
+ - config/response_schema/project.yml
110
+ - config/response_schema/suppression.yml
111
+ - config/response_schema/system.yml
112
+ - config/response_schema/tag.yml
113
+ - config/response_schema/template.yml
114
+ - config/response_schema/unsubscribed.yml
115
+ - config/response_schema/webhook.yml
116
+ - examples/api/custom_api.rb
107
117
  - examples/api/domain.rb
108
- - examples/api/email.rb
118
+ - examples/api/email/attachments.rb
119
+ - examples/api/email/multiple_recipients.rb
120
+ - examples/api/email/send.rb
121
+ - examples/api/email/settings.rb
122
+ - examples/api/email/subscribe.rb
123
+ - examples/api/email/template.rb
124
+ - examples/api/event_dump.rb
109
125
  - examples/api/project.rb
126
+ - examples/api/suppression.rb
127
+ - examples/api/system.rb
128
+ - examples/api/tag.rb
110
129
  - examples/api/template.rb
111
130
  - examples/api/unsubscribed.rb
112
131
  - examples/api/webhook.rb
132
+ - examples/helpers.rb
133
+ - examples/send_mail.rb
134
+ - examples/setup.rb
113
135
  - lib/unione-ruby.rb
114
136
  - lib/unione/client.rb
115
137
  - lib/unione/client/domain.rb
116
138
  - lib/unione/client/email.rb
139
+ - lib/unione/client/event_dump.rb
117
140
  - lib/unione/client/project.rb
141
+ - lib/unione/client/suppression.rb
142
+ - lib/unione/client/system.rb
143
+ - lib/unione/client/tag.rb
118
144
  - lib/unione/client/template.rb
119
145
  - lib/unione/client/unsubscribed.rb
120
146
  - lib/unione/client/webhook.rb
121
147
  - lib/unione/connection.rb
122
- - lib/unione/helpers/mail/mail.rb
123
- - lib/unione/helpers/template/template.rb
124
- - lib/unione/helpers/webhook/webhook.rb
148
+ - lib/unione/helpers.rb
125
149
  - lib/unione/response/raise_error.rb
126
150
  - lib/unione/validation.rb
127
151
  - lib/unione/version.rb
152
+ - test/CONFIGFILE.yml
128
153
  - unione-ruby.gemspec
129
154
  homepage: https://github.com/unione-repo/unione-ruby
130
155
  licenses:
@@ -138,7 +163,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
138
163
  requirements:
139
164
  - - ">="
140
165
  - !ruby/object:Gem::Version
141
- version: '2.4'
166
+ version: '2.5'
142
167
  required_rubygems_version: !ruby/object:Gem::Requirement
143
168
  requirements:
144
169
  - - ">="
data/examples/1_setup.rb DELETED
@@ -1,25 +0,0 @@
1
- require 'unione-ruby'
2
- require 'json'
3
-
4
- unione = UniOne::Client.new(data_center: 'eu1', lang: 'en', api_key: ENV['UNIONE_API_KEY'])
5
-
6
- # Validate domain verification record
7
- unione.validate_verification_record("example.com")
8
-
9
- # Create template
10
- template = UniOne::Template.new
11
- template.name = 'Template Name'
12
- template.subject = 'Email Subject'
13
- template.template_engine = 'simple'
14
- template.global_substitutions = {"someVar" => "someVal"}
15
-
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
-
20
- template.attachments << {"type" => "text/plain", "name" => "myfile.txt", "content" => "ZXhhbXBsZSBmaWxl"}
21
- template.inline_attachments << {"type" => "image/png", "name" => "IMAGECID", "content" => "iVBORw0KGgo"}
22
- template.options = {"unsubscribe_url" => "someurl"}
23
-
24
- response = unione.set_template(template.to_json)
25
- template_id = response.body.template.id
@@ -1,23 +0,0 @@
1
- require 'unione-ruby'
2
- require 'json'
3
-
4
- unione = UniOne::Client.new(data_center: 'eu1', lang: 'en', api_key: ENV['UNIONE_API_KEY'])
5
-
6
- mail = UniOne::Mail.new
7
- mail.template = {"template_engine" => "simple", "template_id" => template_id}
8
-
9
- substitutions = {"substitutionName" => "substitutionVal", "to_name" => "Name Surname 1"}
10
- recipient = {email: 'test1@example.com', substitutions: substitutions, metadata: {"key1" => "val1"}}
11
- mail.recipients << recipient
12
-
13
- substitutions = {"substitutionName" => "substitutionVal", "to_name" => "Name Surname 2"}
14
- recipient = {email: 'test2@example.com', substitutions: substitutions, metadata: {"key1" => "val1"}}
15
- mail.recipients << recipient
16
-
17
- mail.metadata = {"key1" => "val1"}
18
- mail.headers = {"X-ReplyTo" => "reply@example.com"}
19
- mail.attachments << {"type" => "text/plain", "name" => "myfile.txt", "content" => "ZXhhbXBsZSBmaWxl"}
20
- mail.inline_attachments << {"type" => "image/png", "name" => "IMAGECID", "content" => "iVBORw0KGgo"}
21
- mail.options = {"unsubscribe_url" => "someurl"}
22
-
23
- unione.send_email(mail.to_json)
@@ -1,36 +0,0 @@
1
- require 'unione-ruby'
2
- require 'json'
3
-
4
- # Send email
5
- mail = UniOne::Mail.new
6
- mail.body = {html: "<b>Hello {{substitutionName}}</b>"}
7
- mail.from = {from_email: 'test@example.com', from_name: 'userName'}
8
- mail.subject = 'Email Subject'
9
- mail.template = {"template_engine" => "simple", "template_id" => "template_id"}
10
-
11
- substitutions = {"substitutionName" => "substitutionVal", "to_name" => "Name Surname 1"}
12
- recipient1 = {email: 'test1@example.com', substitutions: substitutions, metadata: {"key1" => "val1"}}
13
- mail.recipients << recipient1
14
-
15
- substitutions = {"substitutionName" => "substitutionVal", "to_name" => "Name Surname 2"}
16
- recipient2 = {email: 'test2@example.com', substitutions: substitutions, metadata: {"key1" => "val1"}}
17
- mail.recipients << recipient2
18
-
19
- mail.metadata = {"key1" => "val1"}
20
- mail.headers = {"X-ReplyTo" => "reply@example.com"}
21
- mail.attachments << {"type" => "text/plain", "name" => "myfile.txt", "content" => "ZXhhbXBsZSBmaWxl"}
22
- mail.inline_attachments << {"type" => "image/png", "name" => "IMAGECID", "content" => "iVBORw0KGgo"}
23
- mail.options = {"unsubscribe_url" => "someurl"}
24
-
25
- puts mail.to_json
26
-
27
- unione = UniOne::Client.new(data_center: 'eu1', lang: 'en', api_key: ENV['UNIONE_API_KEY'])
28
- response = unione.send_email(mail.to_json)
29
- puts response.status
30
- puts response.body
31
- puts response.headers
32
-
33
- # Subscribe email
34
- unione = UniOne::Client.new(data_center: 'eu1', lang: 'en', api_key: ENV['UNIONE_API_KEY'])
35
- response = unione.subscribe_email(email_address_from: "emailFrom",
36
- email_address_to: "blackhole@example.com", name_from: "Example Sender")
@@ -1,37 +0,0 @@
1
- module UniOne
2
- class Mail
3
- attr_accessor :template, :body, :track, :from, :subject, :metadata, :headers, :options,
4
- :global_substitutions, :recipients, :attachments, :inline_attachments,
5
- :reply_to
6
-
7
- def initialize
8
- @template = {}
9
- @from = {}
10
- @track = {}
11
- @global_substitutions = {}
12
- @recipients = []
13
- @attachments = []
14
- @inline_attachments = []
15
- end
16
-
17
- def to_json(*)
18
- {
19
- message: {
20
- global_substitutions: self.global_substitutions,
21
- body: self.body,
22
- subject: self.subject,
23
- reply_to: self.reply_to,
24
- recipients: self.recipients,
25
- metadata: self.metadata,
26
- headers: self.headers,
27
- attachments: self.attachments,
28
- inline_attachments: self.inline_attachments,
29
- options: self.options
30
- }.merge(self.template)
31
- .merge(self.from)
32
- .merge(self.track)
33
- .delete_if { |_, value| value.to_s.strip == '' || value == [] || value == {}}
34
- }
35
- end
36
- end
37
- end