unione-ruby 0.0.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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