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 |