sixarm_ruby_fab 1.0.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.
- checksums.yaml +7 -0
- checksums.yaml.gz.sig +1 -0
- data.tar.gz.sig +0 -0
- data/.gemtest +0 -0
- data/CONTRIBUTING.md +28 -0
- data/README.md +91 -0
- data/Rakefile +8 -0
- data/VERSION +1 -0
- data/lib/sixarm_ruby_fab.rb +40 -0
- data/lib/sixarm_ruby_fab/agent.rb +20 -0
- data/lib/sixarm_ruby_fab/basic.rb +26 -0
- data/lib/sixarm_ruby_fab/company.rb +21 -0
- data/lib/sixarm_ruby_fab/date.rb +45 -0
- data/lib/sixarm_ruby_fab/datetime.rb +44 -0
- data/lib/sixarm_ruby_fab/email.rb +12 -0
- data/lib/sixarm_ruby_fab/files.rb +113 -0
- data/lib/sixarm_ruby_fab/forgery/geo.rb +56 -0
- data/lib/sixarm_ruby_fab/forgery/uri.rb +12 -0
- data/lib/sixarm_ruby_fab/geo.rb +21 -0
- data/lib/sixarm_ruby_fab/id.rb +28 -0
- data/lib/sixarm_ruby_fab/internet.rb +12 -0
- data/lib/sixarm_ruby_fab/locale.rb +34 -0
- data/lib/sixarm_ruby_fab/mime.rb +29 -0
- data/lib/sixarm_ruby_fab/names.rb +30 -0
- data/lib/sixarm_ruby_fab/password.rb +16 -0
- data/lib/sixarm_ruby_fab/phone.rb +12 -0
- data/lib/sixarm_ruby_fab/postal.rb +39 -0
- data/lib/sixarm_ruby_fab/text.rb +58 -0
- data/lib/sixarm_ruby_fab/time.rb +44 -0
- data/lib/sixarm_ruby_fab/twitter.rb +119 -0
- data/lib/sixarm_ruby_fab/username.rb +16 -0
- data/lib/sixarm_ruby_fab/uuid.rb +27 -0
- data/test/sixarm_ruby_fab_test.rb +32 -0
- data/test/sixarm_ruby_fab_test/agent_test.rb +40 -0
- data/test/sixarm_ruby_fab_test/basic_test.rb +35 -0
- data/test/sixarm_ruby_fab_test/company_test.rb +34 -0
- data/test/sixarm_ruby_fab_test/date_test.rb +67 -0
- data/test/sixarm_ruby_fab_test/datetime_test.rb +66 -0
- data/test/sixarm_ruby_fab_test/email_test.rb +22 -0
- data/test/sixarm_ruby_fab_test/files_test.rb +106 -0
- data/test/sixarm_ruby_fab_test/forgery/geo_test.rb +0 -0
- data/test/sixarm_ruby_fab_test/forgery/uri_test.rb +0 -0
- data/test/sixarm_ruby_fab_test/geo_test.rb +34 -0
- data/test/sixarm_ruby_fab_test/id_test.rb +34 -0
- data/test/sixarm_ruby_fab_test/internet_test.rb +23 -0
- data/test/sixarm_ruby_fab_test/locale_test.rb +51 -0
- data/test/sixarm_ruby_fab_test/mime_test.rb +41 -0
- data/test/sixarm_ruby_fab_test/names_test.rb +47 -0
- data/test/sixarm_ruby_fab_test/password_test.rb +26 -0
- data/test/sixarm_ruby_fab_test/phone_test.rb +22 -0
- data/test/sixarm_ruby_fab_test/postal_test.rb +58 -0
- data/test/sixarm_ruby_fab_test/text_test.rb +58 -0
- data/test/sixarm_ruby_fab_test/time_test.rb +66 -0
- data/test/sixarm_ruby_fab_test/twitter_test.rb +98 -0
- data/test/sixarm_ruby_fab_test/username_test.rb +58 -0
- data/test/sixarm_ruby_fab_test/uuid_test.rb +34 -0
- metadata +159 -0
- metadata.gz.sig +3 -0
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'forgery'
|
2
|
+
|
3
|
+
# Generates random geographic information.
|
4
|
+
class Forgery::Geo < Forgery
|
5
|
+
|
6
|
+
# Return a latitude in the range -90.0 to +90.0 as a float.
|
7
|
+
def self.latitude
|
8
|
+
rand * 180.0 - 90.0
|
9
|
+
end
|
10
|
+
|
11
|
+
# Return a latitude's degrees component in the range -180 to +180 as an integer.
|
12
|
+
def self.latitude_degrees
|
13
|
+
rand(360)-180
|
14
|
+
end
|
15
|
+
|
16
|
+
# Return a latitude's minutes component in the range 0 to 60 as an integer.
|
17
|
+
def self.latitude_minutes
|
18
|
+
rand(60)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Return a latitude's seconds component in the range 0 to 60 as an integer.
|
22
|
+
def self.latitude_seconds
|
23
|
+
rand(60)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Return a latitude's direction component, either "N" (north) or "S" (south)
|
27
|
+
def self.latitude_direction
|
28
|
+
['N','S'].sample
|
29
|
+
end
|
30
|
+
|
31
|
+
# Return a longitude in the range -180.0 to +180.0 as a float.
|
32
|
+
def self.longitude
|
33
|
+
rand * 360.0 - 180.0
|
34
|
+
end
|
35
|
+
|
36
|
+
# Return a longitude's degrees component in the range -180 to +180 as an integer.
|
37
|
+
def self.longitude_degrees
|
38
|
+
rand(360)-180
|
39
|
+
end
|
40
|
+
|
41
|
+
# Return a longitude's minutes component in the range 0 to 60 as an integer.
|
42
|
+
def self.longitude_minutes
|
43
|
+
rand(60)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Return a longitude's seconds component in the range 0 to 60 as an integer.
|
47
|
+
def self.longitude_seconds
|
48
|
+
rand(60)
|
49
|
+
end
|
50
|
+
|
51
|
+
# Return a longitude's direction component, either "E" (east) or "W" (west)
|
52
|
+
def self.longitude_direction
|
53
|
+
["E","W"].sample
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'forgery'
|
2
|
+
# Generates random Interet URI information.
|
3
|
+
class Forgery::Internet < Forgery
|
4
|
+
|
5
|
+
# Return a latitude in the range -90.0 to +90.0 as a float.
|
6
|
+
def self.uri
|
7
|
+
ext = ['com','net','org','edu','gov','mil','au','br','cn','in','it','mx','jp','com.uk','com.au','com.ca'].sample
|
8
|
+
host = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9'].sample(rand(5)+15).join
|
9
|
+
return "http://#{host}.#{ext}"
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class Fab
|
2
|
+
|
3
|
+
# Fab a random latitude.
|
4
|
+
# Delegate to Forgery::Geo.latitude.
|
5
|
+
#
|
6
|
+
# @returns [Float] a random latitude
|
7
|
+
#
|
8
|
+
def latitude
|
9
|
+
Forgery::Geo.latitude
|
10
|
+
end
|
11
|
+
|
12
|
+
# Fab a random longitude.
|
13
|
+
# Delegate to Forgery::Geo.longitude.
|
14
|
+
#
|
15
|
+
# @returns [Float] a random longitude
|
16
|
+
#
|
17
|
+
def longitude
|
18
|
+
Forgery::Geo.longitude
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class Fab
|
2
|
+
|
3
|
+
# Fab a random id.
|
4
|
+
#
|
5
|
+
# Options:
|
6
|
+
#
|
7
|
+
# * min: 1
|
8
|
+
# * max: 30000
|
9
|
+
#
|
10
|
+
# @returns [Fixnum] a random id
|
11
|
+
#
|
12
|
+
def id(options = {})
|
13
|
+
rand((options[:min] || 1)..(options[:max] || 30000))
|
14
|
+
end
|
15
|
+
|
16
|
+
# Fab a list of random ids.
|
17
|
+
#
|
18
|
+
# Options:
|
19
|
+
#
|
20
|
+
# * size: 3
|
21
|
+
#
|
22
|
+
# @returns [Array[Fixnum]] a list of random ids
|
23
|
+
#
|
24
|
+
def ids(options = {})
|
25
|
+
(options[:size] || 3).times.map{ id(options) }
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class Fab
|
2
|
+
|
3
|
+
LANGUAGE_CODE_ISO6391_LIST = [
|
4
|
+
'en', # English
|
5
|
+
'fr', # French
|
6
|
+
'de', # German
|
7
|
+
'ja', # Japanese
|
8
|
+
]
|
9
|
+
|
10
|
+
attr_accessor :language_code_iso6391_list
|
11
|
+
|
12
|
+
# Fab a language code e.g. "en" for English.
|
13
|
+
# Delegates to #language_code_iso6391
|
14
|
+
#
|
15
|
+
# @returns [String] a random language code
|
16
|
+
#
|
17
|
+
def language_code(options = {})
|
18
|
+
language_code_iso6391(options)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Fab a language code e.g. "en" for English.
|
22
|
+
# Samples from LANGUAGE_CODE_ISO6391_LIST.
|
23
|
+
#
|
24
|
+
# @returns [String] a random language code
|
25
|
+
#
|
26
|
+
def language_code_iso6391(options = {})
|
27
|
+
LANGUAGE_CODE_ISO6391_LIST.sample
|
28
|
+
end
|
29
|
+
|
30
|
+
def language_code_iso6391_list
|
31
|
+
@language_code_iso6391_list ||= LANGUAGE_CODE_ISO6391_LIST
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
class Fab
|
2
|
+
|
3
|
+
# Fab a random content type part e.g. "image/jpeg".
|
4
|
+
#
|
5
|
+
# Options:
|
6
|
+
#
|
7
|
+
# * chars: a..z
|
8
|
+
# * size: rand(1..20) [per part]
|
9
|
+
#
|
10
|
+
# @returns [String] a content type
|
11
|
+
#
|
12
|
+
def content_type(options = {})
|
13
|
+
"#{content_type_part(options)}/#{content_type_part(options)}"
|
14
|
+
end
|
15
|
+
|
16
|
+
# Fab a random content type part e.g. "image".
|
17
|
+
#
|
18
|
+
# Options:
|
19
|
+
#
|
20
|
+
# * chars: a..z
|
21
|
+
# * size: rand(1..20)
|
22
|
+
#
|
23
|
+
# @returns [String] a content type part
|
24
|
+
#
|
25
|
+
def content_type_part(options = {})
|
26
|
+
(options[:chars] || AZ).sample(options[:size] || rand(1..20)).join
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class Fab
|
2
|
+
|
3
|
+
# Fab a random given name.
|
4
|
+
# Delegates to Forgery::Name.first_name
|
5
|
+
#
|
6
|
+
# @returns [String] a random given name
|
7
|
+
#
|
8
|
+
def given_name
|
9
|
+
Forgery::Name.first_name
|
10
|
+
end
|
11
|
+
|
12
|
+
# Fab a random middle name.
|
13
|
+
# Delegates to Forgery::Name.first_name
|
14
|
+
#
|
15
|
+
# @returns [String] a random middle name
|
16
|
+
#
|
17
|
+
def middle_name
|
18
|
+
Forgery::Name.first_name
|
19
|
+
end
|
20
|
+
|
21
|
+
# Fab a random last name.
|
22
|
+
# Delegates to Forgery::Name.last_name
|
23
|
+
#
|
24
|
+
# @returns [String] a random last name
|
25
|
+
#
|
26
|
+
def family_name
|
27
|
+
Forgery::Name.last_name
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class Fab
|
2
|
+
|
3
|
+
# Fab a random password.
|
4
|
+
#
|
5
|
+
# Options:
|
6
|
+
#
|
7
|
+
# * chars: a..z
|
8
|
+
# * size: rand(9..40)
|
9
|
+
#
|
10
|
+
# @returns [String] a random password
|
11
|
+
#
|
12
|
+
def password(options = {})
|
13
|
+
(options[:chars] || AZ).sample(options[:size] || rand(9..40)).join
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class Fab
|
2
|
+
|
3
|
+
# Fab a random street address.
|
4
|
+
# Delegates to Forgery::Address.street_address.
|
5
|
+
#
|
6
|
+
# @returns [String] a random street address
|
7
|
+
#
|
8
|
+
def street_address
|
9
|
+
Forgery::Address.street_address
|
10
|
+
end
|
11
|
+
|
12
|
+
# Fab a random city string.
|
13
|
+
# Delegates to Forgery::Address.city
|
14
|
+
#
|
15
|
+
# @returns [String] a random city
|
16
|
+
#
|
17
|
+
def city
|
18
|
+
Forgery::Address.city
|
19
|
+
end
|
20
|
+
|
21
|
+
# Fab a random US state abbreviation.
|
22
|
+
# Delegates to Forgery::Address.state_abbrev.
|
23
|
+
#
|
24
|
+
# @returns [String] a random US state abbreviation
|
25
|
+
#
|
26
|
+
def usstate
|
27
|
+
Forgery::Address.state_abbrev
|
28
|
+
end
|
29
|
+
|
30
|
+
# Fab a random US zip code.
|
31
|
+
# Delegates to Forgery::Address.zip.
|
32
|
+
#
|
33
|
+
# @returns [String] a random US zip code
|
34
|
+
#
|
35
|
+
def uszip
|
36
|
+
Forgery::Address.zip
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
class Fab
|
2
|
+
|
3
|
+
NAME_CHARS = "aabcdeeefghiijklmnoopqrrssttuuvwxyz".split(//)
|
4
|
+
NOTE_CHARS = "aabcdeeefghiijklmnoopqrrssttuuvwxyz ..,,;;-+'*".split(//)
|
5
|
+
|
6
|
+
# Fab a random name.
|
7
|
+
#
|
8
|
+
# Options:
|
9
|
+
#
|
10
|
+
# * chars: NAME_CHARS
|
11
|
+
# * size: rand(10..30) [actual size may be less because we strip the string]
|
12
|
+
#
|
13
|
+
# @returns [String] a random name
|
14
|
+
#
|
15
|
+
def name(options = {})
|
16
|
+
(options[:chars] || NAME_CHARS).sample(options[:size] || rand(10..30)).join.strip
|
17
|
+
end
|
18
|
+
|
19
|
+
# Fab a random note.
|
20
|
+
#
|
21
|
+
# Options:
|
22
|
+
#
|
23
|
+
# * chars: NOTE_CHARS
|
24
|
+
# * size: rand(1..200) [actual size may be less because we strip the string]
|
25
|
+
#
|
26
|
+
# @returns [String] a random name
|
27
|
+
#
|
28
|
+
def note(options = {})
|
29
|
+
(options[:chars] || NOTE_CHARS).sample(options[:size] || rand(1..200)).join.strip
|
30
|
+
end
|
31
|
+
|
32
|
+
# Fab a random note.
|
33
|
+
#
|
34
|
+
# Options:
|
35
|
+
#
|
36
|
+
# * chars: NOTE_CHARS
|
37
|
+
# * size: rand(20..200) [actual size may be less because we strip the string]
|
38
|
+
#
|
39
|
+
# @returns [String] a random description
|
40
|
+
#
|
41
|
+
def description(options = {})
|
42
|
+
(options[:chars] || NOTE_CHARS).sample(options[:size] || rand(20..200)).join.strip
|
43
|
+
end
|
44
|
+
|
45
|
+
# Fab a random lorem ipsum string.
|
46
|
+
#
|
47
|
+
# Options:
|
48
|
+
#
|
49
|
+
# * chars: NOTE_CHARS
|
50
|
+
# * size: rand(20..200) [actual size may be less because we strip the string]
|
51
|
+
#
|
52
|
+
# @returns [String] a random description
|
53
|
+
#
|
54
|
+
def lorem(options = {})
|
55
|
+
(options[:chars] || NOTE_CHARS).sample(options[:size] || rand(20..200)).join.strip
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
class Fab
|
2
|
+
|
3
|
+
# Fab a random time.
|
4
|
+
#
|
5
|
+
# Options:
|
6
|
+
#
|
7
|
+
# * min: now - 1000
|
8
|
+
# * max: now + 1000
|
9
|
+
#
|
10
|
+
# @returns [Time] a random time min..max
|
11
|
+
#
|
12
|
+
def time(options = {})
|
13
|
+
rand((options[:min] || Time.now - 1000)..(options[:max] || Time.now + 1000))
|
14
|
+
end
|
15
|
+
|
16
|
+
# Fab a random start time.
|
17
|
+
# Delegates to #time.
|
18
|
+
#
|
19
|
+
# @returns [Time] a random time min..max
|
20
|
+
#
|
21
|
+
def start_time(options = {})
|
22
|
+
time(options)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Fab a random stop time.
|
26
|
+
# Delegates to #time.
|
27
|
+
#
|
28
|
+
# @returns [Time] a random time min..max
|
29
|
+
#
|
30
|
+
def stop_time(options = {})
|
31
|
+
time(options)
|
32
|
+
end
|
33
|
+
|
34
|
+
# Fab a random start time and stop time.
|
35
|
+
# The start is less than or equal to the stop.
|
36
|
+
# Delegates to #start_time and #stop_time.
|
37
|
+
#
|
38
|
+
# @returns [Time,Time] a random [start time, stop time] from min..max
|
39
|
+
#
|
40
|
+
def start_time_and_stop_time(options = {})
|
41
|
+
[start_time(options), stop_time(options)].sort
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -0,0 +1,119 @@
|
|
1
|
+
class Fab
|
2
|
+
|
3
|
+
# Fab a Twitter screen name.
|
4
|
+
# This delegates to Fab.username.
|
5
|
+
#
|
6
|
+
# Options:
|
7
|
+
#
|
8
|
+
# * none
|
9
|
+
#
|
10
|
+
# @return [Fixnum] a screen name
|
11
|
+
#
|
12
|
+
def twitter_screen_name(options = {})
|
13
|
+
username(options)
|
14
|
+
end
|
15
|
+
|
16
|
+
# Fab a Twitter user id.
|
17
|
+
#
|
18
|
+
# Options:
|
19
|
+
#
|
20
|
+
# * min
|
21
|
+
# * max
|
22
|
+
#
|
23
|
+
# @return [Fixnum] a user id
|
24
|
+
#
|
25
|
+
def twitter_user_id(options = {})
|
26
|
+
rand((options[:min] || 10000000)..(options[:max] || 100000000))
|
27
|
+
end
|
28
|
+
|
29
|
+
# Fab a Twitter user hash.
|
30
|
+
#
|
31
|
+
# Options:
|
32
|
+
#
|
33
|
+
# * any; merge this hash into the user hash.
|
34
|
+
#
|
35
|
+
# @return [Hash] a Twitter user hash
|
36
|
+
#
|
37
|
+
def twitter_user_hash(options = {})
|
38
|
+
id = options[:id] || options["id"] || twitter_user_id
|
39
|
+
{
|
40
|
+
"id" => id.to_i,
|
41
|
+
"id_str" => id.to_s
|
42
|
+
}.merge(options)
|
43
|
+
end
|
44
|
+
|
45
|
+
# Fab a Twitter retweet count.
|
46
|
+
#
|
47
|
+
# Options:
|
48
|
+
#
|
49
|
+
# * min: 0
|
50
|
+
# * max: 999
|
51
|
+
#
|
52
|
+
# @return [Fixnum] a retweet count
|
53
|
+
#
|
54
|
+
def twitter_retweet_count(options = {})
|
55
|
+
rand((options[:min] || 0)..(options[:max] || 999))
|
56
|
+
end
|
57
|
+
|
58
|
+
# Fab a Twitter favorite count.
|
59
|
+
#
|
60
|
+
# Options:
|
61
|
+
#
|
62
|
+
# * min: 0
|
63
|
+
# * max: 999
|
64
|
+
#
|
65
|
+
# @return [Fixnum] a favorite count
|
66
|
+
#
|
67
|
+
def twitter_favorite_count(options = {})
|
68
|
+
rand((options[:min] || 0)..(options[:max] || 999))
|
69
|
+
end
|
70
|
+
|
71
|
+
# Fab a Twitter tweet id.
|
72
|
+
#
|
73
|
+
# Options:
|
74
|
+
#
|
75
|
+
# * min: 1000000000
|
76
|
+
# * max: 9000000000
|
77
|
+
#
|
78
|
+
# @return [Fixnum] a tweet id
|
79
|
+
#
|
80
|
+
def twitter_tweet_id(options = {})
|
81
|
+
rand((options[:min] || 1000000000)..(options[:max] || 9000000000))
|
82
|
+
end
|
83
|
+
|
84
|
+
# Fab a Twitter tweet hash.
|
85
|
+
#
|
86
|
+
# Options:
|
87
|
+
#
|
88
|
+
# * any; merge this hash into the tweet hash.
|
89
|
+
#
|
90
|
+
# @return [Hash] a tweet hash
|
91
|
+
#
|
92
|
+
def twitter_tweet_hash(options={})
|
93
|
+
id = options[:id] || options["id"] || Fab.twitter_tweet_id
|
94
|
+
{
|
95
|
+
"created_at" => Fab.time.httpdate,
|
96
|
+
"id" => id.to_i,
|
97
|
+
"id_str" => id.to_s,
|
98
|
+
"text" => Fab.lorem,
|
99
|
+
"source" => "web",
|
100
|
+
"truncated" => false,
|
101
|
+
"in_reply_to_status_id" => nil,
|
102
|
+
"in_reply_to_status_id_str" => nil,
|
103
|
+
"in_reply_to_user_id" => nil,
|
104
|
+
"in_reply_to_user_id_str" => nil,
|
105
|
+
"in_reply_to_screen_name" => nil,
|
106
|
+
"user" => Fab.twitter_user_hash,
|
107
|
+
"geo" => nil,
|
108
|
+
"coordinates" => nil,
|
109
|
+
"place" => nil,
|
110
|
+
"contributors" => nil,
|
111
|
+
"retweet_count" => Fab.twitter_retweet_count,
|
112
|
+
"favorite_count" => Fab.twitter_favorite_count,
|
113
|
+
"favorited" => Fab.boolean,
|
114
|
+
"retweeted" => Fab.boolean,
|
115
|
+
"lang" => Fab.language_code
|
116
|
+
}.merge(options)
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|