random-word 1.3.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5dfad3232b235871bbe1e413c1a4009d65417324
4
+ data.tar.gz: f72d97cf5b9cf3b4225715de1239be97c39a5006
5
+ SHA512:
6
+ metadata.gz: f4c7ac7f3150ccd28caa11341ceaa952cebbbd9725c6d2a568aedea14ddac466ea4fe91bb17efa2d963a63270ea80c58d88d48837cb8b389bd8f5973d898a7c6
7
+ data.tar.gz: da1e4846c7675849cbb19ccdafda6b07ecc7cfbc8a8a14051c17f184fa83daa0d174e7d0c1c7edba511a2df96c6ecf6c5ac7af1dd92c6644c9b69a8324a5f1ca
@@ -0,0 +1,17 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+
11
+ # Your rspec options are your business
12
+ .rspec
13
+
14
+ # rspec failure tracking
15
+ .rspec_status
16
+
17
+ .idea/
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.4.1
5
+ before_install: gem install bundler -v 1.14.6
data/Gemfile CHANGED
@@ -1,17 +1,4 @@
1
- source "http://rubygems.org"
2
- # Add dependencies required to use your gem here.
3
- # Example:
4
- # gem "activesupport", ">= 2.3.5"
1
+ source 'https://rubygems.org'
5
2
 
6
- # Add dependencies to develop your gem here.
7
- # Include everything needed to run rake, tests, features, etc.
8
- group :development do
9
- gem "rspec", "~> 2.3.0"
10
- gem "yard", "~> 0.6.0"
11
- gem "bundler", "~> 1.0.0"
12
- gem "jeweler", "~> 1.6.2"
13
- gem "rcov", ">= 0"
14
- gem "machinist", ">=2.0.0.beta2"
15
- gem "activesupport"
16
- gem "i18n"
17
- end
3
+ # Specify your gem's dependencies in random-word.gemspec
4
+ gemspec
@@ -1,4 +1,4 @@
1
- Copyright (c) 2011 OpenLogic, Peter Williams
1
+ Copyright (c) 2011 OpenLogic, Inc.
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -1,5 +1,7 @@
1
1
  random-word
2
2
  ====
3
+ [![Build Status](https://travis-ci.org/openlogic/random-word.svg?branch=master)](https://travis-ci.org/openlogic/random-word)
4
+ [![Coverage Status](https://coveralls.io/repos/github/openlogic/random-word/badge.svg?branch=master)](https://coveralls.io/github/openlogic/random-word?branch=master)
3
5
 
4
6
  A random word generator intended for use in test data factories. This
5
7
  library uses a large list (the wordnet corpus) of english words and
@@ -12,31 +14,24 @@ Usage
12
14
  You can get a random word any where you need one. Just request the
13
15
  next of which ever word flavor you prefer.
14
16
 
15
- RandomWord.adjs.next #=> "pugnacious"
16
- RandomWord.nouns.next #=> "audience"
17
+ ```ruby
18
+ RandomWord.adjs.next #=> "pugnacious"
19
+ RandomWord.nouns.next #=> "audience"
20
+ ```
17
21
 
18
22
  ### Factory Girl
19
23
 
20
24
  This library was first developed to use in factories. It can be used
21
25
  with Factory Girl like this.
22
26
 
23
- Factory.define(:user) do |u|
24
- u.name "#{RandomWord.adjs.next} User"
25
- u.email {|u| "#{u.name.gsub(/ +/, '.')}@example.com"
26
- end
27
+ ```ruby
28
+ Factory.define(:user) do |u|
29
+ u.name { "#{RandomWord.adjs.next} User" }
30
+ u.email { "#{name.gsub(/ +/, '.')}@example.com" }
31
+ end
27
32
 
28
- Factory(:user) #=> ...
29
-
30
- ### Machinist
31
-
32
-
33
- For Machinist a `#sw` (short for serial word) method is provided. It works exactly like `#sn`
34
- but it returns a string instead of a number.
35
-
36
- User.blueprint do
37
- name { "#{sw.capitalize} User" }
38
- email { "#{sw}.user@example.com" }
39
- end
33
+ Factory(:user) #=> ...
34
+ ```
40
35
 
41
36
  Exclusion
42
37
  ----
@@ -44,12 +39,24 @@ Exclusion
44
39
  Words may be excluded by pattern, or exact match. To do this just add
45
40
  an object that responds to `#===` to the exclude list.
46
41
 
47
- RandomWord.exclude_list << /fo+/
48
- RandomWord.exclude_list << 'bar'
42
+ ```ruby
43
+ RandomWord.exclude_list << /fo+/
44
+ RandomWord.exclude_list << 'bar'
45
+ ```
49
46
 
50
47
  This will prevent the return of the exact string `"bar"` and any word
51
48
  which matches the regex `/fo+/`.
52
49
 
50
+ Constraining word length
51
+ ----
52
+
53
+ You can constrain the length of words provided by the `nouns` and `adjs` iterators like so:
54
+
55
+ ```ruby
56
+ RandomWord.nouns(not_longer_than: 56).next
57
+ RandomWord.adjs(not_shorter_than: 3).next
58
+ RandomWord.adjs(not_shorter_than: 16, not_longer_than: 672).next
59
+ ```
53
60
 
54
61
  Contributing to random-word
55
62
  ----
@@ -70,6 +77,6 @@ Contributing to random-word
70
77
  Copyright
71
78
  ----
72
79
 
73
- Copyright (c) 2011 OpenLogic, Peter Williams. See LICENSE.txt for
80
+ Copyright (c) 2011 OpenLogic, Inc. See LICENSE.txt for
74
81
  further details.
75
82
 
data/Rakefile CHANGED
@@ -1,42 +1,6 @@
1
- # encoding: utf-8
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
2
3
 
3
- require 'rubygems'
4
- require 'bundler'
5
- begin
6
- Bundler.setup(:default, :development)
7
- rescue Bundler::BundlerError => e
8
- $stderr.puts e.message
9
- $stderr.puts "Run `bundle install` to install missing gems"
10
- exit e.status_code
11
- end
12
- require 'rake'
13
-
14
- require 'jeweler'
15
- Jeweler::Tasks.new do |gem|
16
- # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
- gem.name = "random-word"
18
- gem.homepage = "http://github.com/pezra/random-word"
19
- gem.license = "MIT"
20
- gem.summary = %Q{Pick random words for factory data}
21
- gem.description = %Q{A random word generator intended for use in test data factories. This library uses a large list (the wordnet corpus) of english words and provides an enumerator interface to that corpus that will return the words in a random order without repeats.}
22
- gem.email = "pezra@barelyenough.org"
23
- gem.authors = ["Peter Williams"]
24
- # dependencies defined in Gemfile
25
- end
26
- Jeweler::RubygemsDotOrgTasks.new
27
-
28
- require 'rspec/core'
29
- require 'rspec/core/rake_task'
30
- RSpec::Core::RakeTask.new(:spec) do |spec|
31
- spec.pattern = FileList['spec/**/*_spec.rb']
32
- end
33
-
34
- RSpec::Core::RakeTask.new(:rcov) do |spec|
35
- spec.pattern = 'spec/**/*_spec.rb'
36
- spec.rcov = true
37
- end
4
+ RSpec::Core::RakeTask.new(:spec)
38
5
 
39
6
  task :default => :spec
40
-
41
- require 'yard'
42
- YARD::Rake::YardocTask.new
@@ -1,2 +1 @@
1
1
  require 'random_word'
2
- require 'random_word/machinist' if defined?(Machinist)
@@ -9,23 +9,40 @@ require 'pathname'
9
9
  module RandomWord
10
10
  module EachRandomly
11
11
  attr_accessor :random_word_exclude_list
12
+ attr_accessor :min_length
13
+ attr_accessor :max_length
12
14
 
13
15
  def each_randomly(&blk)
14
16
  used = Set.new
15
- exclude_list = Array(@random_word_exclude_list)
16
- while true
17
+ skipped = Set.new
18
+ loop do
17
19
  idx = next_unused_idx(used)
18
20
  used << idx
19
21
  word = at(idx)
20
- next if exclude_list.any?{|r| r === word }
22
+ if excluded?(word)
23
+ skipped << idx
24
+ next
25
+ end
21
26
  yield word
27
+ used.subtract(skipped)
28
+ skipped.clear
22
29
  end
23
30
 
24
31
  rescue OutOfWords
25
32
  # we are done.
26
33
  end
27
34
 
35
+ def set_constraints(opts = {})
36
+ @min_length = opts[:not_shorter_than] || 1
37
+ @max_length = opts[:not_longer_than] || Float::INFINITY
38
+ end
39
+
40
+ def self.extended(mod)
41
+ mod.set_constraints
42
+ end
43
+
28
44
  private
45
+
29
46
  def next_unused_idx(used)
30
47
  idx = rand(length)
31
48
  try = 1
@@ -37,22 +54,34 @@ module RandomWord
37
54
 
38
55
  idx
39
56
  end
57
+
58
+ def excluded?(word)
59
+ exclude_list = Array(@random_word_exclude_list)
60
+ exclude_list.any? {|r| r === word} || word.length < min_length || (!(max_length.nil?) && word.length > max_length)
61
+ end
62
+
40
63
  class OutOfWords < Exception; end
41
64
  end
42
65
 
43
66
  class << self
67
+ attr_accessor :word_list
68
+
44
69
  def exclude_list
45
70
  @exclude_list ||= []
46
71
  end
47
72
 
48
73
  # @return [Enumerator] Random noun enumerator
49
- def nouns
74
+ def nouns(opts = {})
50
75
  @nouns ||= enumerator(load_word_list("nouns.dat"), exclude_list)
76
+ word_list.set_constraints(opts)
77
+ @nouns
51
78
  end
52
79
 
53
80
  # @return [Enumerator] Random adjective enumerator
54
- def adjs
81
+ def adjs(opts = {})
55
82
  @adjs ||= enumerator(load_word_list("adjs.dat"), exclude_list)
83
+ word_list.set_constraints(opts)
84
+ @adjs
56
85
  end
57
86
 
58
87
  # @return [Enumerator] Random phrase enumerator
@@ -69,6 +98,7 @@ module RandomWord
69
98
  # Create a random, non-repeating enumerator for a list of words
70
99
  # (or anything really).
71
100
  def enumerator(word_list, list_of_regexs_or_strings_to_exclude = [])
101
+ @word_list = word_list
72
102
  word_list.extend EachRandomly
73
103
  word_list.random_word_exclude_list = list_of_regexs_or_strings_to_exclude
74
104
  word_list.enum_for(:each_randomly)
@@ -0,0 +1,3 @@
1
+ module RandomWord
2
+ VERSION = '2.0.0'.freeze
3
+ end
@@ -0,0 +1,38 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'random_word/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'random-word'
8
+ spec.version = RandomWord::VERSION
9
+ spec.authors = ['Peter Williams', 'Todd Thomas']
10
+ spec.email = ['pezra@barelyenough.org', 'todd.thomas@openlogic.com']
11
+
12
+ spec.summary = %q{Pick random words for factory data}
13
+ spec.description = %q{A random word generator intended for use in test data factories. This library uses a large list (the wordnet corpus) of english words and provides an enumerator interface to that corpus that will return the words in a random order without repeats.}
14
+ spec.homepage = 'https://github.com/openlogic/random-word'
15
+ spec.license = 'MIT'
16
+
17
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
19
+ if spec.respond_to?(:metadata)
20
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org'
21
+ else
22
+ raise "RubyGems 2.0 or newer is required to protect against " \
23
+ "public gem pushes."
24
+ end
25
+
26
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
27
+ f.match(%r{^(test|spec|features)/})
28
+ end
29
+ spec.bindir = 'exe'
30
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
+ spec.require_paths = ['lib']
32
+
33
+ spec.add_development_dependency 'bundler', '~> 1.14'
34
+ spec.add_development_dependency 'coveralls'
35
+ spec.add_development_dependency 'rake', '~> 10.0'
36
+ spec.add_development_dependency 'rspec', '~> 3.0'
37
+ spec.add_development_dependency 'machinist', '~>2.0'
38
+ end
metadata CHANGED
@@ -1,161 +1,134 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: random-word
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
5
- prerelease:
4
+ version: 2.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Peter Williams
8
+ - Todd Thomas
9
9
  autorequire:
10
- bindir: bin
10
+ bindir: exe
11
11
  cert_chain: []
12
- date: 2012-01-12 00:00:00.000000000 -07:00
13
- default_executable:
12
+ date: 2017-04-21 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
- name: rspec
17
- requirement: &2155118380 !ruby/object:Gem::Requirement
18
- none: false
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
19
17
  requirements:
20
- - - ~>
18
+ - - "~>"
21
19
  - !ruby/object:Gem::Version
22
- version: 2.3.0
20
+ version: '1.14'
23
21
  type: :development
24
22
  prerelease: false
25
- version_requirements: *2155118380
26
- - !ruby/object:Gem::Dependency
27
- name: yard
28
- requirement: &2155117900 !ruby/object:Gem::Requirement
29
- none: false
23
+ version_requirements: !ruby/object:Gem::Requirement
30
24
  requirements:
31
- - - ~>
25
+ - - "~>"
32
26
  - !ruby/object:Gem::Version
33
- version: 0.6.0
34
- type: :development
35
- prerelease: false
36
- version_requirements: *2155117900
27
+ version: '1.14'
37
28
  - !ruby/object:Gem::Dependency
38
- name: bundler
39
- requirement: &2155117420 !ruby/object:Gem::Requirement
40
- none: false
29
+ name: coveralls
30
+ requirement: !ruby/object:Gem::Requirement
41
31
  requirements:
42
- - - ~>
32
+ - - ">="
43
33
  - !ruby/object:Gem::Version
44
- version: 1.0.0
34
+ version: '0'
45
35
  type: :development
46
36
  prerelease: false
47
- version_requirements: *2155117420
48
- - !ruby/object:Gem::Dependency
49
- name: jeweler
50
- requirement: &2155116940 !ruby/object:Gem::Requirement
51
- none: false
37
+ version_requirements: !ruby/object:Gem::Requirement
52
38
  requirements:
53
- - - ~>
39
+ - - ">="
54
40
  - !ruby/object:Gem::Version
55
- version: 1.6.2
56
- type: :development
57
- prerelease: false
58
- version_requirements: *2155116940
41
+ version: '0'
59
42
  - !ruby/object:Gem::Dependency
60
- name: rcov
61
- requirement: &2155116460 !ruby/object:Gem::Requirement
62
- none: false
43
+ name: rake
44
+ requirement: !ruby/object:Gem::Requirement
63
45
  requirements:
64
- - - ! '>='
46
+ - - "~>"
65
47
  - !ruby/object:Gem::Version
66
- version: '0'
48
+ version: '10.0'
67
49
  type: :development
68
50
  prerelease: false
69
- version_requirements: *2155116460
70
- - !ruby/object:Gem::Dependency
71
- name: machinist
72
- requirement: &2155115980 !ruby/object:Gem::Requirement
73
- none: false
51
+ version_requirements: !ruby/object:Gem::Requirement
74
52
  requirements:
75
- - - ! '>='
53
+ - - "~>"
76
54
  - !ruby/object:Gem::Version
77
- version: 2.0.0.beta2
78
- type: :development
79
- prerelease: false
80
- version_requirements: *2155115980
55
+ version: '10.0'
81
56
  - !ruby/object:Gem::Dependency
82
- name: activesupport
83
- requirement: &2155115500 !ruby/object:Gem::Requirement
84
- none: false
57
+ name: rspec
58
+ requirement: !ruby/object:Gem::Requirement
85
59
  requirements:
86
- - - ! '>='
60
+ - - "~>"
87
61
  - !ruby/object:Gem::Version
88
- version: '0'
62
+ version: '3.0'
89
63
  type: :development
90
64
  prerelease: false
91
- version_requirements: *2155115500
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '3.0'
92
70
  - !ruby/object:Gem::Dependency
93
- name: i18n
94
- requirement: &2155115020 !ruby/object:Gem::Requirement
95
- none: false
71
+ name: machinist
72
+ requirement: !ruby/object:Gem::Requirement
96
73
  requirements:
97
- - - ! '>='
74
+ - - "~>"
98
75
  - !ruby/object:Gem::Version
99
- version: '0'
76
+ version: '2.0'
100
77
  type: :development
101
78
  prerelease: false
102
- version_requirements: *2155115020
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '2.0'
103
84
  description: A random word generator intended for use in test data factories. This
104
85
  library uses a large list (the wordnet corpus) of english words and provides an
105
86
  enumerator interface to that corpus that will return the words in a random order
106
87
  without repeats.
107
- email: pezra@barelyenough.org
88
+ email:
89
+ - pezra@barelyenough.org
90
+ - todd.thomas@openlogic.com
108
91
  executables: []
109
92
  extensions: []
110
- extra_rdoc_files:
111
- - LICENSE.txt
112
- - README.markdown
93
+ extra_rdoc_files: []
113
94
  files:
114
- - .document
115
- - .rspec
95
+ - ".document"
96
+ - ".gitignore"
97
+ - ".travis.yml"
116
98
  - Gemfile
117
99
  - HISTORY.markdown
118
100
  - LICENSE.txt
119
101
  - README.markdown
120
102
  - Rakefile
121
- - VERSION
122
103
  - data/adjs.dat
123
104
  - data/nouns.dat
124
105
  - lib/random-word.rb
125
106
  - lib/random_word.rb
126
- - lib/random_word/machinist.rb
127
- - spec/random-word_spec.rb
128
- - spec/random_word/machinist_spec.rb
129
- - spec/random_word_spec.rb
130
- - spec/spec_helper.rb
131
- - spec/support/matchers.rb
132
- has_rdoc: true
133
- homepage: http://github.com/pezra/random-word
107
+ - lib/random_word/version.rb
108
+ - random-word.gemspec
109
+ homepage: https://github.com/openlogic/random-word
134
110
  licenses:
135
111
  - MIT
112
+ metadata:
113
+ allowed_push_host: https://rubygems.org
136
114
  post_install_message:
137
115
  rdoc_options: []
138
116
  require_paths:
139
117
  - lib
140
118
  required_ruby_version: !ruby/object:Gem::Requirement
141
- none: false
142
119
  requirements:
143
- - - ! '>='
120
+ - - ">="
144
121
  - !ruby/object:Gem::Version
145
122
  version: '0'
146
- segments:
147
- - 0
148
- hash: 2056485225028355172
149
123
  required_rubygems_version: !ruby/object:Gem::Requirement
150
- none: false
151
124
  requirements:
152
- - - ! '>='
125
+ - - ">="
153
126
  - !ruby/object:Gem::Version
154
127
  version: '0'
155
128
  requirements: []
156
129
  rubyforge_project:
157
- rubygems_version: 1.6.2
130
+ rubygems_version: 2.6.11
158
131
  signing_key:
159
- specification_version: 3
132
+ specification_version: 4
160
133
  summary: Pick random words for factory data
161
134
  test_files: []
data/.rspec DELETED
File without changes
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 1.3.0
@@ -1,27 +0,0 @@
1
- module RandomWord
2
- module Machinist
3
- # The serial word for the object being manufactured.
4
- def serial_word
5
- @serial_word ||= RandomWord.adjs.next
6
- end
7
- alias_method :sw, :serial_word
8
-
9
- # The serial adjective for the object being manufactured.
10
- def serial_adj
11
- serial_word
12
- end
13
-
14
- # The serial noun for the object being manufactured.
15
- def serial_noun
16
- @serial_noun ||= RandomWord.nouns.next
17
- end
18
-
19
- end
20
- end
21
-
22
- begin
23
- require 'machinist/lathe'
24
- Machinist::Lathe.send(:include, RandomWord::Machinist)
25
- rescue LoadError, NameError
26
- # Machinist is not available
27
- end
@@ -1,7 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe "RandomWord" do
4
- it "defines the module" do
5
- defined?(RandomWord).should be_true
6
- end
7
- end
@@ -1,38 +0,0 @@
1
- require File.expand_path("../spec_helper", File.dirname(__FILE__))
2
- require 'machinist/machinable'
3
- require 'machinist/blueprint'
4
- require 'machinist/lathe'
5
- require 'random_word/machinist'
6
-
7
- describe RandomWord::Machinist do
8
- let(:klass){ Class.new(Struct.new(:name,:role)) do
9
- extend Machinist::Machinable
10
- end
11
- }
12
-
13
- it "allows the use of #sw in blue prints" do
14
- klass.blueprint do
15
- name {sw}
16
- end
17
- klass.make.name.should_not be_nil
18
- end
19
-
20
- it "allows the use of #serial_word in blue prints" do
21
- klass.blueprint do
22
- name {serial_word}
23
- end
24
- klass.make.name.should_not be_nil
25
- end
26
-
27
- it "return same word for each call to serial_word" do
28
- klass.blueprint do
29
- name {serial_word}
30
- role {serial_word}
31
- end
32
-
33
- klass.make.tap do |obj|
34
- obj.name.should == obj.role
35
- end
36
- end
37
-
38
- end
@@ -1,92 +0,0 @@
1
- require File.expand_path("spec_helper", File.dirname(__FILE__))
2
-
3
- describe RandomWord, "enumerator" do
4
- subject {RandomWord.enumerator(["aaa", "bbb", "ccc"])}
5
-
6
- it "can get you the next word in its list" do
7
- subject.next.should be_one_of(["aaa", "bbb", "ccc"])
8
- end
9
-
10
- it "raises error when it runs out of words" do
11
- 3.times{subject.next}
12
-
13
- lambda{subject.next}.should raise_error(StopIteration)
14
- end
15
-
16
- it "make sure each word is only returned once" do
17
- already_received = []
18
- 3.times do
19
- (new_word = subject.next).should_not be_one_of(already_received)
20
- already_received << new_word
21
- end
22
- end
23
- end
24
-
25
- describe RandomWord do
26
- after(:all) do
27
- RandomWord.instance_eval{ @nouns, @adjs = nil, nil } # reset rspec effects
28
- end
29
-
30
- it "can return a random noun enumerator" do
31
- RandomWord.nouns.should respond_to(:next)
32
- end
33
-
34
- it "can return a random adj enumerator" do
35
- RandomWord.adjs.should respond_to(:next)
36
- end
37
-
38
- it "can return a random phrase enumerator" do
39
- RandomWord.phrases.next.should be_a(String)
40
- end
41
- end
42
-
43
- describe RandomWord, "#exclude" do
44
- let(:word_list) { ["aaa","ccc","c", "cab", "abc", "ace", "dad"] }
45
-
46
- [
47
- {:name => "normal words", :exclude => "ccc", :expected => Set.new(["aaa","c", "cab", "abc", "ace", "dad"])},
48
- {:name => "regex", :exclude => /c/, :expected => Set.new(["aaa", "dad"])},
49
- {:name => "list", :exclude => [/c/,/d/], :expected => Set.new(["aaa"])},
50
- ].each do |rec|
51
- it "will not return an excluded #{rec[:name]}" do
52
- subject = RandomWord.enumerator(word_list, rec[:exclude])
53
-
54
- received_words = []
55
- loop do
56
- received_words << subject.next
57
- end rescue StopIteration
58
-
59
- Set.new(received_words).should == rec[:expected]
60
- end
61
- end
62
-
63
- end
64
-
65
- describe "RandomWord#nouns", "with exclusions" do
66
-
67
- subject{ RandomWord.nouns }
68
-
69
- before(:each) do
70
- RandomWord.should_receive(:load_word_list).and_return(["aaa","bbb", "ccc"])
71
- end
72
-
73
- after(:each) do
74
- RandomWord.exclude_list.clear
75
- RandomWord.instance_eval{ @nouns, @adjs = nil, nil } # reset rspec effects
76
- end
77
-
78
- it "will not return an excluded word" do
79
- RandomWord.exclude_list << "ccc"
80
-
81
- received_words = []
82
- loop do
83
- received_words << subject.next
84
- end
85
-
86
- received_words.should_not include "ccc"
87
- received_words.should include "aaa"
88
- received_words.should include "bbb"
89
- end
90
-
91
- end
92
-
@@ -1,12 +0,0 @@
1
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
- $LOAD_PATH.unshift(File.dirname(__FILE__))
3
- require 'rspec'
4
- require 'random-word'
5
-
6
- # Requires supporting files with custom matchers and macros, etc,
7
- # in ./support/ and its subdirectories.
8
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
9
-
10
- RSpec.configure do |config|
11
-
12
- end
@@ -1,6 +0,0 @@
1
- RSpec::Matchers.define :be_one_of do |expected|
2
- match do |actual|
3
- expected.any?{|exp_val| exp_val === actual}
4
- end
5
-
6
- end