Sha256: fb0a9d926cfcf1948e98c5cded70651e58101e2d92220ab691272eae27836c27

Contents?: true

Size: 1.04 KB

Versions: 1

Compression:

Stored size: 1.04 KB

Contents

require 'rest-core/client'
require 'rest-core/wrapper'

class RestCore::Builder
  include RestCore
  include Wrapper

  def self.default_engine
    @default_engine ||= RestCore::HttpClient
  end

  def self.client *attrs, &block
    new(&block).to_client(*attrs)
  end

  def to_client *attrs
    fields = members + attrs
    struct = if fields.empty?
               Struct.new(nil)
             else
               Struct.new(*fields.uniq)
             end
    client = Class.new(struct)
    client.const_set('Struct', struct)
    client.send(:include, Client)
    class << client
      attr_reader   :builder
      attr_accessor :pool_size, :pool_idle_time

      def thread_pool
        RestCore::ThreadPool[self]
      end
    end
    client.instance_variable_set(:@builder, self)
    client.instance_variable_set(:@pool_size, 0) # default to no pool
    client.instance_variable_set(:@pool_idle_time, 60) # default to 60 seconds
    client
  end

  def initialize &block
    @engine    = nil
    @middles ||= []
    instance_eval(&block) if block_given?
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rest-core-3.0.0 lib/rest-core/builder.rb