class BelliteJsonRpcApi

@abstract This is common interface of Bellite json-rpc API

Public Class Methods

new(cred=nil) click to toggle source

Constructor. Connects to server with cred credentials @param [String] cred Credentials in format: ‘host:port/token’;

# File lib/bellite.rb, line 84
def initialize(cred=nil)
    connect(cred)
end

Public Instance Methods

_connect(cred, f_ready) click to toggle source

@abstract Connecting to JSON-RPC server @param [String] cred Credentials in format: ‘host:port/token’; @param [Future] f_ready Ready future instance

# File lib/bellite.rb, line 211
def _connect(cred, f_ready)
    raise NotImplementedError, "Subclass Responsibility"
end
_invoke(method, params=nil) click to toggle source

@abstract Invokes method @param [String] method @param [Hash] params Something JSONable to pass as ethod params

# File lib/bellite.rb, line 218
def _invoke(method, params=nil)
    raise NotImplementedError, "Subclass Responsibility"
end
auth(token) click to toggle source

Authenticates with server using token @param [String] token Token to access server @return {Promise}

# File lib/bellite.rb, line 91
def auth(token)
    return _invoke('auth', [token])
end
bindEvent(selfId=0, evtType='*', res = -1, ctx=false) click to toggle source
binds Event on some evtType

@param [Fixnum] selfId internal id @param [String] evtType type of event @param [Fixnum] res @param [Hash] ctx - context, passed to event handler @return [Promise]

# File lib/bellite.rb, line 148
def bindEvent(selfId=0, evtType='*', res = -1, ctx=false)
    if not selfId
        selfId = 0
    end
    return _invoke('bindEvent',[selfId, evtType, res, ctx])
end
connect(cred=nil) click to toggle source
Connecting to JSON-RPC server

@param [String] host Host @param [Fixnum] port Port

# File lib/bellite.rb, line 198
def connect(cred=nil)
    cred = findCredentials(cred)
    if cred
        f_ready = deferred()
        @ready = f_ready.promise
        _connect(cred, f_ready)
        return @ready
    end
end
findCredentials(cred=false) click to toggle source
Finds credentials in environment variable BELLITE_SERVER or in passed parameter

@param [String] cred server credentials in format host:port/token @return [Hash] with credentials or false if failed

# File lib/bellite.rb, line 170
def findCredentials(cred=false)
    if not cred
        cred = ENV['BELLITE_SERVER']
        if not cred
            cred = '127.0.0.1:3099/bellite-demo-host';
            $stderr.puts 'BELLITE_SERVER environment variable not found, using "'+cred+'"'
        end
    elsif not cred.instance_of String
        return cred
    end

    begin
        host, token = cred.split('/', 2)
        host, port = host.split(':', 2)
        return ({"credentials" => cred, "token" => token, "host" => host, "port" => Integer(port)})
    rescue
        return false
    end
end
perform(selfId, cmd, *args) click to toggle source

perform JSON-RPC request @param [String] cmd command @param [Array] *args Variable-length arguments, passed with cmd. :key => value ruby Hash parameter sugar also works @return [Promise]

# File lib/bellite.rb, line 122
def perform(selfId, cmd, *args)
    if args.size > 1
        args.each do |arg|
            if arg.instance_of(Hash)
                raise ArgumentError, "Cannot specify both positional and keyword arguments"
            end
        end
    end
    if args.size == 1 and (args[0].instance_of? Hash or args[0].instance_of? Array)
        args = args[0]
    end
    if args == []
        args = nil
    end
    if not selfId
        selfId = 0
    end
    return _invoke('perform',[selfId, cmd, args])
end
ping() click to toggle source

Ping server @return {Promise}

# File lib/bellite.rb, line 103
def ping
    return _invoke('ping')
end
ready() click to toggle source

Return promise for ready event

# File lib/bellite.rb, line 191
def ready()
    return @ready
end
respondsTo(selfId, cmd) click to toggle source

invokes respondsTo @param [Fixnum] selfId Id for internal use (events, for example) @param [Hash] cmd - some data, which can be encoded as JSON to pass to server @return {Promise}

# File lib/bellite.rb, line 111
def respondsTo(selfId, cmd)
    if not selfId
        selfId = 0
    end
    return _invoke('respondsTo', [selfId, cmd])
end
unbindEvent(selfId, evtType=false) click to toggle source
Unbins Event on some evtType

@param [Fixnum] selfId internal id @param [String] evtType type of event @return [Promise]

# File lib/bellite.rb, line 159
def unbindEvent(selfId, evtType=false)
    if not selfId
        selfId = 0
    end
    return _invoke('unbindEvent',[selfId, evtType])
end
version() click to toggle source

Server version @return {Promise}

# File lib/bellite.rb, line 97
def version
    return _invoke('version')
end