mailcore 0.1.0.alpha.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 (47) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +15 -0
  3. data/CONTRIBUTING.md +22 -0
  4. data/LICENSE +21 -0
  5. data/README.md +185 -0
  6. data/SECURITY.md +28 -0
  7. data/app/controllers/action_mailbox/ingresses/mailcore/inbound_emails_controller.rb +59 -0
  8. data/docs/cobertura.md +140 -0
  9. data/docs/integracao-api-interrupcao.json +27 -0
  10. data/docs/integracao-api.json +48 -0
  11. data/docs/rails.md +185 -0
  12. data/docs/ruby-3.3.13-http-padrao.json +22 -0
  13. data/docs/ruby-3.3.13.json +66 -0
  14. data/docs/ruby-3.4.12-http-padrao.json +22 -0
  15. data/docs/ruby-3.4.12.json +66 -0
  16. data/docs/ruby-4.0.9-http-padrao.json +22 -0
  17. data/docs/ruby-4.0.9.json +66 -0
  18. data/docs/sinatra.md +94 -0
  19. data/docs/verificacao.md +100 -0
  20. data/exemplos/enviar.rb +14 -0
  21. data/exemplos/sinatra.rb +65 -0
  22. data/lib/mailcore/action_mailer.rb +124 -0
  23. data/lib/mailcore/assinatura.rb +64 -0
  24. data/lib/mailcore/cliente.rb +27 -0
  25. data/lib/mailcore/configuracao.rb +30 -0
  26. data/lib/mailcore/engine.rb +71 -0
  27. data/lib/mailcore/erros.rb +25 -0
  28. data/lib/mailcore/limite_ingress.rb +51 -0
  29. data/lib/mailcore/railtie.rb +16 -0
  30. data/lib/mailcore/recursos/automacoes.rb +52 -0
  31. data/lib/mailcore/recursos/base.rb +29 -0
  32. data/lib/mailcore/recursos/caixas.rb +199 -0
  33. data/lib/mailcore/recursos/campanhas.rb +72 -0
  34. data/lib/mailcore/recursos/chaves_api.rb +23 -0
  35. data/lib/mailcore/recursos/cli.rb +24 -0
  36. data/lib/mailcore/recursos/contatos.rb +179 -0
  37. data/lib/mailcore/recursos/dominios.rb +35 -0
  38. data/lib/mailcore/recursos/emails.rb +54 -0
  39. data/lib/mailcore/recursos/eventos.rb +31 -0
  40. data/lib/mailcore/recursos/modelos.rb +106 -0
  41. data/lib/mailcore/recursos/recebimento.rb +54 -0
  42. data/lib/mailcore/recursos/webhooks.rb +57 -0
  43. data/lib/mailcore/resposta.rb +22 -0
  44. data/lib/mailcore/transporte.rb +284 -0
  45. data/lib/mailcore/versao.rb +5 -0
  46. data/lib/mailcore.rb +36 -0
  47. metadata +189 -0
@@ -0,0 +1,199 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mailcore
4
+ module Recursos
5
+ class EmailsCaixa < Base
6
+ def listar(caixa_id, conversa_id, filtros = {}, **opcoes)
7
+ executar(
8
+ 'GET',
9
+ "/inboxes/#{segmento(caixa_id)}/threads/#{segmento(conversa_id)}/emails",
10
+ consulta: filtros,
11
+ **opcoes,
12
+ )
13
+ end
14
+
15
+ def obter(caixa_id, conversa_id, email_id, **opcoes)
16
+ executar(
17
+ 'GET',
18
+ "/inboxes/#{segmento(caixa_id)}/threads/#{segmento(conversa_id)}/emails/#{segmento(email_id)}",
19
+ **opcoes,
20
+ )
21
+ end
22
+
23
+ def responder(caixa_id, conversa_id, email_id, pedido, **opcoes)
24
+ executar(
25
+ 'POST',
26
+ "/inboxes/#{segmento(caixa_id)}/threads/#{segmento(conversa_id)}/emails/#{segmento(email_id)}/reply",
27
+ corpo: pedido,
28
+ **opcoes,
29
+ )
30
+ end
31
+
32
+ def encaminhar(caixa_id, conversa_id, email_id, pedido, **opcoes)
33
+ executar(
34
+ 'POST',
35
+ "/inboxes/#{segmento(caixa_id)}/threads/#{segmento(conversa_id)}/emails/#{segmento(email_id)}/forward",
36
+ corpo: pedido,
37
+ **opcoes,
38
+ )
39
+ end
40
+ end
41
+
42
+ class EtiquetasConversaCaixa < Base
43
+ def adicionar(caixa_id, conversa_id, ids, **opcoes)
44
+ executar(
45
+ 'POST',
46
+ "/inboxes/#{segmento(caixa_id)}/threads/#{segmento(conversa_id)}/labels",
47
+ corpo: { ids: ids },
48
+ **opcoes,
49
+ )
50
+ end
51
+
52
+ def substituir(caixa_id, conversa_id, ids, **opcoes)
53
+ executar(
54
+ 'PUT',
55
+ "/inboxes/#{segmento(caixa_id)}/threads/#{segmento(conversa_id)}/labels",
56
+ corpo: { ids: ids },
57
+ **opcoes,
58
+ )
59
+ end
60
+
61
+ def remover(caixa_id, conversa_id, etiqueta_id, **opcoes)
62
+ executar(
63
+ 'DELETE',
64
+ "/inboxes/#{segmento(caixa_id)}/threads/#{segmento(conversa_id)}/labels/#{segmento(etiqueta_id)}",
65
+ **opcoes,
66
+ )
67
+ end
68
+ end
69
+
70
+ class ConversasCaixa < Base
71
+ attr_reader :emails, :etiquetas
72
+
73
+ def initialize(transporte)
74
+ super(transporte)
75
+ @emails = EmailsCaixa.new(transporte)
76
+ @etiquetas = EtiquetasConversaCaixa.new(transporte)
77
+ end
78
+
79
+ def listar(caixa_id, filtros = {}, **opcoes)
80
+ executar('GET', "/inboxes/#{segmento(caixa_id)}/threads", consulta: filtros, **opcoes)
81
+ end
82
+
83
+ def buscar(caixa_id, filtros = {}, **opcoes)
84
+ executar('GET', "/inboxes/#{segmento(caixa_id)}/threads/search", consulta: filtros, **opcoes)
85
+ end
86
+
87
+ def obter(caixa_id, conversa_id, **opcoes)
88
+ executar('GET', "/inboxes/#{segmento(caixa_id)}/threads/#{segmento(conversa_id)}", **opcoes)
89
+ end
90
+
91
+ def atualizar(caixa_id, conversa_id, pedido, **opcoes)
92
+ executar(
93
+ 'PATCH',
94
+ "/inboxes/#{segmento(caixa_id)}/threads/#{segmento(conversa_id)}",
95
+ corpo: pedido,
96
+ **opcoes,
97
+ )
98
+ end
99
+
100
+ def remover(caixa_id, conversa_id, **opcoes)
101
+ executar('DELETE', "/inboxes/#{segmento(caixa_id)}/threads/#{segmento(conversa_id)}", **opcoes)
102
+ end
103
+ end
104
+
105
+ class EtiquetasCaixa < Base
106
+ def listar(caixa_id, **opcoes)
107
+ executar('GET', "/inboxes/#{segmento(caixa_id)}/labels", **opcoes)
108
+ end
109
+
110
+ def obter(caixa_id, etiqueta_id, **opcoes)
111
+ executar('GET', "/inboxes/#{segmento(caixa_id)}/labels/#{segmento(etiqueta_id)}", **opcoes)
112
+ end
113
+
114
+ def criar(caixa_id, pedido, **opcoes)
115
+ executar('POST', "/inboxes/#{segmento(caixa_id)}/labels", corpo: pedido, **opcoes)
116
+ end
117
+
118
+ def atualizar(caixa_id, etiqueta_id, pedido, **opcoes)
119
+ executar(
120
+ 'PATCH',
121
+ "/inboxes/#{segmento(caixa_id)}/labels/#{segmento(etiqueta_id)}",
122
+ corpo: pedido,
123
+ **opcoes,
124
+ )
125
+ end
126
+
127
+ def remover(caixa_id, etiqueta_id, **opcoes)
128
+ executar('DELETE', "/inboxes/#{segmento(caixa_id)}/labels/#{segmento(etiqueta_id)}", **opcoes)
129
+ end
130
+ end
131
+
132
+ class RascunhosCaixa < Base
133
+ def listar(caixa_id, filtros = {}, **opcoes)
134
+ executar('GET', "/inboxes/#{segmento(caixa_id)}/drafts", consulta: filtros, **opcoes)
135
+ end
136
+
137
+ def obter(caixa_id, rascunho_id, **opcoes)
138
+ executar('GET', "/inboxes/#{segmento(caixa_id)}/drafts/#{segmento(rascunho_id)}", **opcoes)
139
+ end
140
+
141
+ def criar(caixa_id, pedido = {}, **opcoes)
142
+ executar('POST', "/inboxes/#{segmento(caixa_id)}/drafts", corpo: pedido, **opcoes)
143
+ end
144
+
145
+ def atualizar(caixa_id, rascunho_id, pedido, **opcoes)
146
+ executar(
147
+ 'PATCH',
148
+ "/inboxes/#{segmento(caixa_id)}/drafts/#{segmento(rascunho_id)}",
149
+ corpo: pedido,
150
+ **opcoes,
151
+ )
152
+ end
153
+
154
+ def remover(caixa_id, rascunho_id, **opcoes)
155
+ executar('DELETE', "/inboxes/#{segmento(caixa_id)}/drafts/#{segmento(rascunho_id)}", **opcoes)
156
+ end
157
+
158
+ def enviar(caixa_id, rascunho_id, pedido, **opcoes)
159
+ executar(
160
+ 'POST',
161
+ "/inboxes/#{segmento(caixa_id)}/drafts/#{segmento(rascunho_id)}/send",
162
+ corpo: pedido,
163
+ **opcoes,
164
+ )
165
+ end
166
+ end
167
+
168
+ class Caixas < Base
169
+ attr_reader :conversas, :etiquetas, :rascunhos
170
+
171
+ def initialize(transporte)
172
+ super(transporte)
173
+ @conversas = ConversasCaixa.new(transporte)
174
+ @etiquetas = EtiquetasCaixa.new(transporte)
175
+ @rascunhos = RascunhosCaixa.new(transporte)
176
+ end
177
+
178
+ def criar(pedido, **opcoes)
179
+ executar('POST', "/inboxes", corpo: pedido, **opcoes)
180
+ end
181
+
182
+ def listar(filtros = {}, **opcoes)
183
+ executar('GET', "/inboxes", consulta: filtros, **opcoes)
184
+ end
185
+
186
+ def obter(id, **opcoes)
187
+ executar('GET', "/inboxes/#{segmento(id)}", **opcoes)
188
+ end
189
+
190
+ def atualizar(id, pedido, **opcoes)
191
+ executar('PATCH', "/inboxes/#{segmento(id)}", corpo: pedido, **opcoes)
192
+ end
193
+
194
+ def remover(id, **opcoes)
195
+ executar('DELETE', "/inboxes/#{segmento(id)}", **opcoes)
196
+ end
197
+ end
198
+ end
199
+ end
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mailcore
4
+ module Recursos
5
+ class Campanhas < Base
6
+ def criar(pedido, **opcoes)
7
+ executar('POST', "/broadcasts", corpo: pedido, **opcoes)
8
+ end
9
+
10
+ def listar(filtros = {}, **opcoes)
11
+ executar('GET', "/broadcasts", consulta: filtros, **opcoes)
12
+ end
13
+
14
+ def obter(id, **opcoes)
15
+ executar('GET', "/broadcasts/#{segmento(id)}", **opcoes)
16
+ end
17
+
18
+ def atualizar(id, pedido, **opcoes)
19
+ executar('PATCH', "/broadcasts/#{segmento(id)}", corpo: pedido, **opcoes)
20
+ end
21
+
22
+ def remover(id, **opcoes)
23
+ executar('DELETE', "/broadcasts/#{segmento(id)}", **opcoes)
24
+ end
25
+
26
+ def duplicar(id, pedido = {}, **opcoes)
27
+ executar('POST', "/broadcasts/#{segmento(id)}/duplicate", corpo: pedido, **opcoes)
28
+ end
29
+
30
+ def revisar(id, pedido, **opcoes)
31
+ executar('POST', "/broadcasts/#{segmento(id)}/review", corpo: pedido, **opcoes)
32
+ end
33
+
34
+ def enviar(id, pedido, **opcoes)
35
+ executar('POST', "/broadcasts/#{segmento(id)}/send", corpo: pedido, **opcoes)
36
+ end
37
+
38
+ def cancelar(id, pedido, **opcoes)
39
+ executar('POST', "/broadcasts/#{segmento(id)}/cancel", corpo: pedido, **opcoes)
40
+ end
41
+
42
+ def prever(id, pedido = {}, **opcoes)
43
+ executar('POST', "/broadcasts/#{segmento(id)}/preview", corpo: pedido, **opcoes)
44
+ end
45
+
46
+ def testar(id, pedido, **opcoes)
47
+ executar('POST', "/broadcasts/#{segmento(id)}/test", corpo: pedido, **opcoes)
48
+ end
49
+
50
+ def ler_previa(organizacao_id, previa_id, **opcoes)
51
+ executar(
52
+ 'GET',
53
+ "/broadcast-previews/#{segmento(organizacao_id)}/#{segmento(previa_id)}",
54
+ formato: :texto,
55
+ **opcoes,
56
+ )
57
+ end
58
+
59
+ def obter_metricas(id, **opcoes)
60
+ executar('GET', "/broadcasts/#{segmento(id)}/metrics", **opcoes)
61
+ end
62
+
63
+ def listar_destinatarios(id, filtros = {}, **opcoes)
64
+ executar('GET', "/broadcasts/#{segmento(id)}/recipients", consulta: filtros, **opcoes)
65
+ end
66
+
67
+ def listar_links_clicados(id, filtros = {}, **opcoes)
68
+ executar('GET', "/broadcasts/#{segmento(id)}/clicked-links", consulta: filtros, **opcoes)
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mailcore
4
+ module Recursos
5
+ class ChavesApi < Base
6
+ def criar(pedido, **opcoes)
7
+ executar('POST', "/api-keys", corpo: pedido, **opcoes)
8
+ end
9
+
10
+ def listar(**opcoes)
11
+ executar('GET', "/api-keys", **opcoes)
12
+ end
13
+
14
+ def renomear(id, pedido, **opcoes)
15
+ executar('PATCH', "/api-keys/#{segmento(id)}", corpo: pedido, **opcoes)
16
+ end
17
+
18
+ def revogar(id, **opcoes)
19
+ executar('DELETE', "/api-keys/#{segmento(id)}", **opcoes)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mailcore
4
+ module Recursos
5
+ class ConcessoesCli < Base
6
+ def listar(filtros = {}, **opcoes)
7
+ executar('GET', "/cli/oauth/grants", consulta: filtros, **opcoes)
8
+ end
9
+
10
+ def revogar(id, **opcoes)
11
+ executar('POST', "/cli/oauth/grants/#{segmento(id)}/revoke", **opcoes)
12
+ end
13
+ end
14
+
15
+ class CliMailcore < Base
16
+ attr_reader :concessoes
17
+
18
+ def initialize(transporte)
19
+ super(transporte)
20
+ @concessoes = ConcessoesCli.new(transporte)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,179 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mailcore
4
+ module Recursos
5
+ class SegmentosContato < Base
6
+ def listar(contato_id, **opcoes)
7
+ executar('GET', "/contacts/#{segmento(contato_id)}/segments", **opcoes)
8
+ end
9
+
10
+ def adicionar(contato_id, segmento_id, **opcoes)
11
+ executar(
12
+ 'POST',
13
+ "/contacts/#{segmento(contato_id)}/segments",
14
+ corpo: { segmento_id: segmento_id },
15
+ aceitar_vazio: true,
16
+ **opcoes,
17
+ )
18
+ end
19
+
20
+ def remover(contato_id, segmento_id, **opcoes)
21
+ executar('DELETE', "/contacts/#{segmento(contato_id)}/segments/#{segmento(segmento_id)}", **opcoes)
22
+ end
23
+ end
24
+
25
+ class TopicosContato < Base
26
+ def listar(contato_id, **opcoes)
27
+ executar('GET', "/contacts/#{segmento(contato_id)}/topics", **opcoes)
28
+ end
29
+
30
+ def atualizar(contato_id, topicos, **opcoes)
31
+ executar('PATCH', "/contacts/#{segmento(contato_id)}/topics", corpo: { topicos: topicos }, **opcoes)
32
+ end
33
+ end
34
+
35
+ class ImportacoesContatos < Base
36
+ def prever(pedido, **opcoes)
37
+ executar('POST', "/contacts/imports/preview", corpo: pedido, **opcoes)
38
+ end
39
+
40
+ def criar(pedido, **opcoes)
41
+ executar('POST', "/contacts/imports", corpo: pedido, **opcoes)
42
+ end
43
+
44
+ def obter(id, **opcoes)
45
+ executar('GET', "/contacts/imports/#{segmento(id)}", **opcoes)
46
+ end
47
+ end
48
+
49
+ class ExportacoesContatos < Base
50
+ def criar(filtros = {}, **opcoes)
51
+ executar('POST', "/contacts/exports", corpo: filtros, **opcoes)
52
+ end
53
+
54
+ def listar(filtros = {}, **opcoes)
55
+ executar('GET', "/contacts/exports", consulta: filtros, **opcoes)
56
+ end
57
+
58
+ def obter(id, **opcoes)
59
+ executar('GET', "/contacts/exports/#{segmento(id)}", **opcoes)
60
+ end
61
+
62
+ def baixar(id, **opcoes)
63
+ executar('GET', "/contacts/exports/#{segmento(id)}/download", formato: :bytes, **opcoes)
64
+ end
65
+
66
+ def baixar_fluxo(id, **opcoes, &bloco)
67
+ raise ArgumentError, 'Forneça um bloco para consumir o download.' unless bloco
68
+
69
+ executar('GET', "/contacts/exports/#{segmento(id)}/download", formato: :fluxo, **opcoes, &bloco)
70
+ end
71
+ end
72
+
73
+ class Contatos < Base
74
+ attr_reader :segmentos, :topicos, :importacoes, :exportacoes
75
+
76
+ def initialize(transporte)
77
+ super(transporte)
78
+ @segmentos = SegmentosContato.new(transporte)
79
+ @topicos = TopicosContato.new(transporte)
80
+ @importacoes = ImportacoesContatos.new(transporte)
81
+ @exportacoes = ExportacoesContatos.new(transporte)
82
+ end
83
+
84
+ def criar(pedido, **opcoes)
85
+ executar('POST', "/contacts", corpo: pedido, **opcoes)
86
+ end
87
+
88
+ def listar(filtros = {}, **opcoes)
89
+ executar('GET', "/contacts", consulta: filtros, **opcoes)
90
+ end
91
+
92
+ def obter(id, **opcoes)
93
+ executar('GET', "/contacts/#{segmento(id)}", **opcoes)
94
+ end
95
+
96
+ def atualizar(id, pedido, **opcoes)
97
+ executar('PATCH', "/contacts/#{segmento(id)}", corpo: pedido, **opcoes)
98
+ end
99
+
100
+ def remover(id, **opcoes)
101
+ executar('DELETE', "/contacts/#{segmento(id)}", **opcoes)
102
+ end
103
+
104
+ def adicionar_em_lote(pedido, **opcoes)
105
+ executar('POST', "/contacts/batch", corpo: pedido, **opcoes)
106
+ end
107
+
108
+ def alterar_em_lote(pedido, **opcoes)
109
+ executar('POST', "/contacts/bulk", corpo: pedido, **opcoes)
110
+ end
111
+ end
112
+
113
+ class Segmentos < Base
114
+ def criar(pedido, **opcoes)
115
+ executar('POST', "/segments", corpo: pedido, **opcoes)
116
+ end
117
+
118
+ def listar(filtros = {}, **opcoes)
119
+ executar('GET', "/segments", consulta: filtros, **opcoes)
120
+ end
121
+
122
+ def obter(id, **opcoes)
123
+ executar('GET', "/segments/#{segmento(id)}", **opcoes)
124
+ end
125
+
126
+ def atualizar(id, pedido, **opcoes)
127
+ executar('PATCH', "/segments/#{segmento(id)}", corpo: pedido, **opcoes)
128
+ end
129
+
130
+ def remover(id, **opcoes)
131
+ executar('DELETE', "/segments/#{segmento(id)}", **opcoes)
132
+ end
133
+ end
134
+
135
+ class Topicos < Base
136
+ def criar(pedido, **opcoes)
137
+ executar('POST', "/topics", corpo: pedido, **opcoes)
138
+ end
139
+
140
+ def listar(filtros = {}, **opcoes)
141
+ executar('GET', "/topics", consulta: filtros, **opcoes)
142
+ end
143
+
144
+ def obter(id, **opcoes)
145
+ executar('GET', "/topics/#{segmento(id)}", **opcoes)
146
+ end
147
+
148
+ def atualizar(id, pedido, **opcoes)
149
+ executar('PATCH', "/topics/#{segmento(id)}", corpo: pedido, **opcoes)
150
+ end
151
+
152
+ def remover(id, **opcoes)
153
+ executar('DELETE', "/topics/#{segmento(id)}", **opcoes)
154
+ end
155
+ end
156
+
157
+ class PropriedadesContatos < Base
158
+ def criar(pedido, **opcoes)
159
+ executar('POST', "/contact-properties", corpo: pedido, **opcoes)
160
+ end
161
+
162
+ def listar(filtros = {}, **opcoes)
163
+ executar('GET', "/contact-properties", consulta: filtros, **opcoes)
164
+ end
165
+
166
+ def obter(id, **opcoes)
167
+ executar('GET', "/contact-properties/#{segmento(id)}", **opcoes)
168
+ end
169
+
170
+ def atualizar(id, pedido, **opcoes)
171
+ executar('PATCH', "/contact-properties/#{segmento(id)}", corpo: pedido, **opcoes)
172
+ end
173
+
174
+ def remover(id, **opcoes)
175
+ executar('DELETE', "/contact-properties/#{segmento(id)}", **opcoes)
176
+ end
177
+ end
178
+ end
179
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mailcore
4
+ module Recursos
5
+ class Dominios < Base
6
+ def criar(pedido, **opcoes)
7
+ executar('POST', "/domains", corpo: pedido, **opcoes)
8
+ end
9
+
10
+ def listar(filtros = {}, **opcoes)
11
+ executar('GET', "/domains", consulta: filtros, **opcoes)
12
+ end
13
+
14
+ def obter(id, **opcoes)
15
+ executar('GET', "/domains/#{segmento(id)}", **opcoes)
16
+ end
17
+
18
+ def atualizar(id, pedido, **opcoes)
19
+ executar('PATCH', "/domains/#{segmento(id)}", corpo: pedido, **opcoes)
20
+ end
21
+
22
+ def remover(id, **opcoes)
23
+ executar('DELETE', "/domains/#{segmento(id)}", **opcoes)
24
+ end
25
+
26
+ def registros_dns(id, **opcoes)
27
+ executar('GET', "/domains/#{segmento(id)}/dns", **opcoes)
28
+ end
29
+
30
+ def verificar(id, **opcoes)
31
+ executar('POST', "/domains/#{segmento(id)}/verify", **opcoes)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mailcore
4
+ module Recursos
5
+ class Emails < Base
6
+ # A aceitação da intenção não comprova a entrega da mensagem.
7
+ def enviar(pedido, **opcoes)
8
+ executar('POST', "/emails", corpo: pedido, **opcoes)
9
+ end
10
+
11
+ def listar(filtros = {}, **opcoes)
12
+ executar('GET', "/emails", consulta: filtros, **opcoes)
13
+ end
14
+
15
+ def obter(id, **opcoes)
16
+ executar('GET', "/emails/#{segmento(id)}", **opcoes)
17
+ end
18
+
19
+ def reagendar(id, pedido, **opcoes)
20
+ executar('PATCH', "/emails/#{segmento(id)}", corpo: pedido, **opcoes)
21
+ end
22
+
23
+ def cancelar(id, **opcoes)
24
+ executar('POST', "/emails/#{segmento(id)}/cancel", **opcoes)
25
+ end
26
+
27
+ def obter_por_idempotencia(chave, **opcoes)
28
+ executar('GET', "/emails/idempotency/#{segmento(chave)}", **opcoes)
29
+ end
30
+
31
+ def eventos(id, **opcoes)
32
+ executar('GET', "/emails/#{segmento(id)}/events", **opcoes)
33
+ end
34
+
35
+ def baixar_anexo(id, indice, **opcoes)
36
+ unless indice.is_a?(Integer) && indice >= 0
37
+ raise ArgumentError, 'Informe um índice de anexo inteiro e não negativo.'
38
+ end
39
+
40
+ executar('GET', "/emails/#{segmento(id)}/attachments/#{indice}", formato: :bytes, **opcoes)
41
+ end
42
+ end
43
+
44
+ class Lotes < Base
45
+ def enviar(pedidos, **opcoes)
46
+ executar('POST', "/emails/batch", corpo: pedidos, **opcoes)
47
+ end
48
+
49
+ def obter_por_idempotencia(chave, **opcoes)
50
+ executar('GET', "/emails/batch/idempotency/#{segmento(chave)}", **opcoes)
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Mailcore
4
+ module Recursos
5
+ class Eventos < Base
6
+ def criar(pedido, **opcoes)
7
+ executar('POST', "/events", corpo: pedido, **opcoes)
8
+ end
9
+
10
+ def listar(filtros = {}, **opcoes)
11
+ executar('GET', "/events", consulta: filtros, **opcoes)
12
+ end
13
+
14
+ def obter(id, **opcoes)
15
+ executar('GET', "/events/#{segmento(id)}", **opcoes)
16
+ end
17
+
18
+ def atualizar(id, pedido, **opcoes)
19
+ executar('PATCH', "/events/#{segmento(id)}", corpo: pedido, **opcoes)
20
+ end
21
+
22
+ def remover(id, **opcoes)
23
+ executar('DELETE', "/events/#{segmento(id)}", **opcoes)
24
+ end
25
+
26
+ def enviar(pedido, **opcoes)
27
+ executar('POST', "/events/send", corpo: pedido, **opcoes)
28
+ end
29
+ end
30
+ end
31
+ end