minitel 0.6.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 +2 -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 +16 -85
- data/changelog.txt +0 -38
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,15 +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
|
|
107
41
|
- CODEOWNERS
|
|
108
42
|
- Gemfile
|
|
109
43
|
- Guardfile
|
|
110
44
|
- LICENSE
|
|
45
|
+
- README.md
|
|
111
46
|
- Rakefile
|
|
112
|
-
- Readme.md
|
|
113
|
-
- changelog.txt
|
|
114
47
|
- lib/minitel.rb
|
|
115
48
|
- lib/minitel/client.rb
|
|
49
|
+
- lib/minitel/errors.rb
|
|
116
50
|
- lib/minitel/strict_args.rb
|
|
117
51
|
- lib/minitel/version.rb
|
|
118
52
|
- minitel.gemspec
|
|
@@ -131,18 +65,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
131
65
|
requirements:
|
|
132
66
|
- - ">="
|
|
133
67
|
- !ruby/object:Gem::Version
|
|
134
|
-
version: '
|
|
68
|
+
version: '3.2'
|
|
135
69
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
136
70
|
requirements:
|
|
137
71
|
- - ">="
|
|
138
72
|
- !ruby/object:Gem::Version
|
|
139
73
|
version: '0'
|
|
140
74
|
requirements: []
|
|
141
|
-
rubygems_version: 3.5.
|
|
75
|
+
rubygems_version: 3.5.22
|
|
142
76
|
signing_key:
|
|
143
77
|
specification_version: 4
|
|
144
78
|
summary: "\U0001D54B\U0001D53C\U0001D543\U0001D53C\U0001D54F client: see https://github.com/heroku/telex"
|
|
145
|
-
test_files:
|
|
146
|
-
- spec/minitel/client_spec.rb
|
|
147
|
-
- spec/minitel/strict_args_spec.rb
|
|
148
|
-
- spec/spec_helper.rb
|
|
79
|
+
test_files: []
|
data/changelog.txt
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
0.6.0 2025-05-01
|
|
2
|
-
================
|
|
3
|
-
|
|
4
|
-
Allow use of newer versions of excon
|
|
5
|
-
|
|
6
|
-
0.5.0 2021-08-06
|
|
7
|
-
================
|
|
8
|
-
|
|
9
|
-
also send JSON content type
|
|
10
|
-
move to GitHub Actions
|
|
11
|
-
|
|
12
|
-
0.4.0 XXXX-XX-XX
|
|
13
|
-
================
|
|
14
|
-
|
|
15
|
-
0.3.0 2014-10-21
|
|
16
|
-
================
|
|
17
|
-
|
|
18
|
-
Add Client#add_followup for adding followup to a previous notification
|
|
19
|
-
|
|
20
|
-
0.2.0 2014-10-10
|
|
21
|
-
================
|
|
22
|
-
|
|
23
|
-
Add Client#notify_user for sending notifications to a single user
|
|
24
|
-
|
|
25
|
-
0.1.1 2014-10-08
|
|
26
|
-
================
|
|
27
|
-
|
|
28
|
-
Add a User-Agent header
|
|
29
|
-
|
|
30
|
-
0.1.0 2014-10-08
|
|
31
|
-
================
|
|
32
|
-
|
|
33
|
-
Bump minimum version of Excon to redact passwords on errors
|
|
34
|
-
|
|
35
|
-
0.0.1 2014-10-04
|
|
36
|
-
================
|
|
37
|
-
|
|
38
|
-
initial release
|