Class: OctocatalogDiff::CatalogDiff::Filter
- Inherits:
-
Object
- Object
- OctocatalogDiff::CatalogDiff::Filter
- Defined in:
- lib/octocatalog-diff/catalog-diff/filter.rb,
lib/octocatalog-diff/catalog-diff/filter/json.rb,
lib/octocatalog-diff/catalog-diff/filter/yaml.rb,
lib/octocatalog-diff/catalog-diff/filter/absent_file.rb,
lib/octocatalog-diff/catalog-diff/filter/compilation_dir.rb,
lib/octocatalog-diff/catalog-diff/filter/single_item_array.rb
Overview
Filtering of diffs, and parent class for inheritance.
Direct Known Subclasses
Defined Under Namespace
Classes: AbsentFile, CompilationDir, JSON, SingleItemArray, YAML
Constant Summary collapse
- AVAILABLE_FILTERS =
List the available filters here (by class name) for use in the validator method.
%w(AbsentFile CompilationDir JSON SingleItemArray YAML).freeze
Instance Attribute Summary collapse
-
#logger ⇒ Object
Returns the value of attribute logger.
Class Method Summary collapse
-
.apply_filters(result, filter_names, options = {}) ⇒ Object
Public: Apply multiple filters by repeatedly calling the ‘filter` method for each filter in an array.
-
.assert_that_filter_exists(filter_name) ⇒ Object
Public: Assert that a filter exists, and raise an error if it does not.
-
.filter(result, filter_class_name, options = {}) ⇒ Object
Public: Perform a filter on ‘result` using the specified filter class.
-
.filter?(filter_name) ⇒ Boolean
Public: Determine whether a particular filter exists.
Instance Method Summary collapse
-
#filtered?(_item, _options = {}) ⇒ Boolean
Inherited: Construct a default ‘filtered?` method for the subclass via inheritance.
-
#initialize(_diff_array = [], logger = Logger.new(StringIO.new)) ⇒ Filter
constructor
Inherited: Constructor.
Constructor Details
#initialize(_diff_array = [], logger = Logger.new(StringIO.new)) ⇒ Filter
Inherited: Constructor. Some filters require working on the entire data set and will override this method to perform some pre-processing for efficiency. This also sets up the logger object.
68 69 70 |
# File 'lib/octocatalog-diff/catalog-diff/filter.rb', line 68 def initialize(_diff_array = [], logger = Logger.new(StringIO.new)) @logger = logger end |
Instance Attribute Details
#logger ⇒ Object
Returns the value of attribute logger.
14 15 16 |
# File 'lib/octocatalog-diff/catalog-diff/filter.rb', line 14 def logger @logger end |
Class Method Details
.apply_filters(result, filter_names, options = {}) ⇒ Object
Public: Apply multiple filters by repeatedly calling the ‘filter` method for each filter in an array. This method returns nothing.
40 41 42 43 |
# File 'lib/octocatalog-diff/catalog-diff/filter.rb', line 40 def self.apply_filters(result, filter_names, = {}) return unless filter_names.is_a?(Array) filter_names.each { |x| filter(result, x, || {}) } end |
.assert_that_filter_exists(filter_name) ⇒ Object
Public: Assert that a filter exists, and raise an error if it does not.
29 30 31 32 |
# File 'lib/octocatalog-diff/catalog-diff/filter.rb', line 29 def self.assert_that_filter_exists(filter_name) return if filter?(filter_name) raise ArgumentError, "The filter #{filter_name} is not valid" end |
.filter(result, filter_class_name, options = {}) ⇒ Object
Public: Perform a filter on ‘result` using the specified filter class. This mutates `result` by removing items that are ignored. This method returns nothing.
52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/octocatalog-diff/catalog-diff/filter.rb', line 52 def self.filter(result, filter_class_name, = {}) assert_that_filter_exists(filter_class_name) filter_class_name = [name.to_s, filter_class_name].join('::') # Need to convert each of the results array to the OctocatalogDiff::API::V1::Diff object, if # it isn't already. The comparison is done on that array which is then applied back to the # original array. result_hash = {} result.each { |x| result_hash[x] = OctocatalogDiff::API::V1::Diff.factory(x) } obj = Kernel.const_get(filter_class_name).new(result_hash.values, [:logger]) result.reject! { |item| obj.filtered?(result_hash[item], ) } end |
.filter?(filter_name) ⇒ Boolean
Public: Determine whether a particular filter exists. This can be used to validate a user-submitted filter.
23 24 25 |
# File 'lib/octocatalog-diff/catalog-diff/filter.rb', line 23 def self.filter?(filter_name) AVAILABLE_FILTERS.include?(filter_name) end |
Instance Method Details
#filtered?(_item, _options = {}) ⇒ Boolean
Inherited: Construct a default ‘filtered?` method for the subclass via inheritance. Each subclass must implement this method, so the default method errors.
74 75 76 |
# File 'lib/octocatalog-diff/catalog-diff/filter.rb', line 74 def filtered?(_item, = {}) raise "No `filtered?` method is implemented in #{self.class}" end |