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.



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

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



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

def item
  @item
end

#optionsHash (readonly)

Returns the options to memoize, call or no.

Returns:

  • (Hash)

    the options to memoize, call or no.



14
15
16
# File 'lib/dry/container/item.rb', line 14

def options
  @options
end

Instance Method Details

#callObject

Raises:

  • (NotImplementedError)


25
26
27
# File 'lib/dry/container/item.rb', line 25

def call
  raise NotImplementedError
end

#callable?Boolean

Returns:

  • (Boolean)


35
36
37
# File 'lib/dry/container/item.rb', line 35

def callable?
  options[:call]
end

#map(func) ⇒ Object

Build a new item with transformation applied



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

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)


30
31
32
# File 'lib/dry/container/item.rb', line 30

def value?
  !callable?
end