Class: Beeline::Session
- Inherits:
-
Object
- Object
- Beeline::Session
- Includes:
- Config, Hive::Utils
- Defined in:
- lib/beeline/session.rb
Overview
Manages the http and websockets session for the bot. Also interacts with the http API.
Instance Attribute Summary collapse
-
#ws_session ⇒ Object
readonly
Returns the value of attribute ws_session.
Instance Method Summary collapse
- #base_uri ⇒ Object
-
#channels ⇒ Object
Returns an array of bot-created channels.
-
#channels=(name) ⇒ Object
Creates a new channel.
-
#chats(id, before = nil, limit = nil) ⇒ Object
Query chat messages by id, .
-
#conversation(*id) ⇒ Object
Returns details of a conversation.
-
#conversations ⇒ Object
Returns details of a conversation.
-
#dump_conversations ⇒ Object
Calls #new_conversations and dumps all messages.
-
#friend_requests ⇒ Object
Returns an array of bot’s pending friend requests.
-
#friends ⇒ Object
Returns bot’s friends and blocked list.
-
#get(resource) ⇒ Object
Generalized get method.
- #http(&block) ⇒ Object
-
#initialize ⇒ Session
constructor
A new instance of Session.
- #inspect ⇒ Object
-
#login ⇒ Object
Logs in the bot.
-
#logout ⇒ Object
Logs out the bot.
-
#new_conversations ⇒ Object
Return an array of unread messages.
-
#refresh_token ⇒ Object
Requests a new access token.
-
#settings ⇒ Object
Returns bot’s settings.
-
#settings=(new_settings) ⇒ Object
Updates the bot’s settings.
- #token ⇒ Object
-
#verify ⇒ Object
Verifies if the current access token is valid.
- #ws_uri ⇒ Object
Methods included from Config
#friendships, #hive_account, #hive_posting_wif, #hive_public_key
Constructor Details
#initialize ⇒ Session
Returns a new instance of Session.
17 18 19 20 21 22 |
# File 'lib/beeline/session.rb', line 17 def initialize @base_uri = nil @ws_uri = nil @beeline_session = nil @http = nil end |
Instance Attribute Details
#ws_session ⇒ Object (readonly)
Returns the value of attribute ws_session.
15 16 17 |
# File 'lib/beeline/session.rb', line 15 def ws_session @ws_session end |
Instance Method Details
#base_uri ⇒ Object
24 25 26 |
# File 'lib/beeline/session.rb', line 24 def base_uri @base_uri ||= URI.parse(BEE_BASE_URL) end |
#channels ⇒ Object
Returns an array of bot-created channels.
See: GET /users/channels
170 |
# File 'lib/beeline/session.rb', line 170 def channels; get('/users/channels'); end |
#channels=(name) ⇒ Object
Creates a new channel.
See: POST /users/channels
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 |
# File 'lib/beeline/session.rb', line 177 def channels=(name) raise "Unable to post channels before logging in" unless !!@beeline_session resource = "#{base_uri.path}/users/channels" http do |http| request = Net::HTTP::Post.new resource request.body = name request['Content-Type'] = 'application/json; charset=UTF-8' request['User-Agent'] = AGENT_ID request['Authorization'] = "Bearer #{token}" response = http.request request JSON[response.body] end end |
#chats(id, before = nil, limit = nil) ⇒ Object
Query chat messages by id, \
See: GET /messages/chats
233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 |
# File 'lib/beeline/session.rb', line 233 def chats(id, before = nil, limit = nil) raise "Unable to get conversation before logging in" unless !!@beeline_session resource = "#{base_uri.path}/messages/chats?conversation_id=#{id}" resource += "&before=#{before.utc.iso8601}" if !!before resource += "&limit=#{limit}" if !!limit http do |http| request = Net::HTTP::Get.new resource request['User-Agent'] = AGENT_ID request['Authorization'] = "Bearer #{token}" response = http.request request JSON[response.body] end end |
#conversation(*id) ⇒ Object
Returns details of a conversation.
209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 |
# File 'lib/beeline/session.rb', line 209 def conversation(*id) raise "Unable to get conversation before logging in" unless !!@beeline_session id = [id].flatten resource = "#{base_uri.path}/messages/conversation?ids=#{id.join(',')}" http do |http| request = Net::HTTP::Get.new resource request['User-Agent'] = AGENT_ID request['Authorization'] = "Bearer #{token}" response = http.request request JSON[response.body] end end |
#conversations ⇒ Object
Returns details of a conversation.
202 |
# File 'lib/beeline/session.rb', line 202 def conversations; get('/messages/conversations'); end |
#dump_conversations ⇒ Object
Calls #new_conversations and dumps all messages.
252 253 254 |
# File 'lib/beeline/session.rb', line 252 def dump_conversations new_conversations.map{|c| "#{c['timestamp']} :: #{c['conversation_id']} :: #{c['from']}: #{c['content']}"} end |
#friend_requests ⇒ Object
Returns an array of bot’s pending friend requests.
136 |
# File 'lib/beeline/session.rb', line 136 def friend_requests; get('/users/friend-requests'); end |
#friends ⇒ Object
Returns bot’s friends and blocked list.
See: GET /users/friends
131 |
# File 'lib/beeline/session.rb', line 131 def friends; get('/users/friends'); end |
#get(resource) ⇒ Object
Generalized get method.
113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/beeline/session.rb', line 113 def get(resource) raise "Unable to request #{resource} before logging in" unless !!@beeline_session resource = "#{base_uri.path}#{resource}" http do |http| request = Net::HTTP::Get.new resource request['User-Agent'] = AGENT_ID request['Authorization'] = "Bearer #{token}" response = http.request request JSON[response.body] end end |
#http(&block) ⇒ Object
40 41 42 43 44 |
# File 'lib/beeline/session.rb', line 40 def http(&block) Net::HTTP.start(base_uri.host, base_uri.port, use_ssl: base_uri.scheme == 'https') do |http| yield http end end |
#inspect ⇒ Object
256 257 258 259 260 261 262 263 264 265 266 267 |
# File 'lib/beeline/session.rb', line 256 def inspect properties = %w(base_uri ws_uri ws_session).map do |prop| if !!(v = instance_variable_get("@#{prop}")) case v when Array then "@#{prop}=<#{v.size} #{v.size == 1 ? 'element' : 'elements'}>" else; "@#{prop}=#{v}" end end end.compact.join(', ') "#<#{self.class} [#{properties}]>" end |
#login ⇒ Object
Logs in the bot.
See: GET /users/login
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/beeline/session.rb', line 49 def login return @beeline_session if !!@beeline_session = (Time.now.to_f * 1000).to_i = "#{hive_account}#{}" signature = hexlify resource = "#{base_uri.path}/users/login?username=#{hive_account}&ts=#{}&sig=#{signature}" http do |http| request = Net::HTTP::Get.new resource request['User-Agent'] = AGENT_ID response = http.request request if response.code == '200' @beeline_session = JSON[response.body] else JSON[response.body] end end end |
#logout ⇒ Object
Logs out the bot.
See: GET /users/logout
197 |
# File 'lib/beeline/session.rb', line 197 def logout; get('/users/logout'); end |
#new_conversations ⇒ Object
Return an array of unread messages.
See: GET /messages/new
228 |
# File 'lib/beeline/session.rb', line 228 def new_conversations; get('/messages/new'); end |
#refresh_token ⇒ Object
Requests a new access token.
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/beeline/session.rb', line 91 def refresh_token raise "Unable to refresh token before logging in" unless !!@beeline_session resource = "#{base_uri.path}/refresh-token" http do |http| request = Net::HTTP::Get.new resource request['User-Agent'] = AGENT_ID request['Authorization'] = "Bearer #{@beeline_session['refresh_token']}" response = http.request request if response.code == '200' @beeline_session['token'] = JSON[response.body]['token'] else JSON[response.body] end end end |
#settings ⇒ Object
Returns bot’s settings.
See: GET /users/settings
141 |
# File 'lib/beeline/session.rb', line 141 def settings; get('/users/settings'); end |
#settings=(new_settings) ⇒ Object
Updates the bot’s settings.
See: POST /users/settings
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
# File 'lib/beeline/session.rb', line 150 def settings=(new_settings) raise "Unable to post settings before logging in" unless !!@beeline_session resource = "#{base_uri.path}/users/settings" http do |http| request = Net::HTTP::Post.new resource request.body = new_settings.to_json request['Content-Type'] = 'application/json; charset=UTF-8' request['User-Agent'] = AGENT_ID request['Authorization'] = "Bearer #{token}" response = http.request request JSON[response.body] end end |
#token ⇒ Object
32 33 34 35 36 37 38 |
# File 'lib/beeline/session.rb', line 32 def token login if @beeline_session.nil? return if @beeline_session.nil? @beeline_session['token'] end |
#verify ⇒ Object
Verifies if the current access token is valid.
See: GET /users/verify
73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/beeline/session.rb', line 73 def verify raise "Unable to verify before logging in" unless !!@beeline_session resource = "#{base_uri.path}/users/verify" http do |http| request = Net::HTTP::Get.new resource request['User-Agent'] = AGENT_ID request['Authorization'] = "Bearer #{token}" response = http.request request JSON[response.body] end end |
#ws_uri ⇒ Object
28 29 30 |
# File 'lib/beeline/session.rb', line 28 def ws_uri @ws_uri ||= URI.parse(BEE_WS_URL) end |