class Futurism::Resolver::Resources

Public Class Methods

new(resource_definitions:, connection:, params:) click to toggle source

resource definitions are an array of [signed_params, sgid, signed_controller, url, broadcast_each]

# File lib/futurism/resolver/resources.rb, line 7
def initialize(resource_definitions:, connection:, params:)
  @connection = connection
  @params = params
  @resources_with_sgids, @resources_without_sgids = resource_definitions
    .partition { |signed_params, sgid, *| sgid.present? }
    .map { |partition| partition.map { |definition| ResourceDefinition.new(definition) } }
end

Public Instance Methods

resolve() { |selector, html, broadcast_each| ... } click to toggle source
# File lib/futurism/resolver/resources.rb, line 15
def resolve
  resolved_models.zip(@resources_with_sgids).each do |model, resource_definition|
    html = renderer_for(resource_definition: resource_definition).render(model)

    yield(resource_definition.selector, html, resource_definition.broadcast_each)
  end

  @resources_without_sgids.each do |resource_definition|
    resource = lookup_resource(resource_definition)
    renderer = renderer_for(resource_definition: resource_definition)
    html =
      begin
        renderer.render(resource)
      rescue => exception
        error_renderer.render(exception)
      end

    yield(resource_definition.selector, html, resource_definition.broadcast_each)
  end
end

Private Instance Methods

error_renderer() click to toggle source
# File lib/futurism/resolver/resources.rb, line 38
def error_renderer
  ErrorRenderer.new
end
lookup_resource(resource_definition) click to toggle source
# File lib/futurism/resolver/resources.rb, line 94
def lookup_resource(resource_definition)
  message_verifier
    .verify(resource_definition.signed_params)
    .deep_transform_values { |value| value.is_a?(String) && value.start_with?("gid://") ? GlobalID::Locator.locate(value) : value }
end
renderer_for(resource_definition:) click to toggle source
# File lib/futurism/resolver/resources.rb, line 83
def renderer_for(resource_definition:)
  Resolver::Controller::Renderer.for(controller: resource_definition.controller,
                                     connection: @connection,
                                     url: resource_definition.url,
                                     params: @params)
end
resolved_models() click to toggle source
# File lib/futurism/resolver/resources.rb, line 90
def resolved_models
  GlobalID::Locator.locate_many_signed @resources_with_sgids.map(&:sgid)
end