randomperson 1.3.0 → 1.4.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.
@@ -1,11 +1,11 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require_relative "./ext/array.rb"
4
3
  require_relative "./outputter.rb"
5
4
 
6
5
 
7
6
  module RandomPerson
8
7
 
8
+ # The base class for a name-data class.
9
9
  class Name
10
10
  include Outputter
11
11
 
@@ -2,22 +2,47 @@
2
2
 
3
3
  # uses the @on_execute block of the including class
4
4
  module Outputter
5
+
6
+ # ClassMethods
7
+ # @api private
5
8
  module ClassMethods
6
9
 
7
10
  end # ClassMethods
8
-
11
+
12
+
13
+ # Instance methods
14
+ # @api private
9
15
  module InstanceMethods
16
+
17
+ # Block to execute when instance is ready.
18
+ # @example
19
+ # # In the AmericanSuffix constructor
20
+ # # Some help to make sure suffixes are age appropriate.
21
+ # on_execute do |person|
22
+ # r = rand(99)
23
+ # if person.age > 17
24
+ # r += 1 #Jr can't happen and Snr can
25
+ # end
26
+ # #
27
+ # @possibles.each_pair{|k,v| break v if k === r }
28
+ # end
29
+ # @api private
10
30
  def on_execute( &block )
11
31
  @on_execute = block
12
32
  end
13
33
 
34
+
35
+ # Command pattern
36
+ # @api private
14
37
  def execute( person=nil )
15
38
  @on_execute.call( person )
16
39
  end
17
40
 
18
41
  private
19
-
20
- #TODO rename this as other classes are using it too
42
+
43
+ # Handles the outputting of prefixes like Mr, Mrs etc.
44
+ #TODO rename this as other classes are using it too
45
+ # @api private
21
46
  def for_prefixes( for_females, for_males, male_upper_bound=50, child_age_upper_bound=16, female_lower_bound=50)
22
47
 
23
48
  ->(person){
@@ -32,7 +57,10 @@ module Outputter
32
57
  name
33
58
  }
34
59
  end # prefixes
35
-
60
+
61
+
62
+ # Handles the outputting for the rest of the name.
63
+ # @api private
36
64
  def for_standard
37
65
  ->(person=nil){
38
66
  f = if @formats.length > 1
@@ -45,7 +73,10 @@ module Outputter
45
73
  }
46
74
  end
47
75
  end
48
-
76
+
77
+
78
+ # Classic hooking in.
79
+ # @api private
49
80
  def self.included(receiver)
50
81
  receiver.extend ClassMethods
51
82
  receiver.send :include, InstanceMethods
@@ -1,5 +1,6 @@
1
1
  module RandomPerson #namespace
2
2
 
3
+ # Handles ratios for demographics e.g. 1 male for 1 female.
3
4
  module Ratio
4
5
 
5
6
  #create a ratio that is made up of ranges
@@ -12,7 +13,8 @@ module RandomPerson #namespace
12
13
  new_ratio.shift #get rid of 0..0
13
14
  return new_ratio
14
15
  end
15
-
16
+
17
+
16
18
  #find the order of magnitude of a number for use with this module
17
19
  def ordmag( n )
18
20
  m = 10
@@ -22,8 +24,11 @@ module RandomPerson #namespace
22
24
  end
23
25
  m
24
26
  end
25
-
27
+
28
+
26
29
  #use this method if you don't have a ratio at all for an array and, hey presto! It'll make one for you
30
+ # @param [Integer] len Length
31
+ # @param [Integer] mag Magnitude
27
32
  def presto_rangio( len, mag )
28
33
  return [ ] unless len >= 1
29
34
  l, m = len, mag
@@ -1,3 +1,6 @@
1
1
  module RandomPerson
2
- VERSION = "1.3.0"
2
+
3
+ # Version number of this library.
4
+ # @see http://semver.org/ for how this pattern works.
5
+ VERSION = "1.4.0"
3
6
  end
@@ -4,6 +4,7 @@ require File.expand_path( '../lib/randomperson/version', __FILE__ )
4
4
  Gem::Specification.new do |s|
5
5
  s.authors = ["Iain Barnett"]
6
6
  s.email = ["iainspeed@gmail.com"]
7
+ s.license = "MIT"
7
8
  s.description = <<-EOF
8
9
  RandomPerson is a port to Ruby of Perl's Data::RandomPerson. Use it to generate random persons given various parameters, such as country, age and gender ratio.
9
10
  EOF
@@ -16,11 +17,5 @@ Gem::Specification.new do |s|
16
17
  s.name = "randomperson"
17
18
  s.require_paths = ['lib']
18
19
  s.version = RandomPerson::VERSION
19
- s.add_development_dependency( "wirble" )
20
- s.add_development_dependency( "rspec" )
21
- s.add_development_dependency( "rake" )
22
- s.add_development_dependency( "simplecov" )
23
- s.add_development_dependency( "yard" )
24
- s.add_development_dependency( "redcarpet" ) # for yard
25
- s.required_ruby_version = ">= 1.9.1"
20
+ s.required_ruby_version = ">= 2.0.0"
26
21
  end
@@ -4,26 +4,37 @@ require "spec_helper"
4
4
  require_relative "./support/shared_examples/names.rb"
5
5
  require_relative "../lib/randomperson/person.rb"
6
6
  require_relative "../lib/randomperson/demographic.rb"
7
+ require_relative "../lib/randomperson.rb"
7
8
  require_relative "./support/helpers.rb"
8
9
 
9
10
  module RandomPerson
10
11
  module Names
11
12
 
12
- Demographic.new.require_and_add(Demographic.load_names).each do |klass|
13
- klass = klass.split("::").last
13
+ describe "RandomPerson::Names" do
14
14
 
15
- puts "Describe #{klass}" #because rspec doesn't output this before it blow up! Sheesh!!
16
- describe klass do
17
- let(:instance) { RandomPerson::Constant.new("RandomPerson::Names::#{klass}").to_constant.new }
15
+ before :all do
16
+ Demographic.new.require_and_add(Demographic.load_names)
17
+ end
18
+
19
+
20
+ RandomPerson().loaded_classes.each do |klass|
21
+ klass_basename = klass.name.split("::").last
22
+
23
+ puts "Describe #{klass.name}" #because rspec doesn't output this before it blow up! Sheesh!!
24
+ describe klass_basename do
25
+ let(:instance) {
26
+ klass.new
27
+ }
18
28
  subject{ instance }
19
29
  it_should_behave_like "a Name class"
20
- if ["Prefix", "Suffix"].any?{|x| klass.include? x }
21
- it_should_behave_like "it cares about gender and/or age", RandomPerson::Spec::Helpers.fix_fixtures[klass]
30
+ if ["Prefix", "Suffix"].any?{|x| klass_basename.include? x }
31
+ it_should_behave_like "it cares about gender and/or age", RandomPerson::Spec::Helpers.fix_fixtures[klass_basename]
22
32
  else
23
- it_should_behave_like "a name generator", RandomPerson::Spec::Helpers.fixtures[klass]
33
+ it_should_behave_like "a name generator", RandomPerson::Spec::Helpers.fixtures[klass_basename]
24
34
  end
25
35
  end # describe
26
36
  end # loop
37
+ end
27
38
 
28
39
  end # Names
29
40
  end # RandomPerson
@@ -3,52 +3,8 @@
3
3
  require "spec_helper"
4
4
  require_relative "../lib/randomperson.rb"
5
5
 
6
- shared_examples "a Person" do
7
- it { subject.first.should_not be_nil }
8
- it { subject.first.should be_a_kind_of String }
9
- it { subject.last.should_not be_nil }
10
- it { subject.last.should be_a_kind_of String }
11
- it { subject.prefix.should_not be_nil }
12
- it { subject.prefix.should be_a_kind_of String }
13
- end
14
-
15
- shared_examples "there is more than one demographic" do
16
- context "Given a new demographic" do
17
- before(:all) { r.demographic("America").add_American }
18
- context "but not changing to it" do
19
- let(:last_run) { r.person }
20
- subject { last_run }
21
- it { should equal first_run }
22
- context "changing to the new demographic" do
23
- let(:new_demo_person) { r.person "America" }
24
- subject { new_demo_person }
25
- it { should_not equal last_run }
26
- end
27
- end
28
- end
29
- end
30
-
31
- shared_examples "getting the last person" do
32
- context "on first run" do
33
- subject{ first_run }
34
- it_behaves_like "a Person"
35
- context "on next run" do
36
- context "Given no demographic" do
37
- subject { r.person }
38
- it { should equal first_run }
39
- end
40
- context "Given the same demographic" do
41
- subject{ r.person "Spain" }
42
- it { should equal first_run }
43
- it_behaves_like "there is more than one demographic"
44
- end
45
- end
46
- end
47
- end
48
-
49
6
  shared_examples "clear or reset" do
50
- let(:r) { RandomPerson() }
51
- before(:all) {
7
+ Given!(:before) {
52
8
  r.demographic("Spain").add_Spanish
53
9
  r.demographic("Finland").add_Finnish
54
10
  r.generate "Spain"
@@ -57,45 +13,44 @@ shared_examples "clear or reset" do
57
13
  r.generate
58
14
  r.generate "Spain"
59
15
  }
60
- subject { r.clear }
61
- it { should be_nil }
62
- specify { r.should_not be_nil }
63
- specify { r.should be_a_kind_of RandomPerson::Facade }
64
- specify { r.generators.should be_empty }
65
- specify { r.demographics.should be_empty }
16
+ Then { r.clear.nil? }
17
+ And { r.should_not be_nil }
18
+ And { r.should be_a_kind_of RandomPerson::Facade }
19
+ And { r.generators.should be_empty }
20
+ And { r.demographics.should be_empty }
66
21
  end
67
22
 
68
23
 
69
24
  describe RandomPerson do
70
-
25
+ Given(:r) { RandomPerson() }
26
+
71
27
  describe :person do
72
- let(:r) { RandomPerson() }
73
28
  context "Given a demographic" do
74
29
  context "With a name" do
75
- context "and one demographic specified" do
76
- before(:all) {
30
+ demo_name = "Spain"
31
+ context "and one demographic specified, that of #{demo_name}," do
32
+ Given!(:spanish_was_added) {
77
33
  r.demographic("Spain").add_Spanish
78
34
  }
79
- let(:first_run) { r.person "Spain" }
80
- subject{ first_run }
81
- it_behaves_like "a Person"
35
+ Given(:first_run) { r.person "Spain" }
36
+ Then { first_run.first.should_not be_nil }
37
+ And { first_run.first.should be_a_kind_of String }
38
+ And { first_run.last.should_not be_nil }
39
+ And { first_run.last.should be_a_kind_of String }
40
+ And { first_run.prefix.should_not be_nil }
41
+ And { first_run.prefix.should be_a_kind_of String }
82
42
  context "on next run" do
83
43
  context "Given no demographic" do
84
- subject { r.person }
85
- it { should equal first_run }
44
+ Then { r.person == first_run }
86
45
  context "and then given the same demographic explicitly" do
87
- subject{ r.person "Spain" }
88
- it { should equal first_run }
46
+ Then { r.person("Spain") == first_run }
89
47
  context "and then given a demo name that doesn't exist" do
90
- subject{ r.person "Spurious" }
91
- it { should be_nil }
48
+ Then { r.person("Spurious").nil? }
92
49
  context "and then given no demo name" do
93
- subject{ r.person }
94
- it { should equal first_run }
50
+ Then { r.person == first_run }
95
51
  end
96
52
  context "and then given the last good demographic explicitly" do
97
- subject{ r.person "Spain" }
98
- it { should equal first_run }
53
+ Then { r.person("Spain") == first_run }
99
54
  end
100
55
  end
101
56
  end
@@ -104,42 +59,69 @@ describe RandomPerson do
104
59
  end
105
60
 
106
61
  context "and no demographic specified" do
107
- before(:all) {
62
+ Given!(:spanish_was_added) {
108
63
  r.demographic("Spain").add_Spanish
109
64
  }
110
- let(:first_run) { r.person }
111
- it_behaves_like "getting the last person"
65
+ context "on first run" do
66
+ Given!(:first_run) { r.person }
67
+ Then { first_run.first.should_not be_nil }
68
+ And { first_run.first.should be_a_kind_of String }
69
+ And { first_run.last.should_not be_nil }
70
+ And { first_run.last.should be_a_kind_of String }
71
+ And { first_run.prefix.should_not be_nil }
72
+ And { first_run.prefix.should be_a_kind_of String }
73
+ context "on next run" do
74
+ context "Given no demographic" do
75
+ When(:person) { r.person }
76
+ Then { person == first_run }
77
+ end
78
+ context "Given the same demographic" do
79
+ When(:spanish){ r.person "Spain" }
80
+ Then { spanish == first_run }
81
+ context "there is more than one demographic" do
82
+ context "Given a new demographic" do
83
+ Given(:american_added) { r.demographic("America").add_American }
84
+ context "but not changing to it" do
85
+ When(:r_person) { r.person }
86
+ Then { r_person == first_run }
87
+ context "changing to the new demographic" do
88
+ Given(:new_demo_person) { r.person "America" }
89
+ When(:new_person) { new_demo_person }
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
112
97
  end
113
98
 
114
99
  end
115
100
 
116
101
  context "Without a name" do
117
102
  context "and with a demographic specified" do
118
- before(:all) {
103
+ Given(:spanish_without_a_name) {
119
104
  r.clear
120
105
  r.demographic.add_Spanish
121
106
  }
122
- subject { r.person "Spain" }
123
- it { should be_nil }
107
+ When(:person_is_spanish) { r.person "Spain" }
108
+ Then { person_is_spanish.nil? }
124
109
  end
125
110
 
126
111
  context "and no demographic specified" do
127
- before(:all) {
128
- r.demographic.add_Spanish
129
- }
130
- let(:first_run) { r.person }
131
- subject { r.person }
132
- it { should equal first_run }
112
+ Given!(:spanish_added) { r.demographic.add_Spanish }
113
+ When(:first_run) { r.person }
114
+ Then { r.person == first_run }
133
115
  context "on repeated runs" do
134
- before(:all) {
116
+ Given!(:clearing) {
135
117
  r.clear
136
118
  r.demographic.add_Spanish
137
119
  r.generate
138
120
  r.generate
139
121
  }
140
- let(:last) { r.person }
141
- subject { r.person }
142
- it { should equal last }
122
+ Given(:last_generated) { r.person }
123
+ When(:person_generated) { r.person }
124
+ Then { person_generated == last_generated }
143
125
  end
144
126
 
145
127
  end
@@ -147,29 +129,21 @@ describe RandomPerson do
147
129
  end
148
130
 
149
131
  context "With no demographic" do
150
- context "Already loaded" do
151
- before { r.demographics.clear }
152
- subject { r.person }
153
- it { should be_a_kind_of RandomPerson::Person }
154
- context "and given a demo name (that does not exist)" do
155
- subject { r.person "Not loaded" }
156
- it { should be_nil }
157
- end
158
- end
132
+ Given!(:cleared) { r.demographics.clear }
133
+ Then { r.person.kind_of? RandomPerson::Person }
134
+ Then { r.person("Not loaded").nil? }
159
135
  context "Because they've been cleared" do
160
- before { r.demographics.clear }
161
- subject { r.person }
162
- it { should be_a_kind_of RandomPerson::Person }
136
+ Then { r.person.kind_of? RandomPerson::Person }
163
137
  context "and given a demo name (that does not exist)" do
164
- subject { r.person "Been cleared" }
165
- it { should be_nil }
138
+ Then { r.person("Been cleared").nil? }
166
139
  context "and given a block with a raise" do
167
- subject {
168
- r.person "Does not exist" do
169
- fail "This demo name does not exist!"
170
- end
140
+ Then {
141
+ expect {
142
+ r.person "Does not exist" do
143
+ fail "This demo name does not exist!"
144
+ end
145
+ }
171
146
  }
172
- specify { expect { subject }.to raise_error }
173
147
  end
174
148
  end
175
149
  end
@@ -178,26 +152,23 @@ describe RandomPerson do
178
152
 
179
153
 
180
154
  describe :generators do
181
- let(:r) { RandomPerson() }
182
- before(:all) {
155
+ Given(:spanish_and_finish_added) {
183
156
  r.demographic("Spain").add_Spanish
184
157
  r.demographic("Finland").add_Finnish
185
158
  }
186
159
  context "Before first run" do
187
- subject { r.generators }
188
- it { should be_empty }
160
+ Then { r.generators.empty? }
189
161
  end
190
162
  context "First run" do
191
- before {
163
+ Given(:some_people_are_generated) {
192
164
  r.generate "Spain"
193
165
  r.generate
194
166
  r.generate "Finland"
195
167
  r.generate
196
168
  r.generate "Spain"
197
169
  }
198
- subject { r.generators }
199
- it { should_not be_empty }
200
- specify { subject.keys.should include("Spain", "Finland") }
170
+ Then { r.generators.empty? }
171
+ And { r.generators.keys.all?{|x| (x == "Spain") || (x == "Finland")}}
201
172
  end
202
173
  end # generators
203
174
 
@@ -210,117 +181,119 @@ describe RandomPerson do
210
181
  end
211
182
 
212
183
  describe :generate do
213
- let(:r) { RandomPerson() }
214
184
  context "Before a demographic has been loaded" do
215
- subject { r.generate }
216
- it { should_not be_nil }
217
- it { should be_a_kind_of RandomPerson::Person }
185
+ Then { !r.generate.nil? }
186
+ And { r.generate.kind_of? RandomPerson::Person }
218
187
  end
219
188
  context "When there is a demographic loaded" do
220
- before(:all) {
189
+ Given!(:demographic) {
221
190
  r.demographic("Spain").add_Spanish
222
191
  }
223
- let(:people) {
192
+ Given(:people) {
224
193
  people = []
225
194
  1000.times{ people << r.generate }
226
195
  people
227
196
  }
228
197
  context "Given a demographic name" do
229
198
  context "That has been added to demographics" do
230
- subject { r.generate "Spain" }
231
- it { should_not be_nil }
232
- it { should be_a_kind_of RandomPerson::Person }
233
- it_behaves_like "a Person"
234
- it { should_not satisfy {|person| people.include? person } }
199
+ When(:spanish) { r.generate "Spain" }
200
+ Then { !spanish.nil? }
201
+ And { spanish.kind_of? RandomPerson::Person }
202
+ And { spanish.first.should_not be_nil }
203
+ And { spanish.first.should be_a_kind_of String }
204
+ And { spanish.last.should_not be_nil }
205
+ And { spanish.last.should be_a_kind_of String }
206
+ And { spanish.prefix.should_not be_nil }
207
+ And { spanish.prefix.should be_a_kind_of String }
208
+ Then { !people.include?(spanish) }
235
209
  end
236
210
  context "That has not been added to demographics" do
237
- subject { r.generate "Spurious" }
238
- it { should be_nil }
211
+ When(:spurious) { r.generate "Spurious" }
212
+ Then { spurious.nil? }
239
213
  end
240
214
  end
241
215
  context "Given a no demographic name" do
242
- subject { r.generate }
243
- it { should_not be_nil }
244
- it { should be_a_kind_of RandomPerson::Person }
245
- it_behaves_like "a Person"
246
- it { should_not satisfy {|person| people.include? person } }
216
+ Then { !r.generate.nil? }
217
+ And { r.generate.kind_of? RandomPerson::Person }
218
+ And { r.generate.first.should_not be_nil }
219
+ And { r.generate.first.should be_a_kind_of String }
220
+ And { r.generate.last.should_not be_nil }
221
+ And { r.generate.last.should be_a_kind_of String }
222
+ And { r.generate.prefix.should_not be_nil }
223
+ And { r.generate.prefix.should be_a_kind_of String }
224
+ And { !people.include? r.generate }
247
225
  end
248
226
  end
249
227
  context "When there is no demographic loaded" do
250
- context "Given a demographic name" do
251
- subject { r.generate "Spain" }
252
- end
228
+ When(:spain) { r.generate "Spain" }
229
+ Then { spain.nil? }
230
+ When(:no_name) { r.generate }
231
+ Then { !no_name.nil? }
253
232
  end
254
233
  end
255
234
 
256
235
 
257
236
  describe :demographics do
258
- let(:r) { RandomPerson() }
259
237
  context "With no demographics loaded" do
260
- subject { r.demographics }
261
- it { should be_empty }
262
- it { should be_a_kind_of Hash }
238
+ Then { r.demographics.empty? }
239
+ And { r.demographics.kind_of? Hash }
263
240
  end
264
241
  context "Given a demographic" do
265
242
  context "With a name" do
266
- before(:all) {
243
+ Given!(:spanish_added) {
267
244
  r.demographic("Spain").add_Spanish
268
245
  }
269
- subject { r.demographics }
270
- it { should_not be_empty }
271
- it { should be_a_kind_of Hash }
272
- specify { subject.first.should be_a_kind_of Array }
273
- specify { subject.first.first.should be_a_kind_of String }
274
- specify { subject.first.last.should be_a_kind_of RandomPerson::Demographic }
246
+ Then { !r.demographics.empty? }
247
+ And { r.demographics.kind_of? Hash }
248
+ And { r.demographics.first.kind_of? Array }
249
+ And { r.demographics.first.first.kind_of? String }
250
+ And { r.demographics.first.last.kind_of? RandomPerson::Demographic }
275
251
  end
276
252
  context "Without a name" do
277
- before(:all) {
253
+ Given!(:demo_spanish) {
278
254
  r.demographic.add_Spanish
279
255
  }
280
- subject { r.demographics }
281
- it { should_not be_empty }
282
- it { should be_a_kind_of Hash }
283
- specify { subject.first.should be_a_kind_of Array }
284
- specify { subject.first.first.should be_a_kind_of String }
285
- specify { subject.first.last.should be_a_kind_of RandomPerson::Demographic }
256
+ Then { !r.demographics.empty? }
257
+ And { r.demographics.kind_of? Hash }
258
+ And { r.demographics.first.kind_of? Array }
259
+ And { r.demographics.first.first.kind_of? String }
260
+ And { r.demographics.first.last.kind_of? RandomPerson::Demographic }
286
261
  end
287
262
 
288
263
  context "With options" do
289
264
  context "With a named demographic" do
290
- let(:lower){ rand(99) }
291
- let(:upper){ rand(100 - lower) + lower }
292
- let(:females) { rand(10) }
293
- let(:males) { rand(10) }
294
- before(:all) {
265
+ Given(:lower){ rand(99) }
266
+ Given(:upper){ rand(100 - lower) + lower }
267
+ Given(:females) { rand(10) }
268
+ Given(:males) { rand(10) }
269
+ Given!(:demo) {
295
270
  r.demographic("Random!", gender_ratio: [females,males] , age_lower: lower, age_upper: upper ).add_Spanish
296
271
  }
297
- subject { r.demographics }
298
- it { should_not be_empty }
299
- it { should be_a_kind_of Hash }
300
- specify { subject.first.should be_a_kind_of Array }
301
- specify { subject.first.first.should be_a_kind_of String }
302
- specify { subject.first.last.should be_a_kind_of RandomPerson::Demographic }
303
- specify { subject.first.last.age_lower.should == lower }
304
- specify { subject.first.last.age_upper.should == upper }
305
- specify { subject.first.last.gender_ratio.should == [females,males] }
272
+ Then { !r.demographics.empty? }
273
+ And { r.demographics.kind_of? Hash }
274
+ And { r.demographics.first.should be_a_kind_of Array }
275
+ And { r.demographics.first.first.should be_a_kind_of String }
276
+ And { r.demographics.first.last.should be_a_kind_of RandomPerson::Demographic }
277
+ And { r.demographics.first.last.age_lower.should == lower }
278
+ And { r.demographics.first.last.age_upper.should == upper }
279
+ And { r.demographics.first.last.gender_ratio.should == [females,males] }
306
280
  end
307
281
  context "Without a named demographic" do
308
- let(:lower){ rand(99) }
309
- let(:upper){ rand(100 - lower) + lower }
310
- let(:females) { rand(10) }
311
- let(:males) { rand(10) }
312
- before(:all) {
282
+ Given(:lower){ rand(99) }
283
+ Given(:upper){ rand(100 - lower) + lower }
284
+ Given(:females) { rand(10) }
285
+ Given(:males) { rand(10) }
286
+ Given!(:spanish_was_added) {
313
287
  r.demographic(gender_ratio: [females,males] , age_lower: lower, age_upper: upper ).add_Spanish
314
288
  }
315
- subject { r.demographics }
316
- it { should_not be_empty }
317
- it { should be_a_kind_of Hash }
318
- specify { subject.first.should be_a_kind_of Array }
319
- specify { subject.first.first.should be_a_kind_of String }
320
- specify { subject.first.last.should be_a_kind_of RandomPerson::Demographic }
321
- specify { subject.first.last.age_lower.should == lower }
322
- specify { subject.first.last.age_upper.should == upper }
323
- specify { subject.first.last.gender_ratio.should == [females,males] }
289
+ Then { r.demographics.kind_of? Hash }
290
+ And { !r.demographics.empty? }
291
+ And { r.demographics.first.should be_a_kind_of Array }
292
+ And { r.demographics.first.first.should be_a_kind_of String }
293
+ And { r.demographics.first.last.should be_a_kind_of RandomPerson::Demographic }
294
+ And { r.demographics.first.last.age_lower.should == lower }
295
+ And { r.demographics.first.last.age_upper.should == upper }
296
+ And { r.demographics.first.last.gender_ratio.should == [females,males] }
324
297
  end
325
298
  end
326
299
  end