minitel 0.1.1 β 0.2.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
- checksums.yaml.gz.sig +0 -0
- data/Readme.md +1 -0
- data/changelog.txt +5 -0
- data/lib/minitel/client.rb +11 -29
- data/lib/minitel/strict_args.rb +30 -0
- data/lib/minitel/version.rb +1 -1
- data/lib/minitel.rb +1 -0
- data/spec/minitel/client_spec.rb +30 -35
- data/spec/minitel/strict_args_spec.rb +35 -0
- data.tar.gz.sig +0 -0
- metadata +5 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd03aab2f252c52edc3cfffe5d961c5c11969186
|
4
|
+
data.tar.gz: 5628686bc64d830a1624f63a798f90f9374b6349
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 22c953d027651ba60ae09c5ec203131885fdc1aaf9fa95b4bcf1959244f7b4111f988d75e4945a211d241050b65800da82b6cca3dbdaa40918e39e0a8d8113e3
|
7
|
+
data.tar.gz: 50e829ace42d49d3d2225900c23d7a13e21adbfc74bf8b546f9a92d96b79bfb8adf4040740706cfd85b7d87f773bc4fd3faf3058a56d9eacf050a52367e4a04e
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/Readme.md
CHANGED
data/changelog.txt
CHANGED
data/lib/minitel/client.rb
CHANGED
@@ -17,17 +17,22 @@ module Minitel
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def notify_app(args)
|
20
|
-
|
21
|
-
|
20
|
+
StrictArgs.enforce(args, [:app_uuid, :body, :title], :app_uuid)
|
21
|
+
post_message('app', args[:app_uuid], args[:title], args[:body])
|
22
|
+
end
|
23
|
+
|
24
|
+
def notify_user(args)
|
25
|
+
StrictArgs.enforce(args, [:user_uuid, :body, :title], :user_uuid)
|
26
|
+
post_message('user', args[:user_uuid], args[:title], args[:body])
|
27
|
+
end
|
22
28
|
|
23
|
-
|
24
|
-
ensure_no_nils(args, keywords)
|
25
|
-
ensure_is_uuid(app_uuid)
|
29
|
+
private
|
26
30
|
|
31
|
+
def post_message(type, id, title, body)
|
27
32
|
message = {
|
28
33
|
title: title,
|
29
34
|
body: body,
|
30
|
-
target: {type:
|
35
|
+
target: {type: type, id: id}
|
31
36
|
}
|
32
37
|
|
33
38
|
response = connection.post(
|
@@ -37,28 +42,5 @@ module Minitel
|
|
37
42
|
|
38
43
|
MultiJson.load(response.body)
|
39
44
|
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(', ')}"
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
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
|
-
end
|
56
|
-
|
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
|
61
|
-
end
|
62
|
-
|
63
45
|
end
|
64
46
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Minitel
|
2
|
+
module StrictArgs
|
3
|
+
extend self
|
4
|
+
def enforce(args, keywords, uuid_field)
|
5
|
+
ensure_strict_args(args.keys, keywords)
|
6
|
+
ensure_no_nils(args, keywords)
|
7
|
+
ensure_is_uuid(args[uuid_field])
|
8
|
+
end
|
9
|
+
|
10
|
+
# A Ruby 2.1 required keyword argument sorta backport
|
11
|
+
def ensure_strict_args(keys, accept_keys)
|
12
|
+
if keys.sort != accept_keys.sort
|
13
|
+
delta = accept_keys - keys
|
14
|
+
raise ArgumentError, "missing or extra keywords: #{delta.join(', ')}"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def ensure_no_nils(args, keys)
|
19
|
+
keys.each do |key|
|
20
|
+
raise ArgumentError, "keyword #{key} is nil" unless args[key]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def ensure_is_uuid(uuid)
|
25
|
+
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
|
26
|
+
raise ArgumentError, "'#{uuid.inspect}' not formated like a uuid"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/minitel/version.rb
CHANGED
data/lib/minitel.rb
CHANGED
data/spec/minitel/client_spec.rb
CHANGED
@@ -28,41 +28,6 @@ describe Minitel::Client, '#initialize' do
|
|
28
28
|
end
|
29
29
|
|
30
30
|
describe Minitel::Client, '#notify_app' do
|
31
|
-
describe 'arguments' do
|
32
|
-
let(:defaults) { {title: 'a title', body: 'a body', app_uuid: SecureRandom.uuid} }
|
33
|
-
let(:client) { Minitel::Client.new('https://u:p@h.com') }
|
34
|
-
|
35
|
-
before do
|
36
|
-
Excon.stub({}, body: MultiJson.dump({}), status: 201)
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'works when all 3 are present' do
|
40
|
-
expect { client.notify_app(defaults) }.to_not raise_error
|
41
|
-
end
|
42
|
-
|
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)
|
47
|
-
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)
|
58
|
-
end
|
59
|
-
|
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)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
31
|
describe 'action' do
|
67
32
|
let(:defaults) { {title: 'a title', body: 'a body', app_uuid: SecureRandom.uuid} }
|
68
33
|
let(:client) { Minitel::Client.new('https://u:p@h.com') }
|
@@ -92,3 +57,33 @@ describe Minitel::Client, '#notify_app' do
|
|
92
57
|
end
|
93
58
|
end
|
94
59
|
end
|
60
|
+
|
61
|
+
|
62
|
+
describe Minitel::Client, '#notify_user' do
|
63
|
+
let(:defaults) { {title: 'a title', body: 'a body', user_uuid: SecureRandom.uuid} }
|
64
|
+
let(:client) { Minitel::Client.new('https://u:p@h.com') }
|
65
|
+
|
66
|
+
before do
|
67
|
+
request = {path: '/producer/messages', method: :post}
|
68
|
+
response = {status: 201, body: MultiJson.dump({'success' => true})}
|
69
|
+
body = MultiJson.dump({
|
70
|
+
title: 'a title',
|
71
|
+
body: 'a body',
|
72
|
+
target: {type: 'user', id: defaults[:user_uuid]}
|
73
|
+
})
|
74
|
+
|
75
|
+
Excon.stub(request.merge(body: body), response)
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'posts a proper json body to the producer messages endpoint' do
|
79
|
+
expect{ client.notify_user(defaults) }.to_not raise_error
|
80
|
+
|
81
|
+
unstubbed_body = defaults.merge({title: 'bad title'})
|
82
|
+
expect{ client.notify_user(unstubbed_body) }.to raise_error(Excon::Errors::StubNotFound)
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'returns a parsed json response' do
|
86
|
+
result = client.notify_user(defaults)
|
87
|
+
expect(result['success']).to eq(true)
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,35 @@
|
|
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
|
+
@keys = @hash.keys
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'works when all listed args are present' do
|
11
|
+
expect { Minitel::StrictArgs.enforce(@hash, @keys, :uuid) }.to_not raise_error
|
12
|
+
end
|
13
|
+
|
14
|
+
it "fails when a key is missing from the arg hash" do
|
15
|
+
@hash.delete(:one)
|
16
|
+
expect { Minitel::StrictArgs.enforce(@hash, @keys, :uuid) }.to raise_error(ArgumentError)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "fails when a key is nil" do
|
20
|
+
@hash[:one] = nil
|
21
|
+
expect { Minitel::StrictArgs.enforce(@hash, @keys, :uuid) }.to raise_error(ArgumentError)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'fails if the uuid column uuid is not a uuid' do
|
25
|
+
@hash[:uuid] = "not a uuid"
|
26
|
+
expect { Minitel::StrictArgs.enforce(@hash, @keys, :uuid) }.to raise_error(ArgumentError)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'fails if there is an extra key' do
|
30
|
+
@hash.merge!( {foo: 3} )
|
31
|
+
expect { Minitel::StrictArgs.enforce(@hash, @keys, :uuid) }.to raise_error(ArgumentError)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minitel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Will Leinweber
|
@@ -28,7 +28,7 @@ cert_chain:
|
|
28
28
|
5bkhRfJHSD/uX/cHbjmopLRbPlHrGbZTDIP4VEC5l0QLPiZ1nhKQnf3+U0+FSy2o
|
29
29
|
CCngcLCR6q+mLf+A4L54VxmyrtFpcBfmkU72QYyf3vJ9QipL3XbvJvbpPkWSn1DX
|
30
30
|
-----END CERTIFICATE-----
|
31
|
-
date: 2014-10-
|
31
|
+
date: 2014-10-10 00:00:00.000000000 Z
|
32
32
|
dependencies:
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: excon
|
@@ -95,9 +95,11 @@ files:
|
|
95
95
|
- changelog.txt
|
96
96
|
- lib/minitel.rb
|
97
97
|
- lib/minitel/client.rb
|
98
|
+
- lib/minitel/strict_args.rb
|
98
99
|
- lib/minitel/version.rb
|
99
100
|
- minitel.gemspec
|
100
101
|
- spec/minitel/client_spec.rb
|
102
|
+
- spec/minitel/strict_args_spec.rb
|
101
103
|
- spec/spec_helper.rb
|
102
104
|
homepage: https://github.com/heroku/minitel
|
103
105
|
licenses:
|
@@ -125,5 +127,6 @@ specification_version: 4
|
|
125
127
|
summary: "\U0001D54B\U0001D53C\U0001D543\U0001D53C\U0001D54F client: see https://github.com/heroku/telex"
|
126
128
|
test_files:
|
127
129
|
- spec/minitel/client_spec.rb
|
130
|
+
- spec/minitel/strict_args_spec.rb
|
128
131
|
- spec/spec_helper.rb
|
129
132
|
has_rdoc:
|
metadata.gz.sig
CHANGED
Binary file
|