rippy_rules 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ <a href="https://codeclimate.com/github/MrCheese/rippy_rules"><img src="https://codeclimate.com/badge.png" /></a>
2
+
1
3
  # RippyRules
2
4
 
3
5
  A Ruby wrapper for the What.cd JSON API
@@ -36,6 +38,13 @@ client = RippyRules::Client.new(your_whatcd_username, your_whatcd_password)
36
38
  results = client.browse({searchstr: 'Bruce Springsteen'})
37
39
  ```
38
40
 
41
+ There is also a search method that can be used for simpler searches where you only care about getting results.
42
+ It is equivalent to calling browse with a searchstr
43
+ ```ruby
44
+ client = RippyRules::Client.new(your_whatcd_username, your_whatcd_password)
45
+ results = client.search 'Bruce Springsteen'
46
+ ```
47
+
39
48
  ## Contributing
40
49
 
41
50
  To contribute to RippyRules, you must have a What.cd account. I do not have one and I do not know how to acquire one.
@@ -11,22 +11,32 @@ module RippyRules
11
11
  authenticate
12
12
  end
13
13
 
14
+ def search(str)
15
+ browse({searchstr: str})
16
+ end
17
+
14
18
  def method_missing(method, *params)
15
- raise APIError unless params.first.is_a?(Hash)
16
- perform_request(method.to_s,params.first)
19
+ first_param = params.first
20
+ raise APIError unless first_param.is_a?(Hash)
21
+ perform_request(method.to_s,first_param)
17
22
  end
18
23
 
19
24
  def perform_request(method, query={})
20
- self.class.get("/ajax.php?action=#{method}", :query => query)
25
+ self.class.get("/ajax.php", :query => query.merge({action: method}))
21
26
  end
22
27
 
23
28
  private
24
29
 
25
30
  def authenticate
26
- body = {:username => @username, :password => @password, :keeplogged => 1}
31
+ body = {username: @username, password: @password, keeplogged: 1}
32
+ response = login(body)
33
+ cookies(response.headers['set-cookie'])
34
+ end
35
+
36
+ def login(body)
27
37
  response = self.class.post('/login.php', :body => body, :follow_redirects => false)
28
38
  raise AuthenticationError if response.headers['set-cookie'].nil?
29
- cookies(response.headers['set-cookie'])
39
+ response
30
40
  end
31
41
 
32
42
  def cookies(cookie)
@@ -34,6 +44,7 @@ module RippyRules
34
44
  cookie_jar.add_cookies cookie
35
45
  self.class.cookies cookie_jar
36
46
  end
47
+
37
48
  end
38
49
  class AuthenticationError < StandardError; end
39
50
  class APIError < StandardError; end
@@ -1,3 +1,3 @@
1
1
  module RippyRules
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -3,34 +3,39 @@ require 'spec_helper'
3
3
  describe RippyRules::Client do
4
4
  use_vcr_cassette :record => :new_episodes, :match_requests_on => [:body, :uri]
5
5
 
6
- it "includes HTTParty" do
7
- rippy_rules = RippyRules::Client.new(WHATCD_USERNAME,WHATCD_PASSWORD)
8
- rippy_rules.kind_of?(HTTParty).should be_true
9
- end
6
+ subject{RippyRules::Client.new(WHATCD_USERNAME,WHATCD_PASSWORD)}
7
+
8
+ it {subject.kind_of?(HTTParty).should be_true}
10
9
 
11
10
  describe "#initialize" do
12
11
  context "when given valid authentication information" do
13
12
  it "authenticates the user" do
14
- rippy_rules = RippyRules::Client.new(WHATCD_USERNAME, WHATCD_PASSWORD)
15
- rippy_rules.class.cookies[:session].nil?.should == false
13
+ subject.class.cookies[:session].nil?.should be_false
16
14
  end
17
15
  end
18
16
 
19
17
  context "when the authentication fails" do
20
18
  it "throws an AuthenticationError" do
21
- expect{rippy_rules = RippyRules::Client.new('foo', 'bar')}.to raise_error(RippyRules::AuthenticationError)
19
+ expect{RippyRules::Client.new('foo', 'bar')}.to raise_error(RippyRules::AuthenticationError)
22
20
  end
23
21
  end
24
22
  end
25
23
 
24
+ describe "#search" do
25
+ it "calls browse with the given string as 'searchstr'" do
26
+ str = 'bruce springsteen'
27
+ subject.expects(:browse).with({searchstr: str})
28
+ subject.search str
29
+ end
30
+ end
31
+
26
32
  describe "#method_missing?" do
27
- let(:rippy_rules){RippyRules::Client.new(WHATCD_USERNAME, WHATCD_PASSWORD)}
28
33
  context "when given an action and a hash" do
29
34
  it "performs a request with the method name as the request type" do
30
35
  method = 'top10'
31
- params = {:type => :users}
32
- results = rippy_rules.send(method.to_sym, params)
33
- results['response'].first['results'].size == 10
36
+ params = {type: :users}
37
+ results = subject.send(method.to_sym, params)
38
+ results['response'].first['results'].size.should eq(10)
34
39
  end
35
40
  end
36
41
 
@@ -38,18 +43,18 @@ describe RippyRules::Client do
38
43
  it "throws an APIError" do
39
44
  method = 'eatmyshorts'
40
45
  param = 'foo'
41
- expect{rippy_rules.send(method.to_sym,param)}.to raise_error(RippyRules::APIError)
46
+ expect{subject.send(method.to_sym,param)}.to raise_error(RippyRules::APIError)
42
47
  end
43
48
  end
44
49
  end
45
50
 
46
51
  describe "#perform_request" do
47
- let(:rippy_rules){RippyRules::Client.new(WHATCD_USERNAME, WHATCD_PASSWORD)}
48
52
  it "performs a GET request with the correct parameters" do
49
53
  method = 'top10'
50
- query = {:limit => 10, :type => :torrents}
51
- rippy_rules.class.expects(:get).with("/ajax.php?action=top10", :query => query)
52
- rippy_rules.send(method.to_sym, query)
54
+ query = {limit: 10, type: :torrents}
55
+ query_with_method = query.merge({action: method})
56
+ subject.class.expects(:get).with("/ajax.php", query: query_with_method)
57
+ subject.send(method.to_sym, query)
53
58
  end
54
59
  end
55
60
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rippy_rules
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-09 00:00:00.000000000 Z
12
+ date: 2012-11-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec