minitel 0.5.0 → 1.0.0
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.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +13 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +13 -0
- data/.rubocop_standardrb.yml +1983 -0
- data/.rubocop_standardrb_overrides.yml +28 -0
- data/CHANGELOG.md +85 -0
- data/CODEOWNERS +4 -0
- data/Gemfile +10 -0
- data/Guardfile +4 -3
- data/{Readme.md → README.md} +35 -7
- data/Rakefile +3 -1
- data/lib/minitel/client.rb +37 -20
- data/lib/minitel/errors.rb +11 -0
- data/lib/minitel/strict_args.rb +8 -5
- data/lib/minitel/version.rb +3 -1
- data/lib/minitel.rb +6 -4
- data/minitel.gemspec +15 -19
- data/spec/minitel/client_spec.rb +217 -85
- data/spec/minitel/strict_args_spec.rb +24 -25
- data/spec/spec_helper.rb +8 -4
- metadata +17 -85
- data/changelog.txt +0 -33
data/spec/minitel/client_spec.rb
CHANGED
|
@@ -1,120 +1,252 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
before do
|
|
5
|
-
url = "https://u:p@foo.com"
|
|
6
|
-
client = Minitel::Client.new(url)
|
|
7
|
-
@data = client.connection.data
|
|
8
|
-
end
|
|
3
|
+
require "spec_helper"
|
|
9
4
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
expect(@data[:password]).to eq('p')
|
|
14
|
-
end
|
|
5
|
+
RSpec.describe Minitel::Client do
|
|
6
|
+
describe "#initialize" do
|
|
7
|
+
let(:client) { described_class.new("https://EXAMPLE-KEY0-0000-0000-000000000000:EXAMPLE-SEC0-0000-0000-000000000000@telex.example.com") }
|
|
15
8
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
expect(user_agent).to match(Excon::VERSION)
|
|
22
|
-
end
|
|
9
|
+
it "uses the given url and credentials" do
|
|
10
|
+
expect(client.uri.host).to eq("telex.example.com")
|
|
11
|
+
expect(client.user).to eq("EXAMPLE-KEY0-0000-0000-000000000000")
|
|
12
|
+
expect(client.password).to eq("EXAMPLE-SEC0-0000-0000-000000000000")
|
|
13
|
+
end
|
|
23
14
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
15
|
+
it "requires an https url" do
|
|
16
|
+
expect { described_class.new("http://user:pass@what.com") }.to raise_error(ArgumentError)
|
|
17
|
+
expect { described_class.new("https://user:pass@what.com") }.not_to raise_error
|
|
18
|
+
end
|
|
27
19
|
end
|
|
28
|
-
end
|
|
29
20
|
|
|
30
|
-
describe
|
|
31
|
-
|
|
32
|
-
let(:
|
|
33
|
-
let(:
|
|
21
|
+
describe "#notify_app" do
|
|
22
|
+
let(:defaults) { { title: "a title", body: "a body", app_uuid: SecureRandom.uuid } }
|
|
23
|
+
let(:client) { described_class.new("https://EXAMPLE-KEY0-0000-0000-000000000000:EXAMPLE-SEC0-0000-0000-000000000000@telex.example.com") }
|
|
24
|
+
let!(:stub) do
|
|
25
|
+
WebMock.stub_request(:post, "https://telex.example.com/producer/messages")
|
|
26
|
+
.to_return(status: 201, body: JSON.generate(success: true))
|
|
27
|
+
end
|
|
34
28
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
29
|
+
it "posts a proper json body to the producer messages endpoint" do
|
|
30
|
+
client.notify_app(defaults)
|
|
31
|
+
body = JSON.generate(
|
|
32
|
+
title: "a title",
|
|
33
|
+
body: "a body",
|
|
34
|
+
target: { type: "app", id: defaults[:app_uuid] },
|
|
35
|
+
)
|
|
36
|
+
expect(stub.with(body: body)).to have_been_requested
|
|
38
37
|
end
|
|
39
38
|
|
|
40
|
-
it
|
|
39
|
+
it "sends basic auth credentials" do
|
|
41
40
|
client.notify_app(defaults)
|
|
42
|
-
|
|
43
|
-
title: 'a title',
|
|
44
|
-
body: 'a body',
|
|
45
|
-
target: {type: 'app', id: defaults[:app_uuid]})
|
|
46
|
-
expect(@stub.with(body: body)).to have_been_requested
|
|
41
|
+
expect(stub.with(basic_auth: ["EXAMPLE-KEY0-0000-0000-000000000000", "EXAMPLE-SEC0-0000-0000-000000000000"])).to have_been_requested
|
|
47
42
|
end
|
|
48
43
|
|
|
49
|
-
it
|
|
50
|
-
|
|
44
|
+
it "sends correct content-type and user-agent headers" do
|
|
45
|
+
client.notify_app(defaults)
|
|
46
|
+
expect(stub.with(headers: {
|
|
47
|
+
"Content-Type" => "application/json",
|
|
48
|
+
"User-Agent" => "minitel/#{Minitel::VERSION}",
|
|
49
|
+
})).to have_been_requested
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "supports actions" do
|
|
53
|
+
action = { label: "omg", url: "https://foo" }
|
|
51
54
|
client.notify_app(defaults.merge(action: action))
|
|
52
|
-
post_with_action =
|
|
53
|
-
body =
|
|
55
|
+
post_with_action = stub.with do |req|
|
|
56
|
+
body = JSON.parse(req.body, symbolize_names: true)
|
|
54
57
|
body[:action] == action
|
|
55
58
|
end
|
|
56
59
|
expect(post_with_action).to have_been_requested
|
|
57
60
|
end
|
|
58
61
|
|
|
59
|
-
it
|
|
62
|
+
it "returns a parsed json response" do
|
|
60
63
|
result = client.notify_app(defaults)
|
|
61
|
-
expect(result[
|
|
64
|
+
expect(result["success"]).to be(true)
|
|
62
65
|
end
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
66
|
|
|
67
|
+
it "raises ClientError on a client error response" do
|
|
68
|
+
WebMock.stub_request(:post, "https://telex.example.com/producer/messages")
|
|
69
|
+
.to_return(status: 422, body: JSON.generate(error: "invalid"))
|
|
70
|
+
expect { client.notify_app(defaults) }.to raise_error(Minitel::HTTP::ClientError)
|
|
71
|
+
end
|
|
66
72
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
73
|
+
it "raises NotFound on a 404 response" do
|
|
74
|
+
WebMock.stub_request(:post, "https://telex.example.com/producer/messages")
|
|
75
|
+
.to_return(status: 404, body: "Not Found")
|
|
76
|
+
expect { client.notify_app(defaults) }.to raise_error(Minitel::HTTP::NotFound)
|
|
77
|
+
end
|
|
70
78
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
79
|
+
it "sets cause to the Minitel error when a caller rescues and re-raises" do
|
|
80
|
+
WebMock.stub_request(:post, "https://telex.example.com/producer/messages")
|
|
81
|
+
.to_return(status: 404, body: "Not Found")
|
|
82
|
+
wrapper_error = Class.new(StandardError)
|
|
83
|
+
begin
|
|
84
|
+
begin
|
|
85
|
+
client.notify_app(defaults)
|
|
86
|
+
rescue => e
|
|
87
|
+
raise wrapper_error, e.message
|
|
88
|
+
end
|
|
89
|
+
rescue wrapper_error => e
|
|
90
|
+
expect(e.cause).to be_instance_of(Minitel::HTTP::NotFound)
|
|
91
|
+
end
|
|
92
|
+
end
|
|
75
93
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
target: {type: 'user', id: defaults[:user_uuid]})
|
|
82
|
-
expect(@stub.with(body: body)).to have_been_requested
|
|
83
|
-
end
|
|
94
|
+
it "raises TooManyRequests on a 429 response" do
|
|
95
|
+
WebMock.stub_request(:post, "https://telex.example.com/producer/messages")
|
|
96
|
+
.to_return(status: 429, body: "Rate Limited")
|
|
97
|
+
expect { client.notify_app(defaults) }.to raise_error(Minitel::HTTP::TooManyRequests)
|
|
98
|
+
end
|
|
84
99
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
body = MultiJson.decode(req.body, symbolize_keys: true)
|
|
90
|
-
body[:action] == action
|
|
100
|
+
it "raises ServerError on a server error response" do
|
|
101
|
+
WebMock.stub_request(:post, "https://telex.example.com/producer/messages")
|
|
102
|
+
.to_return(status: 500, body: "Internal Server Error")
|
|
103
|
+
expect { client.notify_app(defaults) }.to raise_error(Minitel::HTTP::ServerError)
|
|
91
104
|
end
|
|
92
|
-
expect(post_with_action).to have_been_requested
|
|
93
|
-
end
|
|
94
105
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
106
|
+
it "raises on an unexpected success status code" do
|
|
107
|
+
WebMock.stub_request(:post, "https://telex.example.com/producer/messages")
|
|
108
|
+
.to_return(status: 200, body: JSON.generate(success: true))
|
|
109
|
+
expect { client.notify_app(defaults) }.to raise_error(Minitel::HTTP::Error)
|
|
110
|
+
end
|
|
98
111
|
end
|
|
99
|
-
end
|
|
100
112
|
|
|
101
|
-
describe
|
|
102
|
-
|
|
103
|
-
|
|
113
|
+
describe "#notify_user" do
|
|
114
|
+
let(:defaults) { { title: "a title", body: "a body", user_uuid: SecureRandom.uuid } }
|
|
115
|
+
let(:client) { described_class.new("https://EXAMPLE-KEY0-0000-0000-000000000000:EXAMPLE-SEC0-0000-0000-000000000000@telex.example.com") }
|
|
116
|
+
let!(:stub) do
|
|
117
|
+
WebMock.stub_request(:post, "https://telex.example.com/producer/messages")
|
|
118
|
+
.to_return(status: 201, body: JSON.generate(success: true))
|
|
119
|
+
end
|
|
104
120
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
121
|
+
it "posts a proper json body to the producer messages endpoint" do
|
|
122
|
+
client.notify_user(defaults)
|
|
123
|
+
body = JSON.generate(
|
|
124
|
+
title: "a title",
|
|
125
|
+
body: "a body",
|
|
126
|
+
target: { type: "user", id: defaults[:user_uuid] },
|
|
127
|
+
)
|
|
128
|
+
expect(stub.with(body: body)).to have_been_requested
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
it "sends basic auth credentials" do
|
|
132
|
+
client.notify_user(defaults)
|
|
133
|
+
expect(stub.with(basic_auth: ["EXAMPLE-KEY0-0000-0000-000000000000", "EXAMPLE-SEC0-0000-0000-000000000000"])).to have_been_requested
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
it "sends correct content-type and user-agent headers" do
|
|
137
|
+
client.notify_user(defaults)
|
|
138
|
+
expect(stub.with(headers: {
|
|
139
|
+
"Content-Type" => "application/json",
|
|
140
|
+
"User-Agent" => "minitel/#{Minitel::VERSION}",
|
|
141
|
+
})).to have_been_requested
|
|
142
|
+
end
|
|
109
143
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
144
|
+
it "supports actions" do
|
|
145
|
+
action = { label: "omg", url: "https://foo" }
|
|
146
|
+
client.notify_user(defaults.merge(action: action))
|
|
147
|
+
post_with_action = stub.with do |req|
|
|
148
|
+
body = JSON.parse(req.body, symbolize_names: true)
|
|
149
|
+
body[:action] == action
|
|
150
|
+
end
|
|
151
|
+
expect(post_with_action).to have_been_requested
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
it "returns a parsed json response" do
|
|
155
|
+
result = client.notify_user(defaults)
|
|
156
|
+
expect(result["success"]).to be(true)
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
it "raises ClientError on a client error response" do
|
|
160
|
+
WebMock.stub_request(:post, "https://telex.example.com/producer/messages")
|
|
161
|
+
.to_return(status: 422, body: JSON.generate(error: "invalid"))
|
|
162
|
+
expect { client.notify_user(defaults) }.to raise_error(Minitel::HTTP::ClientError)
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
it "raises NotFound on a 404 response" do
|
|
166
|
+
WebMock.stub_request(:post, "https://telex.example.com/producer/messages")
|
|
167
|
+
.to_return(status: 404, body: "Not Found")
|
|
168
|
+
expect { client.notify_user(defaults) }.to raise_error(Minitel::HTTP::NotFound)
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
it "raises TooManyRequests on a 429 response" do
|
|
172
|
+
WebMock.stub_request(:post, "https://telex.example.com/producer/messages")
|
|
173
|
+
.to_return(status: 429, body: "Rate Limited")
|
|
174
|
+
expect { client.notify_user(defaults) }.to raise_error(Minitel::HTTP::TooManyRequests)
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
it "raises ServerError on a server error response" do
|
|
178
|
+
WebMock.stub_request(:post, "https://telex.example.com/producer/messages")
|
|
179
|
+
.to_return(status: 500, body: "Internal Server Error")
|
|
180
|
+
expect { client.notify_user(defaults) }.to raise_error(Minitel::HTTP::ServerError)
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
it "raises on an unexpected success status code" do
|
|
184
|
+
WebMock.stub_request(:post, "https://telex.example.com/producer/messages")
|
|
185
|
+
.to_return(status: 200, body: JSON.generate(success: true))
|
|
186
|
+
expect { client.notify_user(defaults) }.to raise_error(Minitel::HTTP::Error)
|
|
187
|
+
end
|
|
114
188
|
end
|
|
115
189
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
190
|
+
describe "#add_followup" do
|
|
191
|
+
let(:defaults) { { body: "a body", message_uuid: SecureRandom.uuid } }
|
|
192
|
+
let(:client) { described_class.new("https://EXAMPLE-KEY0-0000-0000-000000000000:EXAMPLE-SEC0-0000-0000-000000000000@telex.example.com") }
|
|
193
|
+
let!(:stub) do
|
|
194
|
+
WebMock.stub_request(:post, "https://telex.example.com/producer/messages/#{defaults[:message_uuid]}/followups")
|
|
195
|
+
.to_return(status: 201, body: JSON.generate(success: true))
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
it "posts a proper json body to the producer messages endpoint" do
|
|
199
|
+
client.add_followup(defaults)
|
|
200
|
+
body = JSON.generate(body: "a body")
|
|
201
|
+
expect(stub.with(body: body)).to have_been_requested
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
it "sends basic auth credentials" do
|
|
205
|
+
client.add_followup(defaults)
|
|
206
|
+
expect(stub.with(basic_auth: ["EXAMPLE-KEY0-0000-0000-000000000000", "EXAMPLE-SEC0-0000-0000-000000000000"])).to have_been_requested
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
it "sends correct content-type and user-agent headers" do
|
|
210
|
+
client.add_followup(defaults)
|
|
211
|
+
expect(stub.with(headers: {
|
|
212
|
+
"Content-Type" => "application/json",
|
|
213
|
+
"User-Agent" => "minitel/#{Minitel::VERSION}",
|
|
214
|
+
})).to have_been_requested
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
it "returns a parsed json response" do
|
|
218
|
+
result = client.add_followup(defaults)
|
|
219
|
+
expect(result["success"]).to be(true)
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
it "raises ClientError on a client error response" do
|
|
223
|
+
WebMock.stub_request(:post, "https://telex.example.com/producer/messages/#{defaults[:message_uuid]}/followups")
|
|
224
|
+
.to_return(status: 422, body: JSON.generate(error: "invalid"))
|
|
225
|
+
expect { client.add_followup(defaults) }.to raise_error(Minitel::HTTP::ClientError)
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
it "raises NotFound on a 404 response" do
|
|
229
|
+
WebMock.stub_request(:post, "https://telex.example.com/producer/messages/#{defaults[:message_uuid]}/followups")
|
|
230
|
+
.to_return(status: 404, body: "Not Found")
|
|
231
|
+
expect { client.add_followup(defaults) }.to raise_error(Minitel::HTTP::NotFound)
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
it "raises TooManyRequests on a 429 response" do
|
|
235
|
+
WebMock.stub_request(:post, "https://telex.example.com/producer/messages/#{defaults[:message_uuid]}/followups")
|
|
236
|
+
.to_return(status: 429, body: "Rate Limited")
|
|
237
|
+
expect { client.add_followup(defaults) }.to raise_error(Minitel::HTTP::TooManyRequests)
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
it "raises ServerError on a server error response" do
|
|
241
|
+
WebMock.stub_request(:post, "https://telex.example.com/producer/messages/#{defaults[:message_uuid]}/followups")
|
|
242
|
+
.to_return(status: 500, body: "Internal Server Error")
|
|
243
|
+
expect { client.add_followup(defaults) }.to raise_error(Minitel::HTTP::ServerError)
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
it "raises on an unexpected success status code" do
|
|
247
|
+
WebMock.stub_request(:post, "https://telex.example.com/producer/messages/#{defaults[:message_uuid]}/followups")
|
|
248
|
+
.to_return(status: 200, body: JSON.generate(success: true))
|
|
249
|
+
expect { client.add_followup(defaults) }.to raise_error(Minitel::HTTP::Error)
|
|
250
|
+
end
|
|
119
251
|
end
|
|
120
252
|
end
|
|
@@ -1,41 +1,40 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
describe 'arguments' do
|
|
5
|
-
before do
|
|
6
|
-
@hash = {one: 1, two: 2, uuid: SecureRandom.uuid}
|
|
7
|
-
@required = [:one, :uuid]
|
|
8
|
-
@optional = [:two]
|
|
9
|
-
end
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "spec_helper"
|
|
10
4
|
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
RSpec.describe Minitel::StrictArgs do
|
|
6
|
+
describe ".enforce" do
|
|
7
|
+
let(:input) { { one: 1, two: 2, uuid: SecureRandom.uuid } }
|
|
8
|
+
let(:required_keys) { [:one, :uuid] }
|
|
9
|
+
let(:optional_keys) { [:two] }
|
|
10
|
+
|
|
11
|
+
it "works when all listed args are present" do
|
|
12
|
+
expect { described_class.enforce(input, required_keys, optional_keys, :uuid) }.not_to raise_error
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
it
|
|
16
|
-
|
|
17
|
-
expect {
|
|
15
|
+
it "works when optional args are omitted" do
|
|
16
|
+
input.delete(:two)
|
|
17
|
+
expect { described_class.enforce(input, required_keys, optional_keys, :uuid) }.not_to raise_error
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
it "fails when a key is missing from the arg hash" do
|
|
21
|
-
|
|
22
|
-
expect {
|
|
21
|
+
input.delete(:one)
|
|
22
|
+
expect { described_class.enforce(input, required_keys, optional_keys, :uuid) }.to raise_error(ArgumentError)
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
it "fails when a key is nil" do
|
|
26
|
-
|
|
27
|
-
expect {
|
|
26
|
+
input[:one] = nil
|
|
27
|
+
expect { described_class.enforce(input, required_keys, optional_keys, :uuid) }.to raise_error(ArgumentError)
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
-
it
|
|
31
|
-
|
|
32
|
-
expect {
|
|
30
|
+
it "fails if the uuid column uuid is not a uuid" do
|
|
31
|
+
input[:uuid] = "not a uuid"
|
|
32
|
+
expect { described_class.enforce(input, required_keys, optional_keys, :uuid) }.to raise_error(ArgumentError)
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
-
it
|
|
36
|
-
|
|
37
|
-
expect {
|
|
35
|
+
it "fails if there is an extra key" do
|
|
36
|
+
input[:foo] = 3
|
|
37
|
+
expect { described_class.enforce(input, required_keys, optional_keys, :uuid) }.to raise_error(ArgumentError)
|
|
38
38
|
end
|
|
39
39
|
end
|
|
40
40
|
end
|
|
41
|
-
|
data/spec/spec_helper.rb
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
require
|
|
4
|
-
require
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rubygems"
|
|
4
|
+
require "rspec"
|
|
5
|
+
require "webmock/rspec"
|
|
6
|
+
require "minitel"
|
|
5
7
|
|
|
6
8
|
RSpec.configure do |config|
|
|
9
|
+
config.order = :random
|
|
10
|
+
config.disable_monkey_patching!
|
|
7
11
|
end
|
metadata
CHANGED
|
@@ -1,99 +1,29 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: minitel
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 1.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Will Leinweber
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-05-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
14
|
+
name: json
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- - "
|
|
17
|
+
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '0
|
|
19
|
+
version: '0'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- - "
|
|
24
|
+
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '0
|
|
27
|
-
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: multi_json
|
|
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: guard
|
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
|
44
|
-
requirements:
|
|
45
|
-
- - "~>"
|
|
46
|
-
- !ruby/object:Gem::Version
|
|
47
|
-
version: '2.6'
|
|
48
|
-
type: :development
|
|
49
|
-
prerelease: false
|
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
-
requirements:
|
|
52
|
-
- - "~>"
|
|
53
|
-
- !ruby/object:Gem::Version
|
|
54
|
-
version: '2.6'
|
|
55
|
-
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: guard-rspec
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - "~>"
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: '4.3'
|
|
62
|
-
type: :development
|
|
63
|
-
prerelease: false
|
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
-
requirements:
|
|
66
|
-
- - "~>"
|
|
67
|
-
- !ruby/object:Gem::Version
|
|
68
|
-
version: '4.3'
|
|
69
|
-
- !ruby/object:Gem::Dependency
|
|
70
|
-
name: rspec
|
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
|
72
|
-
requirements:
|
|
73
|
-
- - "~>"
|
|
74
|
-
- !ruby/object:Gem::Version
|
|
75
|
-
version: '3.0'
|
|
76
|
-
type: :development
|
|
77
|
-
prerelease: false
|
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
-
requirements:
|
|
80
|
-
- - "~>"
|
|
81
|
-
- !ruby/object:Gem::Version
|
|
82
|
-
version: '3.0'
|
|
83
|
-
- !ruby/object:Gem::Dependency
|
|
84
|
-
name: webmock
|
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
|
86
|
-
requirements:
|
|
87
|
-
- - "~>"
|
|
88
|
-
- !ruby/object:Gem::Version
|
|
89
|
-
version: '1.20'
|
|
90
|
-
type: :development
|
|
91
|
-
prerelease: false
|
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
-
requirements:
|
|
94
|
-
- - "~>"
|
|
95
|
-
- !ruby/object:Gem::Version
|
|
96
|
-
version: '1.20'
|
|
26
|
+
version: '0'
|
|
97
27
|
description: "\U0001D54B\U0001D53C\U0001D543\U0001D53C\U0001D54F client"
|
|
98
28
|
email:
|
|
99
29
|
- will@bitfission.com
|
|
@@ -104,14 +34,19 @@ files:
|
|
|
104
34
|
- ".github/workflows/ruby.yml"
|
|
105
35
|
- ".gitignore"
|
|
106
36
|
- ".rspec"
|
|
37
|
+
- ".rubocop.yml"
|
|
38
|
+
- ".rubocop_standardrb.yml"
|
|
39
|
+
- ".rubocop_standardrb_overrides.yml"
|
|
40
|
+
- CHANGELOG.md
|
|
41
|
+
- CODEOWNERS
|
|
107
42
|
- Gemfile
|
|
108
43
|
- Guardfile
|
|
109
44
|
- LICENSE
|
|
45
|
+
- README.md
|
|
110
46
|
- Rakefile
|
|
111
|
-
- Readme.md
|
|
112
|
-
- changelog.txt
|
|
113
47
|
- lib/minitel.rb
|
|
114
48
|
- lib/minitel/client.rb
|
|
49
|
+
- lib/minitel/errors.rb
|
|
115
50
|
- lib/minitel/strict_args.rb
|
|
116
51
|
- lib/minitel/version.rb
|
|
117
52
|
- minitel.gemspec
|
|
@@ -130,18 +65,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
130
65
|
requirements:
|
|
131
66
|
- - ">="
|
|
132
67
|
- !ruby/object:Gem::Version
|
|
133
|
-
version: '
|
|
68
|
+
version: '3.2'
|
|
134
69
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
135
70
|
requirements:
|
|
136
71
|
- - ">="
|
|
137
72
|
- !ruby/object:Gem::Version
|
|
138
73
|
version: '0'
|
|
139
74
|
requirements: []
|
|
140
|
-
rubygems_version: 3.
|
|
75
|
+
rubygems_version: 3.5.22
|
|
141
76
|
signing_key:
|
|
142
77
|
specification_version: 4
|
|
143
78
|
summary: "\U0001D54B\U0001D53C\U0001D543\U0001D53C\U0001D54F client: see https://github.com/heroku/telex"
|
|
144
|
-
test_files:
|
|
145
|
-
- spec/minitel/client_spec.rb
|
|
146
|
-
- spec/minitel/strict_args_spec.rb
|
|
147
|
-
- spec/spec_helper.rb
|
|
79
|
+
test_files: []
|
data/changelog.txt
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
0.5.0 2021-08-06
|
|
2
|
-
================
|
|
3
|
-
|
|
4
|
-
also send JSON content type
|
|
5
|
-
move to GitHub Actions
|
|
6
|
-
|
|
7
|
-
0.4.0 XXXX-XX-XX
|
|
8
|
-
================
|
|
9
|
-
|
|
10
|
-
0.3.0 2014-10-21
|
|
11
|
-
================
|
|
12
|
-
|
|
13
|
-
Add Client#add_followup for adding followup to a previous notification
|
|
14
|
-
|
|
15
|
-
0.2.0 2014-10-10
|
|
16
|
-
================
|
|
17
|
-
|
|
18
|
-
Add Client#notify_user for sending notifications to a single user
|
|
19
|
-
|
|
20
|
-
0.1.1 2014-10-08
|
|
21
|
-
================
|
|
22
|
-
|
|
23
|
-
Add a User-Agent header
|
|
24
|
-
|
|
25
|
-
0.1.0 2014-10-08
|
|
26
|
-
================
|
|
27
|
-
|
|
28
|
-
Bump minimum version of Excon to redact passwords on errors
|
|
29
|
-
|
|
30
|
-
0.0.1 2014-10-04
|
|
31
|
-
================
|
|
32
|
-
|
|
33
|
-
initial release
|