class SYNOWebAPI::Client
Attributes
api[R]
session_id[R]
session_name[R]
url[R]
Public Class Methods
new(url)
click to toggle source
# File lib/synowebapi/client.rb, line 10 def initialize(url) @url = url @session_id = @session_name = '' @conn = Faraday.new(:url => @url) do |f| f.request(:url_encoded) f.response(:json) f.adapter(Faraday.default_adapter) end end
Public Instance Methods
[](api_name)
click to toggle source
# File lib/synowebapi/client.rb, line 46 def [](api_name) @api ||= query_api @api[api_name] || (raise ArgumentError.new("WebAPI '#{api_name}' isn't found")) end
connect(params)
click to toggle source
# File lib/synowebapi/client.rb, line 20 def connect(params) @session_name = params[:session_name] || @session_name resp = self['SYNO.API.Auth'].login( :account => params[:username], :passwd => params[:password], :session => @session_name, :format => 'sid', ) @session_id = resp['sid'] end
disconnect()
click to toggle source
# File lib/synowebapi/client.rb, line 31 def disconnect self['SYNO.API.Auth'].logout(:session => @session_id) end
send(api, params = {})
click to toggle source
# File lib/synowebapi/client.rb, line 35 def send(api, params = {}) @conn.get("/webapi/#{api.path}", { :api => api.api_name, :version => api.max_version, :_sid => @session_id, }.merge(params)).body rescue Faraday::ParsingError raise StandardError.new("Failed to parse response") end
Private Instance Methods
query_api()
click to toggle source
# File lib/synowebapi/client.rb, line 52 def query_api resp = @conn.get('webapi/query.cgi', { :api => 'SYNO.API.Info', :version => 1, :method => 'Query', }).body {}.tap do |api| resp['data'].each do |api_name, params| api[api_name] = API.new(api_name, self, params) end end rescue Faraday::ParsingError raise StandardError.new("Failed to parse query response") end