Sha256: 08591e3ddbdeb00aa6b672ccb9fa4cd08d06a01ac980edb89ad8d69cf118fa4e

Contents?: true

Size: 1.49 KB

Versions: 5

Compression:

Stored size: 1.49 KB

Contents

module Checked
class Demand
module Mods
module Vars

  def array!
    a! Array
  end

  def bool!
    return true if [true, false].include?(target)
    fail!("...has to be a boolean.")
  end

  def string!
    a! String
  end

  def symbol!
    a! Symbol
  end
        
  def no_block_given!
    one_of! NilClass, FalseClass
    if target
      fail! "No block allowed."
    end
  end
  
  def no_block!
    no_block_given!
  end

  def either! *meths
    meths.flatten.detect { |m|
      begin
        send m
        true
      rescue Failed
        false
      end
    }
  end

  def one_of! *klasses
    return true if klasses.flatten.any? { |k| target.is_a?(k) }  
    fail! "...can only be of class/module: #{klasses.map(&:to_s).join(', ')}"
  end

  def a! klass
    one_of! klass
  end

  def nil!
    return true if target == nil
    fail!("...must be nil.")
  end
  
  def not_nil!
    fail!("...can't be nil.") if target.nil?
    true
  end

  def respond_to! meth
    return true if target.respond_to?(meth)
    fail!("...must respond to #{meth.inspect}")
  end

  def not_empty!
    respond_to! :empty?
    is_empty = target.empty?
    fail!("...can't be empty.") if is_empty
  end

  def exists!
    respond_to! :exists?
    return true if target.exists?
    fail!("...must exist.")
  end

  def not_exists!
    respond_to! :exists?
    return true unless target.exists?
    fail!("...must not exist.")
  end
        
end # === module Var      
end # === module Mods
end # === class Demand
end # === module Checked

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
Checked-0.1.4 lib/Checked/Demand/Mods/Vars.rb
Checked-0.1.3 lib/Checked/Demand/Mods/Vars.rb
Checked-0.1.2 lib/Checked/Demand/Mods/Vars.rb
Checked-0.1.1 lib/Checked/Demand/Mods/Vars.rb
Checked-0.1.0 lib/Checked/Demand/Mods/Vars.rb