unigo-ruby 1.0.1

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 +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +133 -0
  4. data/Rakefile +52 -0
  5. data/config/response_schema/domain.yml +74 -0
  6. data/config/response_schema/email.yml +23 -0
  7. data/config/response_schema/event_dump.yml +75 -0
  8. data/config/response_schema/project.yml +59 -0
  9. data/config/response_schema/suppression.yml +71 -0
  10. data/config/response_schema/system.yml +33 -0
  11. data/config/response_schema/tag.yml +26 -0
  12. data/config/response_schema/template.yml +134 -0
  13. data/config/response_schema/unsubscribed.yml +45 -0
  14. data/config/response_schema/webhook.yml +141 -0
  15. data/examples/api/custom_api.rb +14 -0
  16. data/examples/api/domain.rb +25 -0
  17. data/examples/api/email/attachments.rb +28 -0
  18. data/examples/api/email/multiple_recipients.rb +24 -0
  19. data/examples/api/email/send.rb +25 -0
  20. data/examples/api/email/settings.rb +41 -0
  21. data/examples/api/email/subscribe.rb +14 -0
  22. data/examples/api/email/template.rb +26 -0
  23. data/examples/api/email.rb +51 -0
  24. data/examples/api/event_dump.rb +44 -0
  25. data/examples/api/project.rb +44 -0
  26. data/examples/api/suppression.rb +34 -0
  27. data/examples/api/system.rb +10 -0
  28. data/examples/api/tag.rb +15 -0
  29. data/examples/api/template.rb +54 -0
  30. data/examples/api/unsubscribed.rb +22 -0
  31. data/examples/api/webhook.rb +42 -0
  32. data/examples/helpers.rb +29 -0
  33. data/examples/send_mail.rb +44 -0
  34. data/examples/sending_mail.rb +32 -0
  35. data/examples/setup.rb +34 -0
  36. data/lib/unigo/client/domain.rb +34 -0
  37. data/lib/unigo/client/email.rb +25 -0
  38. data/lib/unigo/client/event_dump.rb +37 -0
  39. data/lib/unigo/client/project.rb +34 -0
  40. data/lib/unigo/client/suppression.rb +38 -0
  41. data/lib/unigo/client/system.rb +19 -0
  42. data/lib/unigo/client/tag.rb +24 -0
  43. data/lib/unigo/client/template.rb +34 -0
  44. data/lib/unigo/client/unsubscribed.rb +31 -0
  45. data/lib/unigo/client/webhook.rb +34 -0
  46. data/lib/unigo/client.rb +69 -0
  47. data/lib/unigo/connection.rb +62 -0
  48. data/lib/unigo/helpers/mail/mail.rb +42 -0
  49. data/lib/unigo/helpers/template/template.rb +32 -0
  50. data/lib/unigo/helpers/webhook/webhook.rb +18 -0
  51. data/lib/unigo/helpers.rb +22 -0
  52. data/lib/unigo/response/raise_error.rb +20 -0
  53. data/lib/unigo/validation.rb +45 -0
  54. data/lib/unigo/version.rb +3 -0
  55. data/lib/unigo-ruby.rb +2 -0
  56. data/test/CONFIGFILE.yml +71 -0
  57. data/unigo-ruby.gemspec +24 -0
  58. metadata +182 -0
@@ -0,0 +1,32 @@
1
+ module UniGo
2
+ class Template
3
+ attr_accessor :name, :editor_type, :subject, :template_engine, :global_substitutions, :from,
4
+ :headers, :body, :attachments, :inline_attachments, :options
5
+
6
+ def initialize
7
+ @global_substitutions = {}
8
+ @from = {}
9
+ @attachments = []
10
+ @inline_attachments = []
11
+ end
12
+
13
+ def to_json(*)
14
+ {
15
+ template: {
16
+ id: '',
17
+ name: self.name,
18
+ editor_type: self.editor_type,
19
+ subject: self.subject,
20
+ template_engine: self.template_engine,
21
+ global_substitutions: self.global_substitutions,
22
+ headers: self.headers,
23
+ body: self.body,
24
+ attachments: self.attachments,
25
+ inline_attachments: self.inline_attachments,
26
+ options: self.options
27
+ }.merge(self.from)
28
+ .delete_if { |_, value| value.to_s.strip == '' || value == [] || value == {}}
29
+ }
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,18 @@
1
+ module UniGo
2
+ class Webhook
3
+ attr_accessor :url, :status, :settings, :events
4
+
5
+ def initialize
6
+ @settings = {}
7
+ end
8
+
9
+ def to_json(*)
10
+ {
11
+ url: self.url,
12
+ status: self.status,
13
+ events: self.events
14
+ }.merge(self.settings)
15
+ .delete_if { |_, value| value.to_s.strip == '' || value == [] || value == {}}
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,22 @@
1
+ require 'digest'
2
+
3
+ module UniGo
4
+ class Client
5
+ module Helpers
6
+ # Helper function for webhooks callback. It is checking auth field
7
+ # and if it is invalid, raises UniGo::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
@@ -0,0 +1,20 @@
1
+ # UniGo response middleware
2
+
3
+ require 'faraday'
4
+ require 'unigo/error'
5
+
6
+ module UniGo
7
+ module Response
8
+ # This class raises an UniGo-flavored exception based on HTTP
9
+ # status codes returned by the API
10
+ class RaiseError < Faraday::Response::Middleware
11
+ private
12
+
13
+ def on_complete(response)
14
+ if error = UniGo::Error.from_response(response)
15
+ raise error
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,45 @@
1
+ require 'json-schema'
2
+ require 'yaml'
3
+
4
+ module UniGo
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
11
+
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
20
+
21
+ module InstanceMethods
22
+ private
23
+
24
+ def validate_response(schema)
25
+ JSON::Validator.validate!(schema, @last_response.body)
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]
38
+ end
39
+
40
+ def undescore_class_name(class_name)
41
+ class_name.gsub(/([^\^])([A-Z])/,'\1_\2').downcase
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,3 @@
1
+ module UniGo
2
+ VERSION = '1.0.1'
3
+ end
data/lib/unigo-ruby.rb ADDED
@@ -0,0 +1,2 @@
1
+ require_relative 'unigo/client'
2
+ require_relative 'unigo/version'
@@ -0,0 +1,71 @@
1
+ - method: send_email
2
+ params:
3
+ message:
4
+ recipients:
5
+ - email: test@example.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@example.net
31
+ from_name: John Smith
32
+ reply_to: test@example.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
+ - '*'
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'unigo/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.add_dependency 'json', '~> 2.0'
8
+ spec.add_dependency 'faraday', '~> 1.0'
9
+ spec.add_dependency 'faraday_middleware', '~> 1.0'
10
+ spec.add_dependency 'net-http-persistent', '~> 4.0'
11
+ spec.add_dependency 'hashie', '~> 4.0'
12
+ spec.add_dependency 'json-schema', '~> 2.0'
13
+ spec.authors = ['UniGo developer']
14
+ spec.description = 'Official UniGo Gem to Interact with UniGo Api in native Ruby'
15
+ spec.email = 'devs@unisender.ru'
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.homepage = 'https://gitflic.ru/project/unisender/unigo-ruby'
18
+ spec.licenses = ['MIT']
19
+ spec.name = 'unigo-ruby'
20
+ spec.require_paths = ['lib']
21
+ spec.required_ruby_version = '>= 2.5'
22
+ spec.summary = 'Official UniGo Gem'
23
+ spec.version = UniGo::VERSION
24
+ end
metadata ADDED
@@ -0,0 +1,182 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: unigo-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - UniGo developer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-11-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: json
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: faraday_middleware
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: net-http-persistent
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '4.0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '4.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: hashie
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '4.0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '4.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: json-schema
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.0'
97
+ description: Official UniGo Gem to Interact with UniGo Api in native Ruby
98
+ email: devs@unisender.ru
99
+ executables: []
100
+ extensions: []
101
+ extra_rdoc_files: []
102
+ files:
103
+ - LICENSE
104
+ - README.md
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
117
+ - examples/api/domain.rb
118
+ - examples/api/email.rb
119
+ - examples/api/email/attachments.rb
120
+ - examples/api/email/multiple_recipients.rb
121
+ - examples/api/email/send.rb
122
+ - examples/api/email/settings.rb
123
+ - examples/api/email/subscribe.rb
124
+ - examples/api/email/template.rb
125
+ - examples/api/event_dump.rb
126
+ - examples/api/project.rb
127
+ - examples/api/suppression.rb
128
+ - examples/api/system.rb
129
+ - examples/api/tag.rb
130
+ - examples/api/template.rb
131
+ - examples/api/unsubscribed.rb
132
+ - examples/api/webhook.rb
133
+ - examples/helpers.rb
134
+ - examples/send_mail.rb
135
+ - examples/sending_mail.rb
136
+ - examples/setup.rb
137
+ - lib/unigo-ruby.rb
138
+ - lib/unigo/client.rb
139
+ - lib/unigo/client/domain.rb
140
+ - lib/unigo/client/email.rb
141
+ - lib/unigo/client/event_dump.rb
142
+ - lib/unigo/client/project.rb
143
+ - lib/unigo/client/suppression.rb
144
+ - lib/unigo/client/system.rb
145
+ - lib/unigo/client/tag.rb
146
+ - lib/unigo/client/template.rb
147
+ - lib/unigo/client/unsubscribed.rb
148
+ - lib/unigo/client/webhook.rb
149
+ - lib/unigo/connection.rb
150
+ - lib/unigo/helpers.rb
151
+ - lib/unigo/helpers/mail/mail.rb
152
+ - lib/unigo/helpers/template/template.rb
153
+ - lib/unigo/helpers/webhook/webhook.rb
154
+ - lib/unigo/response/raise_error.rb
155
+ - lib/unigo/validation.rb
156
+ - lib/unigo/version.rb
157
+ - test/CONFIGFILE.yml
158
+ - unigo-ruby.gemspec
159
+ homepage: https://gitflic.ru/project/unisender/unigo-ruby
160
+ licenses:
161
+ - MIT
162
+ metadata: {}
163
+ post_install_message:
164
+ rdoc_options: []
165
+ require_paths:
166
+ - lib
167
+ required_ruby_version: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: '2.5'
172
+ required_rubygems_version: !ruby/object:Gem::Requirement
173
+ requirements:
174
+ - - ">="
175
+ - !ruby/object:Gem::Version
176
+ version: '0'
177
+ requirements: []
178
+ rubygems_version: 3.0.3.1
179
+ signing_key:
180
+ specification_version: 4
181
+ summary: Official UniGo Gem
182
+ test_files: []