minitel 0.1.1 β†’ 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 61598e19639554992b7c083cac60ad2d778bdfda
4
- data.tar.gz: 4acd579629f98f79f24533de0dbe40461c51dbe6
2
+ SHA256:
3
+ metadata.gz: 03563c34fdb8dddca3107d4d60b304f32f513ec89bcf4ef06a0f606f04be7e89
4
+ data.tar.gz: accac5e1f917fe04b0854136b06a217eac02759146a85ca60dfd30da7c27b0a8
5
5
  SHA512:
6
- metadata.gz: 3d474d99a5d486cfbd0c4395bdd6f6c4ed0fd83abbe3d769c89adfe6acda17dd84c43c69211395084833be3e2c18a6bfd4cd0648635be3aad6aa5d5121dd6171
7
- data.tar.gz: 82219867b18537333452e8011340fa6a5ba7e59809160c20ca1227b2300fcad938202864489febec9f3814836d72d57d743ed3238aa3749da2a26538f0acd659
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
@@ -0,0 +1,2 @@
1
+ --color
2
+
data/Rakefile CHANGED
@@ -1 +1,4 @@
1
1
  require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+ RSpec::Core::RakeTask.new(:spec)
4
+ task default: :spec
data/Readme.md CHANGED
@@ -1,5 +1,67 @@
1
1
  # 𝕄𝕀ℕ𝕀𝕋𝔼𝕃
2
2
  A 𝕋𝔼𝕃𝔼𝕏 client
3
3
 
4
+ [![Gem Version](https://badge.fury.io/rb/minitel.svg)](http://badge.fury.io/rb/minitel)
4
5
  [![Build Status](https://travis-ci.org/heroku/minitel.svg?branch=master)](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
@@ -1,3 +1,5 @@
1
+ require 'securerandom'
1
2
  require 'minitel/version'
2
3
  require 'minitel/client'
4
+ require 'minitel/strict_args'
3
5
 
@@ -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
- keywords = [:app_uuid, :body, :title]
21
- app_uuid, body, title = args[:app_uuid], args[:body], args[:title]
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
- ensure_strict_args(args.keys, keywords)
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: 'app', id: app_uuid}
48
+ target: {type: type, id: id}
31
49
  }
32
50
 
33
- response = connection.post(
34
- path: "/producer/messages",
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
- def ensure_no_nils(args, keys)
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 ensure_is_uuid(uuid)
58
- 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
59
- raise ArgumentError, "not formated like a uuid"
60
- end
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
@@ -1,3 +1,3 @@
1
1
  module Minitel
2
- VERSION = '0.1.1'
2
+ VERSION = '0.5.0'
3
3
  end
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', ">= 0.20"
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
@@ -28,67 +28,93 @@ describe Minitel::Client, '#initialize' do
28
28
  end
29
29
 
30
30
  describe Minitel::Client, '#notify_app' do
31
- describe 'arguments' do
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://u:p@h.com') }
33
+ let(:client) { Minitel::Client.new('https://telex.com') }
34
34
 
35
35
  before do
36
- Excon.stub({}, body: MultiJson.dump({}), status: 201)
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 'works when all 3 are present' do
40
- expect { client.notify_app(defaults) }.to_not raise_error
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
- [:title, :body, :app_uuid].each do |key|
44
- it "fails when #{key} is missing from the arg hash" do
45
- defaults.delete(key)
46
- expect { client.notify_app(defaults) }.to raise_error(ArgumentError)
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 'fails if there is an extra key' do
61
- defaults.merge!( {foo: 3} )
62
- expect { client.notify_app(defaults) }.to raise_error(ArgumentError)
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
- before do
71
- request = {path: '/producer/messages', method: :post}
72
- response = {status: 201, body: MultiJson.dump({'success' => true})}
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
- Excon.stub(request.merge(body: body), response)
80
- end
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
- it 'posts a proper json body to the producer messages endpoint' do
83
- expect{ client.notify_app(defaults) }.to_not raise_error
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
- unstubbed_body = defaults.merge({title: 'bad title'})
86
- expect{ client.notify_app(unstubbed_body) }.to raise_error(Excon::Errors::StubNotFound)
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
- it 'returns a parsed json response' do
90
- result = client.notify_app(defaults)
91
- expect(result['success']).to eq(true)
92
- end
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
@@ -1,13 +1,7 @@
1
1
  require 'rubygems'
2
2
  require 'rspec'
3
+ require 'webmock/rspec'
3
4
  require 'minitel'
4
5
 
5
6
  RSpec.configure do |config|
6
- config.before(:all) do
7
- Excon.defaults[:mock] = true
8
- end
9
-
10
- config.after(:each) do
11
- Excon.stubs.clear
12
- end
13
7
  end
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.1.1
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
- - ".travis.yml"
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
- rubyforge_project:
122
- rubygems_version: 2.2.2
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
@@ -1,15 +0,0 @@
1
- cache: bundler
2
- language: ruby
3
- rvm:
4
- - 2.1.3
5
- - 2.1.2
6
- - 2.1.1
7
- - 2.1.0
8
- - 2.0.0
9
- - 1.9.3
10
- - 1.9.2
11
- - ruby-head
12
- script: bundle exec rspec
13
- notifications:
14
- email: false
15
-
metadata.gz.sig DELETED
Binary file