module AWS::EC2::FilteredCollection

def collection_with(options = {})

def collection_with(options = {})
  self.class.new(preserved_options.merge(options))
end

def filter filter_name, *values


character.
* '*' matches one or more characters and '?' matches any one

value conditions together.
* Supply multiple values to a singler #filter call to OR those

together.
* Chain multiple calls of #filter together to AND multiple conditions

by provided filters.
A subsequent call to #each will limit the results returned
Specify one or more criteria to filter elastic IP addresses by.
def filter filter_name, *values
  filters = @filters.dup
  filters << { :name => filter_name, :values => values.flatten }
  collection_with(:filters => filters)
end

def filter_value_for filter_name

def filter_value_for filter_name
  @filters.each do |filter|
    return filter[:values].first if filter[:name] == filter_name
  end
  nil
end

def filtered_request client_method, options = {}, &block

Other tags:
    Private: -
def filtered_request client_method, options = {}, &block
  options[:filters] = @filters unless @filters.empty?
  client.send(client_method, options)
end

def initialize options = {}

def initialize options = {}
  @filters = options[:filters] || []
  super
end

def preserved_options

def preserved_options
  { :config => config, :filters => @filters }
end

def subnet_id_option options

def subnet_id_option options
  subnet_id = options.delete(:subnet)
  subnet_id ||= options[:subnet_id]
  subnet_id ||= filter_value_for('subnet-id')
  subnet_id = subnet_id.id if subnet_id.is_a?(Subnet)
  subnet_id
end

def vpc_id_option options

def vpc_id_option options
  vpc_id = options[:vpc]
  vpc_id ||= options[:vpc_id]
  vpc_id ||= filter_value_for('vpc-id')
  vpc_id = vpc_id.id if vpc_id.is_a?(VPC)
  vpc_id
end