Module: Marko::Sentry
- Defined in:
- lib/marko/gadgets/sentry.rb
Overview
Factory module for guarding method arguments
Class Method Summary collapse
-
.new(key, msg, &blk) ⇒ Sentry
creates a new Sentry.
Instance Method Summary collapse
-
#error(val, key = @key, msg = @msg) ⇒ String
returns error message for invalid :val.
-
#error!(val, key = @key, msg = @msg) ⇒ Object
(also: #call)
guards :val.
Class Method Details
.new(key, msg, &blk) ⇒ Sentry
creates a new Sentry
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
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
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 |