minitel 0.1.1 β 0.5.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 +5 -5
- data/.github/workflows/ruby.yml +27 -0
- data/.rspec +2 -0
- data/Rakefile +3 -0
- data/Readme.md +62 -0
- data/changelog.txt +19 -0
- data/lib/minitel.rb +2 -0
- data/lib/minitel/client.rb +35 -31
- data/lib/minitel/strict_args.rb +34 -0
- data/lib/minitel/version.rb +1 -1
- data/minitel.gemspec +4 -1
- data/spec/minitel/client_spec.rb +69 -43
- data/spec/minitel/strict_args_spec.rb +41 -0
- data/spec/spec_helper.rb +1 -7
- metadata +54 -36
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.travis.yml +0 -15
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 03563c34fdb8dddca3107d4d60b304f32f513ec89bcf4ef06a0f606f04be7e89
|
4
|
+
data.tar.gz: accac5e1f917fe04b0854136b06a217eac02759146a85ca60dfd30da7c27b0a8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f3b11eb0db6a955740d89bc5e24ad0f5d85852ff399aa6c82cc8995b44f9a8fd6d594d241577a66bd240bda7d7d1cc02a91667cf8793d7a8b8a7c661f801eba3
|
7
|
+
data.tar.gz: ab39d5c5b79f35c0aeca1a8a11eca36cf90c6e0afbcd18969825b5730f69c5055d244da80f1f73f8ed929d2a2b3138bdef67de7983b40eb6a78d1d5bb88ce504
|
@@ -0,0 +1,27 @@
|
|
1
|
+
name: Ruby
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ master ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ master ]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
test:
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
strategy:
|
13
|
+
matrix:
|
14
|
+
ruby-version: ['2.5', '2.6', '2.7', '3.0']
|
15
|
+
|
16
|
+
steps:
|
17
|
+
- uses: actions/checkout@v2
|
18
|
+
- name: Set up Ruby
|
19
|
+
uses: ruby/setup-ruby@v1
|
20
|
+
with:
|
21
|
+
ruby-version: ${{ matrix.ruby-version }}
|
22
|
+
bundler-cache: true
|
23
|
+
- name: Build and test with Rake
|
24
|
+
run: |
|
25
|
+
gem install bundler
|
26
|
+
bundle install --jobs 4 --retry 3
|
27
|
+
bundle exec rspec
|
data/.rspec
ADDED
data/Rakefile
CHANGED
data/Readme.md
CHANGED
@@ -1,5 +1,67 @@
|
|
1
1
|
# ππβπππΌπ
|
2
2
|
A ππΌππΌπ client
|
3
3
|
|
4
|
+
[](http://badge.fury.io/rb/minitel)
|
4
5
|
[](https://travis-ci.org/heroku/minitel)
|
5
6
|
|
7
|
+
## Producer Credentials
|
8
|
+
|
9
|
+
Get credentials to use by following the instructions here: https://github.com/heroku/engineering-docs/blob/master/components/telex/user-guide.md
|
10
|
+
|
11
|
+
## Installing Minitel
|
12
|
+
You'll need to add our private gemserver first, see here: <https://gemgate-heroku-internal-gems.herokuapp.com/setup-instructions>
|
13
|
+
|
14
|
+
## Quick Setup
|
15
|
+
This will help you send a notification to just yourself, as a sanity check that everything is set up properly
|
16
|
+
|
17
|
+
Before you do this:
|
18
|
+
- Get your producer credentials (above)
|
19
|
+
- get `minitel` (above) and `dotenv` installed locally
|
20
|
+
- Grab your user account id, for example by doing: `heroku api get /account | jq '.id' -r`
|
21
|
+
|
22
|
+
```
|
23
|
+
# .env
|
24
|
+
TELEX_URL = 'https://user:pass@telex.heroku.com'
|
25
|
+
MY_USER_ID = '123'
|
26
|
+
```
|
27
|
+
|
28
|
+
```
|
29
|
+
# minitel-testing.rb or irb
|
30
|
+
require 'dotenv/load'
|
31
|
+
require 'minitel'
|
32
|
+
|
33
|
+
client = Minitel::Client.new(ENV['TELEX_URL'])
|
34
|
+
|
35
|
+
message = client.notify_user(user_uuid: ENV['MY_USER_ID'], title: 'Test Notification', body: 'Test Notification Body.')
|
36
|
+
puts "message " + message['id'] + " sent"
|
37
|
+
```
|
38
|
+
|
39
|
+
Once you run this, you should receive both:
|
40
|
+
- receive an email (eventually, depending on the backlog)
|
41
|
+
- see this in Dashboard's Notification Center
|
42
|
+
|
43
|
+
## Usage Examples
|
44
|
+
|
45
|
+
``` ruby
|
46
|
+
require 'minitel'
|
47
|
+
# create a client
|
48
|
+
client = Minitel::Client.new("https://user:pass@telex.heroku.com")
|
49
|
+
|
50
|
+
# send a notification to the owner and collaborators of an app
|
51
|
+
client.notify_app(app_uuid: '...', title: 'Your database is on fire!', body: 'Sorry.')
|
52
|
+
# => {"id"=>"uuid of message"}
|
53
|
+
|
54
|
+
# send a notification to a user
|
55
|
+
client.notify_user(user_uuid: '...', title: 'Here is your invoice', body: 'You owe us 65k.')
|
56
|
+
# => {"id"=>"uuid of message"}
|
57
|
+
|
58
|
+
# send a notification with an email action
|
59
|
+
# see: https://developers.google.com/gmail/markup/reference/go-to-action
|
60
|
+
client.notify_user(user_uuid: '...',
|
61
|
+
title: 'Here is your invoice',
|
62
|
+
body: 'You owe us 65k.',
|
63
|
+
action: { label: 'View Invoice', url: 'https://heroku.com/invoices/12345-12-98765'})
|
64
|
+
|
65
|
+
# add follow-up to a previous notification
|
66
|
+
client.add_followup(message_uuid: '...', body: 'here are even more details')
|
67
|
+
```
|
data/changelog.txt
CHANGED
@@ -1,3 +1,22 @@
|
|
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
|
+
|
1
20
|
0.1.1 2014-10-08
|
2
21
|
================
|
3
22
|
|
data/lib/minitel.rb
CHANGED
data/lib/minitel/client.rb
CHANGED
@@ -11,53 +11,57 @@ module Minitel
|
|
11
11
|
end
|
12
12
|
self.connection = Excon.new(telex_url,
|
13
13
|
:headers => {
|
14
|
-
"User-Agent" => "minitel/#{Minitel::VERSION} excon/#{Excon::VERSION}"
|
14
|
+
"User-Agent" => "minitel/#{Minitel::VERSION} excon/#{Excon::VERSION}",
|
15
|
+
"Content-Type" => "application/json"
|
15
16
|
}
|
16
17
|
)
|
17
18
|
end
|
18
19
|
|
19
20
|
def notify_app(args)
|
20
|
-
|
21
|
-
|
21
|
+
StrictArgs.enforce(args, [:app_uuid, :body, :title], [:action], :app_uuid)
|
22
|
+
if action = args[:action]
|
23
|
+
StrictArgs.enforce(action, [:label, :url])
|
24
|
+
end
|
25
|
+
post_message('app', args[:app_uuid], args[:title], args[:body], action)
|
26
|
+
end
|
27
|
+
|
28
|
+
def notify_user(args)
|
29
|
+
StrictArgs.enforce(args, [:user_uuid, :body, :title], [:action], :user_uuid)
|
30
|
+
if action = args[:action]
|
31
|
+
StrictArgs.enforce(action, [:label, :url])
|
32
|
+
end
|
33
|
+
post_message('user', args[:user_uuid], args[:title], args[:body], action)
|
34
|
+
end
|
35
|
+
|
36
|
+
def add_followup(args)
|
37
|
+
StrictArgs.enforce(args, [:message_uuid, :body], [], :message_uuid)
|
38
|
+
followup = { body: args[:body] }
|
39
|
+
post("/producer/messages/#{args[:message_uuid]}/followups", followup)
|
40
|
+
end
|
22
41
|
|
23
|
-
|
24
|
-
ensure_no_nils(args, keywords)
|
25
|
-
ensure_is_uuid(app_uuid)
|
42
|
+
private
|
26
43
|
|
44
|
+
def post_message(type, id, title, body, action)
|
27
45
|
message = {
|
28
46
|
title: title,
|
29
47
|
body: body,
|
30
|
-
target: {type:
|
48
|
+
target: {type: type, id: id}
|
31
49
|
}
|
32
50
|
|
33
|
-
|
34
|
-
|
35
|
-
body: MultiJson.dump(message),
|
36
|
-
expects: 201)
|
37
|
-
|
38
|
-
MultiJson.load(response.body)
|
39
|
-
end
|
40
|
-
|
41
|
-
private
|
42
|
-
|
43
|
-
# A Ruby 2.1 required keyword argument sorta backport
|
44
|
-
def ensure_strict_args(keys, accept_keys)
|
45
|
-
if keys.sort != accept_keys.sort
|
46
|
-
delta = accept_keys - keys
|
47
|
-
raise ArgumentError, "missing or extra keywords: #{delta.join(', ')}"
|
51
|
+
if action
|
52
|
+
message.merge!(action: action)
|
48
53
|
end
|
49
|
-
end
|
50
54
|
|
51
|
-
|
52
|
-
keys.each do |key|
|
53
|
-
raise ArgumentError, "keyword #{key} is nil" unless args[key]
|
54
|
-
end
|
55
|
+
post("/producer/messages", message)
|
55
56
|
end
|
56
57
|
|
57
|
-
def
|
58
|
-
|
59
|
-
|
60
|
-
|
58
|
+
def post(path, body)
|
59
|
+
response = connection.post(
|
60
|
+
path: path,
|
61
|
+
body: MultiJson.dump(body),
|
62
|
+
expects: 201)
|
63
|
+
|
64
|
+
MultiJson.load(response.body)
|
61
65
|
end
|
62
66
|
|
63
67
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Minitel
|
2
|
+
module StrictArgs
|
3
|
+
extend self
|
4
|
+
def enforce(args, required, allowed=[], uuid_field=nil)
|
5
|
+
ensure_strict_args(args.keys, required, allowed)
|
6
|
+
ensure_no_nils(args, required)
|
7
|
+
ensure_is_uuid(args[uuid_field]) if uuid_field
|
8
|
+
end
|
9
|
+
|
10
|
+
# A Ruby 2.1 required keyword argument sorta backport
|
11
|
+
def ensure_strict_args(keys, required, allowed)
|
12
|
+
missing = required - keys
|
13
|
+
unless missing.empty?
|
14
|
+
raise ArgumentError, "missing keywords: #{missing.join(', ')}"
|
15
|
+
end
|
16
|
+
unknown = keys - (required + allowed)
|
17
|
+
unless unknown.empty?
|
18
|
+
raise ArgumentError, "extra keywords: #{unknown.join(', ')}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def ensure_no_nils(args, keys)
|
23
|
+
keys.each do |key|
|
24
|
+
raise ArgumentError, "keyword #{key} is nil" unless args[key]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def ensure_is_uuid(uuid)
|
29
|
+
unless uuid =~ /\A[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}\z/i
|
30
|
+
raise ArgumentError, "'#{uuid.inspect}' not formated like a uuid"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/minitel/version.rb
CHANGED
data/minitel.gemspec
CHANGED
@@ -17,8 +17,11 @@ Gem::Specification.new do |gem|
|
|
17
17
|
gem.platform = Gem::Platform::RUBY
|
18
18
|
gem.license = "MIT"
|
19
19
|
|
20
|
-
gem.add_runtime_dependency 'excon', '~> 0
|
20
|
+
gem.add_runtime_dependency 'excon', '~> 0.20'
|
21
21
|
gem.add_runtime_dependency 'multi_json', '~> 1.0'
|
22
22
|
|
23
|
+
gem.add_development_dependency 'guard', '~> 2.6'
|
24
|
+
gem.add_development_dependency 'guard-rspec', '~> 4.3'
|
23
25
|
gem.add_development_dependency 'rspec', '~> 3.0'
|
26
|
+
gem.add_development_dependency 'webmock', '~> 1.20'
|
24
27
|
end
|
data/spec/minitel/client_spec.rb
CHANGED
@@ -28,67 +28,93 @@ describe Minitel::Client, '#initialize' do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
describe Minitel::Client, '#notify_app' do
|
31
|
-
describe '
|
31
|
+
describe 'action' do
|
32
32
|
let(:defaults) { {title: 'a title', body: 'a body', app_uuid: SecureRandom.uuid} }
|
33
|
-
let(:client) { Minitel::Client.new('https://
|
33
|
+
let(:client) { Minitel::Client.new('https://telex.com') }
|
34
34
|
|
35
35
|
before do
|
36
|
-
|
36
|
+
@stub = stub_request(:post, 'https://telex.com/producer/messages').
|
37
|
+
to_return(status: 201, body: MultiJson.encode(success: true))
|
37
38
|
end
|
38
39
|
|
39
|
-
it '
|
40
|
-
|
40
|
+
it 'posts a proper json body to the producer messages endpoint' do
|
41
|
+
client.notify_app(defaults)
|
42
|
+
body = MultiJson.encode(
|
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
47
|
end
|
42
48
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
49
|
+
it 'supports actions' do
|
50
|
+
action = { label: 'omg', url: 'https://foo' }
|
51
|
+
client.notify_app(defaults.merge(action: action))
|
52
|
+
post_with_action = @stub.with do |req|
|
53
|
+
body = MultiJson.decode(req.body, symbolize_keys: true)
|
54
|
+
body[:action] == action
|
47
55
|
end
|
48
|
-
|
49
|
-
it "fails when #{key} is nil" do
|
50
|
-
defaults[key] = nil
|
51
|
-
expect { client.notify_app(defaults) }.to raise_error(ArgumentError)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'fails if app_uuid is not a uuid' do
|
56
|
-
defaults[:app_uuid] = "not a uuid"
|
57
|
-
expect { client.notify_app(defaults) }.to raise_error(ArgumentError)
|
56
|
+
expect(post_with_action).to have_been_requested
|
58
57
|
end
|
59
58
|
|
60
|
-
it '
|
61
|
-
|
62
|
-
expect
|
59
|
+
it 'returns a parsed json response' do
|
60
|
+
result = client.notify_app(defaults)
|
61
|
+
expect(result['success']).to eq(true)
|
63
62
|
end
|
64
63
|
end
|
64
|
+
end
|
65
65
|
|
66
|
-
describe 'action' do
|
67
|
-
let(:defaults) { {title: 'a title', body: 'a body', app_uuid: SecureRandom.uuid} }
|
68
|
-
let(:client) { Minitel::Client.new('https://u:p@h.com') }
|
69
66
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
body = MultiJson.dump({
|
74
|
-
title: 'a title',
|
75
|
-
body: 'a body',
|
76
|
-
target: {type: 'app', id: defaults[:app_uuid]}
|
77
|
-
})
|
67
|
+
describe Minitel::Client, '#notify_user' do
|
68
|
+
let(:defaults) { {title: 'a title', body: 'a body', user_uuid: SecureRandom.uuid} }
|
69
|
+
let(:client) { Minitel::Client.new('https://telex.com') }
|
78
70
|
|
79
|
-
|
80
|
-
|
71
|
+
before do
|
72
|
+
@stub = stub_request(:post, 'https://telex.com/producer/messages').
|
73
|
+
to_return(status: 201, body: MultiJson.encode(success: true))
|
74
|
+
end
|
81
75
|
|
82
|
-
|
83
|
-
|
76
|
+
it 'posts a proper json body to the producer messages endpoint' do
|
77
|
+
client.notify_user(defaults)
|
78
|
+
body = MultiJson.encode(
|
79
|
+
title: 'a title',
|
80
|
+
body: 'a body',
|
81
|
+
target: {type: 'user', id: defaults[:user_uuid]})
|
82
|
+
expect(@stub.with(body: body)).to have_been_requested
|
83
|
+
end
|
84
84
|
|
85
|
-
|
86
|
-
|
85
|
+
it 'supports actions' do
|
86
|
+
action = { label: 'omg', url: 'https://foo' }
|
87
|
+
client.notify_user(defaults.merge(action: action))
|
88
|
+
post_with_action = @stub.with do |req|
|
89
|
+
body = MultiJson.decode(req.body, symbolize_keys: true)
|
90
|
+
body[:action] == action
|
87
91
|
end
|
92
|
+
expect(post_with_action).to have_been_requested
|
93
|
+
end
|
88
94
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
95
|
+
it 'returns a parsed json response' do
|
96
|
+
result = client.notify_user(defaults)
|
97
|
+
expect(result['success']).to eq(true)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe Minitel::Client, '#add_followup' do
|
102
|
+
let(:defaults) { {body: 'a body', message_uuid: SecureRandom.uuid} }
|
103
|
+
let(:client) { Minitel::Client.new('https://telex.com') }
|
104
|
+
|
105
|
+
before do
|
106
|
+
@stub = stub_request(:post, "https://telex.com/producer/messages/#{defaults[:message_uuid]}/followups").
|
107
|
+
to_return(status: 201, body: MultiJson.encode(success: true))
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'posts a proper json body to the producer messages endpoint' do
|
111
|
+
client.add_followup(defaults)
|
112
|
+
body = MultiJson.encode(body: 'a body')
|
113
|
+
expect(@stub.with(body: body)).to have_been_requested
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'returns a parsed json response' do
|
117
|
+
result = client.add_followup(defaults)
|
118
|
+
expect(result['success']).to eq(true)
|
93
119
|
end
|
94
120
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Minitel::StrictArgs, '.enforce' do
|
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
|
10
|
+
|
11
|
+
it 'works when all listed args are present' do
|
12
|
+
expect { Minitel::StrictArgs.enforce(@hash, @required, @optional, :uuid) }.to_not raise_error
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'works when optional args are omitted' do
|
16
|
+
@hash.delete(:two)
|
17
|
+
expect { Minitel::StrictArgs.enforce(@hash, @required, @optional, :uuid) }.to_not raise_error
|
18
|
+
end
|
19
|
+
|
20
|
+
it "fails when a key is missing from the arg hash" do
|
21
|
+
@hash.delete(:one)
|
22
|
+
expect { Minitel::StrictArgs.enforce(@hash, @required, @optional, :uuid) }.to raise_error(ArgumentError)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "fails when a key is nil" do
|
26
|
+
@hash[:one] = nil
|
27
|
+
expect { Minitel::StrictArgs.enforce(@hash, @required, @optional, :uuid) }.to raise_error(ArgumentError)
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'fails if the uuid column uuid is not a uuid' do
|
31
|
+
@hash[:uuid] = "not a uuid"
|
32
|
+
expect { Minitel::StrictArgs.enforce(@hash, @required, @optional, :uuid) }.to raise_error(ArgumentError)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'fails if there is an extra key' do
|
36
|
+
@hash.merge!( {foo: 3} )
|
37
|
+
expect { Minitel::StrictArgs.enforce(@hash, @required, @optional, :uuid) }.to raise_error(ArgumentError)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,43 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minitel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Will Leinweber
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
|
-
cert_chain:
|
11
|
-
-
|
12
|
-
-----BEGIN CERTIFICATE-----
|
13
|
-
MIIDLDCCAhSgAwIBAgIBAjANBgkqhkiG9w0BAQUFADA8MQwwCgYDVQQDDANnZWQx
|
14
|
-
FzAVBgoJkiaJk/IsZAEZFgdfYWVyaWVfMRMwEQYKCZImiZPyLGQBGRYDb3JnMB4X
|
15
|
-
DTE0MTAwMzIxNTAzOVoXDTE1MTAwMzIxNTAzOVowPDEMMAoGA1UEAwwDZ2VkMRcw
|
16
|
-
FQYKCZImiZPyLGQBGRYHX2FlcmllXzETMBEGCgmSJomT8ixkARkWA29yZzCCASIw
|
17
|
-
DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL2ktZGc4m4haPvYmfO3e+iS8/fz
|
18
|
-
jgNlufSZRdzgCLHrpbhah3m5/zqHyoZNiTcc8Yy1nENd3WGff9TY8c+l0jpngKWl
|
19
|
-
OcUlokbLCPeshunm69Vp27yp0gzfDSh0YpgRAEpWZo3S1z2u406TFhUg6dGhifYE
|
20
|
-
b+qFpRTmXwqTRMHySR47Qd9hvVv4X0lLJ1uQZzw0GdLh2vi4QOFogA9V84cR+eXZ
|
21
|
-
nUrVVozokeeGDPzQT8YcEPe4xOcRBdGw39FXtkdv5rV+VPWBBGHzS85OWJTgPyB/
|
22
|
-
2ORYZyzxEJh9jm2jj/HY+DMvfLltUoxbcQqUlptFcKAXxN+XCHtyvZWHfsUCAwEA
|
23
|
-
AaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFIhJl2mW1q84
|
24
|
-
NnEK6bUn+w3IKVvIMA0GCSqGSIb3DQEBBQUAA4IBAQAZ6lk5u35ga+6qIx+rWMW9
|
25
|
-
o3gnYbsslgPaBFp2JrmzoMv6sWGhR5khgiCsa3B/A9LEb8HOmih8/rbL5+w1gVk1
|
26
|
-
aljsXhed340GExBCh9zQr31dGyZUQ3sxyfc0r9TjqY2kPl7mFYO0CAwHVeWCFQVx
|
27
|
-
WLNJFp9CvlBd8xTLUcWjRJ5tfxFwyOQ4i7C+02pYAnqEClmpv6x7n6+I8elW/uPG
|
28
|
-
5bkhRfJHSD/uX/cHbjmopLRbPlHrGbZTDIP4VEC5l0QLPiZ1nhKQnf3+U0+FSy2o
|
29
|
-
CCngcLCR6q+mLf+A4L54VxmyrtFpcBfmkU72QYyf3vJ9QipL3XbvJvbpPkWSn1DX
|
30
|
-
-----END CERTIFICATE-----
|
31
|
-
date: 2014-10-08 00:00:00.000000000 Z
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-08-08 00:00:00.000000000 Z
|
32
12
|
dependencies:
|
33
13
|
- !ruby/object:Gem::Dependency
|
34
14
|
name: excon
|
35
15
|
requirement: !ruby/object:Gem::Requirement
|
36
16
|
requirements:
|
37
17
|
- - "~>"
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: '0'
|
40
|
-
- - ">="
|
41
18
|
- !ruby/object:Gem::Version
|
42
19
|
version: '0.20'
|
43
20
|
type: :runtime
|
@@ -45,9 +22,6 @@ dependencies:
|
|
45
22
|
version_requirements: !ruby/object:Gem::Requirement
|
46
23
|
requirements:
|
47
24
|
- - "~>"
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: '0'
|
50
|
-
- - ">="
|
51
25
|
- !ruby/object:Gem::Version
|
52
26
|
version: '0.20'
|
53
27
|
- !ruby/object:Gem::Dependency
|
@@ -64,6 +38,34 @@ dependencies:
|
|
64
38
|
- - "~>"
|
65
39
|
- !ruby/object:Gem::Version
|
66
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'
|
67
69
|
- !ruby/object:Gem::Dependency
|
68
70
|
name: rspec
|
69
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -78,6 +80,20 @@ dependencies:
|
|
78
80
|
- - "~>"
|
79
81
|
- !ruby/object:Gem::Version
|
80
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'
|
81
97
|
description: "\U0001D54B\U0001D53C\U0001D543\U0001D53C\U0001D54F client"
|
82
98
|
email:
|
83
99
|
- will@bitfission.com
|
@@ -85,8 +101,9 @@ executables: []
|
|
85
101
|
extensions: []
|
86
102
|
extra_rdoc_files: []
|
87
103
|
files:
|
104
|
+
- ".github/workflows/ruby.yml"
|
88
105
|
- ".gitignore"
|
89
|
-
- ".
|
106
|
+
- ".rspec"
|
90
107
|
- Gemfile
|
91
108
|
- Guardfile
|
92
109
|
- LICENSE
|
@@ -95,15 +112,17 @@ files:
|
|
95
112
|
- changelog.txt
|
96
113
|
- lib/minitel.rb
|
97
114
|
- lib/minitel/client.rb
|
115
|
+
- lib/minitel/strict_args.rb
|
98
116
|
- lib/minitel/version.rb
|
99
117
|
- minitel.gemspec
|
100
118
|
- spec/minitel/client_spec.rb
|
119
|
+
- spec/minitel/strict_args_spec.rb
|
101
120
|
- spec/spec_helper.rb
|
102
121
|
homepage: https://github.com/heroku/minitel
|
103
122
|
licenses:
|
104
123
|
- MIT
|
105
124
|
metadata: {}
|
106
|
-
post_install_message:
|
125
|
+
post_install_message:
|
107
126
|
rdoc_options: []
|
108
127
|
require_paths:
|
109
128
|
- lib
|
@@ -118,12 +137,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
118
137
|
- !ruby/object:Gem::Version
|
119
138
|
version: '0'
|
120
139
|
requirements: []
|
121
|
-
|
122
|
-
|
123
|
-
signing_key:
|
140
|
+
rubygems_version: 3.2.22
|
141
|
+
signing_key:
|
124
142
|
specification_version: 4
|
125
143
|
summary: "\U0001D54B\U0001D53C\U0001D543\U0001D53C\U0001D54F client: see https://github.com/heroku/telex"
|
126
144
|
test_files:
|
127
145
|
- spec/minitel/client_spec.rb
|
146
|
+
- spec/minitel/strict_args_spec.rb
|
128
147
|
- spec/spec_helper.rb
|
129
|
-
has_rdoc:
|
checksums.yaml.gz.sig
DELETED
Binary file
|
data.tar.gz.sig
DELETED
Binary file
|
data/.travis.yml
DELETED
metadata.gz.sig
DELETED
Binary file
|