Module: Marko::Sentry

Defined in:
lib/marko/gadgets/sentry.rb

Overview

Factory module for guarding method arguments

Examples:


ShortString = Sentry.new(:str, "must be String[3..100]"
) {|v| v.is_a?(String) && v.size.between?(3,100)}

ShortString.(str)         => "str"
ShortString.(nil)         => ArgumentError ":str must be String[3..100]"
ShortString.error(nil)    => ":str must be String[3..100]"
ShortString.error!(nil)   => ArgumentError":str must be String[3..100]"
ShortString.(nil, :name)  => ArgumentError ":name must be String[3..100]"
ShortString.(nil, 'John Doe', 'Ups!') => ArgumentError ":John Doe Ups!"

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.new(key, msg, &blk) ⇒ Sentry

creates a new Sentry

Parameters:

  • key (Symbol|String)

    key for error message

  • msg (String)

    error message

  • blk (&block)

    validation block that should return boolen

Returns:

  • (Sentry)

    based on key, msg, and validation block



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/marko/gadgets/sentry.rb', line 25

def self.new(key, msg, &blk)
  # origin ;)
  argerror = ->(val, msg, cnd) {
    fail ArgumentError, msg unless cnd
    val
  }
  Module.new do
    include Sentry
    extend self

    @key = argerror.(key, ":key must be Symbol|String",
      key.is_a?(String) || key.is_a?(Symbol))
    @msg = argerror.(msg, ":msg must be String", msg.is_a?(String))
    @blk = argerror.(blk, "&blk must be provided", block_given?)
  end
end

Instance Method Details

#error(val, key = @key, msg = @msg) ⇒ String

returns error message for invalid :val

Parameters:

  • val (Object)

    value to be validated

  • key (Symbol|String) (defaults to: @key)

    key for error message

  • msg (String) (defaults to: @msg)

    optional error message

Returns:

  • (String)

    error message for invalid :val or nil when :val is valid



47
48
49
# File 'lib/marko/gadgets/sentry.rb', line 47

def error(val, key = @key, msg = @msg)
  ":#{key} #{msg}" unless @blk.(val)
end

#error!(val, key = @key, msg = @msg) ⇒ Object Also known as: call

TODO:

@see Yard!

guards :val

Parameters:

  • val (Object)

    value to be returned if it valid

  • key (Symbol|String) (defaults to: @key)

    key for error message

  • msg (String) (defaults to: @msg)

    optional error message

Returns:

  • (Object)

    valid :val or raieses ArgumentError when invalid



57
58
59
60
# File 'lib/marko/gadgets/sentry.rb', line 57

def error!(val, key = @key, msg = @msg)
  return val if @blk.(val)
  fail ArgumentError, ":#{key} #{msg}", caller[0..-1]
end