module Matchd::Response::Factory

Public Instance Methods

Response(respond, fallback_resource_class) click to toggle source

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

@param respond [Array<Hash>|Hash] One or multiple response configurations (See subclasses) @param fallback_resource_class [Array|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

@return [Array<Matchd::Response>] Instances of {Matchd::Response} subclasses.

# 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