yoyo 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ffca99b3259c955b70b3d4e3612f3ca0d86350d6
4
- data.tar.gz: b59d30b8bef71f37888449ab7d2cdb7b0e85d798
3
+ metadata.gz: 90b02ddb5550e8460e1be202000e09ed174571d4
4
+ data.tar.gz: 5c43937772435ee12293d705a534c851cdc58eca
5
5
  SHA512:
6
- metadata.gz: ffe2558b41f29847c30a53f92796fc0527ab71cfdefef132cdc2c260c371aab8ac8361c87319bcff0490fb121838a343cd4d560e657e94376bdc0a168a537494
7
- data.tar.gz: e3be52000804fd804525f4902ea7320e43199e31c0b2af2b9e5723e5a6077a237893b28f8f57f12641cea2c12ae0a7694a57f52bc4d9da07ffbd97a036c8958d
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`?
@@ -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
- api_connection.post "/yo/", { api_token: api_token, username: some_user }
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
- api_connection.post "/yoall/", { api_token: api_token }
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
- api_connection.get "/subscribers_count/", { api_token: api_token }
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
+
@@ -1,5 +1,5 @@
1
1
  module Yoyo
2
2
  # This is what version of Yoyo this is!
3
3
  # They grow up so fast.
4
- VERSION = "0.1.1"
4
+ VERSION = "0.2.0"
5
5
  end
@@ -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
- yo = Yoyo::Yo.new
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
- response = yo.yo("PHILCRISSMAN")
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
- response = yo.yo_all
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
- response = yo.subscribers_count
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.1.1
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-07-29 00:00:00.000000000 Z
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
- - ".gitignore"
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: []