forgery 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +99 -0
- data/VERSION.yml +4 -0
- data/generators/forgery/USAGE +6 -0
- data/generators/forgery/forgery_generator.rb +12 -0
- data/lib/dictionaries.rb +24 -0
- data/lib/dictionaries/cities +478 -0
- data/lib/dictionaries/colors +19 -0
- data/lib/dictionaries/company_names +400 -0
- data/lib/dictionaries/countries +249 -0
- data/lib/dictionaries/female_first_names +100 -0
- data/lib/dictionaries/frequencies +8 -0
- data/lib/dictionaries/genders +2 -0
- data/lib/dictionaries/languages +97 -0
- data/lib/dictionaries/last_names +250 -0
- data/lib/dictionaries/lorem_ipsum +151 -0
- data/lib/dictionaries/male_first_names +100 -0
- data/lib/dictionaries/name_suffixes +5 -0
- data/lib/dictionaries/name_titles +6 -0
- data/lib/dictionaries/province_abbrevs +13 -0
- data/lib/dictionaries/provinces +13 -0
- data/lib/dictionaries/races +93 -0
- data/lib/dictionaries/shirt_sizes +7 -0
- data/lib/dictionaries/state_abbrevs +50 -0
- data/lib/dictionaries/states +50 -0
- data/lib/dictionaries/street_suffixes +21 -0
- data/lib/dictionaries/streets +500 -0
- data/lib/dictionaries/top_level_domains +9 -0
- data/lib/extensions/array.rb +11 -0
- data/lib/extensions/hash.rb +12 -0
- data/lib/extensions/range.rb +9 -0
- data/lib/extensions/string.rb +48 -0
- data/lib/file_reader.rb +53 -0
- data/lib/forgeries/address_forgery.rb +136 -0
- data/lib/forgeries/basic_forgery.rb +71 -0
- data/lib/forgeries/internet_forgery.rb +17 -0
- data/lib/forgeries/lorem_ipsum_forgery.rb +112 -0
- data/lib/forgeries/monetary_forgery.rb +13 -0
- data/lib/forgeries/name_forgery.rb +34 -0
- data/lib/forgeries/personal_forgery.rb +22 -0
- data/lib/forgery.rb +47 -0
- data/lib/formats.rb +24 -0
- data/lib/formats/phone +1 -0
- data/lib/formats/street_number +5 -0
- data/lib/formats/zip +2 -0
- data/spec/dictionaries_spec.rb +35 -0
- data/spec/extensions/array_spec.rb +25 -0
- data/spec/extensions/range_spec.rb +26 -0
- data/spec/extensions/string_spec.rb +29 -0
- data/spec/file_reader_spec.rb +11 -0
- data/spec/forgeries/address_forgery_spec.rb +79 -0
- data/spec/forgeries/basic_forgery_spec.rb +175 -0
- data/spec/forgeries/internet_forgery_spec.rb +30 -0
- data/spec/forgeries/lorem_ipsum_forgery_spec.rb +128 -0
- data/spec/forgeries/monetary_forgery_spec.rb +4 -0
- data/spec/forgeries/name_forgery_spec.rb +4 -0
- data/spec/forgeries/personal_forgery_spec.rb +15 -0
- data/spec/forgery_spec.rb +42 -0
- data/spec/formats_spec.rb +35 -0
- data/spec/spec_helper.rb +32 -0
- metadata +114 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
class MonetaryForgery < Forgery
|
2
|
+
def self.formatted_money(options={})
|
3
|
+
"$%1.2f" % money(options)
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.money(options={})
|
7
|
+
options = {:max => 10,
|
8
|
+
:min => 0}.merge(options)
|
9
|
+
|
10
|
+
value = ((options[:min] * 100)..(options[:max] * 100)).random
|
11
|
+
"%1.2f" % (value.to_f / 100)
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class NameForgery < Forgery
|
2
|
+
|
3
|
+
def self.last_name
|
4
|
+
dictionaries[:last_names].random
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.first_name
|
8
|
+
[dictionaries[:male_first_names], dictionaries[:female_first_names]].random.random
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.full_name
|
12
|
+
"#{self.first_name} #{self.last_name}"
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.male_first_name
|
16
|
+
dictionaries[:male_first_names].random
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.female_first_name
|
20
|
+
dictionaries[:female_first_names].random
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.company_name
|
24
|
+
dictionaries[:company_names].random
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.title
|
28
|
+
dictionaries[:name_titles].random
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.suffix
|
32
|
+
dictionaries[:name_suffixes].random
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class PersonalForgery < Forgery
|
2
|
+
|
3
|
+
def self.gender
|
4
|
+
dictionaries[:genders].random
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.abbreviated_gender
|
8
|
+
gender[0,1]
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.shirt_size
|
12
|
+
dictionaries[:shirt_sizes].random
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.race
|
16
|
+
dictionaries[:races].random
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.language
|
20
|
+
dictionaries[:languages].random
|
21
|
+
end
|
22
|
+
end
|
data/lib/forgery.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# Require forgeries at the bottom of the file so Forgery works as a gem both
|
2
|
+
# within rails and outside of it.
|
3
|
+
|
4
|
+
# Loading forgery helpers.
|
5
|
+
require File.expand_path(File.dirname(__FILE__) + '/file_reader')
|
6
|
+
require File.expand_path(File.dirname(__FILE__) + '/dictionaries')
|
7
|
+
require File.expand_path(File.dirname(__FILE__) + '/formats')
|
8
|
+
|
9
|
+
# Loading class extensions
|
10
|
+
Dir[File.expand_path(File.dirname(__FILE__) + '/extensions/**/*.rb')].uniq.each do |file|
|
11
|
+
require file
|
12
|
+
end
|
13
|
+
|
14
|
+
class Forgery
|
15
|
+
|
16
|
+
def self.dictionaries
|
17
|
+
@@dictionaries ||= Dictionaries.new
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.formats
|
21
|
+
@@formats ||= Formats.new
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
# Alternate Forgery api, see spec/forgery_spec.rb for examples.
|
27
|
+
def Forgery(forgery, method=nil, *args)
|
28
|
+
klass = "#{forgery.to_s.camelize}Forgery".constantize
|
29
|
+
if method
|
30
|
+
klass.send(method, *args)
|
31
|
+
else
|
32
|
+
klass
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# Loading the other forgeries AFTER the initial Forgery class is defined.
|
37
|
+
Dir[File.expand_path(File.dirname(__FILE__) + '/forgeries/**/*.rb')].uniq.each do |file|
|
38
|
+
require file
|
39
|
+
end
|
40
|
+
|
41
|
+
# Loading rails forgeries to override current forgery methods and add new
|
42
|
+
# forgeries
|
43
|
+
if defined?(RAILS_ROOT)
|
44
|
+
Dir[File.expand_path(RAILS_ROOT + '/lib/forgery/**/*.rb')].uniq.each do |file|
|
45
|
+
require file
|
46
|
+
end
|
47
|
+
end
|
data/lib/formats.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
class Formats
|
2
|
+
|
3
|
+
def initialize
|
4
|
+
@formats = {}
|
5
|
+
end
|
6
|
+
|
7
|
+
def [](key)
|
8
|
+
symbolized_key = key.to_sym
|
9
|
+
if @formats.has_key?(symbolized_key)
|
10
|
+
@formats[symbolized_key]
|
11
|
+
else
|
12
|
+
@formats[symbolized_key] = FileReader.read_format(symbolized_key)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def loaded?(key)
|
17
|
+
@formats.has_key?(key.to_sym)
|
18
|
+
end
|
19
|
+
|
20
|
+
def reset!
|
21
|
+
@formats = {}
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
data/lib/formats/phone
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
#-(###)###-####
|
data/lib/formats/zip
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe Dictionaries do
|
4
|
+
it "should check if the dictionary is loaded" do
|
5
|
+
dictionaries = Dictionaries.new
|
6
|
+
|
7
|
+
dictionaries[:colors]
|
8
|
+
|
9
|
+
dictionaries.should be_loaded(:colors)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should load a dictionary when called by the key" do
|
13
|
+
dictionaries = Dictionaries.new
|
14
|
+
|
15
|
+
dictionaries.reset!
|
16
|
+
|
17
|
+
dictionaries.should_not be_loaded(:colors)
|
18
|
+
|
19
|
+
dictionaries[:colors]
|
20
|
+
|
21
|
+
dictionaries.should be_loaded(:colors)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should clear the loaded dictionaries when calling reset!" do
|
25
|
+
dictionaries = Dictionaries.new
|
26
|
+
|
27
|
+
dictionaries[:colors]
|
28
|
+
|
29
|
+
dictionaries.should be_loaded(:colors)
|
30
|
+
|
31
|
+
dictionaries.reset!
|
32
|
+
|
33
|
+
dictionaries.should_not be_loaded(:colors)
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe Array do
|
4
|
+
before do
|
5
|
+
@array = [0,1,2,3,4,5,6,7,8,9]
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should get a random item out of the array" do
|
9
|
+
10.times { @array.should include(@array.random) }
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should return nil if the array is empty" do
|
13
|
+
[].random.should be_nil
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should return a random subset of the array" do
|
17
|
+
@array.random_subset(5).each do |i|
|
18
|
+
@array.should include(i)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should return a random subset of the array that is 3 long" do
|
23
|
+
@array.random_subset(3).size.should == 3
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
require 'timeout'
|
3
|
+
|
4
|
+
describe Range do
|
5
|
+
it "should get a random number out of the range" do
|
6
|
+
range = (0..9)
|
7
|
+
10.times { range.should include(range.random) }
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should not take a long time when the range is huge" do
|
11
|
+
Timeout.timeout(1){(1234567890..12345678901234567890).random}.should_not raise_error(Timeout::Error)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should return nil for a random number from a reverse range" do
|
15
|
+
10.times { (9..0).random.should be_nil }
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should get a random string our of the range" do
|
19
|
+
range = ("a".."z")
|
20
|
+
10.times { range.should include(range.random) }
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should return nil if the maximum is less than the minimum" do
|
24
|
+
("z".."a").random.should be_nil
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe String do
|
4
|
+
it "should change a single # to a number 0-9" do
|
5
|
+
(0..9).should include(Integer("#".to_numbers))
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should change two #'s to two numbers 0-9" do
|
9
|
+
"##".to_numbers.split("").each do |s|
|
10
|
+
(0..9).should include(Integer(s))
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should only replace #'s in the string with numbers 0-9" do
|
15
|
+
s = '###-###-####'
|
16
|
+
n = s.to_numbers
|
17
|
+
0.upto(s.size - 1) do |i|
|
18
|
+
if s[i, 1] == "#"
|
19
|
+
('0'..'9').should include(n[i, 1])
|
20
|
+
else
|
21
|
+
('0'..'9').should_not include(n[i, 1])
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should allow the replacing of a different character" do
|
27
|
+
(0..9).should include(Integer("-".to_numbers("-")))
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe FileReader do
|
4
|
+
it "should return an array when calling read_dictionary" do
|
5
|
+
FileReader.read_dictionary(:colors).should be_is_a(Array)
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should return an array when calling read_format" do
|
9
|
+
FileReader.read_format(:phone).should be_is_a(Array)
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe AddressForgery do
|
4
|
+
it "should return a random street" do
|
5
|
+
Forgery.dictionaries[:streets].should include(AddressForgery.street_name)
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should return a random street number" do
|
9
|
+
original_format = AddressForgery.street_number.gsub(/\d/, '#')
|
10
|
+
Forgery.formats[:street_number].should include(original_format)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should return a random street suffix" do
|
14
|
+
Forgery.dictionaries[:street_suffixes].should include(AddressForgery.street_suffix)
|
15
|
+
end
|
16
|
+
|
17
|
+
describe ".street_address" do
|
18
|
+
before do
|
19
|
+
@split_address = AddressForgery.street_address.split
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should return a random street suffix" do
|
23
|
+
street_suffix = @split_address.pop
|
24
|
+
Forgery.dictionaries[:street_suffixes].should include(street_suffix)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should return a random street number" do
|
28
|
+
street_number_format = @split_address.shift.gsub(/\d/, '#')
|
29
|
+
Forgery.formats[:street_number].should include(street_number_format)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should return a random street" do
|
33
|
+
@split_address.pop
|
34
|
+
@split_address.shift
|
35
|
+
street = @split_address.join(" ")
|
36
|
+
Forgery.dictionaries[:streets].should include(street)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should return a random city" do
|
41
|
+
city = AddressForgery.city
|
42
|
+
Forgery.dictionaries[:cities].should include(city)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should return a random state" do
|
46
|
+
state = AddressForgery.state
|
47
|
+
Forgery.dictionaries[:states].should include(state)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "should return a random state abbreviation" do
|
51
|
+
state_abbrev = AddressForgery.state_abbrev
|
52
|
+
Forgery.dictionaries[:state_abbrevs].should include(state_abbrev)
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should return a random Canadian province or territory" do
|
56
|
+
province = AddressForgery.province
|
57
|
+
Forgery.dictionaries[:provinces].should include(province)
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should return a random Canadian province or territory abbreviation" do
|
61
|
+
province_abbrev = AddressForgery.province_abbrev
|
62
|
+
Forgery.dictionaries[:province_abbrevs].should include(province_abbrev)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should return a random country" do
|
66
|
+
country = AddressForgery.country
|
67
|
+
Forgery.dictionaries[:countries].should include(country)
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should return a random zip code" do
|
71
|
+
zip_format = AddressForgery.zip.gsub(/\d/, '#')
|
72
|
+
Forgery.formats[:zip].should include(zip_format)
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should return a random phone number" do
|
76
|
+
phone_format = AddressForgery.phone.gsub(/\d/, '#')
|
77
|
+
Forgery.formats[:phone].should include(phone_format)
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,175 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe BasicForgery do
|
4
|
+
describe ".password" do
|
5
|
+
it "should only uppercase characters" do
|
6
|
+
BasicForgery.password(:allow_lower => false,
|
7
|
+
:allow_upper => true,
|
8
|
+
:allow_numeric => false,
|
9
|
+
:allow_special => false).should only_contain(BasicForgery::UPPER_ALPHA)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should only contain lowercase characters" do
|
13
|
+
BasicForgery.password(:allow_lower => true,
|
14
|
+
:allow_upper => false,
|
15
|
+
:allow_numeric => false,
|
16
|
+
:allow_special => false).should only_contain(BasicForgery::LOWER_ALPHA)
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should only contain numeric characters" do
|
20
|
+
BasicForgery.password(:allow_lower => false,
|
21
|
+
:allow_upper => false,
|
22
|
+
:allow_numeric => true,
|
23
|
+
:allow_special => false).should only_contain(BasicForgery::NUMERIC)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should only contain special characters" do
|
27
|
+
BasicForgery.password(:allow_lower => false,
|
28
|
+
:allow_upper => false,
|
29
|
+
:allow_numeric => false,
|
30
|
+
:allow_special => true).should only_contain(BasicForgery::SPECIAL_CHARACTERS)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should only contain lower and uppercase characters" do
|
34
|
+
BasicForgery.password(:allow_lower => true,
|
35
|
+
:allow_upper => true,
|
36
|
+
:allow_numeric => false,
|
37
|
+
:allow_special => false).should only_contain(BasicForgery::LOWER_ALPHA,
|
38
|
+
BasicForgery::UPPER_ALPHA)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should only contain numeric and special characters" do
|
42
|
+
BasicForgery.password(:allow_lower => false,
|
43
|
+
:allow_upper => false,
|
44
|
+
:allow_numeric => true,
|
45
|
+
:allow_special => true).should only_contain(BasicForgery::NUMERIC,
|
46
|
+
BasicForgery::SPECIAL_CHARACTERS)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should contain any of the defined characters" do
|
50
|
+
BasicForgery.password(:allow_lower => true,
|
51
|
+
:allow_upper => true,
|
52
|
+
:allow_numeric => true,
|
53
|
+
:allow_special => true).should only_contain(BasicForgery::NUMERIC,
|
54
|
+
BasicForgery::SPECIAL_CHARACTERS,
|
55
|
+
BasicForgery::LOWER_ALPHA,
|
56
|
+
BasicForgery::UPPER_ALPHA)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe ".encrypt" do
|
61
|
+
it "should encrypt to hex digits" do
|
62
|
+
BasicForgery.encrypt("something").should only_contain(BasicForgery::HEX_DIGITS)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should encrypt different words to different output" do
|
66
|
+
BasicForgery.encrypt("foo").should_not == BasicForgery.encrypt("bar")
|
67
|
+
end
|
68
|
+
|
69
|
+
it "should allow a salt that changes the output" do
|
70
|
+
BasicForgery.encrypt("foo", "baz").should_not == BasicForgery.encrypt("foo", "bar")
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should have the same output when encrypting twice" do
|
74
|
+
BasicForgery.encrypt("foo", "bar").should == BasicForgery.encrypt("foo", "bar")
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe ".boolean" do
|
79
|
+
it "should return true or false" do
|
80
|
+
[true, false].should include(BasicForgery.boolean)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe ".color" do
|
85
|
+
it "should return a random color" do
|
86
|
+
Forgery.dictionaries[:colors].should include(BasicForgery.color)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe ".hex_color" do
|
91
|
+
it "should return a 6-character hex color" do
|
92
|
+
BasicForgery.hex_color.should match(/#(#{BasicForgery::HEX_DIGITS.join('|')}){6}/)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe ".short_hex_color" do
|
97
|
+
it "should return a 3-character hex color" do
|
98
|
+
BasicForgery.short_hex_color.should match(/#(#{BasicForgery::HEX_DIGITS.join('|')}){3}/)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
describe ".number" do
|
103
|
+
it "should return a number >= the at_least option" do
|
104
|
+
BasicForgery.number(:at_least => 2).should >= 2
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should return a number <= the at_most option" do
|
108
|
+
BasicForgery.number(:at_most => 12).should <= 12
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
describe ".text" do
|
113
|
+
it "should return text whose length is >= the at_least option" do
|
114
|
+
BasicForgery.text(:at_least => 5).size.should >= 5
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should return text whose length is <= the at_most option" do
|
118
|
+
BasicForgery.text(:at_least => 15).size.should <= 15
|
119
|
+
end
|
120
|
+
|
121
|
+
it "should only uppercase characters" do
|
122
|
+
BasicForgery.text(:allow_lower => false,
|
123
|
+
:allow_upper => true,
|
124
|
+
:allow_numeric => false,
|
125
|
+
:allow_special => false).should only_contain(BasicForgery::UPPER_ALPHA)
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should only contain lowercase characters" do
|
129
|
+
BasicForgery.text(:allow_lower => true,
|
130
|
+
:allow_upper => false,
|
131
|
+
:allow_numeric => false,
|
132
|
+
:allow_special => false).should only_contain(BasicForgery::LOWER_ALPHA)
|
133
|
+
end
|
134
|
+
|
135
|
+
it "should only contain numeric characters" do
|
136
|
+
BasicForgery.text(:allow_lower => false,
|
137
|
+
:allow_upper => false,
|
138
|
+
:allow_numeric => true,
|
139
|
+
:allow_special => false).should only_contain(BasicForgery::NUMERIC)
|
140
|
+
end
|
141
|
+
|
142
|
+
it "should only contain special characters" do
|
143
|
+
BasicForgery.text(:allow_lower => false,
|
144
|
+
:allow_upper => false,
|
145
|
+
:allow_numeric => false,
|
146
|
+
:allow_special => true).should only_contain(BasicForgery::SPECIAL_CHARACTERS)
|
147
|
+
end
|
148
|
+
|
149
|
+
it "should only contain lower and uppercase characters" do
|
150
|
+
BasicForgery.text(:allow_lower => true,
|
151
|
+
:allow_upper => true,
|
152
|
+
:allow_numeric => false,
|
153
|
+
:allow_special => false).should only_contain(BasicForgery::LOWER_ALPHA,
|
154
|
+
BasicForgery::UPPER_ALPHA)
|
155
|
+
end
|
156
|
+
|
157
|
+
it "should only contain numeric and special characters" do
|
158
|
+
BasicForgery.text(:allow_lower => false,
|
159
|
+
:allow_upper => false,
|
160
|
+
:allow_numeric => true,
|
161
|
+
:allow_special => true).should only_contain(BasicForgery::NUMERIC,
|
162
|
+
BasicForgery::SPECIAL_CHARACTERS)
|
163
|
+
end
|
164
|
+
|
165
|
+
it "should contain any of the defined characters" do
|
166
|
+
BasicForgery.text(:allow_lower => true,
|
167
|
+
:allow_upper => true,
|
168
|
+
:allow_numeric => true,
|
169
|
+
:allow_special => true).should only_contain(BasicForgery::NUMERIC,
|
170
|
+
BasicForgery::SPECIAL_CHARACTERS,
|
171
|
+
BasicForgery::LOWER_ALPHA,
|
172
|
+
BasicForgery::UPPER_ALPHA)
|
173
|
+
end
|
174
|
+
end
|
175
|
+
end
|