Class: Reddit::Base

Inherits:
Object
  • Object
show all
Includes:
HTTParty
Defined in:
lib/ruby_reddit_api/base.rb

Overview

Base module all other classes descend from. Stores the cookie, modhash and user info for many API calls. Handles authentication and directs JSON to the relevant handler.

Author:

  • James Cook

Direct Known Subclasses

Api, Message, Thing, Vote

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Base

Returns a new instance of Base.



12
13
14
# File 'lib/ruby_reddit_api/base.rb', line 12

def initialize(options={})
  @debug    = StringIO.new
end

Class Attribute Details

Returns the value of attribute cookie.



10
11
12
# File 'lib/ruby_reddit_api/base.rb', line 10

def cookie
  @cookie
end

.modhashObject (readonly)

Returns the value of attribute modhash.



10
11
12
# File 'lib/ruby_reddit_api/base.rb', line 10

def modhash
  @modhash
end

.userObject (readonly)

Returns the value of attribute user.



10
11
12
# File 'lib/ruby_reddit_api/base.rb', line 10

def user
  @user
end

.user_idObject (readonly)

Returns the value of attribute user_id.



10
11
12
# File 'lib/ruby_reddit_api/base.rb', line 10

def user_id
  @user_id
end

Instance Attribute Details

#debugObject (readonly)

Returns the value of attribute debug.



8
9
10
# File 'lib/ruby_reddit_api/base.rb', line 8

def debug
  @debug
end

#last_actionObject (readonly)

Returns the value of attribute last_action.



8
9
10
# File 'lib/ruby_reddit_api/base.rb', line 8

def last_action
  @last_action
end

Class Method Details

.base_headersObject



122
123
124
# File 'lib/ruby_reddit_api/base.rb', line 122

def base_headers
  {'Cookie' => Reddit::Base.cookie.to_s, 'user-agent' => user_agent}
end

.user_agentObject



126
127
128
# File 'lib/ruby_reddit_api/base.rb', line 126

def user_agent
  "Ruby Reddit Client v#{Reddit::VERSION}"
end

Instance Method Details

#base_headersObject

HTTP headers to be sent in all API requests. At a minimum, ‘User-agent’ and ‘Cookie’ are needed.

Returns:

  • Hash



70
71
72
# File 'lib/ruby_reddit_api/base.rb', line 70

def base_headers
  self.class.base_headers
end

Returns:

  • (String, nil)


35
36
37
# File 'lib/ruby_reddit_api/base.rb', line 35

def cookie
  Reddit::Base.cookie
end

#inspectString

Returns:

  • (String)


17
18
19
# File 'lib/ruby_reddit_api/base.rb', line 17

def inspect
  "<Reddit::Base>"
end

#logged_in?true, false

The session is authenticated if the captured cookie shows a valid session is in place

Returns:

  • (true, false)


59
60
61
# File 'lib/ruby_reddit_api/base.rb', line 59

def logged_in?
  !!(cookie && (cookie =~ /reddit_session/) != nil)
end

#loginBoolean

Login to Reddit and capture the cookie

Returns:

  • (Boolean)

    Login success or failure



23
24
25
26
# File 'lib/ruby_reddit_api/base.rb', line 23

def 
  capture_session(self.class.post( "/api/login", {:body => {:user => @user, :passwd => @password}, :debug_output => @debug} ) )
  logged_in?
end

#logoutnil

Remove the cookie to effectively logout of Reddit

Returns:

  • (nil)


30
31
32
# File 'lib/ruby_reddit_api/base.rb', line 30

def logout
  Reddit::Base.instance_variable_set("@cookie",nil)
end

#modhashString?

A kind of authenticity token for many API calls

Returns:

  • (String, nil)


41
42
43
# File 'lib/ruby_reddit_api/base.rb', line 41

def modhash
  Reddit::Base.modhash
end

#read(url, options = {}) ⇒ Reddit::Submission, ...

Base communication function for nearly all API calls

Returns:



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/ruby_reddit_api/base.rb', line 76

def read(url, options={})
  unless throttled?
    @debug.rewind
    verb      = (options[:verb] || "get")
    param_key = (verb == "get") ? :query : :body
    resp      = self.class.send( verb, url, {param_key => (options[param_key] || {}), :headers => base_headers, :debug_output => @debug})
    if valid_response?(resp)
      @last_action = Time.now
      klass = Reddit.const_get(options[:handler] || "Submission")
      resp  = klass.parse( JSON.parse(resp.body, :max_nesting => 9_999) )
      return resp
    else
      return false
    end
  end
end

#userString

Logged in user

Returns:

  • (String)


53
54
55
# File 'lib/ruby_reddit_api/base.rb', line 53

def user
  Reddit::Base.user
end

#user_agentObject

Returns String.

Returns:

  • String



64
65
66
# File 'lib/ruby_reddit_api/base.rb', line 64

def user_agent
  self.class.user_agent
end

#user_idString

Reddit’s displayed ID for the logged in user

Returns:

  • (String)


47
48
49
# File 'lib/ruby_reddit_api/base.rb', line 47

def user_id
  Reddit::Base.user_id
end