Module: Matchd::Response::Factory

Included in:
Matchd
Defined in:
lib/matchd/response.rb

Instance Method Summary collapse

Instance Method Details

#Response(respond, fallback_resource_class) ⇒ Array<Matchd::Response>

Creates new instances of a Matchd::Response subclass. Which class is being used is defines via the respond or fallback_resource_class parameters.

Parameters:

  • respond (Array<Hash>|Hash)

    One or multiple response configurations (See subclasses)

  • fallback_resource_class (Array[String]|String)

    One or multiple ressource class names (like ‘“A”`, `“AAAA”`, `“MX”` etc) defining which Resource subclass is being used if the respond doesn’t include a ‘“resource_class”` configuration

Returns:



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/matchd/response.rb', line 55

def Response(respond, fallback_resource_class) # rubocop:disable Naming/MethodName
  respond = [respond] unless respond.is_a?(Array) # don't convert Hash to Array
  respond.flat_map do |r|
    resource_class =
      if r.is_a?(Hash)
        r.fetch("resource_class", fallback_resource_class)
      else
        fallback_resource_class
      end

    raise ArgumentError, "Missing resource_class for Response" unless resource_class

    Array(resource_class).map { |klass| Matchd::Response.const_get(klass.upcase).new(r) }
  end
end