lib/freebox_api/freebox.rb in freebox_api-0.1.1 vs lib/freebox_api/freebox.rb in freebox_api-0.1.2
- old
+ new
@@ -1,23 +1,35 @@
require 'rest_client'
require 'json'
+require 'logger'
module FreeboxApi
class Freebox < Hash
+ attr_reader :logger
+
def initialize(hash = {})
self[:freebox_ip] = hash[:freebox_ip] ? hash[:freebox_ip] : 'mafreebox.free.fr'
self[:freebox_port] = hash[:freebox_port] ? hash[:freebox_port] : '80'
@client = RestClient::Resource.new("http://#{self[:freebox_ip]}:#{self[:freebox_port]}")
self[:uid] = discover['uid']
self[:device_name] = discover['device_name']
self[:api_version] = discover['api_version']
self[:api_base_url] = discover['api_base_url']
self[:device_type] = discover['device_type']
+ self.logger = nil
end
+ def logger=(logger)
+ if logger.nil?
+ logger = Logger.new(STDOUT)
+ logger.level = Logger::WARN
+ end
+ @logger = logger
+ end
+
def discover
args = ['get']
@discover ||= JSON.parse(@client['/api_version'].send(*args))
end
@@ -35,21 +47,35 @@
def challenge
http_call('get', '/login/')['challenge']
end
- def http_call(http_method, path, params = {}, session = nil)
+ def http_call(http_method, path, params = nil, session = nil)
headers = {}
args = [http_method]
if %w[post put].include?(http_method.to_s)
args << params.to_json
else
headers[:params] = params if params
end
headers[:'X_Fbx_App_Auth'] = session.session_token if session
+
+ logger.info "#{http_method.upcase} #{path}"
+ logger.debug "Params: #{params.inspect}"
+ logger.debug "Headers: #{headers.inspect}"
args << headers if headers
- JSON.parse(@client[build_url(path)].send(*args))['result']
+ process_data(@client[build_url(path)].send(*args))['result']
+ end
+
+ def process_data(response)
+ data = begin
+ JSON.parse(response.body)
+ rescue JSON::ParserError
+ response.body
+ end
+ logger.debug "Returned data: #{data.inspect}"
+ return data
end
end
end