randexp 0.1.3 → 0.1.4
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/CHANGELOG +4 -0
- data/Rakefile +2 -2
- data/lib/randexp.rb +9 -5
- data/lib/randexp/core_ext.rb +6 -0
- data/lib/{core_ext → randexp/core_ext}/array.rb +0 -0
- data/lib/{core_ext → randexp/core_ext}/integer.rb +0 -0
- data/lib/{core_ext → randexp/core_ext}/range.rb +0 -0
- data/lib/{core_ext → randexp/core_ext}/regexp.rb +0 -0
- data/lib/{dictionary.rb → randexp/dictionary.rb} +1 -1
- data/lib/{randgen.rb → randexp/randgen.rb} +17 -1
- data/lib/randexp/wordlists/female_names.rb +23 -0
- data/lib/randexp/wordlists/male_names.rb +23 -0
- data/lib/randexp/wordlists/real_name.rb +33 -0
- data/spec/regression/regexp_spec.rb +22 -0
- data/spec/unit/randexp_spec.rb +137 -137
- data/spec/unit/randgen_spec.rb +96 -2
- data/wordlists/female_names +4275 -0
- data/wordlists/male_names +1219 -0
- data/wordlists/surnames +475 -0
- metadata +19 -11
- data/lib/core_ext.rb +0 -4
    
        data/CHANGELOG
    CHANGED
    
    
    
        data/Rakefile
    CHANGED
    
    | @@ -7,13 +7,13 @@ require 'rake/rdoctask' | |
| 7 7 |  | 
| 8 8 | 
             
            PROJECT_NAME = "randexp"
         | 
| 9 9 | 
             
            GEM = "randexp"
         | 
| 10 | 
            -
            GEM_VERSION = "0.1. | 
| 10 | 
            +
            GEM_VERSION = "0.1.4"
         | 
| 11 11 | 
             
            AUTHOR = "Ben Burkert"
         | 
| 12 12 | 
             
            EMAIL = "ben@benburkert.com"
         | 
| 13 13 | 
             
            HOMEPAGE = "http://github.com/benburkert/randexp"
         | 
| 14 14 | 
             
            TITLE = "Randexp Gem"
         | 
| 15 15 | 
             
            SUMMARY = "Library for generating random strings."
         | 
| 16 | 
            -
            FILES = %w(LICENSE README README Rakefile TODO CHANGELOG) + Dir.glob("{lib,spec}/**/*")
         | 
| 16 | 
            +
            FILES = %w(LICENSE README README Rakefile TODO CHANGELOG) + Dir.glob("{lib,spec}/**/*") + Dir.glob("wordlists/**/*")
         | 
| 17 17 | 
             
            RDOC_FILES = %w(LICENSE README README Rakefile TODO CHANGELOG) + Dir.glob("lib/**/*")
         | 
| 18 18 |  | 
| 19 19 | 
             
            RUBYFORGE_USER = "benburkert"
         | 
    
        data/lib/randexp.rb
    CHANGED
    
    | @@ -10,8 +10,12 @@ class Randexp | |
| 10 10 | 
             
              end
         | 
| 11 11 | 
             
            end
         | 
| 12 12 |  | 
| 13 | 
            -
             | 
| 14 | 
            -
            require ' | 
| 15 | 
            -
            require ' | 
| 16 | 
            -
            require ' | 
| 17 | 
            -
            require ' | 
| 13 | 
            +
            dir = File.dirname(__FILE__) + '/randexp'
         | 
| 14 | 
            +
            require dir + '/core_ext'
         | 
| 15 | 
            +
            require dir + '/dictionary'
         | 
| 16 | 
            +
            require dir + '/parser'
         | 
| 17 | 
            +
            require dir + '/randgen'
         | 
| 18 | 
            +
            require dir + '/reducer'
         | 
| 19 | 
            +
            require dir + '/wordlists/female_names'
         | 
| 20 | 
            +
            require dir + '/wordlists/male_names'
         | 
| 21 | 
            +
            require dir + '/wordlists/real_name'
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| @@ -32,11 +32,27 @@ class Randgen | |
| 32 32 |  | 
| 33 33 | 
             
              def self.word(options = {})
         | 
| 34 34 | 
             
                begin
         | 
| 35 | 
            -
                  word = Dictionary.words(options).pick
         | 
| 35 | 
            +
                  word = Randexp::Dictionary.words(options).pick
         | 
| 36 36 | 
             
                end until word =~ /^\w+$/
         | 
| 37 37 |  | 
| 38 38 | 
             
                word
         | 
| 39 39 | 
             
              end
         | 
| 40 | 
            +
              
         | 
| 41 | 
            +
              def self.first_name(options = {})
         | 
| 42 | 
            +
                RealName.first_names(options).pick
         | 
| 43 | 
            +
              end
         | 
| 44 | 
            +
              
         | 
| 45 | 
            +
              def self.surname(options = {})
         | 
| 46 | 
            +
                RealName.surnames(options).pick
         | 
| 47 | 
            +
              end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
              class << self
         | 
| 50 | 
            +
                alias_method :last_name, :surname
         | 
| 51 | 
            +
              end
         | 
| 52 | 
            +
              
         | 
| 53 | 
            +
              def self.name(options = {})
         | 
| 54 | 
            +
                "#{first_name(options)} #{surname(options)}"
         | 
| 55 | 
            +
              end
         | 
| 40 56 |  | 
| 41 57 | 
             
              def self.sentence(options = {})
         | 
| 42 58 | 
             
                ((options[:length] || WORDS_PER_SENTENCE.pick).of { word } * " ").capitalize
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            class RealName
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              def self.load_female_first_names
         | 
| 4 | 
            +
                dir = File.dirname(__FILE__)
         | 
| 5 | 
            +
                if File.exists?("#{dir}/../../../wordlists/female_names")
         | 
| 6 | 
            +
                  File.read("#{dir}/../../../wordlists/female_names").split
         | 
| 7 | 
            +
                else
         | 
| 8 | 
            +
                  raise "words file not found"
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              def self.female_first_names(options = {})
         | 
| 13 | 
            +
                if options.has_key?(:length)
         | 
| 14 | 
            +
                  female_first_names_by_length[options[:length]]
         | 
| 15 | 
            +
                else
         | 
| 16 | 
            +
                  @@female_first_names ||= load_female_first_names
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              def self.female_first_names_by_length
         | 
| 21 | 
            +
                @@female_first_names_by_length ||= female_first_names.inject({}) {|h, w| (h[w.size] ||= []) << w; h }
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
            end
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            class RealName
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              def self.load_male_first_names
         | 
| 4 | 
            +
                dir = File.dirname(__FILE__)
         | 
| 5 | 
            +
                if File.exists?("#{dir}/../../../wordlists/male_names")
         | 
| 6 | 
            +
                  File.read("#{dir}/../../../wordlists/male_names").split
         | 
| 7 | 
            +
                else
         | 
| 8 | 
            +
                  raise "words file not found"
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              def self.male_first_names(options = {})
         | 
| 13 | 
            +
                if options.has_key?(:length)
         | 
| 14 | 
            +
                  male_first_names_by_length[options[:length]]
         | 
| 15 | 
            +
                else
         | 
| 16 | 
            +
                  @@male_first_names ||= load_male_first_names
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              def self.male_first_names_by_length
         | 
| 21 | 
            +
                @@male_first_names_by_length ||= male_first_names.inject({}) {|h, w| (h[w.size] ||= []) << w; h }
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
            end
         | 
| @@ -0,0 +1,33 @@ | |
| 1 | 
            +
            class RealName
         | 
| 2 | 
            +
              def self.load_surnames
         | 
| 3 | 
            +
                dir = File.dirname(__FILE__)
         | 
| 4 | 
            +
                if File.exists?("#{dir}/../../../wordlists/surnames")
         | 
| 5 | 
            +
                  File.read("#{dir}/../../../wordlists/surnames").split
         | 
| 6 | 
            +
                else
         | 
| 7 | 
            +
                  raise "words file not found"
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
              end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
              def self.surnames(options = {})
         | 
| 12 | 
            +
                if options.has_key?(:length)
         | 
| 13 | 
            +
                  surnames_by_length[options[:length]]
         | 
| 14 | 
            +
                else
         | 
| 15 | 
            +
                  @@surnames ||= load_surnames
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
              def self.surnames_by_length
         | 
| 20 | 
            +
                @@surnames_by_length ||= surnames.inject({}) {|h, w| (h[w.size] ||= []) << w; h }
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              def self.first_names(options)
         | 
| 24 | 
            +
                case options[:gender].to_s
         | 
| 25 | 
            +
                when /^male/i
         | 
| 26 | 
            +
                  male_first_names(options)
         | 
| 27 | 
            +
                when /^female/i
         | 
| 28 | 
            +
                  female_first_names(options)
         | 
| 29 | 
            +
                else
         | 
| 30 | 
            +
                  [male_first_names(options), female_first_names(options)].pick
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
            end
         | 
| @@ -160,4 +160,26 @@ describe "#{'*' * 80}\nRegression Specs:" do | |
| 160 160 | 
             
                  /\$\d{2,3}\.\d{2}/.gen.should =~ /\$\d{2,3}\.\d{2}/
         | 
| 161 161 | 
             
                end
         | 
| 162 162 | 
             
              end
         | 
| 163 | 
            +
              
         | 
| 164 | 
            +
              it "/[:first_name:]/                => /\\w+/" do
         | 
| 165 | 
            +
                100.times do
         | 
| 166 | 
            +
                  /[:first_name:]/.gen.should =~ /\w+/
         | 
| 167 | 
            +
                end
         | 
| 168 | 
            +
              end
         | 
| 169 | 
            +
             | 
| 170 | 
            +
              it "/[:last_name:]/                 => /\\w+/" do
         | 
| 171 | 
            +
                /[:last_name:]/.gen.should =~ /\w+/
         | 
| 172 | 
            +
              end
         | 
| 173 | 
            +
             | 
| 174 | 
            +
              it "/[:name:]/                      => /\\w+ \\w+/" do
         | 
| 175 | 
            +
                /[:name:]/.gen.should =~ /\w+ \w+/
         | 
| 176 | 
            +
              end
         | 
| 177 | 
            +
             | 
| 178 | 
            +
              it "/[:last_name:]{5,10}/           => /\\w{5,10}/" do
         | 
| 179 | 
            +
                /[:last_name:]{5,10}/.gen.should =~ /\w{5,10}/
         | 
| 180 | 
            +
              end
         | 
| 181 | 
            +
             | 
| 182 | 
            +
              it "/[:first_name:]{5,10}/          => /\\w{5,10}/" do
         | 
| 183 | 
            +
                /[:first_name:]{5,10}/.gen.should =~ /\w{5,10}/
         | 
| 184 | 
            +
              end
         | 
| 163 185 | 
             
            end
         | 
    
        data/spec/unit/randexp_spec.rb
    CHANGED
    
    | @@ -19,140 +19,140 @@ describe Randexp do | |
| 19 19 | 
             
              end
         | 
| 20 20 | 
             
            end
         | 
| 21 21 |  | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
             | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
             | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 75 | 
            -
             | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 83 | 
            -
             | 
| 84 | 
            -
             | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 87 | 
            -
             | 
| 88 | 
            -
             | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 95 | 
            -
             | 
| 96 | 
            -
             | 
| 97 | 
            -
             | 
| 98 | 
            -
             | 
| 99 | 
            -
             | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 108 | 
            -
             | 
| 109 | 
            -
             | 
| 110 | 
            -
             | 
| 111 | 
            -
             | 
| 112 | 
            -
             | 
| 113 | 
            -
             | 
| 114 | 
            -
             | 
| 115 | 
            -
             | 
| 116 | 
            -
             | 
| 117 | 
            -
             | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 120 | 
            -
             | 
| 121 | 
            -
             | 
| 122 | 
            -
             | 
| 123 | 
            -
             | 
| 124 | 
            -
             | 
| 125 | 
            -
             | 
| 126 | 
            -
             | 
| 127 | 
            -
             | 
| 128 | 
            -
             | 
| 129 | 
            -
             | 
| 130 | 
            -
             | 
| 131 | 
            -
             | 
| 132 | 
            -
             | 
| 133 | 
            -
             | 
| 134 | 
            -
             | 
| 135 | 
            -
             | 
| 136 | 
            -
             | 
| 137 | 
            -
             | 
| 138 | 
            -
             | 
| 139 | 
            -
             | 
| 140 | 
            -
             | 
| 141 | 
            -
             | 
| 142 | 
            -
             | 
| 143 | 
            -
             | 
| 144 | 
            -
             | 
| 145 | 
            -
             | 
| 146 | 
            -
             | 
| 147 | 
            -
             | 
| 148 | 
            -
             | 
| 149 | 
            -
             | 
| 150 | 
            -
             | 
| 151 | 
            -
             | 
| 152 | 
            -
             | 
| 153 | 
            -
             | 
| 154 | 
            -
             | 
| 155 | 
            -
             | 
| 156 | 
            -
             | 
| 157 | 
            -
             | 
| 158 | 
            -
             | 
| 22 | 
            +
            describe Randexp do
         | 
| 23 | 
            +
             describe "#parse" do
         | 
| 24 | 
            +
             | 
| 25 | 
            +
               describe '("\\w")' do
         | 
| 26 | 
            +
                 it "should be a random sexp" do
         | 
| 27 | 
            +
                   Randexp::Parser.parse("\\w").first.should == :random
         | 
| 28 | 
            +
                 end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                 it "should hold a word symbol" do
         | 
| 31 | 
            +
                   Randexp::Parser.parse("\\w").last.should == :w
         | 
| 32 | 
            +
                 end
         | 
| 33 | 
            +
               end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
               describe '("\\s")' do
         | 
| 36 | 
            +
                 it "should be a literal sexp" do
         | 
| 37 | 
            +
                   Randexp::Parser.parse("\\s").first.should == :random
         | 
| 38 | 
            +
                 end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                 it "should hold a whitespace symbol " do
         | 
| 41 | 
            +
                   Randexp::Parser.parse("\\s").last.should == :s
         | 
| 42 | 
            +
                 end
         | 
| 43 | 
            +
               end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
               describe '("\\d")' do
         | 
| 46 | 
            +
                 it "should be a literal sexp" do
         | 
| 47 | 
            +
                   Randexp::Parser.parse("\\d").first.should == :random
         | 
| 48 | 
            +
                 end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                 it "should hold a digit character " do
         | 
| 51 | 
            +
                   Randexp::Parser.parse("\\d").last.should == :d
         | 
| 52 | 
            +
                 end
         | 
| 53 | 
            +
               end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
               describe '("\\c")' do
         | 
| 56 | 
            +
                 it "should be a literal sexp" do
         | 
| 57 | 
            +
                   Randexp::Parser.parse("\\c").first.should == :random
         | 
| 58 | 
            +
                 end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                 it "should hold a digit character " do
         | 
| 61 | 
            +
                   Randexp::Parser.parse("\\c").last.should == :c
         | 
| 62 | 
            +
                 end
         | 
| 63 | 
            +
               end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
               describe '("(\\w)")' do
         | 
| 66 | 
            +
                 it "should be a random sexp" do
         | 
| 67 | 
            +
                   Randexp::Parser.parse("(\\w)").first.should == :random
         | 
| 68 | 
            +
                   Randexp::Parser.parse("(\\w)").last.should == :w
         | 
| 69 | 
            +
                 end
         | 
| 70 | 
            +
               end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
               describe '("(\\w)(\\d)")' do
         | 
| 73 | 
            +
                 it "should be a union between random sexp's" do
         | 
| 74 | 
            +
                   Randexp::Parser.parse("(\\w)(\\d)").first.should == :union
         | 
| 75 | 
            +
                   Randexp::Parser.parse("(\\w)(\\d)")[1].first.should == :random
         | 
| 76 | 
            +
                   Randexp::Parser.parse("(\\w)(\\d)")[2].first.should == :random
         | 
| 77 | 
            +
                 end
         | 
| 78 | 
            +
               end
         | 
| 79 | 
            +
             | 
| 80 | 
            +
               describe '("(\\w)(\\s)(\\d)")' do
         | 
| 81 | 
            +
                 xit "should be a union between 3 sexp's" do
         | 
| 82 | 
            +
                   Randexp::Parser.parse("(\\w)(\\s)(\\d)").first.should == :union
         | 
| 83 | 
            +
                   Randexp::Parser.parse("(\\w)(\\s)(\\d)").size.should == 4
         | 
| 84 | 
            +
                 end
         | 
| 85 | 
            +
               end
         | 
| 86 | 
            +
             | 
| 87 | 
            +
               describe '("\\w*")' do
         | 
| 88 | 
            +
                 it "should be a quantify sexp and hold a random sexp" do
         | 
| 89 | 
            +
                   Randexp::Parser.parse("\\w*").first.should == :quantify
         | 
| 90 | 
            +
                   Randexp::Parser.parse("\\w*")[1].first.should == :random
         | 
| 91 | 
            +
                   Randexp::Parser.parse("\\w*")[2].should == :*
         | 
| 92 | 
            +
                 end
         | 
| 93 | 
            +
               end
         | 
| 94 | 
            +
             | 
| 95 | 
            +
               it "should blah" do
         | 
| 96 | 
            +
                 Randexp::Parser.parse("(\\w)|(\\d)").should == [:intersection, [:random, :w], [:random, :d]]
         | 
| 97 | 
            +
               end
         | 
| 98 | 
            +
             | 
| 99 | 
            +
               describe '("[:sentence:]")' do
         | 
| 100 | 
            +
                 it "should be a random sexp" do
         | 
| 101 | 
            +
                   Randexp::Parser.parse("[:sentence:]").first.should == :random
         | 
| 102 | 
            +
                   Randexp::Parser.parse("[:sentence:]").last.should == :sentence
         | 
| 103 | 
            +
                 end
         | 
| 104 | 
            +
               end
         | 
| 105 | 
            +
             end
         | 
| 106 | 
            +
             | 
| 107 | 
            +
             describe "#reduce" do
         | 
| 108 | 
            +
               it "should return a character" do
         | 
| 109 | 
            +
                 Randexp.new("\\w").reduce.should =~ /\w/
         | 
| 110 | 
            +
               end
         | 
| 111 | 
            +
             | 
| 112 | 
            +
               it "should return a word" do
         | 
| 113 | 
            +
                 Randexp.new("\\w+").reduce.should =~ /\w+/
         | 
| 114 | 
            +
               end
         | 
| 115 | 
            +
             | 
| 116 | 
            +
               it "should return a word or an empty string" do
         | 
| 117 | 
            +
                 Randexp.new("\\w*").reduce.should =~ /\w*/
         | 
| 118 | 
            +
               end
         | 
| 119 | 
            +
             | 
| 120 | 
            +
               it "should return a word with 4 to 5 characters" do
         | 
| 121 | 
            +
                 Randexp.new("\\w{4,5}").reduce.should =~ /\w{4,5}/
         | 
| 122 | 
            +
               end
         | 
| 123 | 
            +
             | 
| 124 | 
            +
               it "should return a digit" do
         | 
| 125 | 
            +
                 Randexp.new("\\d").reduce.should =~ /\d/
         | 
| 126 | 
            +
               end
         | 
| 127 | 
            +
             | 
| 128 | 
            +
               it "should return a 2 to 10 digit number" do
         | 
| 129 | 
            +
                 Randexp.new("\\d{2,10}").reduce.should =~ /\d{2,10}/
         | 
| 130 | 
            +
               end
         | 
| 131 | 
            +
             | 
| 132 | 
            +
               it "should return a digit or empty string" do
         | 
| 133 | 
            +
                 Randexp.new("\\d?").reduce.should =~ /\d?/
         | 
| 134 | 
            +
               end
         | 
| 135 | 
            +
             | 
| 136 | 
            +
               it "should return a digit or a character" do
         | 
| 137 | 
            +
                 Randexp.new("\\d|\\w").reduce.should =~ /\w|\d/
         | 
| 138 | 
            +
               end
         | 
| 139 | 
            +
             | 
| 140 | 
            +
               xit "should return a word or a 3 digit number" do
         | 
| 141 | 
            +
                 Randexp.new("\\d{3}|\\w+").reduce.should =~ /\w+|d{3}/
         | 
| 142 | 
            +
               end
         | 
| 143 | 
            +
             | 
| 144 | 
            +
               it "should return a word or number" do
         | 
| 145 | 
            +
                 Randexp.new("\\w+|\\d{3}").reduce.should =~ /\w+|d{3}/
         | 
| 146 | 
            +
               end
         | 
| 147 | 
            +
             | 
| 148 | 
            +
               it "should return a sentence" do
         | 
| 149 | 
            +
                 Randexp.new("[:sentence:]").reduce.should =~ /(\w+\s)*\w+/
         | 
| 150 | 
            +
               end
         | 
| 151 | 
            +
             | 
| 152 | 
            +
               it "should handle a telephone number" do
         | 
| 153 | 
            +
                 100.times do
         | 
| 154 | 
            +
                   Randexp.new("(\\d{3}-)?\\d{3}-\\d{4}").reduce.should =~ /(\d{3}-)?\d{3}-\d{4}/
         | 
| 155 | 
            +
                 end
         | 
| 156 | 
            +
               end
         | 
| 157 | 
            +
             end
         | 
| 158 | 
            +
            end
         |