class WCC::API::RestClient::Builder

Attributes

resource_class[W]

Public Class Methods

new(klass) click to toggle source
# File lib/wcc/api/rest_client/builder.rb, line 4
def initialize(klass)
  @klass = klass
end

Public Instance Methods

apply() click to toggle source
# File lib/wcc/api/rest_client/builder.rb, line 31
def apply
  closed_params = (@params || []).freeze
  resources = @resources
  klass = @klass

  klass.class_exec do
    define_singleton_method :params do
      closed_params
    end

    define_singleton_method :default do
      @default ||= new
    end

    define_singleton_method :default= do |client|
      @default = client
    end

    resources.each do |(endpoint, options)|
      attr_name = options[:attribute] || endpoint.downcase
      resource_class = options[:resource_class]

      define_method attr_name do
        instance_variable_get("@#{attr_name}") ||
          instance_variable_set("@#{attr_name}", 
            resource_class.new(self, endpoint, options[:model], @options.merge(options))
          )
      end
    end
  end

  resources.each do |(endpoint, options)|
    options[:model].class_exec do
      define_singleton_method :client do
        klass.default
      end

      define_singleton_method :endpoint do
        endpoint
      end

      define_singleton_method :key do
        options[:key]
      end
    end

    options[:model].send(:include, WCC::API::ActiveRecordShim)
  end
end
params(*params) click to toggle source
# File lib/wcc/api/rest_client/builder.rb, line 8
def params(*params)
  @params = params.map(&:to_s)
end
resource(endpoint, model:, **options, &block) click to toggle source
# File lib/wcc/api/rest_client/builder.rb, line 18
def resource(endpoint, model:, **options, &block)
  @resources ||= {}

  resource_class = options[:resource_class] || self.resource_class
  if block_given?
    resource_class = Class.new(resource_class, &block)
  end
  @resources[endpoint] = options.merge({
    resource_class: resource_class,
    model: model,
  })
end
resource_class() click to toggle source
# File lib/wcc/api/rest_client/builder.rb, line 13
def resource_class
  @resource_class ||=
    @klass.const_get("Resource") || WCC::API::RestClient::Resource
end