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