randomizer 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,9 @@
1
+ Feature: something something
2
+ In order to something something
3
+ A user something something
4
+ something something something
5
+
6
+ Scenario: something something
7
+ Given inspiration
8
+ When I create a sweet new gem
9
+ Then everyone should see how awesome I am
@@ -1,14 +1,4 @@
1
- require File.dirname(__FILE__) + "/../../lib/randomizer"
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__) + '/../../lib')
2
+ require 'randomizer'
2
3
 
3
- gem 'cucumber'
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'
@@ -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
- require 'randomizer/all_avatars_site'
17
- require 'randomizer/random_user'
18
- require 'randomizer/name_generator'
19
- require 'randomizer/markov_text_generator'
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
@@ -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
+
@@ -1,11 +1,7 @@
1
- require File.dirname(__FILE__) + '/spec_helper.rb'
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
- # Time to add your specs!
4
- # http://rspec.info/
5
- describe "Place your specs here" do
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
@@ -1 +1 @@
1
- --colour
1
+ --color
@@ -1,10 +1,9 @@
1
- begin
2
- require 'spec'
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.1
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-08-11 00:00:00 -07:00
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: hoe
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.3.3
23
+ version: 1.2.9
24
24
  version:
25
- description: Generates random test data.
26
- email:
27
- - paul@canavese.org
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
- - History.txt
34
- - Manifest.txt
35
- - PostInstall.txt
42
+ - LICENSE
43
+ - README.rdoc
36
44
  files:
37
- - History.txt
38
- - Manifest.txt
39
- - PostInstall.txt
45
+ - .gitignore
46
+ - LICENSE
40
47
  - README.rdoc
41
48
  - Rakefile
42
- - features/development.feature
43
- - features/step_definitions/common_steps.rb
44
- - features/support/common.rb
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
- - script/console
49
- - script/destroy
50
- - script/generate
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: PostInstall.txt
73
+ post_install_message:
60
74
  rdoc_options:
61
- - --main
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: randomizer
92
+ rubyforge_project:
80
93
  rubygems_version: 1.3.5
81
94
  signing_key:
82
- specification_version: 2
83
- summary: FIX (describe your package)
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