Checked 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +5 -0
- data/.gitignore +4 -0
- data/Checked.gemspec +30 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +1 -0
- data/lib/Checked/Args.rb +55 -0
- data/lib/Checked/Ask/DSL.rb +31 -0
- data/lib/Checked/Ask/Mods/Arrays.rb +25 -0
- data/lib/Checked/Ask/Mods/Strings.rb +26 -0
- data/lib/Checked/Ask/Mods/Vars.rb +12 -0
- data/lib/Checked/Ask.rb +69 -0
- data/lib/Checked/Base.rb +119 -0
- data/lib/Checked/Clean/DSL.rb +16 -0
- data/lib/Checked/Clean/Mods/Strings.rb +98 -0
- data/lib/Checked/Clean.rb +41 -0
- data/lib/Checked/Demand/DSL.rb +29 -0
- data/lib/Checked/Demand/Mods/Arrays.rb +72 -0
- data/lib/Checked/Demand/Mods/Bools.rb +37 -0
- data/lib/Checked/Demand/Mods/File_Addresses.rb +56 -0
- data/lib/Checked/Demand/Mods/Strings.rb +51 -0
- data/lib/Checked/Demand/Mods/Symbols.rb +20 -0
- data/lib/Checked/Demand/Mods/Vars.rb +91 -0
- data/lib/Checked/Demand.rb +46 -0
- data/lib/Checked/version.rb +3 -0
- data/lib/Checked.rb +14 -0
- data/spec/helper.rb +15 -0
- data/spec/main.rb +32 -0
- data/spec/tests/Ask.rb +13 -0
- data/spec/tests/Ask_Strings.rb +57 -0
- data/spec/tests/Checked.rb +43 -0
- data/spec/tests/Clean.rb +13 -0
- data/spec/tests/Clean_Strings.rb +76 -0
- data/spec/tests/Demand.rb +39 -0
- data/spec/tests/Demand_Arrays.rb +31 -0
- data/spec/tests/Demand_File_Addresses.rb +37 -0
- data/spec/tests/Demand_Vars.rb +19 -0
- metadata +117 -0
| @@ -0,0 +1,37 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            module Checked
         | 
| 3 | 
            +
            class Demand
         | 
| 4 | 
            +
            module Mods
         | 
| 5 | 
            +
            module Bools
         | 
| 6 | 
            +
                    
         | 
| 7 | 
            +
              def self.before_apply d
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              def self.apply? d
         | 
| 11 | 
            +
                target = d.target
         | 
| 12 | 
            +
                target.is_a?( FalseClass ) ||
         | 
| 13 | 
            +
                  target.is_a?(TrueClass)
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
              
         | 
| 16 | 
            +
              def self.after_apply d
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              def be! meth, *args
         | 
| 20 | 
            +
                answer = target.send meth, *args
         | 
| 21 | 
            +
                demand answer, :bool!
         | 
| 22 | 
            +
                return true if answer
         | 
| 23 | 
            +
                fail!("...failed #{meth} with #{args.inspect}")
         | 
| 24 | 
            +
              end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              def not_be! meth, *args
         | 
| 27 | 
            +
                bool!
         | 
| 28 | 
            +
                pass = target.send(meth, *args)
         | 
| 29 | 
            +
                demand pass, :bool!
         | 
| 30 | 
            +
                return true unless pass
         | 
| 31 | 
            +
                fail!("...#{meth} should not be true with #{args.inspect}")
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
                    
         | 
| 34 | 
            +
            end # === module Bools      
         | 
| 35 | 
            +
            end # === module Mods
         | 
| 36 | 
            +
            end # === class Demand
         | 
| 37 | 
            +
            end # === module Checked
         | 
| @@ -0,0 +1,56 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            module Checked
         | 
| 3 | 
            +
            class Demand
         | 
| 4 | 
            +
            module Mods
         | 
| 5 | 
            +
            module File_Addresses
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              def self.apply? d
         | 
| 8 | 
            +
                d.target.is_a?(String)
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              def hostname!
         | 
| 12 | 
            +
                string!
         | 
| 13 | 
            +
                not_empty!
         | 
| 14 | 
            +
                contain_only! %r![\dA-Za-z_-]!
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              def not_dir!
         | 
| 18 | 
            +
                string!
         | 
| 19 | 
            +
                not_empty!
         | 
| 20 | 
            +
                if File.directory?(target)
         | 
| 21 | 
            +
                  fail! "...can't be a directory."
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              def not_file!
         | 
| 26 | 
            +
                string!
         | 
| 27 | 
            +
                not_empty!
         | 
| 28 | 
            +
                if File.file?(target)
         | 
| 29 | 
            +
                  fail! "...can't be a file."
         | 
| 30 | 
            +
                end
         | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
              def dir_address!
         | 
| 34 | 
            +
                file_address!
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              def file_address!
         | 
| 38 | 
            +
                self.target= target.strip
         | 
| 39 | 
            +
                string!
         | 
| 40 | 
            +
                not_empty!
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
              def file_read!
         | 
| 44 | 
            +
                self.target= target.gsub("\r\n", "\n")
         | 
| 45 | 
            +
              end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
              def file_content! 
         | 
| 48 | 
            +
                string!
         | 
| 49 | 
            +
                not_empty!   
         | 
| 50 | 
            +
                file_read!
         | 
| 51 | 
            +
              end
         | 
| 52 | 
            +
                  
         | 
| 53 | 
            +
            end # === module File_Addresses
         | 
| 54 | 
            +
            end # === module Mods
         | 
| 55 | 
            +
            end # === class Demand
         | 
| 56 | 
            +
            end # === module Checked
         | 
| @@ -0,0 +1,51 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            module Checked
         | 
| 3 | 
            +
            class Demand
         | 
| 4 | 
            +
            module Mods
         | 
| 5 | 
            +
            module Strings
         | 
| 6 | 
            +
                
         | 
| 7 | 
            +
              def self.before_apply d
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              def self.apply? d
         | 
| 11 | 
            +
                d.target.is_a?( String ) ||
         | 
| 12 | 
            +
                  d.target.is_a?(StringIO)
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
              
         | 
| 15 | 
            +
              def self.after_apply d
         | 
| 16 | 
            +
                if d.target.is_a?(StringIO)
         | 
| 17 | 
            +
                  d.target.rewind
         | 
| 18 | 
            +
                  d.target= d.target.readlines
         | 
| 19 | 
            +
                  d.target.rewind
         | 
| 20 | 
            +
                end
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              def include! matcher
         | 
| 24 | 
            +
                included = target[matcher]
         | 
| 25 | 
            +
                return true if included
         | 
| 26 | 
            +
                fail!("...must contain: #{matcher.inspect}")
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              def exclude! matcher
         | 
| 30 | 
            +
                raise_e = val[matcher]
         | 
| 31 | 
            +
                return true unless raise_e
         | 
| 32 | 
            +
                fail!("...can't contain #{matcher.inspect}")
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
              def matches_only! matcher
         | 
| 36 | 
            +
                  str = target.gsub(matcher, '')
         | 
| 37 | 
            +
                  if !str.empty?
         | 
| 38 | 
            +
                    fail!( "...invalid characters: #{str.inspect}" ) 
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
              def not_empty!
         | 
| 43 | 
            +
                if target.strip.empty? 
         | 
| 44 | 
            +
                  fail!("...can't be empty.") 
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
              end
         | 
| 47 | 
            +
              
         | 
| 48 | 
            +
            end # === module Strings
         | 
| 49 | 
            +
            end # === module DSL
         | 
| 50 | 
            +
            end # === class Demand
         | 
| 51 | 
            +
            end # === module Checked
         | 
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            module Checked
         | 
| 3 | 
            +
            class Demand
         | 
| 4 | 
            +
            module Mods
         | 
| 5 | 
            +
            module Symbols
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              def self.before_apply d
         | 
| 8 | 
            +
              end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
              def self.apply? d
         | 
| 11 | 
            +
                d.target.is_a? Symbol
         | 
| 12 | 
            +
              end
         | 
| 13 | 
            +
              
         | 
| 14 | 
            +
              def self.after_apply d
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            end # === module Symbols
         | 
| 18 | 
            +
            end # === class DEMANDS
         | 
| 19 | 
            +
            end # === class Demand
         | 
| 20 | 
            +
            end # === module Checked
         | 
| @@ -0,0 +1,91 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            module Checked
         | 
| 3 | 
            +
            class Demand
         | 
| 4 | 
            +
            module Mods
         | 
| 5 | 
            +
            module Vars
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              def array!
         | 
| 8 | 
            +
                a! Array
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              def bool!
         | 
| 12 | 
            +
                return true if [true, false].include?(target)
         | 
| 13 | 
            +
                fail!("...has to be a boolean.")
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              def string!
         | 
| 17 | 
            +
                a! String
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              def symbol!
         | 
| 21 | 
            +
                a! Symbol
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
                    
         | 
| 24 | 
            +
              def no_block_given!
         | 
| 25 | 
            +
                one_of! NilClass, FalseClass
         | 
| 26 | 
            +
                if target
         | 
| 27 | 
            +
                  fail! "No block allowed."
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
              
         | 
| 31 | 
            +
              def no_block!
         | 
| 32 | 
            +
                no_block_given!
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
              def either! *meths
         | 
| 36 | 
            +
                meths.flatten.detect { |m|
         | 
| 37 | 
            +
                  begin
         | 
| 38 | 
            +
                    send m
         | 
| 39 | 
            +
                    true
         | 
| 40 | 
            +
                  rescue Failed
         | 
| 41 | 
            +
                    false
         | 
| 42 | 
            +
                  end
         | 
| 43 | 
            +
                }
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
              def one_of! *klasses
         | 
| 47 | 
            +
                return true if klasses.flatten.any? { |k| target.is_a?(k) }  
         | 
| 48 | 
            +
                fail! "...can only be of class/module: #{klasses.map(&:to_s).join(', ')}"
         | 
| 49 | 
            +
              end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
              def a! klass
         | 
| 52 | 
            +
                one_of! klass
         | 
| 53 | 
            +
              end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
              def nil!
         | 
| 56 | 
            +
                return true if target == nil
         | 
| 57 | 
            +
                fail!("...must be nil.")
         | 
| 58 | 
            +
              end
         | 
| 59 | 
            +
              
         | 
| 60 | 
            +
              def not_nil!
         | 
| 61 | 
            +
                fail!("...can't be nil.") if target.nil?
         | 
| 62 | 
            +
                true
         | 
| 63 | 
            +
              end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
              def respond_to! meth
         | 
| 66 | 
            +
                return true if target.respond_to?(meth)
         | 
| 67 | 
            +
                fail!("...must respond to #{meth.inspect}")
         | 
| 68 | 
            +
              end
         | 
| 69 | 
            +
             | 
| 70 | 
            +
              def not_empty!
         | 
| 71 | 
            +
                respond_to! :empty?
         | 
| 72 | 
            +
                is_empty = target.empty?
         | 
| 73 | 
            +
                fail!("...can't be empty.") if is_empty
         | 
| 74 | 
            +
              end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
              def exists!
         | 
| 77 | 
            +
                respond_to! :exists?
         | 
| 78 | 
            +
                return true if target.exists?
         | 
| 79 | 
            +
                fail!("...must exist.")
         | 
| 80 | 
            +
              end
         | 
| 81 | 
            +
             | 
| 82 | 
            +
              def not_exists!
         | 
| 83 | 
            +
                respond_to! :exists?
         | 
| 84 | 
            +
                return true unless target.exists?
         | 
| 85 | 
            +
                fail!("...must not exist.")
         | 
| 86 | 
            +
              end
         | 
| 87 | 
            +
                    
         | 
| 88 | 
            +
            end # === module Var      
         | 
| 89 | 
            +
            end # === module Mods
         | 
| 90 | 
            +
            end # === class Demand
         | 
| 91 | 
            +
            end # === module Checked
         | 
| @@ -0,0 +1,46 @@ | |
| 1 | 
            +
            require "Checked/Base"
         | 
| 2 | 
            +
            require "Checked/Demand/DSL"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
             | 
| 5 | 
            +
            module Checked
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              class Demand
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                Failed = Class.new(RuntimeError)
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                module Base
         | 
| 12 | 
            +
                  
         | 
| 13 | 
            +
                  include DSL
         | 
| 14 | 
            +
                  include ::Checked::Base
         | 
| 15 | 
            +
             | 
| 16 | 
            +
             | 
| 17 | 
            +
                  def err_msg msg = "...is invalid."
         | 
| 18 | 
            +
                    message = if msg.strip[ %r!^\.\.\.! ]
         | 
| 19 | 
            +
                                msg.sub('...', '').strip
         | 
| 20 | 
            +
                              else
         | 
| 21 | 
            +
                                msg
         | 
| 22 | 
            +
                              end
         | 
| 23 | 
            +
                  
         | 
| 24 | 
            +
                    @err_msg || "#{target_name} #{message}"
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  def err_msg= msg
         | 
| 28 | 
            +
                    demand! msg, :string!, :not_empty!
         | 
| 29 | 
            +
                    @err_msg = msg
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
                  
         | 
| 32 | 
            +
                  private # ==========================================
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  def fail! msg
         | 
| 35 | 
            +
                    raise Failed, err_msg(msg)
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                end # === module Base
         | 
| 39 | 
            +
                
         | 
| 40 | 
            +
                include Base
         | 
| 41 | 
            +
                
         | 
| 42 | 
            +
              end # === class Demand
         | 
| 43 | 
            +
              
         | 
| 44 | 
            +
            end # === module Checked
         | 
| 45 | 
            +
             | 
| 46 | 
            +
             | 
    
        data/lib/Checked.rb
    ADDED
    
    | @@ -0,0 +1,14 @@ | |
| 1 | 
            +
            require "Checked/version"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            %w{ Args Base Ask Clean Demand }.each { |klass|
         | 
| 4 | 
            +
              require "Checked/#{klass}"
         | 
| 5 | 
            +
            }
         | 
| 6 | 
            +
              
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            module Checked
         | 
| 9 | 
            +
              module DSL
         | 
| 10 | 
            +
                include ::Checked::Ask::DSL
         | 
| 11 | 
            +
                include ::Checked::Clean::DSL
         | 
| 12 | 
            +
                include ::Checked::Demand::DSL
         | 
| 13 | 
            +
              end # === module DSL
         | 
| 14 | 
            +
            end
         | 
    
        data/spec/helper.rb
    ADDED
    
    | @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            require 'rubygems'
         | 
| 2 | 
            +
            require 'bundler'
         | 
| 3 | 
            +
            begin
         | 
| 4 | 
            +
              Bundler.setup(:default, :development)
         | 
| 5 | 
            +
            rescue Bundler::BundlerError => e
         | 
| 6 | 
            +
              $stderr.puts e.message
         | 
| 7 | 
            +
              $stderr.puts "Run `bundle install` to install missing gems"
         | 
| 8 | 
            +
              exit e.status_code
         | 
| 9 | 
            +
            end
         | 
| 10 | 
            +
            require 'bacon'
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            $LOAD_PATH.unshift(File.dirname(__FILE__))
         | 
| 13 | 
            +
            $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            Bacon.summary_on_exit
         | 
    
        data/spec/main.rb
    ADDED
    
    | @@ -0,0 +1,32 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            require File.expand_path('spec/helper')
         | 
| 3 | 
            +
            require "Bacon_Colored"
         | 
| 4 | 
            +
            require 'Checked'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
             | 
| 7 | 
            +
            FOLDER = ("/tmp/Checked_Test")
         | 
| 8 | 
            +
            %x! mkdir -p #{FOLDER}!
         | 
| 9 | 
            +
            at_exit {
         | 
| 10 | 
            +
              %x! rm -rf #{FOLDER} !
         | 
| 11 | 
            +
            }
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            def ruby_e cmd
         | 
| 14 | 
            +
              file = "#{FOLDER}/delete_me_perf_#{rand(100000)}.rb"
         | 
| 15 | 
            +
              begin
         | 
| 16 | 
            +
                loader = File.expand_path( File.dirname(__FILE__) + '/../lib' )
         | 
| 17 | 
            +
                File.open(file, 'w') { |io|
         | 
| 18 | 
            +
                  io.write %~
         | 
| 19 | 
            +
                  $LOAD_PATH.unshift('#{loader}')
         | 
| 20 | 
            +
                  #{cmd}
         | 
| 21 | 
            +
                ~
         | 
| 22 | 
            +
                }
         | 
| 23 | 
            +
              %x[ bundle exec ruby #{file} 2>&1].strip
         | 
| 24 | 
            +
              ensure
         | 
| 25 | 
            +
                File.delete file
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
            end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
             | 
| 30 | 
            +
            Dir.glob('spec/tests/*.rb').each { |file|
         | 
| 31 | 
            +
              require File.expand_path(file.sub('.rb', '')) if File.file?(file)
         | 
| 32 | 
            +
            }
         | 
    
        data/spec/tests/Ask.rb
    ADDED
    
    
| @@ -0,0 +1,57 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            shared 'Ask' do
         | 
| 3 | 
            +
              before {
         | 
| 4 | 
            +
                extend Checked::Ask::DSL
         | 
| 5 | 
            +
              }
         | 
| 6 | 
            +
            end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            describe "ask empty?" do
         | 
| 9 | 
            +
              
         | 
| 10 | 
            +
              behaves_like 'Ask'
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              it "returns true if string is :empty? after applying :strip" do
         | 
| 13 | 
            +
                ask?(" \n ", :empty?).should.be === true
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
              
         | 
| 16 | 
            +
              it "returns false if string is not :empty? after applying :strip" do
         | 
| 17 | 
            +
                ask?(" n ", :empty?).should.be === false
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
              
         | 
| 20 | 
            +
              
         | 
| 21 | 
            +
            end # === describe Ask Strings
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            describe "Ask :includes" do
         | 
| 24 | 
            +
              
         | 
| 25 | 
            +
              behaves_like 'Ask'
         | 
| 26 | 
            +
              
         | 
| 27 | 
            +
              it "returns true if string contains a Regexp matcher" do
         | 
| 28 | 
            +
                Checked::Ask.new(" :a ") { |a|
         | 
| 29 | 
            +
                  a.< :includes?, / :a /
         | 
| 30 | 
            +
                }.true?.should.be == true
         | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
              
         | 
| 33 | 
            +
              it "returns false if string excludes a Regexp matcher" do
         | 
| 34 | 
            +
                Checked::Ask.new(" :a ") { |a|
         | 
| 35 | 
            +
                  a.< :includes?, / :b /
         | 
| 36 | 
            +
                }.true?.should.be == false
         | 
| 37 | 
            +
              end
         | 
| 38 | 
            +
              
         | 
| 39 | 
            +
            end # === describe Ask :includes
         | 
| 40 | 
            +
             | 
| 41 | 
            +
            describe "Ask :excludes" do
         | 
| 42 | 
            +
              
         | 
| 43 | 
            +
              behaves_like 'Ask'
         | 
| 44 | 
            +
              
         | 
| 45 | 
            +
              it "returns true if string excludes a Regexp matcher" do
         | 
| 46 | 
            +
                Checked::Ask.new(" :a ") { |a|
         | 
| 47 | 
            +
                  a.< :excludes?, / :b /
         | 
| 48 | 
            +
                }.true?.should.be == true
         | 
| 49 | 
            +
              end
         | 
| 50 | 
            +
              
         | 
| 51 | 
            +
              it 'returns false if string includes a Regexp matcher' do
         | 
| 52 | 
            +
                Checked::Ask.new(" :a ") { |a|
         | 
| 53 | 
            +
                  a.< :excludes?, / :a /
         | 
| 54 | 
            +
                }.true?.should.be == false
         | 
| 55 | 
            +
              end
         | 
| 56 | 
            +
              
         | 
| 57 | 
            +
            end # === describe Ask :excludes
         | 
| @@ -0,0 +1,43 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            describe "Checked::DSL" do
         | 
| 3 | 
            +
              
         | 
| 4 | 
            +
              %w{ Ask Demand Clean }.each { |name|
         | 
| 5 | 
            +
                klass = Checked.const_get(name)
         | 
| 6 | 
            +
                
         | 
| 7 | 
            +
                it "includes #{name}::DSL" do
         | 
| 8 | 
            +
                  Checked::DSL.included_modules.should.include klass::DSL
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
                
         | 
| 11 | 
            +
              }
         | 
| 12 | 
            +
              
         | 
| 13 | 
            +
            end # === describe
         | 
| 14 | 
            +
             | 
| 15 | 
            +
             | 
| 16 | 
            +
            describe "Checked.demand!" do
         | 
| 17 | 
            +
              
         | 
| 18 | 
            +
              before {
         | 
| 19 | 
            +
                @perf = Class.new { include Checked::DSL }.new
         | 
| 20 | 
            +
              }
         | 
| 21 | 
            +
              
         | 
| 22 | 
            +
              it 'must be equivalent to: Demand.new(target)' do
         | 
| 23 | 
            +
                should.raise(Checked::Demand::Failed) {
         | 
| 24 | 
            +
                  @perf.demand! [], :not_empty!
         | 
| 25 | 
            +
                }.message.should == "Array, [], can't be empty."
         | 
| 26 | 
            +
                
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
              
         | 
| 29 | 
            +
            end # === describe Checked.demand!
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            describe "Checked.named_demand!" do
         | 
| 32 | 
            +
              
         | 
| 33 | 
            +
              before {
         | 
| 34 | 
            +
                @perf = Class.new { include Checked::DSL }.new
         | 
| 35 | 
            +
              }
         | 
| 36 | 
            +
              
         | 
| 37 | 
            +
              it 'must be equivalent to: Demand.new(target) { |d| d.* name; d << args}' do
         | 
| 38 | 
            +
                should.raise(Checked::Demand::Failed) {
         | 
| 39 | 
            +
                  @perf.named_demand! "Test Val", [:a, 'c'], :symbols!
         | 
| 40 | 
            +
                }.message.should == "Test Val, [:a, \"c\"], contains a non-symbol."
         | 
| 41 | 
            +
              end
         | 
| 42 | 
            +
              
         | 
| 43 | 
            +
            end # === describe Checked.named_demand!
         | 
    
        data/spec/tests/Clean.rb
    ADDED
    
    
| @@ -0,0 +1,76 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            shared "Clean" do
         | 
| 3 | 
            +
              
         | 
| 4 | 
            +
              extend Checked::Clean::DSL
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            end # === shared 
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            describe "Clean :chop_ext" do
         | 
| 9 | 
            +
              
         | 
| 10 | 
            +
              behaves_like 'Clean'
         | 
| 11 | 
            +
              
         | 
| 12 | 
            +
              it "should chop off the extension of a file string: /etc/something.txt" do
         | 
| 13 | 
            +
                clean("/etc/something.txt", :chop_ext).should == '/etc/something'
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
              
         | 
| 16 | 
            +
              it "should chop off the extension of a file string: /etc/something.rb" do
         | 
| 17 | 
            +
                clean("/etc/something.rb", :chop_rb).should == '/etc/something'
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
              
         | 
| 20 | 
            +
              it "should not chop off a non-.rb extension for :chop_rb" do
         | 
| 21 | 
            +
                clean("/etc/something.rbs", :chop_rb).should == '/etc/something.rbs'
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
              
         | 
| 24 | 
            +
              it "should not chop off an extension if it has not" do
         | 
| 25 | 
            +
                clean("/etc/something", :chop_rb).should == '/etc/something'
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
              
         | 
| 28 | 
            +
              it "should not chop off an extension if it includes '.' in a dir: /etc/rc.d/x-something" do
         | 
| 29 | 
            +
                clean("/etc/rc.d/x-something", :chop_rb).should == '/etc/rc.d/x-something'
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
              
         | 
| 32 | 
            +
            end # === describe
         | 
| 33 | 
            +
             | 
| 34 | 
            +
            describe "Clean :ruby_name" do
         | 
| 35 | 
            +
              
         | 
| 36 | 
            +
              behaves_like 'Clean'
         | 
| 37 | 
            +
              
         | 
| 38 | 
            +
              it 'should return the basename without .rb' do
         | 
| 39 | 
            +
                clean("/dir/some.path/String.rb", :ruby_name).should.be == 'String'
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
              
         | 
| 42 | 
            +
              it 'should be the equivalent to :chop_rb if it is just a filename without a dir' do
         | 
| 43 | 
            +
                clean("String.rb", :ruby_name).should.be == 'String'
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
              
         | 
| 46 | 
            +
            end # === describe :ruby_name
         | 
| 47 | 
            +
             | 
| 48 | 
            +
            describe "Clean :chop_slash_r" do
         | 
| 49 | 
            +
              
         | 
| 50 | 
            +
              behaves_like 'Clean'
         | 
| 51 | 
            +
              
         | 
| 52 | 
            +
              it "should remove all instances of \\r" do
         | 
| 53 | 
            +
                string = %@ 
         | 
| 54 | 
            +
                  Hi\r\n
         | 
| 55 | 
            +
                  Ok\r\n
         | 
| 56 | 
            +
                @
         | 
| 57 | 
            +
                clean(string, :chop_slash_r).should.be == string.gsub("\r", '')
         | 
| 58 | 
            +
              end
         | 
| 59 | 
            +
              
         | 
| 60 | 
            +
              
         | 
| 61 | 
            +
            end # === describe :chop_slash_r
         | 
| 62 | 
            +
             | 
| 63 | 
            +
             | 
| 64 | 
            +
            describe "Clean :os_stardard" do
         | 
| 65 | 
            +
              
         | 
| 66 | 
            +
              behaves_like 'Clean'
         | 
| 67 | 
            +
              
         | 
| 68 | 
            +
              it "should remove all \\r and strip" do
         | 
| 69 | 
            +
                string = %@ 
         | 
| 70 | 
            +
                  Hi\r\n
         | 
| 71 | 
            +
                  Ok\r\n
         | 
| 72 | 
            +
                @
         | 
| 73 | 
            +
                clean(string, :os_stardard).should.be == string.strip.gsub("\r", '')
         | 
| 74 | 
            +
              end
         | 
| 75 | 
            +
              
         | 
| 76 | 
            +
            end # === describe
         | 
| @@ -0,0 +1,39 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            describe "require 'Checked/Demand'" do
         | 
| 3 | 
            +
              
         | 
| 4 | 
            +
              it 'must include DSL' do
         | 
| 5 | 
            +
                ruby_e(%! 
         | 
| 6 | 
            +
                    require 'Checked/Demand'
         | 
| 7 | 
            +
                    puts Checked::Demand::DSL.to_s
         | 
| 8 | 
            +
                !)
         | 
| 9 | 
            +
                .should.be == 'Checked::Demand::DSL'
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
              
         | 
| 12 | 
            +
            end # === describe require 'Checked/Demand'
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            describe "Demand errors" do
         | 
| 15 | 
            +
              
         | 
| 16 | 
            +
              it 'must recommend method if not found in current modules' do
         | 
| 17 | 
            +
                lambda {
         | 
| 18 | 
            +
                  d = Checked::Demand.new('') 
         | 
| 19 | 
            +
                  d.<< :symbols!
         | 
| 20 | 
            +
                }.should.raise(NoMethodError)
         | 
| 21 | 
            +
                .message.should.be === "String, \"\", can not demand symbols!, which is found in: Arrays"
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
              
         | 
| 24 | 
            +
              it 'must raise a NoMethodError when a missing method is used within a valid demand! method.' do
         | 
| 25 | 
            +
                Missing_Meth = Module.new do
         | 
| 26 | 
            +
                  def file_content!
         | 
| 27 | 
            +
                    something()
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
                
         | 
| 31 | 
            +
                d = Checked::Demand.new('')
         | 
| 32 | 
            +
                d.extend Missing_Meth
         | 
| 33 | 
            +
                lambda { d.<< :file_content! }
         | 
| 34 | 
            +
                .should.raise(NoMethodError)
         | 
| 35 | 
            +
                .message.should.match %r!undefined method `something' for!
         | 
| 36 | 
            +
                
         | 
| 37 | 
            +
              end
         | 
| 38 | 
            +
              
         | 
| 39 | 
            +
            end # === describe Demand errors
         | 
| @@ -0,0 +1,31 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            describe "demand :symbols!" do
         | 
| 3 | 
            +
              
         | 
| 4 | 
            +
              before {
         | 
| 5 | 
            +
                @fail = Checked::Demand::Failed
         | 
| 6 | 
            +
                @d = lambda { |val|
         | 
| 7 | 
            +
                  d=Checked::Demand.new(val)
         | 
| 8 | 
            +
                  d << :symbols!
         | 
| 9 | 
            +
                  d.target
         | 
| 10 | 
            +
                }
         | 
| 11 | 
            +
              }
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              it 'must require Array' do
         | 
| 14 | 
            +
                m = should.raise(NoMethodError) {
         | 
| 15 | 
            +
                  @d.call :sym
         | 
| 16 | 
            +
                }.message
         | 
| 17 | 
            +
                m.should.include "Symbol, :sym, can not demand symbols!, which is found in"
         | 
| 18 | 
            +
                m.should.include "in: Arrays"
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              it 'must require Array be non-empty.' do
         | 
| 22 | 
            +
                should.raise(@fail) {
         | 
| 23 | 
            +
                  @d.call( [] )
         | 
| 24 | 
            +
                }.message.should.be == "Array, [], can't be empty."
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
              
         | 
| 27 | 
            +
              it 'must pass for Array of single Symbol instance' do
         | 
| 28 | 
            +
                @d.call([:sym]).should.be == [:sym]
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
              
         | 
| 31 | 
            +
            end # === describe Demand for Arrays
         | 
| @@ -0,0 +1,37 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            describe "Demand not_dir!" do
         | 
| 3 | 
            +
              
         | 
| 4 | 
            +
              it 'must fail for an existing dir' do
         | 
| 5 | 
            +
                lambda { 
         | 
| 6 | 
            +
                  d = Checked::Demand.new(File.expand_path "~/")
         | 
| 7 | 
            +
                  d.<< :not_dir!
         | 
| 8 | 
            +
                }.should.raise(Checked::Demand::Failed)
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
              
         | 
| 11 | 
            +
            end # === describe Demand not_dir!
         | 
| 12 | 
            +
             | 
| 13 | 
            +
             | 
| 14 | 
            +
             | 
| 15 | 
            +
            describe "Demand not_file!" do
         | 
| 16 | 
            +
              
         | 
| 17 | 
            +
              it 'must fail for an existing file' do
         | 
| 18 | 
            +
                lambda { 
         | 
| 19 | 
            +
                  d = Checked::Demand.new(File.expand_path "~/.bashrc")
         | 
| 20 | 
            +
                  d.<< :not_file!
         | 
| 21 | 
            +
                }.should.raise(Checked::Demand::Failed)
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
              
         | 
| 24 | 
            +
            end # === describe Demand not_file!
         | 
| 25 | 
            +
             | 
| 26 | 
            +
             | 
| 27 | 
            +
            describe "Demand :file_content!" do
         | 
| 28 | 
            +
              
         | 
| 29 | 
            +
              it 'must fail for an empty string' do
         | 
| 30 | 
            +
                lambda { 
         | 
| 31 | 
            +
                  d = Checked::Demand.new('')
         | 
| 32 | 
            +
                  d.<< :file_content!
         | 
| 33 | 
            +
                }.should.raise(Checked::Demand::Failed)
         | 
| 34 | 
            +
                .message.should.be == "String, \"\", can't be empty."
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
              
         | 
| 37 | 
            +
            end # === describe Demand :file_content!
         |