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 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