yoyo 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
- data/README.md +4 -0
- data/lib/yoyo.rb +39 -3
- data/lib/yoyo/version.rb +1 -1
- data/test/yoyo_test.rb +27 -7
- metadata +15 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 90b02ddb5550e8460e1be202000e09ed174571d4
|
4
|
+
data.tar.gz: 5c43937772435ee12293d705a534c851cdc58eca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 28af955e3d3a8bd8503d7be9555ee0416891ec92bdb8ae6d43d093c29e7c44846a65df57fcd377f6a0bf0e6c0ee94b882e56975622ffefb5aca8792c6f69bfab
|
7
|
+
data.tar.gz: bd40041526be08d7a3afbc96f01ae55c05bfe9e6e9aeca2f2f10dc3698afe339f4bae621678bb2289ce410fe70a3c1c208e4a65ee05048d4fc4346361aa2c1aa
|
data/README.md
CHANGED
@@ -28,7 +28,11 @@ yo.yo("SOME_YO_USER")
|
|
28
28
|
|
29
29
|
# mass YO everyone who has ever YO'd your API account
|
30
30
|
yo.yo_all
|
31
|
+
|
32
|
+
# find out how many subscribers you have. OMG
|
33
|
+
yo.subscribers_count
|
31
34
|
```
|
35
|
+
|
32
36
|
That's ... that's pretty much their entire API
|
33
37
|
|
34
38
|
## Why would I install this gem instead of just using `curl`?
|
data/lib/yoyo.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require "yoyo/version"
|
2
2
|
require 'faraday'
|
3
|
+
require 'json'
|
4
|
+
require 'ostruct'
|
3
5
|
|
4
6
|
module Yoyo
|
5
7
|
class Yo
|
@@ -15,6 +17,14 @@ module Yoyo
|
|
15
17
|
# I mean API.
|
16
18
|
attr_reader :api_connection
|
17
19
|
|
20
|
+
# Struct containing all relevant data from the Yo request
|
21
|
+
#
|
22
|
+
# result#response => Faraday::Response
|
23
|
+
# result#parsed => JSON parsed response body
|
24
|
+
# result#error => populated if request error'd :(
|
25
|
+
# result#result => horribly named store for success response
|
26
|
+
attr_reader :result
|
27
|
+
|
18
28
|
# You're going to need an API token to get started.
|
19
29
|
# You can get one from http://dev.justyo.co/
|
20
30
|
def initialize(api_token)
|
@@ -29,13 +39,13 @@ module Yoyo
|
|
29
39
|
# Usage: yo("PHILCRISSMAN")
|
30
40
|
# Returns a Faraday response, so you can see the HTTP status and errors, if any
|
31
41
|
def yo(some_user)
|
32
|
-
|
42
|
+
build_result :post, "/yo/", username: some_user
|
33
43
|
end
|
34
44
|
|
35
45
|
# Say YO to everyone who has ever YO'd your API account
|
36
46
|
# Should return an empty body. YOs all your subscribers
|
37
47
|
def yo_all
|
38
|
-
|
48
|
+
build_result :post, "/yoall/"
|
39
49
|
end
|
40
50
|
|
41
51
|
# Get the number of subscribers you have. That sounds handy.
|
@@ -51,7 +61,33 @@ module Yoyo
|
|
51
61
|
#
|
52
62
|
# That's not too hard.
|
53
63
|
def subscribers_count
|
54
|
-
|
64
|
+
build_result :get, "/subscribers_count/"
|
65
|
+
result.result
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def build_result(method, path, opts={})
|
71
|
+
tap do
|
72
|
+
response = api_connection.send(method, path, opts.merge(api_token: api_token))
|
73
|
+
begin
|
74
|
+
parsed = JSON::parse(response.body)
|
75
|
+
rescue JSON::ParserError => e
|
76
|
+
# if we can't parse the JSON, Yo may have just returned
|
77
|
+
# a string (not JSON). It (currently) does this when
|
78
|
+
# rate limiting (eg, try to YO the same user twice
|
79
|
+
# within a minute)
|
80
|
+
parsed = {"error" => response.body.gsub("\"", '')}
|
81
|
+
end
|
82
|
+
|
83
|
+
@result = OpenStruct.new({
|
84
|
+
response: response,
|
85
|
+
parsed: parsed,
|
86
|
+
error: parsed['error'],
|
87
|
+
result: parsed['result']
|
88
|
+
})
|
89
|
+
end
|
55
90
|
end
|
56
91
|
end
|
57
92
|
end
|
93
|
+
|
data/lib/yoyo/version.rb
CHANGED
data/test/yoyo_test.rb
CHANGED
@@ -23,28 +23,48 @@ class YoyoTest < Minitest::Test
|
|
23
23
|
|
24
24
|
def test_yo_initialization_with_no_token
|
25
25
|
assert_raises ArgumentError do
|
26
|
-
|
26
|
+
Yoyo::Yo.new
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
def test_saying_yo
|
31
31
|
yo = Yoyo::Yo.new("some-token")
|
32
32
|
|
33
|
-
|
34
|
-
assert_equal "{\"result\": \"OK\"}", response.body
|
33
|
+
yo.yo("PHILCRISSMAN")
|
34
|
+
assert_equal "{\"result\": \"OK\"}", yo.result.response.body
|
35
|
+
assert_equal({'result' => "OK"}, yo.result.parsed)
|
36
|
+
assert_equal "OK", yo.result.result
|
37
|
+
assert_equal nil, yo.result.error
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_rate_limited
|
41
|
+
@rate_limited_test_connection = Faraday.new do |builder|
|
42
|
+
builder.adapter :test do |stub|
|
43
|
+
stub.post('/yo/') { [400, {}, "\"Rate limit exceeded. Only one Yo per recipient per minute.\""] }
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
Yoyo::Yo.any_instance.stubs(:api_connection).returns(@rate_limited_test_connection)
|
48
|
+
|
49
|
+
yo = Yoyo::Yo.new("some-token")
|
50
|
+
|
51
|
+
yo.yo("PHILCRISSMAN")
|
52
|
+
assert_equal "\"Rate limit exceeded. Only one Yo per recipient per minute.\"", yo.result.response.body
|
53
|
+
assert_equal "Rate limit exceeded. Only one Yo per recipient per minute.", yo.result.error
|
54
|
+
|
55
|
+
Yoyo::Yo.any_instance.unstub(:api_connection)
|
35
56
|
end
|
36
57
|
|
37
58
|
def test_saying_yo_all
|
38
59
|
yo = Yoyo::Yo.new("some-token")
|
39
60
|
|
40
|
-
|
41
|
-
assert_equal "{}", response.body
|
61
|
+
yo.yo_all
|
62
|
+
assert_equal "{}", yo.result.response.body
|
42
63
|
end
|
43
64
|
|
44
65
|
def test_get_subscriber_count
|
45
66
|
yo = Yoyo::Yo.new("some-token")
|
46
67
|
|
47
|
-
|
48
|
-
assert_equal "{\"result\": 9001}", response.body
|
68
|
+
assert_equal 9001, yo.subscribers_count
|
49
69
|
end
|
50
70
|
end
|
metadata
CHANGED
@@ -1,83 +1,83 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yoyo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Phil Crissman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-08-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ~>
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.6'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.6'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: minitest
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
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
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: mocha
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: faraday
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - '>='
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - '>='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
description: It's a ruby gem for using the YO API. You need to get an API Token, okay?
|
@@ -87,7 +87,7 @@ executables: []
|
|
87
87
|
extensions: []
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
|
-
-
|
90
|
+
- .gitignore
|
91
91
|
- Gemfile
|
92
92
|
- LICENSE.txt
|
93
93
|
- README.md
|
@@ -106,12 +106,12 @@ require_paths:
|
|
106
106
|
- lib
|
107
107
|
required_ruby_version: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
|
-
- -
|
109
|
+
- - '>='
|
110
110
|
- !ruby/object:Gem::Version
|
111
111
|
version: '0'
|
112
112
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
113
|
requirements:
|
114
|
-
- -
|
114
|
+
- - '>='
|
115
115
|
- !ruby/object:Gem::Version
|
116
116
|
version: '0'
|
117
117
|
requirements: []
|