Class: Html2rss::AttributePostProcessors::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/html2rss/attribute_post_processors/base.rb

Overview

All post processors must inherit from this base class and implement ‘self.validate_args!` and `#get`.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(value, context) ⇒ Base

Initializes the post processor

Parameters:

  • value (Object)

    the value to be processed

  • context (Item::Context)

    the context



54
55
56
57
58
59
60
61
62
# File 'lib/html2rss/attribute_post_processors/base.rb', line 54

def initialize(value, context)
  klass = self.class
  # TODO: get rid of Hash
  klass.assert_type(context, [Item::Context, Hash], 'context', context:)
  klass.validate_args!(value, context)

  @value = value
  @context = context
end

Instance Attribute Details

#contextObject (readonly)

Returns the value of attribute context.



64
65
66
# File 'lib/html2rss/attribute_post_processors/base.rb', line 64

def context
  @context
end

#valueObject (readonly)

Returns the value of attribute value.



64
65
66
# File 'lib/html2rss/attribute_post_processors/base.rb', line 64

def value
  @value
end

Class Method Details

.assert_type(value, types = [], name, context:) ⇒ Object

Asserts that the value is of the expected type(s)

Parameters:

  • value (Object)

    the value to check

  • types (Array<Class>, Class) (defaults to: [])

    the expected type(s)

  • name (String)

    the name of the option being checked

  • context (Item::Context)

    the context

Raises:

  • (InvalidType)

    if the value is not of the expected type(s)



31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/html2rss/attribute_post_processors/base.rb', line 31

def self.assert_type(value, types = [], name, context:)
  types = [types] unless types.is_a?(Array)

  return if types.any? { |type| value.is_a?(type) }

  options = context[:options] if context.is_a?(Hash)
  options ||= { file: File.basename(caller_locations(1, 1).first.absolute_path) }

  raise InvalidType, format('The type of `%<name>s` must be %<types>s, but is: %<type>s in: %<options>s',
                            name:, types: types.join(' or '), type: value.class, options: options.inspect),
        [], cause: nil
end

.expect_options(keys, context) ⇒ Object

Validates the presence of required options in the context

Parameters:

  • keys (Array<Symbol>)

    the keys to check for presence

  • context (Hash)

    the context containing options

Raises:



15
16
17
18
19
20
21
22
# File 'lib/html2rss/attribute_post_processors/base.rb', line 15

def self.expect_options(keys, context)
  keys.each do |key|
    unless (options = context[:options]).key?(key)
      raise MissingOption, "The `#{key}` option is missing in: #{options.inspect}", [],
            cause: nil
    end
  end
end

.validate_args!(_value, _context) ⇒ Object

This method validates the arguments passed to the post processor. Must be implemented by subclasses.

Raises:

  • (NotImplementedError)


46
47
48
# File 'lib/html2rss/attribute_post_processors/base.rb', line 46

def self.validate_args!(_value, _context)
  raise NotImplementedError, 'You must implement the `validate_args!` method in the post processor'
end

Instance Method Details

#getObject

Abstract method to be implemented by subclasses

Raises:

  • (NotImplementedError)

    if not implemented in subclass



69
70
71
# File 'lib/html2rss/attribute_post_processors/base.rb', line 69

def get
  raise NotImplementedError, 'You must implement the `get` method in the post processor'
end