class Botz::Binder

Bind resource received from the connection to the result object

Attributes

resource[R]

Public Class Methods

field(name, query = nil, optional: false, &block) click to toggle source
# File lib/botz/binder.rb, line 61
def self.field(name, query = nil, optional: false, &block)
  field_names << name
  field_names.uniq!
  result_class.define(name, presence: !optional)
  define_method(name) do
    connector.field.call(self, query, &block)
  end
end
fields(query, &block) click to toggle source
# File lib/botz/binder.rb, line 70
def self.fields(query, &block)
  @fields = { query: query, block: block }
end
fields_call(binder) click to toggle source
# File lib/botz/binder.rb, line 74
def self.fields_call(binder)
  Multiple.bind(connector: connector, binder: binder, query: @fields[:query], block: @fields[:block]) if @fields
end
new(resource) click to toggle source
# File lib/botz/binder.rb, line 34
def initialize(resource)
  @resource = resource
  self.class.fields_call(self)
end
query(name, query = nil, &block) click to toggle source
# File lib/botz/binder.rb, line 55
def self.query(name, query = nil, &block)
  define_method(name) do
    connector.field.call(self, query, &block)
  end
end

Public Instance Methods

attributes() click to toggle source
# File lib/botz/binder.rb, line 51
def attributes
  field_names.map { |field_name| [field_name, send(field_name)] }.to_h
end
attributes_to_array() click to toggle source
# File lib/botz/binder.rb, line 47
def attributes_to_array
  field_names.map { |field_name| send(field_name) }
end
result() click to toggle source
# File lib/botz/binder.rb, line 39
def result
  definition = self
  fetched_at = Time.current
  result = self.class.result_class.new(fetched_at: fetched_at, fetched_on: fetched_at.beginning_of_day, **attributes)
  result.define_singleton_method(:resource) { definition.resource }
  result
end