class Barrister::Rails::Client

Constants

DEFAULT_BARRISTER_TYPES

Public Class Methods

new(transport_or_uri_or_handler, json_path=nil) click to toggle source
# File lib/barrister-rails.rb, line 99
def initialize(transport_or_uri_or_handler, json_path=nil)
  if transport_or_uri_or_handler.is_a?(String)
    transport = Barrister::HttpTransport.new(transport_or_uri_or_handler)
  elsif transport_or_uri_or_handler.class.to_s.split('::').first == 'Barrister'
    transport = transport_or_uri_or_handler
  else
    raise 'json_path must be provided if registering a handler directly' unless json_path
    container = Barrister::IntraProcessContainer.new json_path, transport_or_uri_or_handler
    transport = Barrister::IntraProcessTransport.new container
  end

  @client = Barrister::Client.new(transport)
  @custom_types = Hash.new

  interfaces = @client
    .instance_variable_get('@contract')
    .interfaces

  pairs = interfaces
    .map { |iface| iface.functions }
    .flatten
    .map { |fx| [fx.name.to_sym, { type: fx.returns['type'], is_array: fx.returns['is_array'] } ] }

  fx_metadata = Hash[pairs]

  @interface_proxies = interfaces.map { |iface| InterfaceProxy.new iface.name, @client, fx_metadata }
end

Public Instance Methods

method_missing(name, *args) click to toggle source
# File lib/barrister-rails.rb, line 127
def method_missing(name, *args)
  name_as_string = name.to_s
  @interface_proxies.find { |iface_proxy| iface_proxy.name == name_as_string }
end