randomizer 0.0.1 → 0.0.2
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/.gitignore +1 -0
- data/LICENSE +20 -0
- data/README.rdoc +30 -32
- data/Rakefile +57 -27
- data/VERSION +1 -0
- data/data/female_first_names.txt +564 -0
- data/data/last_names.txt +2999 -0
- data/data/male_first_names.txt +564 -0
- data/data/text/aesop.txt +4776 -0
- data/data/text/alice_in_wonderland.txt +3718 -0
- data/data/text/lorem_ipsum.txt +99 -0
- data/data/text/the_adventures_of_sherlock_holmes.txt +12987 -0
- data/features/randomizer.feature +9 -0
- data/features/step_definitions/randomizer_steps.rb +0 -0
- data/features/support/env.rb +3 -13
- data/lib/randomizer.rb +5 -11
- data/lib/randomizer/all_avatars_site.rb +37 -0
- data/lib/randomizer/markov_text_generator.rb +73 -0
- data/lib/randomizer/name_generator.rb +34 -0
- data/lib/randomizer/random_user.rb +74 -0
- data/randomizer.gemspec +71 -0
- data/spec/randomizer_spec.rb +4 -8
- data/spec/spec.opts +1 -1
- data/spec/spec_helper.rb +8 -9
- metadata +43 -29
- data/History.txt +0 -4
- data/Manifest.txt +0 -18
- data/PostInstall.txt +0 -7
- data/features/development.feature +0 -13
- data/features/step_definitions/common_steps.rb +0 -163
- data/features/support/common.rb +0 -29
- data/features/support/matchers.rb +0 -11
- data/script/console +0 -10
- data/script/destroy +0 -14
- data/script/generate +0 -14
- data/tasks/rspec.rake +0 -21
File without changes
|
data/features/support/env.rb
CHANGED
@@ -1,14 +1,4 @@
|
|
1
|
-
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
|
2
|
+
require 'randomizer'
|
2
3
|
|
3
|
-
|
4
|
-
require 'cucumber'
|
5
|
-
gem 'rspec'
|
6
|
-
require 'spec'
|
7
|
-
|
8
|
-
Before do
|
9
|
-
@tmp_root = File.dirname(__FILE__) + "/../../tmp"
|
10
|
-
@home_path = File.expand_path(File.join(@tmp_root, "home"))
|
11
|
-
FileUtils.rm_rf @tmp_root
|
12
|
-
FileUtils.mkdir_p @home_path
|
13
|
-
ENV['HOME'] = @home_path
|
14
|
-
end
|
4
|
+
require 'spec/expectations'
|
data/lib/randomizer.rb
CHANGED
@@ -1,10 +1,3 @@
|
|
1
|
-
$:.unshift(File.dirname(__FILE__)) unless
|
2
|
-
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
|
-
|
4
|
-
module Randomizer
|
5
|
-
VERSION = '0.0.1'
|
6
|
-
end
|
7
|
-
|
8
1
|
class Array
|
9
2
|
def random
|
10
3
|
self[Kernel.rand(size)]
|
@@ -13,7 +6,8 @@ end
|
|
13
6
|
|
14
7
|
DB_DIR = File.join(File.dirname(__FILE__), '..', 'data')
|
15
8
|
|
16
|
-
|
17
|
-
|
18
|
-
require 'randomizer
|
19
|
-
|
9
|
+
|
10
|
+
%w(all_avatars_site random_user name_generator markov_text_generator).each do |file|
|
11
|
+
require File.join(File.dirname(__FILE__), 'randomizer', file)
|
12
|
+
end
|
13
|
+
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'hpricot'
|
4
|
+
|
5
|
+
class AllAvatarsSite
|
6
|
+
|
7
|
+
def self.instance
|
8
|
+
@@instance ||= AllAvatarsSite.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@unused_avatar_urls = []
|
13
|
+
@used_avatar_urls = []
|
14
|
+
end
|
15
|
+
|
16
|
+
def load_urls
|
17
|
+
while @unused_avatar_urls.empty?
|
18
|
+
path = "/avatars/showgallery.php?si=&perpage=18&sort=6&cat=all&ppuser="
|
19
|
+
response = Net::HTTP.get_response("www.allavatars.com", path).body
|
20
|
+
doc = Hpricot(response)
|
21
|
+
doc.search("img") do |img|
|
22
|
+
source = img.attributes['src']
|
23
|
+
if source =~ %r{http://www.allavatars.com/avatars/data/.*} && !@used_avatar_urls.member?(source)
|
24
|
+
@unused_avatar_urls << source
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def random_url
|
31
|
+
load_urls if @unused_avatar_urls.empty?
|
32
|
+
url = @unused_avatar_urls.pop
|
33
|
+
@used_avatar_urls << url
|
34
|
+
url
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# Adapted from the famous shaney.py by Greg McFarlane
|
2
|
+
|
3
|
+
#DEFAULT_SOURCE_TEXT = File.readlines(File.join(DB_DIR, 'text', 'alice_in_wonderland.txt')).join
|
4
|
+
#DEFAULT_SOURCE_TEXT = File.readlines(File.join(DB_DIR, 'text', 'the_wall_street_girl.txt')).join
|
5
|
+
#DEFAULT_SOURCE_TEXT = File.readlines(File.join(DB_DIR, 'text', 'the_adventures_of_sherlock_holmes.txt')).join
|
6
|
+
#DEFAULT_SOURCE_TEXT = File.readlines(File.join(DB_DIR, 'text', 'lorem_ipsum.txt')).join
|
7
|
+
DEFAULT_SOURCE_TEXT = File.readlines(File.join(DB_DIR, 'text', 'aesop.txt')).join
|
8
|
+
|
9
|
+
class MarkovTextGenerator
|
10
|
+
|
11
|
+
def self.instance
|
12
|
+
@@instance ||= MarkovTextGenerator.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(text = DEFAULT_SOURCE_TEXT)
|
16
|
+
text = remove_gutenberg_text(text)
|
17
|
+
words = text.split
|
18
|
+
|
19
|
+
@end_sentence = []
|
20
|
+
@dict = {}
|
21
|
+
prev1 = ''
|
22
|
+
prev2 = ''
|
23
|
+
for word in words
|
24
|
+
if prev1 != '' && prev2 != ''
|
25
|
+
key = [prev2, prev1]
|
26
|
+
if @dict.key?(key):
|
27
|
+
@dict[key] << word
|
28
|
+
else
|
29
|
+
@dict[key] = [word]
|
30
|
+
@end_sentence << key if prev1[-1, 1] == '.'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
prev2 = prev1
|
34
|
+
prev1 = word
|
35
|
+
end
|
36
|
+
|
37
|
+
raise 'Sorry, there are no sentences in the text.' if @end_sentence.empty?
|
38
|
+
|
39
|
+
true
|
40
|
+
end
|
41
|
+
|
42
|
+
def remove_gutenberg_text(text)
|
43
|
+
text = text.sub(/^.*[*]{3} START OF THIS PROJECT GUTENBERG .*? [*]{3}/m, '')
|
44
|
+
text = text.sub(/End of the Project Gutenberg.*$/im, '')
|
45
|
+
text = text.sub(/End of Project Gutenberg.*$/im, '')
|
46
|
+
text = text.gsub(/(\n|\r)[A-Z '"]+(\n|\r)/m, '')
|
47
|
+
text = text.gsub(/_/, '')
|
48
|
+
text = text.gsub(/\[Illustration.*?\]/, '')
|
49
|
+
end
|
50
|
+
|
51
|
+
def random(sentence_count = 10)
|
52
|
+
results = []
|
53
|
+
key = nil
|
54
|
+
|
55
|
+
while true
|
56
|
+
if @dict.key?(key)
|
57
|
+
word = @dict[key].random
|
58
|
+
results << word
|
59
|
+
key = [key.last, word]
|
60
|
+
if @end_sentence.include?(key)
|
61
|
+
results << ''
|
62
|
+
sentence_count -= 1
|
63
|
+
break if sentence_count <= 0
|
64
|
+
end
|
65
|
+
else
|
66
|
+
key = @end_sentence.random
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
results.join(' ')
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class NameGenerator
|
2
|
+
|
3
|
+
def self.instance
|
4
|
+
@@instance ||= NameGenerator.new
|
5
|
+
end
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@female_first_names = parse_name_file('female_first_names.txt') # Top 500 female names.
|
9
|
+
@male_first_names = parse_name_file('male_first_names.txt') # Top 500 male names.
|
10
|
+
@last_names = parse_name_file('last_names.txt') # Top 3000 last names.
|
11
|
+
@first_names = @female_first_names + @male_first_names
|
12
|
+
end
|
13
|
+
|
14
|
+
def parse_name_file(filename)
|
15
|
+
File.readlines(File.join(DB_DIR, filename)).collect {|line| line.strip}
|
16
|
+
end
|
17
|
+
|
18
|
+
def random(options = {})
|
19
|
+
[random_first_name(options), random_last_name(options)]
|
20
|
+
end
|
21
|
+
|
22
|
+
def random_first_name(options = {})
|
23
|
+
case options[:gender]
|
24
|
+
when 'm', 'male' then @male_first_names.random
|
25
|
+
when 'f', 'female' then @female_first_names.random
|
26
|
+
else @first_names.random
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def random_last_name(options = {})
|
31
|
+
@last_names.random
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
PASSWORD_CHARACTERS = ('a'..'z').to_a + ('A'..'Z').to_a + ('0'..'9').to_a
|
2
|
+
EMAIL_DOMAINS = %w{gmail.com hotmail.com aol.com aim.com yahoo.com msn.com comcast.net sbcglobal.net bellsouth.net verizon.net earthlink.net cox.net rediffmail.com charter.net ntlworld.com}
|
3
|
+
|
4
|
+
class RandomUser
|
5
|
+
attr_reader :first_name, :last_name
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
names = NameGenerator.instance.random
|
9
|
+
@first_name = names.first
|
10
|
+
@last_name = names.last
|
11
|
+
end
|
12
|
+
|
13
|
+
def full_name
|
14
|
+
@full_name ||= [@first_name, @last_name].join(' ')
|
15
|
+
end
|
16
|
+
|
17
|
+
#
|
18
|
+
# AVATAR
|
19
|
+
#
|
20
|
+
|
21
|
+
def avatar_url
|
22
|
+
@avatar_url ||= AllAvatarsSite.instance.random_url
|
23
|
+
end
|
24
|
+
|
25
|
+
#
|
26
|
+
# PASSWORD
|
27
|
+
#
|
28
|
+
|
29
|
+
def password
|
30
|
+
@password ||= random_password
|
31
|
+
end
|
32
|
+
|
33
|
+
def random_password
|
34
|
+
Array.new(8, '').collect{PASSWORD_CHARACTERS.random}.join
|
35
|
+
end
|
36
|
+
|
37
|
+
#
|
38
|
+
# NICKNAME
|
39
|
+
#
|
40
|
+
|
41
|
+
def nickname
|
42
|
+
@nickname || regenerate_nickname
|
43
|
+
end
|
44
|
+
|
45
|
+
def regenerate_nickname
|
46
|
+
@nickname = random_nickname
|
47
|
+
end
|
48
|
+
|
49
|
+
def random_nickname
|
50
|
+
RandomUser.nicknames(@first_name, @last_name).random
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.nicknames(first, last)
|
54
|
+
first, last = first.downcase, last.downcase
|
55
|
+
[first, last, first[0..0] + last, first + last[0..0], first + last, first + '2', first + '3']
|
56
|
+
end
|
57
|
+
|
58
|
+
#
|
59
|
+
# EMAIL ADDRESS
|
60
|
+
#
|
61
|
+
|
62
|
+
def email
|
63
|
+
@email || regenerate_email
|
64
|
+
end
|
65
|
+
|
66
|
+
def regenerate_email
|
67
|
+
@email = random_nickname + '@' + random_email_domain
|
68
|
+
end
|
69
|
+
|
70
|
+
def random_email_domain
|
71
|
+
EMAIL_DOMAINS.random
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
data/randomizer.gemspec
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{randomizer}
|
8
|
+
s.version = "0.0.2"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Paul Canavese"]
|
12
|
+
s.date = %q{2009-11-20}
|
13
|
+
s.description = %q{}
|
14
|
+
s.email = %q{paul@canavese.org}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README.rdoc"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".gitignore",
|
21
|
+
"LICENSE",
|
22
|
+
"README.rdoc",
|
23
|
+
"Rakefile",
|
24
|
+
"VERSION",
|
25
|
+
"data/female_first_names.txt",
|
26
|
+
"data/last_names.txt",
|
27
|
+
"data/male_first_names.txt",
|
28
|
+
"data/text/aesop.txt",
|
29
|
+
"data/text/alice_in_wonderland.txt",
|
30
|
+
"data/text/lorem_ipsum.txt",
|
31
|
+
"data/text/the_adventures_of_sherlock_holmes.txt",
|
32
|
+
"features/randomizer.feature",
|
33
|
+
"features/step_definitions/randomizer_steps.rb",
|
34
|
+
"features/support/env.rb",
|
35
|
+
"lib/randomizer.rb",
|
36
|
+
"lib/randomizer/all_avatars_site.rb",
|
37
|
+
"lib/randomizer/markov_text_generator.rb",
|
38
|
+
"lib/randomizer/name_generator.rb",
|
39
|
+
"lib/randomizer/random_user.rb",
|
40
|
+
"randomizer.gemspec",
|
41
|
+
"spec/randomizer_spec.rb",
|
42
|
+
"spec/spec.opts",
|
43
|
+
"spec/spec_helper.rb"
|
44
|
+
]
|
45
|
+
s.homepage = %q{http://github.com/canavese/randomizer}
|
46
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
47
|
+
s.require_paths = ["lib"]
|
48
|
+
s.rubygems_version = %q{1.3.5}
|
49
|
+
s.summary = %q{Generates random test data}
|
50
|
+
s.test_files = [
|
51
|
+
"spec/randomizer_spec.rb",
|
52
|
+
"spec/spec_helper.rb"
|
53
|
+
]
|
54
|
+
|
55
|
+
if s.respond_to? :specification_version then
|
56
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
57
|
+
s.specification_version = 3
|
58
|
+
|
59
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
60
|
+
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
61
|
+
s.add_development_dependency(%q<cucumber>, [">= 0"])
|
62
|
+
else
|
63
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
64
|
+
s.add_dependency(%q<cucumber>, [">= 0"])
|
65
|
+
end
|
66
|
+
else
|
67
|
+
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
68
|
+
s.add_dependency(%q<cucumber>, [">= 0"])
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
data/spec/randomizer_spec.rb
CHANGED
@@ -1,11 +1,7 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/spec_helper
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
it "find this spec in spec directory" do
|
8
|
-
# violated "Be sure to write your specs"
|
3
|
+
describe "Randomizer" do
|
4
|
+
it "fails" do
|
5
|
+
fail "hey buddy, you should probably rename this file and start specing for real"
|
9
6
|
end
|
10
|
-
|
11
7
|
end
|
data/spec/spec.opts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
--
|
1
|
+
--color
|
data/spec/spec_helper.rb
CHANGED
@@ -1,10 +1,9 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
rescue LoadError
|
4
|
-
require 'rubygems' unless ENV['NO_RUBYGEMS']
|
5
|
-
gem 'rspec'
|
6
|
-
require 'spec'
|
7
|
-
end
|
8
|
-
|
9
|
-
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
10
3
|
require 'randomizer'
|
4
|
+
require 'spec'
|
5
|
+
require 'spec/autorun'
|
6
|
+
|
7
|
+
Spec::Runner.configure do |config|
|
8
|
+
|
9
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: randomizer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Canavese
|
@@ -9,57 +9,70 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-11-20 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
16
|
+
name: rspec
|
17
17
|
type: :development
|
18
18
|
version_requirement:
|
19
19
|
version_requirements: !ruby/object:Gem::Requirement
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: 2.
|
23
|
+
version: 1.2.9
|
24
24
|
version:
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: cucumber
|
27
|
+
type: :development
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
34
|
+
version:
|
35
|
+
description: ""
|
36
|
+
email: paul@canavese.org
|
28
37
|
executables: []
|
29
38
|
|
30
39
|
extensions: []
|
31
40
|
|
32
41
|
extra_rdoc_files:
|
33
|
-
-
|
34
|
-
-
|
35
|
-
- PostInstall.txt
|
42
|
+
- LICENSE
|
43
|
+
- README.rdoc
|
36
44
|
files:
|
37
|
-
-
|
38
|
-
-
|
39
|
-
- PostInstall.txt
|
45
|
+
- .gitignore
|
46
|
+
- LICENSE
|
40
47
|
- README.rdoc
|
41
48
|
- Rakefile
|
42
|
-
-
|
43
|
-
-
|
44
|
-
-
|
49
|
+
- VERSION
|
50
|
+
- data/female_first_names.txt
|
51
|
+
- data/last_names.txt
|
52
|
+
- data/male_first_names.txt
|
53
|
+
- data/text/aesop.txt
|
54
|
+
- data/text/alice_in_wonderland.txt
|
55
|
+
- data/text/lorem_ipsum.txt
|
56
|
+
- data/text/the_adventures_of_sherlock_holmes.txt
|
57
|
+
- features/randomizer.feature
|
58
|
+
- features/step_definitions/randomizer_steps.rb
|
45
59
|
- features/support/env.rb
|
46
|
-
- features/support/matchers.rb
|
47
60
|
- lib/randomizer.rb
|
48
|
-
-
|
49
|
-
-
|
50
|
-
-
|
61
|
+
- lib/randomizer/all_avatars_site.rb
|
62
|
+
- lib/randomizer/markov_text_generator.rb
|
63
|
+
- lib/randomizer/name_generator.rb
|
64
|
+
- lib/randomizer/random_user.rb
|
65
|
+
- randomizer.gemspec
|
51
66
|
- spec/randomizer_spec.rb
|
52
67
|
- spec/spec.opts
|
53
68
|
- spec/spec_helper.rb
|
54
|
-
- tasks/rspec.rake
|
55
69
|
has_rdoc: true
|
56
70
|
homepage: http://github.com/canavese/randomizer
|
57
71
|
licenses: []
|
58
72
|
|
59
|
-
post_install_message:
|
73
|
+
post_install_message:
|
60
74
|
rdoc_options:
|
61
|
-
- --
|
62
|
-
- README.rdoc
|
75
|
+
- --charset=UTF-8
|
63
76
|
require_paths:
|
64
77
|
- lib
|
65
78
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -76,10 +89,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
76
89
|
version:
|
77
90
|
requirements: []
|
78
91
|
|
79
|
-
rubyforge_project:
|
92
|
+
rubyforge_project:
|
80
93
|
rubygems_version: 1.3.5
|
81
94
|
signing_key:
|
82
|
-
specification_version:
|
83
|
-
summary:
|
84
|
-
test_files:
|
85
|
-
|
95
|
+
specification_version: 3
|
96
|
+
summary: Generates random test data
|
97
|
+
test_files:
|
98
|
+
- spec/randomizer_spec.rb
|
99
|
+
- spec/spec_helper.rb
|