Class: Dry::Container::Item

Inherits:
Object
  • Object
show all
Defined in:
lib/dry/container/item.rb,
lib/dry/container/item/factory.rb,
lib/dry/container/item/callable.rb,
lib/dry/container/item/memoizable.rb

Overview

Base class to abstract Memoizable and Callable implementations

Direct Known Subclasses

Callable, Memoizable

Defined Under Namespace

Classes: Callable, Factory, Memoizable

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(item, options = {}) ⇒ Item

Returns a new instance of Item.



15
16
17
18
19
20
# File 'lib/dry/container/item.rb', line 15

def initialize(item, options = {})
  @item = item
  @options = {
    call: item.is_a?(::Proc) && item.parameters.empty?
  }.merge(options)
end

Instance Attribute Details

#itemMixed (readonly)

Returns the item to be solved later.

Returns:

  • (Mixed)

    the item to be solved later



9
10
11
# File 'lib/dry/container/item.rb', line 9

def item
  @item
end

#optionsHash (readonly)

Returns the options to memoize, call or no.

Returns:

  • (Hash)

    the options to memoize, call or no.



12
13
14
# File 'lib/dry/container/item.rb', line 12

def options
  @options
end

Instance Method Details

#callObject

Raises:

  • (NotImplementedError)


23
24
25
# File 'lib/dry/container/item.rb', line 23

def call
  raise NotImplementedError
end

#callable?Boolean

Returns:

  • (Boolean)


33
34
35
# File 'lib/dry/container/item.rb', line 33

def callable?
  options[:call]
end

#map(func) ⇒ Object

Build a new item with transformation applied



40
41
42
43
44
45
46
# File 'lib/dry/container/item.rb', line 40

def map(func)
  if callable?
    self.class.new(-> { func.(item.call) }, options)
  else
    self.class.new(func.(item), options)
  end
end

#value?Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/dry/container/item.rb', line 28

def value?
  !callable?
end