Class: Moneta::Builder Private

Inherits:
Object
  • Object
show all
Defined in:
lib/moneta/builder.rb

Overview

This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.

Builder implements the DSL to build a stack of Moneta store proxies

Instance Method Summary collapse

Constructor Details

#initialize {|Builder| ... } ⇒ Builder

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of Builder

Yield Parameters:

  • Builder

    dsl code block

Raises:

  • (ArgumentError)

6
7
8
9
10
# File 'lib/moneta/builder.rb', line 6

def initialize(&block)
  raise ArgumentError, 'No block given' unless block_given?
  @proxies = []
  instance_eval(&block)
end

Instance Method Details

#adapter(adapter, options = {}, &block) ⇒ Object

Add adapter to stack

Parameters:

  • adapter (Symbol/Class/Moneta store)

    Name of adapter class, adapter class or Moneta store

  • options (Hash) (defaults to: {})

    Options hash


45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/moneta/builder.rb', line 45

def adapter(adapter, options = {}, &block)
  case adapter
  when Symbol
    use(Adapters.const_get(adapter), options, &block)
  when Class
    use(adapter, options, &block)
  else
    raise ArgumentError, 'Adapter must be a Moneta store' unless adapter.respond_to?(:load) && adapter.respond_to?(:store)
    raise ArgumentError, 'No options allowed' unless options.empty?
    @proxies.unshift adapter
    nil
  end
end

#buildObject

Build proxy stack

Returns:

  • (Object)

    Generated Moneta proxy stack


16
17
18
19
20
21
22
23
24
25
26
# File 'lib/moneta/builder.rb', line 16

def build
  adapter = @proxies.first
  if Array === adapter
    klass, options, block = adapter
    adapter = klass.new(options, &block)
  end
  @proxies[1..-1].inject([adapter]) do |stores, proxy|
    klass, options, block = proxy
    stores << klass.new(stores.last, options, &block)
  end
end

#use(proxy, options = {}, &block) ⇒ Object

Add proxy to stack

Parameters:

  • proxy (Symbol/Class)

    Name of proxy class or proxy class

  • options (Hash) (defaults to: {})

    Options hash

Raises:

  • (ArgumentError)

33
34
35
36
37
38
# File 'lib/moneta/builder.rb', line 33

def use(proxy, options = {}, &block)
  proxy = Moneta.const_get(proxy) if Symbol === proxy
  raise ArgumentError, 'You must give a Class or a Symbol' unless Class === proxy
  @proxies.unshift [proxy, options, block]
  nil
end