emites-client 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +31 -0
- data/.rspec +2 -0
- data/.travis.yml +11 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +366 -0
- data/Rakefile +9 -0
- data/emites-client.gemspec +37 -0
- data/lib/emites.rb +44 -0
- data/lib/emites/client.rb +30 -0
- data/lib/emites/configuration.rb +12 -0
- data/lib/emites/entities/account.rb +8 -0
- data/lib/emites/entities/base.rb +9 -0
- data/lib/emites/entities/emitter.rb +31 -0
- data/lib/emites/entities/nfse.rb +29 -0
- data/lib/emites/entities/nfse_status.rb +15 -0
- data/lib/emites/entities/nfse_status_transition.rb +14 -0
- data/lib/emites/entities/nfse_values.rb +28 -0
- data/lib/emites/entities/rps.rb +9 -0
- data/lib/emites/entities/taker.rb +20 -0
- data/lib/emites/entities/taker_address.rb +21 -0
- data/lib/emites/entities/taker_contact.rb +9 -0
- data/lib/emites/entities/webhook.rb +9 -0
- data/lib/emites/exception.rb +11 -0
- data/lib/emites/http.rb +34 -0
- data/lib/emites/request.rb +53 -0
- data/lib/emites/resources/base.rb +45 -0
- data/lib/emites/resources/emitter.rb +98 -0
- data/lib/emites/resources/hooks.rb +25 -0
- data/lib/emites/resources/nfse.rb +173 -0
- data/lib/emites/resources/webhook.rb +84 -0
- data/lib/emites/response.rb +38 -0
- data/lib/emites/version.rb +3 -0
- data/spec/emites/client_spec.rb +45 -0
- data/spec/emites/configuration_spec.rb +13 -0
- data/spec/emites/entities/account_spec.rb +14 -0
- data/spec/emites/entities/base_spec.rb +28 -0
- data/spec/emites/entities/emitter_spec.rb +20 -0
- data/spec/emites/entities/nfse_spec.rb +148 -0
- data/spec/emites/entities/nfse_status_spec.rb +16 -0
- data/spec/emites/entities/nfse_status_transition_spec.rb +23 -0
- data/spec/emites/entities/nfse_values_spec.rb +19 -0
- data/spec/emites/entities/rps_spec.rb +15 -0
- data/spec/emites/entities/taker_address_spec.rb +18 -0
- data/spec/emites/entities/taker_contact_spec.rb +13 -0
- data/spec/emites/entities/taker_spec.rb +18 -0
- data/spec/emites/entities/webhook_spec.rb +14 -0
- data/spec/emites/exception_spec.rb +21 -0
- data/spec/emites/http_spec.rb +62 -0
- data/spec/emites/resources/base_spec.rb +96 -0
- data/spec/emites/resources/emitter_spec.rb +119 -0
- data/spec/emites/resources/nfse_spec.rb +214 -0
- data/spec/emites/resources/webhook_spec.rb +62 -0
- data/spec/emites_spec.rb +63 -0
- data/spec/fixtures/certificate.pfx +0 -0
- data/spec/shared_examples/bound_notifiers.rb +8 -0
- data/spec/shared_examples/entity_attributes.rb +9 -0
- data/spec/spec_helper.rb +38 -0
- data/spec/support/matchers/have_attr_accessor.rb +18 -0
- data/spec/vcr_cassettes/client/authenticated/false.yml +48 -0
- data/spec/vcr_cassettes/client/authenticated/true.yml +259 -0
- data/spec/vcr_cassettes/emitters/create/error.yml +57 -0
- data/spec/vcr_cassettes/emitters/create/success.yml +80 -0
- data/spec/vcr_cassettes/emitters/destroy/error.yml +47 -0
- data/spec/vcr_cassettes/emitters/destroy/success.yml +44 -0
- data/spec/vcr_cassettes/emitters/info/error.yml +47 -0
- data/spec/vcr_cassettes/emitters/info/success.yml +77 -0
- data/spec/vcr_cassettes/emitters/list/success.yml +135 -0
- data/spec/vcr_cassettes/emitters/partial_update/success.yml +90 -0
- data/spec/vcr_cassettes/emitters/search/returns_empty.yml +47 -0
- data/spec/vcr_cassettes/emitters/search/success.yml +76 -0
- data/spec/vcr_cassettes/nfse/cancel/success.yml +49 -0
- data/spec/vcr_cassettes/nfse/create/given_taker.yml +109 -0
- data/spec/vcr_cassettes/nfse/create/incomplete.yml +73 -0
- data/spec/vcr_cassettes/nfse/create/success.yml +112 -0
- data/spec/vcr_cassettes/nfse/create/without_taker.yml +73 -0
- data/spec/vcr_cassettes/nfse/destroy/success.yml +46 -0
- data/spec/vcr_cassettes/nfse/history/success.yml +83 -0
- data/spec/vcr_cassettes/nfse/info/success.yml +113 -0
- data/spec/vcr_cassettes/nfse/list/success.yml +1353 -0
- data/spec/vcr_cassettes/nfse/pdf/success.yml +48 -0
- data/spec/vcr_cassettes/nfse/status/success.yml +51 -0
- data/spec/vcr_cassettes/nfse/update/success.yml +113 -0
- data/spec/vcr_cassettes/nfse/xml/success.yml +48 -0
- data/spec/vcr_cassettes/webhooks/create/success.yml +53 -0
- data/spec/vcr_cassettes/webhooks/destroy/success.yml +46 -0
- data/spec/vcr_cassettes/webhooks/list/success.yml +53 -0
- data/spec/vcr_cassettes/webhooks/update/success.yml +52 -0
- metadata +390 -0
@@ -0,0 +1,45 @@
|
|
1
|
+
require "emites/resources/hooks"
|
2
|
+
|
3
|
+
module Emites
|
4
|
+
module Resources
|
5
|
+
class Base
|
6
|
+
include Wisper::Publisher
|
7
|
+
extend Hooks
|
8
|
+
|
9
|
+
attr_accessor :http
|
10
|
+
|
11
|
+
def initialize(http)
|
12
|
+
@http = http
|
13
|
+
end
|
14
|
+
|
15
|
+
def parsed_body(response)
|
16
|
+
MultiJson.load(response.body)
|
17
|
+
rescue MultiJson::ParseError
|
18
|
+
{}
|
19
|
+
end
|
20
|
+
|
21
|
+
protected
|
22
|
+
|
23
|
+
def respond_with_collection(response, naked_klass = entity_klass)
|
24
|
+
hash = parsed_body(response)
|
25
|
+
hash["collection"].map do |item|
|
26
|
+
naked_klass.new(item)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def respond_with_entity(response, naked_klass = entity_klass)
|
31
|
+
item = parsed_body(response)
|
32
|
+
naked_klass.new(item)
|
33
|
+
end
|
34
|
+
|
35
|
+
def base_klass
|
36
|
+
@base_klass ||= self.class.name.split("::").last
|
37
|
+
end
|
38
|
+
|
39
|
+
def entity_klass
|
40
|
+
@entity_klass ||= Emites::Entities.const_get(base_klass.to_sym)
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
module Emites
|
2
|
+
module Resources
|
3
|
+
|
4
|
+
# A wrapper to Emites emitters API
|
5
|
+
#
|
6
|
+
# [API]
|
7
|
+
# Documentation: http://myfreecomm.github.io/emites/sandbox/v1/modules/emitter.html
|
8
|
+
#
|
9
|
+
# @example Listing all emitters:
|
10
|
+
# client = Emites.client("MY_SECRET_TOKEN")
|
11
|
+
# client.emitters.list
|
12
|
+
#
|
13
|
+
# @example Creating an emitter:
|
14
|
+
# client = Emites.client("MY_SECRET_TOKEN")
|
15
|
+
# client.emitters.create({cnpj: "01001001000113", certificate: Base64.encode64(File.read("path/to/certificate.pfx"))})
|
16
|
+
#
|
17
|
+
# @see Emites.client
|
18
|
+
class Emitter < Base
|
19
|
+
|
20
|
+
# Creates an Emitter related to the Account
|
21
|
+
#
|
22
|
+
# [API]
|
23
|
+
# Method: <tt>POST /api/v1/emitters</tt>
|
24
|
+
#
|
25
|
+
# Documentation: http://myfreecomm.github.io/emites/sandbox/v1/modules/emitter.html#criacao
|
26
|
+
#
|
27
|
+
# @param params [Hash] a hash with Emitter attributes
|
28
|
+
# @return [Emites::Entities::Emitter] the created Emitter
|
29
|
+
def create(params)
|
30
|
+
http.post("/emitters", { body: params }) do |response|
|
31
|
+
respond_with_entity(response)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# Retrieves an Emitter by it's id
|
36
|
+
#
|
37
|
+
# [API]
|
38
|
+
# Method: <tt>GET /api/v1/emitters/:id</tt>
|
39
|
+
#
|
40
|
+
# Documentation: http://myfreecomm.github.io/emites/sandbox/v1/modules/emitter.html#detalhes
|
41
|
+
#
|
42
|
+
# @param id [Integer] the Emitter id
|
43
|
+
# @return [Emites::Entities::Emitter] the Emitter by it's id
|
44
|
+
def info(id)
|
45
|
+
http.get("/emitters/#{id}") do |response|
|
46
|
+
respond_with_entity(response)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Lists all Emitters related to the account
|
51
|
+
#
|
52
|
+
# [API]
|
53
|
+
# Method: <tt>GET /api/v1/emitters</tt>
|
54
|
+
#
|
55
|
+
# Documentation: http://myfreecomm.github.io/emites/sandbox/v1/modules/emitter.html#listagem
|
56
|
+
#
|
57
|
+
# @return [Array] an array of Emitter
|
58
|
+
def list
|
59
|
+
http.get("/emitters") do |response|
|
60
|
+
respond_with_collection(response)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# Lists all Emitters related to the account matching search results
|
65
|
+
#
|
66
|
+
# [API]
|
67
|
+
# Method: <tt>GET /api/v1/emitters?cnpj=:cnpj</tt>
|
68
|
+
#
|
69
|
+
# Documentation: http://myfreecomm.github.io/emites/sandbox/v1/modules/emitter.html#filtros
|
70
|
+
#
|
71
|
+
# @param params [Hash] a hash with Emitter attributes
|
72
|
+
# @return [Array] an array of Emitter
|
73
|
+
def search(params)
|
74
|
+
http.get("/emitters", { params: params }) do |response|
|
75
|
+
respond_with_collection(response)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
# Deletes an Emitter by it's id. Returns <tt>true</true> if deletion performed well, otherwise,
|
80
|
+
# returns <tt>false</tt>.
|
81
|
+
#
|
82
|
+
# [API]
|
83
|
+
# Method: <tt>DELETE /api/v1/emitters/:id</tt>
|
84
|
+
#
|
85
|
+
# Documentation: http://myfreecomm.github.io/emites/sandbox/v1/modules/emitter.html#remocao
|
86
|
+
#
|
87
|
+
# @param id [Integer] the Emitter id
|
88
|
+
# @return [Boolean] whether deletion was performed or not
|
89
|
+
def destroy(id)
|
90
|
+
http.delete("/emitters/#{id}") do |response|
|
91
|
+
response.code == 204
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
notify :create, :destroy
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Emites
|
2
|
+
module Resources
|
3
|
+
module Hooks
|
4
|
+
|
5
|
+
def notify(*hooked_methods)
|
6
|
+
apply_hooks(hooked_methods.flatten)
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def apply_hooks(hooked_methods)
|
12
|
+
hooked_methods.each do |method|
|
13
|
+
alias_method "#{method}_without_notifier", method
|
14
|
+
|
15
|
+
define_method method do |*args|
|
16
|
+
result = send("#{method}_without_notifier", *args)
|
17
|
+
publish("emites.#{base_klass.downcase}.#{method}", result, args.flatten)
|
18
|
+
result
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,173 @@
|
|
1
|
+
module Emites
|
2
|
+
module Resources
|
3
|
+
|
4
|
+
# A wrapper to Emites NFSes API
|
5
|
+
#
|
6
|
+
# [API]
|
7
|
+
# Documentation: http://myfreecomm.github.io/emites/v1/modules/nfse.html
|
8
|
+
#
|
9
|
+
# @example Listing all NFSe:
|
10
|
+
# client = Emites.client("MY_SECRET_TOKEN")
|
11
|
+
# client.nfse.list
|
12
|
+
#
|
13
|
+
# @example Creating a NFSe:
|
14
|
+
# client = Emites.client("MY_SECRET_TOKEN")
|
15
|
+
# client.nfse.create({emitter_id: 1, serie: "a", ...)
|
16
|
+
#
|
17
|
+
# @see Emites.client
|
18
|
+
class Nfse < Base
|
19
|
+
|
20
|
+
# Lists all NFSes
|
21
|
+
#
|
22
|
+
# [API]
|
23
|
+
# Method: <tt>GET /api/v1/nfse</tt>
|
24
|
+
#
|
25
|
+
# Documentation: http://myfreecomm.github.io/emites/v1/modules/nfse.html#listagem
|
26
|
+
#
|
27
|
+
# @return [Array] an array of Webhook
|
28
|
+
def list
|
29
|
+
http.get("/nfse") do |response|
|
30
|
+
respond_with_collection(response)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Retrieves a Nfse by it's id
|
35
|
+
#
|
36
|
+
# [API]
|
37
|
+
# Method: <tt>GET /api/v1/nfse/:id</tt>
|
38
|
+
#
|
39
|
+
# Documentation: http://myfreecomm.github.io/emites/sandbox/v1/modules/nfse.html#detalhes
|
40
|
+
#
|
41
|
+
# @param id [Integer] the Nfse id
|
42
|
+
# @return [Emites::Entities::Nfse] the Nfse by it's id
|
43
|
+
def info(id)
|
44
|
+
http.get("/nfse/#{id}") do |response|
|
45
|
+
respond_with_entity(response)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Retrieves a Nfse status by it's id
|
50
|
+
#
|
51
|
+
# [API]
|
52
|
+
# Method: <tt>GET /api/v1/nfse/:id/status</tt>
|
53
|
+
#
|
54
|
+
# Documentation: http://myfreecomm.github.io/emites/sandbox/v1/modules/nfse.html#status
|
55
|
+
#
|
56
|
+
# @param id [Integer] the Nfse id
|
57
|
+
# @return [Emites::Entities::NfseStatus] the NfseStatus by it's id
|
58
|
+
def status(id)
|
59
|
+
http.get("/nfse/#{id}/status") do |response|
|
60
|
+
respond_with_entity(response, Entities::NfseStatus)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
# Retrieves the entire Nfse status history by it's id
|
65
|
+
#
|
66
|
+
# [API]
|
67
|
+
# Method: <tt>GET /api/v1/nfse/:id/history</tt>
|
68
|
+
#
|
69
|
+
# Documentation: http://myfreecomm.github.io/emites/sandbox/v1/modules/nfse.html#historico
|
70
|
+
#
|
71
|
+
# @param id [Integer] the Nfse id
|
72
|
+
# @return [Array] an array of Emites::Entities::NfseStatusTransition
|
73
|
+
def history(id)
|
74
|
+
http.get("/nfse/#{id}/history") do |response|
|
75
|
+
respond_with_collection(response, Entities::NfseStatusTransition)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
# Retrieves Nfse PDF url
|
80
|
+
#
|
81
|
+
# [API]
|
82
|
+
# Method: <tt>GET /api/v1/nfse/:id/pdf</tt>
|
83
|
+
#
|
84
|
+
# Documentation: http://myfreecomm.github.io/emites/sandbox/v1/modules/nfse.html#pdf
|
85
|
+
#
|
86
|
+
# @param id [Integer] the Nfse id
|
87
|
+
# @return [String] the url to redirect or an empty string if an error occurred
|
88
|
+
def pdf(id)
|
89
|
+
http.get("/nfse/#{id}/pdf") do |response|
|
90
|
+
response.headers.fetch("Location") { "" }
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
# Retrieves Nfse XML url
|
95
|
+
#
|
96
|
+
# [API]
|
97
|
+
# Method: <tt>GET /api/v1/nfse/:id/xml</tt>
|
98
|
+
#
|
99
|
+
# Documentation: http://myfreecomm.github.io/emites/sandbox/v1/modules/nfse.html#xml
|
100
|
+
#
|
101
|
+
# @param id [Integer] the Nfse id
|
102
|
+
# @return [String] the url to redirect or an empty string if an error occurred
|
103
|
+
def xml(id)
|
104
|
+
http.get("/nfse/#{id}/xml") do |response|
|
105
|
+
response.headers.fetch("Location") { "" }
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
# Cancels a Nfse by it's id
|
110
|
+
#
|
111
|
+
# [API]
|
112
|
+
# Method: <tt>POST /api/v1/nfse/:id/cancel</tt>
|
113
|
+
#
|
114
|
+
# Documentation: http://myfreecomm.github.io/emites/sandbox/v1/modules/nfse.html#cancelamento
|
115
|
+
#
|
116
|
+
# @param id [Integer] the Nfse id
|
117
|
+
# @return [Emites::Entities::NfseStatus] the NfseStatus by it's id
|
118
|
+
def cancel(id)
|
119
|
+
http.post("/nfse/#{id}/cancel") do |response|
|
120
|
+
respond_with_entity(response, Entities::NfseStatus)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
# Deletes a Nfse by it's id
|
125
|
+
#
|
126
|
+
# [API]
|
127
|
+
# Method: <tt>DELETE /api/v1/nfse/:id</tt>
|
128
|
+
#
|
129
|
+
# Documentation: http://myfreecomm.github.io/emites/sandbox/v1/modules/nfse.html#remocao
|
130
|
+
#
|
131
|
+
# @param id [Integer] the Nfse id
|
132
|
+
# @return [Boolean] whether deletion was performed or not
|
133
|
+
def destroy(id)
|
134
|
+
http.delete("/nfse/#{id}") do |response|
|
135
|
+
response.code == 204
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
# Creates an Nfse
|
140
|
+
#
|
141
|
+
# [API]
|
142
|
+
# Method: <tt>POST /api/v1/nfse</tt>
|
143
|
+
#
|
144
|
+
# Documentation: http://myfreecomm.github.io/emites/sandbox/v1/modules/nfse.html#criacao
|
145
|
+
#
|
146
|
+
# @param params [Hash] a hash with Nfse attributes
|
147
|
+
# @return [Emites::Entities::Nfse] the created Nfse
|
148
|
+
def create(params)
|
149
|
+
http.post("/nfse", { body: params }) do |response|
|
150
|
+
respond_with_entity(response)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
# Updates an Nfse
|
155
|
+
#
|
156
|
+
# [API]
|
157
|
+
# Method: <tt>PUT /api/v1/:id</tt>
|
158
|
+
#
|
159
|
+
# Documentation: http://myfreecomm.github.io/emites/sandbox/v1/modules/nfse.html#atualizacao-parcial-e-completa
|
160
|
+
#
|
161
|
+
# @param id [Integer] the Nfse id
|
162
|
+
# @param params [Hash] a hash with Nfse attributes
|
163
|
+
# @return [Emites::Entities::Nfse] the created Nfse
|
164
|
+
def update(id, params)
|
165
|
+
http.put("/nfse/#{id}", { body: params }) do |response|
|
166
|
+
respond_with_entity(response)
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
notify :create, :update, :cancel, :destroy
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module Emites
|
2
|
+
module Resources
|
3
|
+
|
4
|
+
# A wrapper to Emites webhooks API
|
5
|
+
#
|
6
|
+
# [API]
|
7
|
+
# Documentation: http://myfreecomm.github.io/emites/sandbox/v1/modules/webhooks.html
|
8
|
+
#
|
9
|
+
# @example Listing all webhooks:
|
10
|
+
# client = Emites.client("MY_SECRET_TOKEN")
|
11
|
+
# client.webhooks.list
|
12
|
+
#
|
13
|
+
# @example Creating an webhook:
|
14
|
+
# client = Emites.client("MY_SECRET_TOKEN")
|
15
|
+
# client.webhooks.create({name: "My Fake Web Hook", url: "http://web.hook")
|
16
|
+
#
|
17
|
+
# @see Emites.client
|
18
|
+
class Webhook < Base
|
19
|
+
|
20
|
+
# Lists all Webhooks related to the account
|
21
|
+
#
|
22
|
+
# [API]
|
23
|
+
# Method: <tt>GET /api/v1/webhooks</tt>
|
24
|
+
#
|
25
|
+
# Documentation: http://myfreecomm.github.io/emites/sandbox/v1/modules/webhooks.html#listagem
|
26
|
+
#
|
27
|
+
# @return [Array] an array of Webhook
|
28
|
+
def list
|
29
|
+
http.get("/webhooks") do |response|
|
30
|
+
respond_with_collection(response)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Updates an Webhook identified by <tt>id</tt>
|
35
|
+
#
|
36
|
+
# [API]
|
37
|
+
# Method: <tt>PUT /api/v1/webhooks/:id</tt>
|
38
|
+
#
|
39
|
+
# Documentation: http://myfreecomm.github.io/emites/sandbox/v1/modules/webhooks.html#atualizacao
|
40
|
+
#
|
41
|
+
# @param id [Integer] the webhook id
|
42
|
+
# @param params [Hash] a hash with new data
|
43
|
+
# @return [Array] an array of Webhook
|
44
|
+
def update(id, params)
|
45
|
+
http.put("/webhooks/#{id}", { body: params }) do |response|
|
46
|
+
respond_with_entity(response)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Deletes an Webhook by it's id. Returns <tt>true</true> if deletion performed well, otherwise,
|
51
|
+
# returns <tt>false</tt>.
|
52
|
+
#
|
53
|
+
# [API]
|
54
|
+
# Method: <tt>DELETE /api/v1/webhooks/:id</tt>
|
55
|
+
#
|
56
|
+
# Documentation: http://myfreecomm.github.io/emites/sandbox/v1/modules/webhooks.html#remocao
|
57
|
+
#
|
58
|
+
# @param id [Integer] the Wehook id
|
59
|
+
# @return [Boolean] whether deletion was performed or not
|
60
|
+
def destroy(id)
|
61
|
+
http.delete("/webhooks/#{id}") do |response|
|
62
|
+
response.code == 204
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# Creates an Webhook
|
67
|
+
#
|
68
|
+
# [API]
|
69
|
+
# Method: <tt>POST /api/v1/webhooks</tt>
|
70
|
+
#
|
71
|
+
# Documentation: http://myfreecomm.github.io/emites/sandbox/v1/modules/webhooks.html#criacao
|
72
|
+
#
|
73
|
+
# @param params [Hash] a hash with Webhook attributes
|
74
|
+
# @return [Emites::Entities::Webhook] the created Webhook
|
75
|
+
def create(params)
|
76
|
+
http.post("/webhooks", { body: params }) do |response|
|
77
|
+
respond_with_entity(response)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
notify :create, :destroy, :update
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require "emites/exception"
|
2
|
+
|
3
|
+
module Emites
|
4
|
+
RequestTimeout = Class.new(Exception)
|
5
|
+
RequestError = Class.new(Exception)
|
6
|
+
|
7
|
+
class Response < SimpleDelegator
|
8
|
+
|
9
|
+
def resolve!(&block)
|
10
|
+
if success? || redirected?
|
11
|
+
block_given? ? yield(self) : self
|
12
|
+
elsif timed_out?
|
13
|
+
timeout!
|
14
|
+
else
|
15
|
+
error!
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def redirected?
|
20
|
+
response_code && response_code >= 300 && response_code < 400
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def timeout!
|
26
|
+
raise RequestTimeout
|
27
|
+
end
|
28
|
+
|
29
|
+
def error!
|
30
|
+
raise RequestError.new(
|
31
|
+
code: code,
|
32
|
+
message: status_message,
|
33
|
+
body: (MultiJson.load(body) rescue {})
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|