lib/outliers/collection.rb in outliers-0.3.3 vs lib/outliers/collection.rb in outliers-0.5.0.beta1

- old
+ new

@@ -41,40 +41,48 @@ block.call resource end end def exclude_by_key(exclusions) - @logger.info "Excluding the following resources: '#{exclusions.join(',')}'." save = list.reject {|u| exclusions.include? u.public_send key} @list = save end - def filter(args) + def filter(action, args) name = args.keys.first value = args.fetch name - logger.info "Applying filter '#{name}' with value '#{value}'." - unless self.public_methods.include? "filter_#{name}".to_sym raise Exceptions::UnknownFilter.new "Unknown filter '#{name}'." end filtered_list = self.public_send "filter_#{name}", value - logger.warn "No resources match filter." unless filtered_list.any? - - @list = filtered_list + case action + when 'include' + logger.info "Including resources filtered by '#{name}' with value '#{value}'." + logger.warn "No resources match filter." unless filtered_list.any? + @list = filtered_list & @list + when 'exclude' + logger.info "Excluding resources filtered by '#{name}' with value '#{value}'." + @list -= filtered_list + else + raise Exceptions::UnknownFilterAction.new "Filters must be either 'include' or 'exclude'." + end end - def verify(name, arguments={}) - name << "?" unless name =~ /^.*\?$/ + def verify(name, arguments=nil) + logger.debug "Verifying '#{name}'." + name += "?" unless name =~ /^.*\?$/ + unless list.any? return { failing_resources: [], passing_resources: [] } end - logger.info "Verifying '#{name}'." + set_target_resources name if targets.any? + logger.debug "Target resources '#{list_by_key.join(', ')}'." unless verification_exists? name raise Exceptions::UnknownVerification.new "Unkown verification '#{name}'." end @@ -122,11 +130,11 @@ def collection_verification?(name) self.public_methods.include? name.to_sym end def set_target_resources(verification) - logger.info "Verifying target '#{targets.join(', ')}'." + logger.debug "Setting target resource(s) to '#{targets.join(', ')}'." @list = list.select {|r| targets.include? r.id } unless list.any? raise Outliers::Exceptions::TargetNotFound.new "No resources found matching one or more of '#{targets}'." @@ -134,16 +142,14 @@ @list end def send_resources_verification(verification, arguments) - set_target_resources verification if targets.any? - failing_resources = reject do |resource| - result = send_verification resource, verification, arguments - logger.debug "Verification of resource '#{resource.id}' #{result ? 'passed' : 'failed'}." - result + r = send_verification resource, verification, arguments + logger.debug "Verification of resource '#{resource.id}' #{r ? 'passed' : 'failed'}." + r end { failing_resources: failing_resources, passing_resources: list - failing_resources } end def send_collection_verification(verification, arguments) @@ -151,15 +157,15 @@ { failing_resources: failing_resources, passing_resources: list - failing_resources } end def send_verification(object, verification, arguments) if object.method(verification).arity.zero? - if arguments.any? + unless arguments.nil? raise Outliers::Exceptions::NoArgumentRequired.new "Verification '#{verification}' does not require an arguments." end object.public_send verification else - if arguments.none? + if arguments.nil? raise Outliers::Exceptions::ArgumentRequired.new "Verification '#{verification}' requires arguments." end object.public_send verification, arguments end end