hey 1.3.0 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/README.md +48 -9
- data/lib/hey/dispatcher.rb +19 -27
- data/lib/hey/request.rb +12 -0
- data/lib/hey/request/base.rb +50 -0
- data/lib/hey/request/get.rb +20 -0
- data/lib/hey/request/post.rb +13 -0
- data/lib/hey/subscriber.rb +2 -4
- data/lib/hey/version.rb +2 -2
- data/lib/hey/yo.rb +0 -2
- data/test/dispatcher_test.rb +17 -12
- data/test/request_test.rb +44 -0
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YTExZTdlZDQzYTM3MzllMzNhZDI0YjU1MTljYmY0M2Q1MGMzZmY4MQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZjFmZTY3Mzg5MDliOTQ1ZDdhMzViYzEyYmFkOTUzNjBmZDBjMzAyYQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NWFlNjJlNGVkYTA2NDIwZTc5MDdlMmNhZDE0NTFjMTE4ZjViNDYyMDY4OTMy
|
10
|
+
ZGI2MWZiNzkyZTJjYTU2OWZjMzM5NDU0NjBjNzM3NmFhZTY4YjI0MTJhNDRk
|
11
|
+
N2I5M2VlMmFhYWU1YjgzZTkwMmI2ZGZjZDJhMGEzZWI5YjQyODk=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZWZhNThhNTE2MTQzNDFjNjU5ZDdhYjEwOTUwYWY2Yzg2NWZkOTg2NzM2ZjY5
|
14
|
+
YjRmZDgzMDQ3MzkyMjI1ZDYyMjg2ZTdmMWE1MDBiNDMzNWQ3YjkyZDM3YWY4
|
15
|
+
NzY2NDI1MjAxMjg5MzliNjE4MzgyMmU5OTYzMDNkZWMwNzBjZmY=
|
data/README.md
CHANGED
@@ -16,23 +16,62 @@ gem install hey
|
|
16
16
|
|
17
17
|
First [get an API token](http://yoapi.justyo.co).
|
18
18
|
|
19
|
-
|
19
|
+
There are two ways of setting you API token, depending on your requirements. If your program is only working with a single API token, you can set it in an initializer or at the start of your script.
|
20
20
|
|
21
21
|
```ruby
|
22
22
|
Hey.api_token = "3858f62230ac3c915f300c664312c63f"
|
23
|
-
|
24
|
-
|
25
|
-
|
23
|
+
```
|
24
|
+
|
25
|
+
If you need to use multiple API tokens, any `hey` class will accept an `api_token` on initialization.
|
26
26
|
|
27
|
-
|
28
|
-
Hey::Yo.
|
29
|
-
|
27
|
+
```ruby
|
28
|
+
Hey::Yo.new api_token: "3858f62230ac3c915f300c664312c63f"
|
29
|
+
```
|
30
30
|
|
31
|
-
|
31
|
+
An API token set when initializing an object takes precidence over the API token set on the `Hey` module.
|
32
32
|
|
33
|
-
|
33
|
+
## Yo All
|
34
|
+
|
35
|
+
Sends a yo to all of the account's subscribers.
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
Hey::Yo.all
|
39
|
+
# or
|
40
|
+
yo = Hey::Yo.new api_token: "..."
|
34
41
|
yo.all
|
42
|
+
```
|
43
|
+
|
44
|
+
Accepts either `link` or `location` in a hash of parameters (optional).
|
45
|
+
|
46
|
+
```ruby
|
47
|
+
Hey::Yo.all link: "https://github.com/jackjennings/hey"
|
48
|
+
```
|
49
|
+
|
50
|
+
## Yo User
|
51
|
+
|
52
|
+
Sends a yo to a specific user.
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
Hey::Yo.user "WORLDCUP"
|
56
|
+
# or
|
57
|
+
yo = Hey::Yo.new api_token: "..."
|
35
58
|
yo.user "WORLDCUP"
|
59
|
+
```
|
60
|
+
|
61
|
+
Accepts either `link` or `location` in a hash of parameters (optional).
|
62
|
+
|
63
|
+
```ruby
|
64
|
+
Hey::Yo.user "WORLDCUP" link: "https://github.com/jackjennings/hey"
|
65
|
+
```
|
66
|
+
|
67
|
+
## Subscriber Count
|
68
|
+
|
69
|
+
Returns the number of subscribers.
|
70
|
+
|
71
|
+
```ruby
|
72
|
+
Hey::Subscriber.count
|
73
|
+
# or
|
74
|
+
yo = Hey::Yo.new api_token: "3858f62230ac3c915f300c664312c63f"
|
36
75
|
yo.subscribers.count
|
37
76
|
```
|
38
77
|
|
data/lib/hey/dispatcher.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
require '
|
2
|
-
require 'net/http'
|
1
|
+
require 'hey/request'
|
3
2
|
|
4
3
|
module Hey
|
5
4
|
class Dispatcher
|
@@ -13,45 +12,38 @@ module Hey
|
|
13
12
|
#
|
14
13
|
# Hey::Yo.new api_token: '3858f62230ac3c915f300c664312c63f'
|
15
14
|
def initialize options = {}
|
16
|
-
@api_token = options[:api_token]
|
15
|
+
@api_token = options[:api_token]
|
17
16
|
end
|
18
17
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
# Returns the API token to be used when making requests. This will either
|
19
|
+
# be the api_token set on initialization or the token set on the Hey
|
20
|
+
# module itself.
|
21
|
+
def api_token
|
22
|
+
@api_token || Hey.api_token
|
23
23
|
end
|
24
24
|
|
25
|
+
private
|
26
|
+
|
25
27
|
def get route #:nodoc:
|
26
|
-
|
27
|
-
raise_for_invalid_code! response
|
28
|
-
response
|
28
|
+
request :get, route
|
29
29
|
end
|
30
30
|
|
31
31
|
def post route, params = {} #:nodoc:
|
32
|
-
|
33
|
-
response = Net::HTTP.post_form uri(route), params
|
34
|
-
raise_for_invalid_code! response
|
35
|
-
response
|
32
|
+
request :post, route, params
|
36
33
|
end
|
37
34
|
|
38
|
-
def
|
39
|
-
|
35
|
+
def request method, route, params = {} #:nodoc:
|
36
|
+
merge_api_token! params
|
37
|
+
Request.of_type(method).new route, params
|
40
38
|
end
|
41
39
|
|
42
|
-
def
|
43
|
-
|
44
|
-
|
45
|
-
case body["error"]
|
46
|
-
when "NO SUCH USER"
|
47
|
-
raise NoSuchUserError
|
48
|
-
else
|
49
|
-
raise InvalidAPITokenError
|
50
|
-
end
|
40
|
+
def merge_api_token! params #:nodoc:
|
41
|
+
raise_for_missing_api_token!
|
42
|
+
params.merge! api_token: api_token
|
51
43
|
end
|
52
44
|
|
53
|
-
def
|
54
|
-
|
45
|
+
def raise_for_missing_api_token! #:nodoc:
|
46
|
+
raise MissingAPITokenError unless api_token
|
55
47
|
end
|
56
48
|
|
57
49
|
end
|
data/lib/hey/request.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'net/http'
|
3
|
+
|
4
|
+
module Hey
|
5
|
+
module Request
|
6
|
+
class Base
|
7
|
+
|
8
|
+
URL = "http://api.justyo.co"
|
9
|
+
ERROR_CODE = 141
|
10
|
+
|
11
|
+
attr_accessor :response
|
12
|
+
|
13
|
+
def initialize route, params = {}
|
14
|
+
@response = send_request route, params
|
15
|
+
raise_for_invalid_code!
|
16
|
+
end
|
17
|
+
|
18
|
+
def uri route, data = nil #:nodoc:
|
19
|
+
URI([URL, route, data].join("/"))
|
20
|
+
end
|
21
|
+
|
22
|
+
def raise_for_invalid_code! #:nodoc:
|
23
|
+
return unless has_error?
|
24
|
+
case error_message
|
25
|
+
when "NO SUCH USER"
|
26
|
+
raise NoSuchUserError
|
27
|
+
else
|
28
|
+
raise InvalidAPITokenError
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def has_error?
|
33
|
+
json && json["code"] == ERROR_CODE
|
34
|
+
end
|
35
|
+
|
36
|
+
def error_message
|
37
|
+
json["error"]
|
38
|
+
end
|
39
|
+
|
40
|
+
def get_response_body request #:nodoc:
|
41
|
+
request && request.body ? JSON.parse(request.body) : nil
|
42
|
+
end
|
43
|
+
|
44
|
+
def json
|
45
|
+
@json ||= get_response_body @response
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'hey/request/base'
|
2
|
+
|
3
|
+
module Hey
|
4
|
+
module Request
|
5
|
+
class Get < Base
|
6
|
+
|
7
|
+
def send_request route, params
|
8
|
+
Net::HTTP.get_response uri(route, url_params(params))
|
9
|
+
end
|
10
|
+
|
11
|
+
def url_params params
|
12
|
+
parts = params.reduce([]) do |arr, param|
|
13
|
+
arr << "#{param[0]}=#{param[1]}"
|
14
|
+
end
|
15
|
+
"?" << parts.join("&") if parts.any?
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/hey/subscriber.rb
CHANGED
@@ -8,10 +8,8 @@ module Hey
|
|
8
8
|
# Raises a +MissingAPITokenError+ error if an API token
|
9
9
|
# hasn't been set on the Hey module or Yo instance.
|
10
10
|
def count
|
11
|
-
|
12
|
-
|
13
|
-
body = get_response_body response
|
14
|
-
body['count']
|
11
|
+
request = get 'subscribers_count'
|
12
|
+
request.json['count']
|
15
13
|
end
|
16
14
|
|
17
15
|
# Sends a request to the +subscribers_count+ endpoint using the
|
data/lib/hey/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module Hey
|
2
|
-
VERSION = "1.3.
|
3
|
-
end
|
2
|
+
VERSION = "1.3.1"
|
3
|
+
end
|
data/lib/hey/yo.rb
CHANGED
@@ -11,7 +11,6 @@ module Hey
|
|
11
11
|
# Accepts an optional hash of additional parameters to
|
12
12
|
# send with the request.
|
13
13
|
def all params = {}
|
14
|
-
raise_for_missing_api_token!
|
15
14
|
post 'yoall', params
|
16
15
|
end
|
17
16
|
|
@@ -24,7 +23,6 @@ module Hey
|
|
24
23
|
# Hey::Yo.new.user "worldcup"
|
25
24
|
# Hey::Yo.new.user "worldcup", link: "http://example.com"
|
26
25
|
def user name, params = {}
|
27
|
-
raise_for_missing_api_token!
|
28
26
|
params.merge! username: name
|
29
27
|
post 'yo', params
|
30
28
|
end
|
data/test/dispatcher_test.rb
CHANGED
@@ -4,7 +4,6 @@ require 'hey/dispatcher'
|
|
4
4
|
class DispatcherTest < Minitest::Test
|
5
5
|
|
6
6
|
def teardown
|
7
|
-
WebMock.reset!
|
8
7
|
Hey.api_token = nil
|
9
8
|
end
|
10
9
|
|
@@ -19,19 +18,25 @@ class DispatcherTest < Minitest::Test
|
|
19
18
|
assert_equal 'bar', dispatcher.api_token
|
20
19
|
end
|
21
20
|
|
22
|
-
def
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
21
|
+
def test_raises_for_absent_api_token
|
22
|
+
assert_raises Hey::MissingAPITokenError do
|
23
|
+
dispatcher = Hey::Dispatcher.new
|
24
|
+
dispatcher.merge_api_token! {}
|
25
|
+
end
|
27
26
|
end
|
28
27
|
|
29
|
-
def
|
30
|
-
stub_post = stub_request(:post, "http://api.justyo.co/bar/")
|
31
|
-
.with(:body => {"api_token"=>"foo"})
|
28
|
+
def test_merges_api_token
|
32
29
|
dispatcher = Hey::Dispatcher.new api_token: 'foo'
|
33
|
-
|
34
|
-
|
30
|
+
params = {}
|
31
|
+
dispatcher.send(:merge_api_token!, params)
|
32
|
+
assert 'foo', params[:api_token]
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_raises_for_absent_api_token
|
36
|
+
assert_raises Hey::MissingAPITokenError do
|
37
|
+
dispatcher = Hey::Dispatcher.new
|
38
|
+
dispatcher.send(:merge_api_token!, {})
|
39
|
+
end
|
35
40
|
end
|
36
41
|
|
37
|
-
end
|
42
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'hey/request'
|
3
|
+
|
4
|
+
class RequestTest < Minitest::Test
|
5
|
+
|
6
|
+
def teardown
|
7
|
+
WebMock.reset!
|
8
|
+
Hey.api_token = nil
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_get_request
|
12
|
+
stub_get = stub_request(:get, "http://api.justyo.co/bar/")
|
13
|
+
request = Hey::Request::Get.new 'bar'
|
14
|
+
assert_requested stub_get
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_get_request_with_params
|
18
|
+
stub_get = stub_request(:get, "http://api.justyo.co/bar/?foo=baz")
|
19
|
+
request = Hey::Request::Get.new 'bar', foo: 'baz'
|
20
|
+
assert_requested stub_get
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_post_request
|
24
|
+
stub_post = stub_request(:post, "http://api.justyo.co/bar/")
|
25
|
+
dispatcher = Hey::Request::Post.new 'bar'
|
26
|
+
assert_requested stub_post
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_post_request_with_params
|
30
|
+
stub_post = stub_request(:post, "http://api.justyo.co/bar/")
|
31
|
+
.with(:body => {"foo"=>"baz"})
|
32
|
+
dispatcher = Hey::Request::Post.new 'bar', foo: 'baz'
|
33
|
+
assert_requested stub_post
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_of_type_get
|
37
|
+
assert_equal Hey::Request::Get, Hey::Request.of_type(:get)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_of_type_post
|
41
|
+
assert_equal Hey::Request::Post, Hey::Request.of_type(:post)
|
42
|
+
end
|
43
|
+
|
44
|
+
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.3.
|
4
|
+
version: 1.3.1
|
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-
|
11
|
+
date: 2014-11-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -76,11 +76,16 @@ files:
|
|
76
76
|
- Rakefile
|
77
77
|
- lib/hey.rb
|
78
78
|
- lib/hey/dispatcher.rb
|
79
|
+
- lib/hey/request.rb
|
80
|
+
- lib/hey/request/base.rb
|
81
|
+
- lib/hey/request/get.rb
|
82
|
+
- lib/hey/request/post.rb
|
79
83
|
- lib/hey/subscriber.rb
|
80
84
|
- lib/hey/version.rb
|
81
85
|
- lib/hey/yo.rb
|
82
86
|
- test/dispatcher_test.rb
|
83
87
|
- test/hey_test.rb
|
88
|
+
- test/request_test.rb
|
84
89
|
- test/subscriber_test.rb
|
85
90
|
- test/test_helper.rb
|
86
91
|
- test/yo_test.rb
|
@@ -111,6 +116,7 @@ summary: Sends a yo
|
|
111
116
|
test_files:
|
112
117
|
- test/dispatcher_test.rb
|
113
118
|
- test/hey_test.rb
|
119
|
+
- test/request_test.rb
|
114
120
|
- test/subscriber_test.rb
|
115
121
|
- test/test_helper.rb
|
116
122
|
- test/yo_test.rb
|