class HammerCLI::Output::FieldFilter
Attributes
classes_filter[RW]
fields[R]
filtered_fields[R]
sets_filter[RW]
Public Class Methods
new(fields = [], filters = {})
click to toggle source
# File lib/hammer_cli/output/field_filter.rb, line 6 def initialize(fields = [], filters = {}) self.fields = fields @classes_filter = filters[:classes_filter] || [] @sets_filter = filters[:sets_filter] || [] end
Public Instance Methods
fields=(fields)
click to toggle source
# File lib/hammer_cli/output/field_filter.rb, line 12 def fields=(fields) @fields = fields || [] @filtered_fields = @fields.dup end
filter_by_classes(classes = nil)
click to toggle source
# File lib/hammer_cli/output/field_filter.rb, line 17 def filter_by_classes(classes = nil) classes ||= @classes_filter classes.each do |cls| @filtered_fields.reject! do |f| f.is_a? cls end end self end
filter_by_data(data, compact_only: false)
click to toggle source
# File lib/hammer_cli/output/field_filter.rb, line 36 def filter_by_data(data, compact_only: false) @filtered_fields = displayable_fields(@filtered_fields, data, compact_only: compact_only) self end
filter_by_sets(sets = nil)
click to toggle source
# File lib/hammer_cli/output/field_filter.rb, line 27 def filter_by_sets(sets = nil) sets ||= @sets_filter return self if sets.empty? set_names, labels = resolve_set_names(sets) deep_filter(@filtered_fields, set_names, labels) self end
Private Instance Methods
deep_filter(fields, set_names, labels)
click to toggle source
# File lib/hammer_cli/output/field_filter.rb, line 45 def deep_filter(fields, set_names, labels) fields.select! do |f| allowed = include_by_label?(labels, f.full_label.downcase) allowed ||= (f.sets & set_names).any? deep_filter(f.fields, set_names, labels) if f.respond_to?(:fields) allowed end end
displayable_fields(fields, record, compact_only: false)
click to toggle source
# File lib/hammer_cli/output/field_filter.rb, line 54 def displayable_fields(fields, record, compact_only: false) fields.select do |field| field_data = HammerCLI::Output::Adapter::Abstract.data_for_field( field, record ) if compact_only && !field_data.is_a?(HammerCLI::Output::DataMissing) true else field.display?(field_data) end end end
include_by_label?(labels, label)
click to toggle source
# File lib/hammer_cli/output/field_filter.rb, line 67 def include_by_label?(labels, label) labels.any? do |l| l.start_with?("#{label}/") || label.match(%r{^#{l.gsub(/\*/, '.*')}(|\/.*)$}) || l == label end end
resolve_set_names(sets)
click to toggle source
# File lib/hammer_cli/output/field_filter.rb, line 73 def resolve_set_names(sets) set_names = [] labels = [] sets.each do |name| next set_names << name if name.upcase == name labels << name.downcase end [set_names, labels] end