Class: Aws::Templates::Utils::Contextualized::Filter::Chain

Inherits:
Aws::Templates::Utils::Contextualized::Filter show all
Defined in:
lib/aws/templates/utils/contextualized/filter/chain.rb

Overview

Chain filters

The filter chains all passed filters to have chained filter semantics.

Example

class Piece
  include Aws::Templates::Utils::Contextualized

  contextualize filter(:copy) & filter(:remove, :c) & filter(:override, a: 12, b: 15)
end

i = Piece.new
opts = Options.new(c: { e: 1 })
opts.filter(i.filter) # => { a: 12, b: 15 }

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Aws::Templates::Utils::Contextualized::Filter

#&, #to_filter, #to_proc

Constructor Details

#initialize(*flts) ⇒ Chain

Returns a new instance of Chain.



30
31
32
33
34
35
36
37
38
39
# File 'lib/aws/templates/utils/contextualized/filter/chain.rb', line 30

def initialize(*flts)
  wrong_objects = flts.reject { |f| f.respond_to?(:to_proc) }
  unless wrong_objects.empty?
    raise(
      "The following objects are not filters: #{wrong_objects.inspect}"
    )
  end

  @filters = flts.flat_map { |f| _as_flattened_filters(f) }
end

Instance Attribute Details

#filtersObject (readonly)

Returns the value of attribute filters.



28
29
30
# File 'lib/aws/templates/utils/contextualized/filter/chain.rb', line 28

def filters
  @filters
end

Instance Method Details

#filter(options, memo, instance) ⇒ Object



41
42
43
# File 'lib/aws/templates/utils/contextualized/filter/chain.rb', line 41

def filter(options, memo, instance)
  filters.inject(memo) { |acc, elem| instance.instance_exec(options, acc, &elem) }
end