Class: Amazon::Util::FilterChain
- Inherits:
-
Object
- Object
- Amazon::Util::FilterChain
- Defined in:
- lib/amazon/util/filter_chain.rb
Overview
A class for managing around style interceptors, which can be used to implement a decorator design pattern.
Defined Under Namespace
Classes: Filter
Instance Attribute Summary collapse
-
#filters ⇒ Object
readonly
Returns the value of attribute filters.
Instance Method Summary collapse
- #add(name = nil, *filter_params, &filter_block) ⇒ Object
- #add_filter(filter) ⇒ Object
- #execute(*block_params, &block) ⇒ Object
-
#initialize ⇒ FilterChain
constructor
A new instance of FilterChain.
- #remove(name) ⇒ Object
- #remove_all ⇒ Object
Constructor Details
#initialize ⇒ FilterChain
Returns a new instance of FilterChain.
29 30 31 |
# File 'lib/amazon/util/filter_chain.rb', line 29 def initialize() @filters = [] end |
Instance Attribute Details
#filters ⇒ Object (readonly)
Returns the value of attribute filters.
27 28 29 |
# File 'lib/amazon/util/filter_chain.rb', line 27 def filters @filters end |
Instance Method Details
#add(name = nil, *filter_params, &filter_block) ⇒ Object
41 42 43 |
# File 'lib/amazon/util/filter_chain.rb', line 41 def add( name=nil, *filter_params, &filter_block ) add_filter( Filter.new( name, filter_params, filter_block ) ) end |
#add_filter(filter) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/amazon/util/filter_chain.rb', line 45 def add_filter( filter ) if !filter.name.nil? @filters.each_with_index { |existing_filter,i| if filter.name == existing_filter.name @filters[i] = filter return end } end @filters << filter end |
#execute(*block_params, &block) ⇒ Object
33 34 35 36 37 38 39 |
# File 'lib/amazon/util/filter_chain.rb', line 33 def execute( *block_params, &block ) if @filters.size == 0 block.call( *block_params ) else create_chain( @filters, 0, block, block_params ).call end end |
#remove(name) ⇒ Object
57 58 59 |
# File 'lib/amazon/util/filter_chain.rb', line 57 def remove( name ) @filters.delete_if { |filter| name == filter.name } end |
#remove_all ⇒ Object
61 62 63 |
# File 'lib/amazon/util/filter_chain.rb', line 61 def remove_all() @filters.clear end |