hey 1.1.0 → 1.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 +8 -8
- data/README.md +7 -7
- data/lib/hey.rb +1 -2
- data/lib/hey/dispatcher.rb +58 -0
- data/lib/hey/subscriber.rb +24 -0
- data/lib/hey/version.rb +1 -1
- data/lib/hey/yo.rb +18 -39
- data/test/dispatcher_test.rb +37 -0
- data/test/subscriber_test.rb +28 -0
- data/test/test_helper.rb +1 -2
- data/test/yo_test.rb +23 -26
- metadata +11 -5
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NGVjMjMzNjEwMzU0Y2U1MTkyMzU0Nzk0MDQzYzQ2Y2E5ZDcwNmFmZA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YjQ0YmU3YzY0M2JiNjM2MWI1Zjg5NTNjNDAwNWYzNjU4MGQxY2FlZg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
OTY2NTJiMzYwOTM4ZWMwNDA0NjcwODdhNjA0Y2RhNzE3Y2YxNTM4NGYwMjdk
|
10
|
+
OWU1YWVjYWY5NzEzMzZjYjNmN2MyMmE2MTUxMzZkOGRlODBlNjc0ZTE5MzZk
|
11
|
+
ZTg0YTYwYmFkYzQxYzI0YWE0MDgxNzEyZGQ4MzQ3YzFjM2VhYWQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
N2M4YTM5YWE2MGRiNjljNzEyNjBiYzU5YzU2ZTAyNGQ1MDk0NGI2YmI0Zjg2
|
14
|
+
NmIzNGRhZjYxNzBmYjk1MGQzZjQxN2ZkODJlZTdiYzNkM2NmOGFkYjA3MmI1
|
15
|
+
NzU0MmE5MWIzMjc5YjlkMjFmM2ZjYTU5NzA5NTY0YmJlM2Q1NGI=
|
data/README.md
CHANGED
@@ -20,16 +20,16 @@ Then:
|
|
20
20
|
|
21
21
|
```ruby
|
22
22
|
Hey.api_token = '3858f62230ac3c915f300c664312c63f'
|
23
|
-
Hey::Yo.all
|
23
|
+
Hey::Yo.all # or yo a specific user...
|
24
|
+
Hey::Yo.user "WORLDCUP"
|
25
|
+
Hey::Subscriber.count
|
24
26
|
|
25
27
|
# or set api_token on a Yo instance:
|
26
28
|
|
27
|
-
Hey::Yo.new(api_token: '3858f62230ac3c915f300c664312c63f')
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
Hey::Yo.user "WORLDCUP" # or...
|
32
|
-
Hey::Yo.new(api_token: '3858f62230ac3c915f300c664312c63f').user "WORLDCUP"
|
29
|
+
yo = Hey::Yo.new(api_token: '3858f62230ac3c915f300c664312c63f')
|
30
|
+
yo.all
|
31
|
+
yo.user "WORLDCUP"
|
32
|
+
yo.subscribers.count
|
33
33
|
```
|
34
34
|
|
35
35
|
That's it!
|
data/lib/hey.rb
CHANGED
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'net/http'
|
3
|
+
|
4
|
+
module Hey
|
5
|
+
class Dispatcher
|
6
|
+
|
7
|
+
# (Optional) Should be set if an API token hasn't be set
|
8
|
+
# on the Hey module.
|
9
|
+
attr_accessor :api_token
|
10
|
+
|
11
|
+
# Optionally accepts a hash containing an API token.
|
12
|
+
# Defaults to the API token set on the Hey module.
|
13
|
+
#
|
14
|
+
# Hey::Yo.new api_token: '3858f62230ac3c915f300c664312c63f'
|
15
|
+
def initialize options = {}
|
16
|
+
@api_token = options[:api_token] || Hey.api_token
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def uri route, data = nil #:nodoc:
|
22
|
+
URI("http://api.justyo.co/#{route}/#{data}")
|
23
|
+
end
|
24
|
+
|
25
|
+
def get route #:nodoc:
|
26
|
+
response = Net::HTTP.get_response uri(route, "?api_token=#{api_token}")
|
27
|
+
raise_for_invalid_code! response
|
28
|
+
response
|
29
|
+
end
|
30
|
+
|
31
|
+
def post route, params = {} #:nodoc:
|
32
|
+
params = params.merge api_token: api_token
|
33
|
+
response = Net::HTTP.post_form uri(route), params
|
34
|
+
raise_for_invalid_code! response
|
35
|
+
response
|
36
|
+
end
|
37
|
+
|
38
|
+
def raise_for_missing_api_token! #:nodoc:
|
39
|
+
raise MissingAPITokenError unless api_token
|
40
|
+
end
|
41
|
+
|
42
|
+
def raise_for_invalid_code! response #:nodoc:
|
43
|
+
body = get_response_body(response)
|
44
|
+
return unless body && body["code"] == 141
|
45
|
+
case body["error"]
|
46
|
+
when "NO SUCH USER"
|
47
|
+
raise NoSuchUserError
|
48
|
+
else
|
49
|
+
raise InvalidAPITokenError
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def get_response_body request #:nodoc:
|
54
|
+
request && request.body ? JSON.parse(request.body) : nil
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'hey/dispatcher'
|
2
|
+
|
3
|
+
module Hey
|
4
|
+
# Sends requests to the Yo API subscriber endpoint.
|
5
|
+
class Subscriber < Dispatcher
|
6
|
+
|
7
|
+
# Sends a request to the +subscribers_count+ endpoint.
|
8
|
+
# Raises a +MissingAPITokenError+ error if an API token
|
9
|
+
# hasn't been set on the Hey module or Yo instance.
|
10
|
+
def count
|
11
|
+
raise_for_missing_api_token!
|
12
|
+
response = get 'subscribers_count'
|
13
|
+
body = get_response_body response
|
14
|
+
body['count']
|
15
|
+
end
|
16
|
+
|
17
|
+
# Sends a request to the +subscribers_count+ endpoint using the
|
18
|
+
# API token set on the Hey module.
|
19
|
+
def self.count
|
20
|
+
new.count
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
data/lib/hey/version.rb
CHANGED
data/lib/hey/yo.rb
CHANGED
@@ -1,25 +1,16 @@
|
|
1
|
+
require 'hey/dispatcher'
|
2
|
+
require 'hey/subscriber'
|
3
|
+
|
1
4
|
module Hey
|
2
|
-
# Sends requests to the Yo API
|
3
|
-
class Yo
|
4
|
-
|
5
|
-
# (Optional) Should be set if an API token hasn't be set
|
6
|
-
# on the Hey module.
|
7
|
-
attr_accessor :api_token
|
8
|
-
|
9
|
-
# Optionally accepts a hash containing an API token.
|
10
|
-
# Defaults to the API token set on the Hey module.
|
11
|
-
#
|
12
|
-
# Hey::Yo.new api_token: '3858f62230ac3c915f300c664312c63f'
|
13
|
-
def initialize options = {}
|
14
|
-
@api_token = options[:api_token] || Hey.api_token
|
15
|
-
end
|
5
|
+
# Sends requests to the Yo API yo endpoints.
|
6
|
+
class Yo < Dispatcher
|
16
7
|
|
17
8
|
# Sends a request to the +yoall+ endpoint.
|
18
9
|
# Raises a +MissingAPITokenError+ error if an API token
|
19
10
|
# hasn't been set on the Hey module or Yo instance.
|
20
11
|
def all
|
21
|
-
|
22
|
-
|
12
|
+
raise_for_missing_api_token!
|
13
|
+
post 'yoall'
|
23
14
|
end
|
24
15
|
|
25
16
|
# Sends a request to a user using the +yo+ endpoint.
|
@@ -28,8 +19,17 @@ module Hey
|
|
28
19
|
#
|
29
20
|
# Hey::Yo.new.user "worldcup"
|
30
21
|
def user name
|
31
|
-
|
32
|
-
|
22
|
+
raise_for_missing_api_token!
|
23
|
+
post 'yo', username: name
|
24
|
+
end
|
25
|
+
|
26
|
+
# Accesses subscriber endpoints using the same API key
|
27
|
+
#
|
28
|
+
# yo = Hey::Yo.new api_token: '3858f62230ac3c915f300c664312c63f'
|
29
|
+
# yo.subscribers.count
|
30
|
+
# # => 2
|
31
|
+
def subscribers
|
32
|
+
Hey::Subscriber.new api_token: api_token
|
33
33
|
end
|
34
34
|
|
35
35
|
# Sends a request to the +yoall+ endpoint using the
|
@@ -47,26 +47,5 @@ module Hey
|
|
47
47
|
new.user name
|
48
48
|
end
|
49
49
|
|
50
|
-
private
|
51
|
-
|
52
|
-
def post_request method, params = {} #:nodoc:
|
53
|
-
params = params.merge api_token: api_token
|
54
|
-
uri = URI("http://api.justyo.co/#{method}/")
|
55
|
-
request = Net::HTTP.post_form uri, params
|
56
|
-
raise_for_invalid_code! request
|
57
|
-
request
|
58
|
-
end
|
59
|
-
|
60
|
-
def raise_for_invalid_code! request #:nodoc:
|
61
|
-
response = JSON.parse(request.body)
|
62
|
-
return unless response["code"] && response["code"] == 141
|
63
|
-
case response["error"]
|
64
|
-
when "NO SUCH USER"
|
65
|
-
raise NoSuchUserError
|
66
|
-
else
|
67
|
-
raise InvalidAPITokenError
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
50
|
end
|
72
51
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'hey/dispatcher'
|
3
|
+
|
4
|
+
class DispatcherTest < Minitest::Test
|
5
|
+
|
6
|
+
def teardown
|
7
|
+
WebMock.reset!
|
8
|
+
Hey.api_token = nil
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_sets_api_token_on_instance
|
12
|
+
dispatcher = Hey::Dispatcher.new api_token: 'foo'
|
13
|
+
assert_equal 'foo', dispatcher.api_token
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_defaults_to_hey_api_token
|
17
|
+
Hey.api_token = 'bar'
|
18
|
+
dispatcher = Hey::Dispatcher.new
|
19
|
+
assert_equal 'bar', dispatcher.api_token
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_get_request
|
23
|
+
stub_get = stub_request(:get, "http://api.justyo.co/bar/?api_token=foo")
|
24
|
+
dispatcher = Hey::Dispatcher.new api_token: 'foo'
|
25
|
+
dispatcher.send :get, 'bar'
|
26
|
+
assert_requested stub_get
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_post_request
|
30
|
+
stub_post = stub_request(:post, "http://api.justyo.co/bar/")
|
31
|
+
.with(:body => {"api_token"=>"foo"})
|
32
|
+
dispatcher = Hey::Dispatcher.new api_token: 'foo'
|
33
|
+
dispatcher.send :post, 'bar'
|
34
|
+
assert_requested stub_post
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'hey/subscriber'
|
3
|
+
|
4
|
+
class SubscriberTest < Minitest::Test
|
5
|
+
|
6
|
+
def teardown
|
7
|
+
WebMock.reset!
|
8
|
+
Hey.api_token = nil
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_count_sends_api_request
|
12
|
+
stub_get = stub_request(:get, "http://api.justyo.co/subscribers_count/?api_token=foo")
|
13
|
+
.to_return(body: '{"count": 2}')
|
14
|
+
count = Hey::Subscriber.new(api_token: 'foo').count
|
15
|
+
assert_requested stub_get
|
16
|
+
assert_equal count, 2
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_class_method_all_sends_api_request
|
20
|
+
stub_get = stub_request(:get, "http://api.justyo.co/subscribers_count/?api_token=foo")
|
21
|
+
.to_return(body: '{"count": 2}')
|
22
|
+
Hey.api_token = 'foo'
|
23
|
+
count = Hey::Subscriber.count
|
24
|
+
assert_requested stub_get
|
25
|
+
assert_equal count, 2
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
data/test/test_helper.rb
CHANGED
data/test/yo_test.rb
CHANGED
@@ -4,38 +4,38 @@ require 'hey/yo'
|
|
4
4
|
class YoTest < Minitest::Test
|
5
5
|
|
6
6
|
def teardown
|
7
|
+
WebMock.reset!
|
7
8
|
Hey.api_token = nil
|
8
9
|
end
|
9
10
|
|
10
|
-
def test_sets_api_token_on_instance
|
11
|
-
yo = Hey::Yo.new(api_token: 'foo')
|
12
|
-
assert_equal 'foo', yo.api_token
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_defaults_to_hey_api_token
|
16
|
-
Hey.api_token = 'bar'
|
17
|
-
yo = Hey::Yo.new
|
18
|
-
assert_equal 'bar', yo.api_token
|
19
|
-
end
|
20
|
-
|
21
11
|
def test_all_sends_api_request
|
22
|
-
|
23
|
-
|
12
|
+
stub_post = stub_request(:post, "http://api.justyo.co/yoall/")
|
13
|
+
.with(:body => {"api_token"=>"foo"})
|
14
|
+
Hey::Yo.new(api_token: 'foo').all
|
15
|
+
assert_requested stub_post
|
24
16
|
end
|
25
17
|
|
26
18
|
def test_class_method_all_sends_api_request
|
19
|
+
stub_post = stub_request(:post, "http://api.justyo.co/yoall/")
|
20
|
+
.with(:body => {"api_token"=>"foo"})
|
27
21
|
Hey.api_token = 'foo'
|
28
|
-
|
22
|
+
Hey::Yo.all
|
23
|
+
assert_requested stub_post
|
29
24
|
end
|
30
25
|
|
31
26
|
def test_user_sends_api_request
|
32
|
-
|
33
|
-
|
27
|
+
stub_post = stub_request(:post, "http://api.justyo.co/yo/")
|
28
|
+
.with(:body => {"api_token"=>"foo", "username"=>"YOJOBS"})
|
29
|
+
Hey::Yo.new(api_token: 'foo').user('YOJOBS')
|
30
|
+
assert_requested stub_post
|
34
31
|
end
|
35
32
|
|
36
33
|
def test_class_method_user_sends_api_request
|
34
|
+
stub_post = stub_request(:post, "http://api.justyo.co/yo/")
|
35
|
+
.with(:body => {"api_token"=>"foo", "username"=>"YOJOBS"})
|
37
36
|
Hey.api_token = 'foo'
|
38
|
-
|
37
|
+
Hey::Yo.user('YOJOBS')
|
38
|
+
assert_requested stub_post
|
39
39
|
end
|
40
40
|
|
41
41
|
def test_raises_no_api_token_error
|
@@ -46,14 +46,11 @@ class YoTest < Minitest::Test
|
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
|
-
def
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
Net.stub_const(:HTTP, mock, &block)
|
55
|
-
assert mock.verify
|
56
|
-
end
|
49
|
+
def test_subscribers_returns_subscriber
|
50
|
+
yo = Hey::Yo.new api_token: 'foo'
|
51
|
+
subscriber = yo.subscribers
|
52
|
+
assert subscriber.is_a?(Hey::Subscriber)
|
53
|
+
assert_equal subscriber.api_token, yo.api_token
|
57
54
|
end
|
58
55
|
|
59
|
-
end
|
56
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hey
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jack Jennings
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -39,19 +39,19 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '5.3'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: webmock
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '1.18'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '1.18'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rdoc
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -75,9 +75,13 @@ files:
|
|
75
75
|
- README.md
|
76
76
|
- Rakefile
|
77
77
|
- lib/hey.rb
|
78
|
+
- lib/hey/dispatcher.rb
|
79
|
+
- lib/hey/subscriber.rb
|
78
80
|
- lib/hey/version.rb
|
79
81
|
- lib/hey/yo.rb
|
82
|
+
- test/dispatcher_test.rb
|
80
83
|
- test/hey_test.rb
|
84
|
+
- test/subscriber_test.rb
|
81
85
|
- test/test_helper.rb
|
82
86
|
- test/yo_test.rb
|
83
87
|
homepage: https://github.com/jackjennings/hey
|
@@ -105,6 +109,8 @@ signing_key:
|
|
105
109
|
specification_version: 4
|
106
110
|
summary: Sends a yo
|
107
111
|
test_files:
|
112
|
+
- test/dispatcher_test.rb
|
108
113
|
- test/hey_test.rb
|
114
|
+
- test/subscriber_test.rb
|
109
115
|
- test/test_helper.rb
|
110
116
|
- test/yo_test.rb
|