class Metybur::Client

Attributes

websocket[W]

Public Class Methods

new(credentials) click to toggle source
# File lib/metybur/client.rb, line 8
def initialize(credentials)
  @credentials = credentials.freeze
  @subscription_messages = []
  @collections = []
end

Public Instance Methods

call(method_name, params, &block) click to toggle source
# File lib/metybur/client.rb, line 35
def call(method_name, params, &block)
  method(method_name).call(params, &block)
end
collection(name) click to toggle source
# File lib/metybur/client.rb, line 25
def collection(name)
  Metybur::Collection.new(name, @websocket).tap do |collection|
    @collections << collection
  end
end
connect() click to toggle source
# File lib/metybur/client.rb, line 58
def connect
  connect_message = {
    msg: 'connect',
    version: '1',
    support: ['1']
  }
  @websocket.send(connect_message.to_json)

  credentials = @credentials.dup
  password = credentials.delete(:password)
  if password
    this = self
    login(user: credentials, password: password) { this.resubscribe }
  else
    resubscribe
  end
end
method(name) click to toggle source
# File lib/metybur/client.rb, line 31
def method(name)
  Metybur::Method.new(name, @websocket)
end
method_missing(method, *params, &block) click to toggle source
# File lib/metybur/client.rb, line 39
def method_missing(method, *params, &block)
  method = method.to_s.camelize(:lower)
  params.map! do |param|
    case param
    when Hash
      param_array = param.map { |k, v| [k.to_s.camelize(:lower), v] }
      Hash[param_array]
    else
      param
    end
  end
  call(method, params, &block)
end
resubscribe() click to toggle source
# File lib/metybur/client.rb, line 53
def resubscribe
  @subscription_messages.each { |message| @websocket.send(message) }
  @collections.each { |collection| collection.websocket = @websocket }
end
subscribe(record_set_name, *params) click to toggle source
# File lib/metybur/client.rb, line 14
def subscribe(record_set_name, *params)
  message = {
    msg: 'sub',
    id: 'cde',
    name: record_set_name,
    params: params
  }.to_json
  @subscription_messages << message
  @websocket.send message
end