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