unigo-ruby 1.0.1

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 +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: []