Sha256: 600fe9cefacfc4108f0a5f2246d6e7774c6d4baf973a1fb6f919cf212b67a65a

Contents?: true

Size: 1.49 KB

Versions: 1

Compression:

Stored size: 1.49 KB

Contents

class Brut::Instrumentation::Subscriber
  def self.from_proc(block)
    required_parameter_names_found   = self.instance_method(:call).parameters.map { |(type,name)| [ name, false ] }.to_h
    unexpected_parameter_names_error = {}

    block.parameters.each do |(type,name)|
      if required_parameter_names_found.key?(name)
        if type == :key || type == :keyreq
          required_parameter_names_found[name] = true
        else
          unexpected_parameter_names[name] = "Not a keyword arg"
        end
      elsif type != :key
        if type == :keyreq
          unexpected_parameter_names[name] = "keyword arg without a default value"
        else
          unexpected_parameter_names[name] = "Not a keyword arg"
        end
      end
    end
    errors = []
    if unexpected_parameter_names_error.any?
      messages = unexpected_parameter_names_error.map { |name,problem|
        "#{name} - #{problem}"
      }.join(", ")
      errors << "Unexpected parameters were required, so this cannot be used as a subscriber: #{messages}"
    end
    if required_parameter_names_found.any? { |_name,found| !found }
      messages = required_parameter_names_found.select { |_name,found| !found }.map { |name,_found| "#{name} must be a keyword argument" }.join(",")
      errors << "Required parameters were missing, so this cannot be used as a subscriber: #{messages}"
    end
    if errors.any?
      raise ArgumentError,errors.join(", ")
    end
    block
  end

  def call(event:,start:,stop:,exception:)
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
brut-0.0.1 lib/brut/instrumentation/subscriber.rb