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.
@@ -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