Module: AE::Subjunctive
- Included in:
- Assertor
- Defined in:
- lib/ae/subjunctive.rb
Overview
Note:
THIS IS AN OPTIONAL LIBRARY.
Subjunctive
Mixin for Assertor that provides additional English-eque verbage such as ‘be’ and ‘an’. This makes it easier to create assertor methods of subjunctive terms like ‘should’.
Instance Method Summary collapse
-
#a(*args, &block) ⇒ Object
(also: #an)
The indefinite article is like #be, except that it compares a lone argument with #case?, rather than #equate?.
-
#be(*args, &block) ⇒ Object
(also: #is, #does)
Like #assert, except if an argument is provided and no block, uses #equate? to compare the argument to the receiver.
Instance Method Details
#a(*args, &block) ⇒ Object Also known as: an
The indefinite article is like #be, except that it compares a lone argument with #case?, rather than #equate?
43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/ae/subjunctive.rb', line 43 def a(*args, &block) return self if args.empty? && !block block = args.shift if !block && ::Proc === args.first if block pass = block.arity > 0 ? block.call(@delegate) : block.call #@delegate.instance_eval(&block) msg = args.shift || @message || block.inspect else pass = (args.shift === @delegate) # case equality msg = args.shift end __assert__(pass, msg) end |
#be(*args, &block) ⇒ Object Also known as: is, does
Like #assert, except if an argument is provided and no block, uses #equate? to compare the argument to the receiver. This allows for statements of the form:
5.should.be Numeric
20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/ae/subjunctive.rb', line 20 def be(*args, &block) return self if args.empty? && !block block = args.shift if !block && ::Proc === args.first if block pass = block.arity > 0 ? block.call(@delegate) : block.call #@delegate.instance_eval(&block) msg = args.shift || @message || block.inspect else pass = args.shift.equate?(@delegate) msg = args.shift end __assert__(pass, msg) end |