random_data_despegar 2.1
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
- data/.gitignore +1 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +42 -0
- data/History.txt +77 -0
- data/License.txt +20 -0
- data/PostInstall.txt +0 -0
- data/README.md +135 -0
- data/README.rdoc +156 -0
- data/Rakefile +10 -0
- data/config/website.yml +2 -0
- data/lib/random_data_despegar.rb +69 -0
- data/lib/random_data_despegar/array_randomizer.rb +67 -0
- data/lib/random_data_despegar/booleans.rb +10 -0
- data/lib/random_data_despegar/contact_info.rb +24 -0
- data/lib/random_data_despegar/dates.rb +101 -0
- data/lib/random_data_despegar/grammar.rb +61 -0
- data/lib/random_data_despegar/id_generator.rb +137 -0
- data/lib/random_data_despegar/invoice_data.rb +121 -0
- data/lib/random_data_despegar/locations.rb +143 -0
- data/lib/random_data_despegar/markov.rb +77 -0
- data/lib/random_data_despegar/names.rb +108 -0
- data/lib/random_data_despegar/numbers.rb +56 -0
- data/lib/random_data_despegar/text.rb +70 -0
- data/lib/random_data_despegar/version.rb +3 -0
- data/random_data_despegar.gemspec +22 -0
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/script/txt2html +71 -0
- data/test/henry_v_prolog.txt +41 -0
- data/test/test_dates.rb +25 -0
- data/test/test_helper.rb +8 -0
- data/test/test_id_invoice_tests.rb +37 -0
- data/test/test_random_data.rb +309 -0
- metadata +88 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b5b128b2722b71bfe16dee6dc11e8e45207cc7c2
|
4
|
+
data.tar.gz: 24e2f8dec3799d9b5badb9e83c9058e0d099a41c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6dcc2111941e5455e54be28793aa080371e6fbc30812af2aa74abbe69a674a5aee41def9412dc5ecc7566daefc5e397e710ae0e7b47774cacb0b01c7c10f57a8
|
7
|
+
data.tar.gz: 251e76f93f4fb6b5d1d410bbd01ccaf1b2d8023fcd4e05a60bd6a2f296b870a4ddd502a015257320fd7e072721acf09a215d86d84b387fb29c1ddabfb57de6b3
|
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
*.gem
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
diff-lcs (1.2.5)
|
5
|
+
expects (0.0.3)
|
6
|
+
json (1.8.2)
|
7
|
+
json (1.8.2-java)
|
8
|
+
metaclass (0.0.4)
|
9
|
+
mocha (1.1.0)
|
10
|
+
metaclass (~> 0.0.1)
|
11
|
+
rake (10.4.2)
|
12
|
+
rdoc (4.2.0)
|
13
|
+
json (~> 1.4)
|
14
|
+
regexp-examples (1.1.0)
|
15
|
+
rspec (3.4.0)
|
16
|
+
rspec-core (~> 3.4.0)
|
17
|
+
rspec-expectations (~> 3.4.0)
|
18
|
+
rspec-mocks (~> 3.4.0)
|
19
|
+
rspec-core (3.4.1)
|
20
|
+
rspec-support (~> 3.4.0)
|
21
|
+
rspec-expectations (3.4.0)
|
22
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
23
|
+
rspec-support (~> 3.4.0)
|
24
|
+
rspec-mocks (3.4.1)
|
25
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
26
|
+
rspec-support (~> 3.4.0)
|
27
|
+
rspec-support (3.4.1)
|
28
|
+
|
29
|
+
PLATFORMS
|
30
|
+
java
|
31
|
+
ruby
|
32
|
+
|
33
|
+
DEPENDENCIES
|
34
|
+
expects
|
35
|
+
mocha
|
36
|
+
rake
|
37
|
+
rdoc
|
38
|
+
regexp-examples
|
39
|
+
rspec
|
40
|
+
|
41
|
+
BUNDLED WITH
|
42
|
+
1.11.2
|
data/History.txt
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
== 1.6.0 2012-11-22
|
2
|
+
|
3
|
+
* Enhancements:
|
4
|
+
* Added company_name, companyname methods (Jason Rogers)
|
5
|
+
* Removed deprecated method state. Use state_code instead. (Tom Harris)
|
6
|
+
|
7
|
+
== 1.5.2 2010-11-16
|
8
|
+
|
9
|
+
* Enhancements:
|
10
|
+
* added first_name, last_name, full_name methods (Cyril David)
|
11
|
+
|
12
|
+
* Fixes:
|
13
|
+
* added utf-8 magic comment for ruby 1.9 compatibility (Tom Harris)
|
14
|
+
|
15
|
+
== 1.5.0 2008-11-06
|
16
|
+
* 2 major enhancement:
|
17
|
+
* Totally cleaned up and reconfigured hoe using newgem 1.0's conventions
|
18
|
+
* Added Markov model text generator (courtesy of Hugh Sasse)
|
19
|
+
|
20
|
+
* 1 minor enhancement:
|
21
|
+
* Added roulette method to Array (courtesy of Hugh Sasse)
|
22
|
+
|
23
|
+
* 1 minor fix:
|
24
|
+
* Fixed newline bug in the name generator (courtesy of Harold Gimenez)
|
25
|
+
|
26
|
+
== 1.3.1 2008-06-06
|
27
|
+
|
28
|
+
* 2 minor enhancements:
|
29
|
+
* Added added more last and firstnames (courtesy of Hugh Sasse)
|
30
|
+
* Added firstname_male and firstname_female (courtesy of Hugh Sasse)
|
31
|
+
|
32
|
+
== 1.3.0 2008-05-25
|
33
|
+
|
34
|
+
All these enhancements are from Hugh Sasse. Thanks Hugh!
|
35
|
+
|
36
|
+
* 4 major enhancements:
|
37
|
+
* Added Random::Grammar, which lets you create simple random sentences (see rdocs)
|
38
|
+
* Added Random.bit and Random.bits
|
39
|
+
* Added Random.grammatical_construct
|
40
|
+
* Fixed up rdocs which had gotten out of date
|
41
|
+
|
42
|
+
* 2 minor enhancements:
|
43
|
+
* Added Random.uk_post_code
|
44
|
+
* Zipcodes should strings, not integers
|
45
|
+
|
46
|
+
== 1.2.1 2007-11-29
|
47
|
+
|
48
|
+
* 1 minor fix:
|
49
|
+
* Updated gem manifest
|
50
|
+
|
51
|
+
== 1.2.0 2007-11-29
|
52
|
+
|
53
|
+
Thanks to Paul Barry and Hugh Sasse for some awesome patches!
|
54
|
+
|
55
|
+
* 1 major enhancement:
|
56
|
+
* Added method_missing to Random class, which looks for a method_name.dat and fetches a random line for you (see docs for details) (Hugh Sasse)
|
57
|
+
* added Random.date_between method to get a date between 2 given dates (Paul Barry)
|
58
|
+
* added Random.boolean method to get a random true or false (Paul Barry)
|
59
|
+
* added Random.number to get a random number less than a number or within a given range (Paul Barry)
|
60
|
+
|
61
|
+
* 1 minor enhancement:
|
62
|
+
* enhanced Random.date method to handle a Range as well as a Fixnum, which allows you to get a date guaranteed to be in the past (Paul Barry)
|
63
|
+
|
64
|
+
* 1 minor fix:
|
65
|
+
* Location sources organized into more understandable categories, for easier future expansion (Hugh Sasse)
|
66
|
+
* Fixed path of require statements in random_data.rb (Paul Barry)
|
67
|
+
* make initial never return nil, because if it returns nil then ContactInfo#email can thrown and error because it tries to call nil. (Paul Barry)
|
68
|
+
|
69
|
+
== 1.0.1 2007-09-17
|
70
|
+
|
71
|
+
* 1 minor fix:
|
72
|
+
* Not creating the Random class properly by extending it (vs. including modules)
|
73
|
+
|
74
|
+
== 1.0.0 2007-09-17
|
75
|
+
|
76
|
+
* 1 major enhancement:
|
77
|
+
* Initial release
|
data/License.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2008 Mike Subelsky, subelsky.com
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/PostInstall.txt
ADDED
File without changes
|
data/README.md
ADDED
@@ -0,0 +1,135 @@
|
|
1
|
+
# Random-Data-Despegar
|
2
|
+
|
3
|
+
## Install
|
4
|
+
```shell
|
5
|
+
gem install random_data_despegar
|
6
|
+
```
|
7
|
+
O manualmente => http://gems.despegar.com/#random_data_despegar
|
8
|
+
|
9
|
+
## Generadores de datos random
|
10
|
+
|
11
|
+
### Generadores
|
12
|
+
|
13
|
+
* [**ArrayRandomizer**](#arrayrandomizer)
|
14
|
+
* [**Booleans**](#booleans)
|
15
|
+
* [**ContactInfo**](#contactinfo)
|
16
|
+
* [**Dates**](#dates)
|
17
|
+
* [**Grammar**](#grammar)
|
18
|
+
* [**Locations**](#locations)
|
19
|
+
* [**Names**](#names)
|
20
|
+
* [**Numbers**](#numbers)
|
21
|
+
* [**InvoiceData**](#invoicedata)
|
22
|
+
* [**IdGenerator**](#idgenerator)
|
23
|
+
* [**Text**](#text)
|
24
|
+
|
25
|
+
|
26
|
+
### ArrayRandomizer:
|
27
|
+
|
28
|
+
```ruby
|
29
|
+
Random.rand #>> [1,2,3].rand = 3
|
30
|
+
Random.roulette # Takes an array of non-negative weights and returns the index selected by a
|
31
|
+
```
|
32
|
+
### Booleans:
|
33
|
+
```ruby
|
34
|
+
Random.boolean #Returns true or false randomly
|
35
|
+
```
|
36
|
+
|
37
|
+
### ContactInfo:
|
38
|
+
```ruby
|
39
|
+
# Returns a randomly-generated string of digits that roughly resembles a US telephone number. Not guaranteed to be a valid area code.
|
40
|
+
Random.phone
|
41
|
+
# Returns a randomly-generated string of digits that roughly resembles an international telephone number as dialed from the US.
|
42
|
+
Random.international_phone
|
43
|
+
# Returns an e-mail address of the form "{first_initial}{last_name}@{domain}"
|
44
|
+
Random.email
|
45
|
+
|
46
|
+
```
|
47
|
+
|
48
|
+
### Dates:
|
49
|
+
```ruby
|
50
|
+
# Returns a random date.
|
51
|
+
Random.date
|
52
|
+
# Returns a date within the specified Range. The Range can be Date or String objects.
|
53
|
+
Random.date_between
|
54
|
+
# Returns valid departure and return dates (Date and formated)
|
55
|
+
Random.departure_and_return_dates
|
56
|
+
# Returns a hash with birhdate for a specific passenger_type: adult, child or infant.
|
57
|
+
Random.passenger_birthdate(passenger_type)
|
58
|
+
```
|
59
|
+
|
60
|
+
### Grammar:
|
61
|
+
```ruby
|
62
|
+
# Random.grammatical_construct({:story => [:man, " bites ", :dog], :man => { :bob => "Bob"}, :dog => {:a =>"Rex", :b =>"Rover"}}, :story)
|
63
|
+
Random.grammatical_construct # => "Bob bites Rover"
|
64
|
+
```
|
65
|
+
|
66
|
+
### Locations:
|
67
|
+
```ruby
|
68
|
+
# 24317 Jefferson Blvd"
|
69
|
+
Random.address_line_1
|
70
|
+
Random.address_line_2
|
71
|
+
# Returns a random 5-digit string, not guaranteed to be a legitimate zip code.
|
72
|
+
Random.zipcode
|
73
|
+
# Returns brazilian cep
|
74
|
+
Random.cep
|
75
|
+
# Returns brazilian cpnj
|
76
|
+
Random.cpnj
|
77
|
+
# Returns a string providing something in the general form of a UK post code. Like the zip codes, this might
|
78
|
+
Random.uk_post_code
|
79
|
+
# Returns a state 2-character abbreviation
|
80
|
+
# Random.state_code = "IL"
|
81
|
+
Random.state_code
|
82
|
+
# Returns a full state name
|
83
|
+
#Random.state_full = "Texas"
|
84
|
+
Random.state_full
|
85
|
+
# Returns a country name, as listed by the World Bank
|
86
|
+
Random.country
|
87
|
+
# Returns a generic city name, with an attempt to have some internationl appeal
|
88
|
+
Random.city
|
89
|
+
```
|
90
|
+
|
91
|
+
### Names:
|
92
|
+
```ruby
|
93
|
+
Random.firstname
|
94
|
+
Random.firstname_male
|
95
|
+
Random.firstname_female
|
96
|
+
Random.initial
|
97
|
+
Random.lastname
|
98
|
+
```
|
99
|
+
|
100
|
+
### Numbers:
|
101
|
+
```ruby
|
102
|
+
Random.number
|
103
|
+
# parameter is the size of the number to be generated.
|
104
|
+
Random.number_with_size(size)
|
105
|
+
# Returns an alphanumeric number with size n
|
106
|
+
Random.alphanumeric_with_size(size) # params integer
|
107
|
+
# return a random bit, 0 or 1.
|
108
|
+
Random.bit
|
109
|
+
# return an array of n random bits.
|
110
|
+
Random.bits
|
111
|
+
# Return card numbers, based on a regex and card number length.
|
112
|
+
# regex will be a string
|
113
|
+
# length will be an integer
|
114
|
+
Random.random_card_number(card_regex)
|
115
|
+
```
|
116
|
+
|
117
|
+
### InvoiceData:
|
118
|
+
```ruby
|
119
|
+
# cr ec pa pe ve mx co cl ar br
|
120
|
+
Random.invoice_data_for "BR" #=> {:pf=>{:cedula=>"20532364131"
|
121
|
+
:cep=>"13301611"
|
122
|
+
:cpf=>"88227212710"}
|
123
|
+
```
|
124
|
+
|
125
|
+
### IdGenerator:
|
126
|
+
```ruby
|
127
|
+
# cr ec pa pe ve mx co cl ar br
|
128
|
+
Random.id_for "BR"
|
129
|
+
```
|
130
|
+
|
131
|
+
### Text:
|
132
|
+
```ruby
|
133
|
+
Random.alphanumeric
|
134
|
+
Random.paragraphs
|
135
|
+
```
|
data/README.rdoc
ADDED
@@ -0,0 +1,156 @@
|
|
1
|
+
= random_data
|
2
|
+
|
3
|
+
This gem provides a Random singleton class with a series of methods for generating random test data including names, mailing addresses, dates, phone numbers, e-mail addresses, and text. Instead of:
|
4
|
+
|
5
|
+
<tt>foo.name = "John Doe"</tt>
|
6
|
+
|
7
|
+
You get:
|
8
|
+
|
9
|
+
<tt>foo.name = "#{Random.firstname} #{Random.initial} #{Random.lastname}"</tt>
|
10
|
+
|
11
|
+
== Installation
|
12
|
+
|
13
|
+
<tt>sudo gem install random_data</tt>
|
14
|
+
|
15
|
+
or get the gem manually from http://rubyforge.org/frs/?group_id=4458
|
16
|
+
|
17
|
+
== Methods
|
18
|
+
|
19
|
+
=== Contact Methods
|
20
|
+
Random.phone, Random.international_phone, Random.email
|
21
|
+
|
22
|
+
=== Time/Date Methods
|
23
|
+
Random.date, Random.date_between, Random.departure_and_return_dates, Random.adt_chd_inf_birthday
|
24
|
+
|
25
|
+
=== Location Methods
|
26
|
+
Random.address_line_1, Random.address_line_2, Random.zipcode, Random.uk_post_code, Random.state_code, Random.state_full, Random.country, Random.city
|
27
|
+
|
28
|
+
=== Name Methods
|
29
|
+
Random.firstname, Random.firstname_male, Random.firstname_female, Random.initial, Random.lastname
|
30
|
+
|
31
|
+
=== Text Methods
|
32
|
+
Random.alphanumeric, Random.paragraphs
|
33
|
+
|
34
|
+
=== Grammatical Methods
|
35
|
+
Random.grammatical_construct
|
36
|
+
|
37
|
+
=== Number Methods
|
38
|
+
Random.number, Random.bit, Random.bits, Random.cpf, Random.random_card_number
|
39
|
+
Random.random_number_with_size(20) # => "25895277473360037460"
|
40
|
+
|
41
|
+
=== Boolean Methods
|
42
|
+
Random.boolean
|
43
|
+
|
44
|
+
=== Markov Generator Methods
|
45
|
+
Random.MarkovGenerator.new
|
46
|
+
Random.MarkovGenerator.insert
|
47
|
+
Random.MarkovGenerator.generate
|
48
|
+
|
49
|
+
=== Array Extension
|
50
|
+
Array.rand
|
51
|
+
Array.roulette
|
52
|
+
|
53
|
+
=== Choose From File Methods
|
54
|
+
Random implements a method_missing helper that will choose a line at random from a file in your load path. See Random::method_missing for details.
|
55
|
+
|
56
|
+
Note that some methods take parameters to bound or limit the amount of data returned. See RDocs for details.
|
57
|
+
|
58
|
+
== Examples of Some Methods
|
59
|
+
|
60
|
+
>>Random.alphanumeric
|
61
|
+
=> "cfbutm3vYfhZXil0"
|
62
|
+
|
63
|
+
>> Random.alphanumeric(5)
|
64
|
+
=> "XYVyn"
|
65
|
+
|
66
|
+
>> Random.paragraphs
|
67
|
+
=> "Ulysses, fighting evil and tyranny with all his power and with all of his might. Ulysses, fighting evil and tyranny with all his power and with all
|
68
|
+
of his might. \n\nHe's got style, a groovy style, and a car that just won't stop. \n\n"
|
69
|
+
|
70
|
+
>> Random.paragraphs(3)
|
71
|
+
=> "Excepteur sint occaecat cupidatat non proident sunt in culpa qui officia deserunt mollit anim id est laborum. Down the road that's where I'll always be.
|
72
|
+
He's got style, a groovy style, and a car that just won't stop. I've gotten burned over Cheryl Tiegs and blown up for Raquel Welch, but when I end up in the
|
73
|
+
hay it's only hay hey hey. Hey there where ya goin, not exactly knowin'. \n\nLorem ipsum dolor sit amet consectetur adipisicing elit sed do eiusmod tempor
|
74
|
+
incididunt ut labore et dolore magna aliqua. I might jump an open drawbridge or Tarzan from a vine, beause I'm the unknown stuntman that makes Eastwood look so
|
75
|
+
fine. He just keeps on movin' and ladies keep improvin'. Rolling down to Dallas - who is providin my palace?. Every stop I make I make a new friend; Can't
|
76
|
+
stay for long just turn around and I'm gone again. \n\nAlways fighting all the evil forces bringing peace and justice to all. \n\n"
|
77
|
+
|
78
|
+
>> Random.firstname
|
79
|
+
=> "Thomas"
|
80
|
+
|
81
|
+
>> Random.initial
|
82
|
+
=> "E"
|
83
|
+
|
84
|
+
>> Random.lastname
|
85
|
+
=> "Robinson"
|
86
|
+
|
87
|
+
>> Random.date
|
88
|
+
=> Sun, 09 Sep 2007
|
89
|
+
|
90
|
+
(Returns an actual date object, shown here in its to_s form)
|
91
|
+
|
92
|
+
>> Random.date(1000)
|
93
|
+
=> Sun, 26 Nov 2006
|
94
|
+
|
95
|
+
>> Random.departure_and_return_dates
|
96
|
+
=> {
|
97
|
+
:departure_date=>#<Date: 2015-06-27 ((2457201j,0s,0n),+0s,2299161j)>,
|
98
|
+
:return_date=>#<Date: 2015-07-02 ((2457206j,0s,0n),+0s,2299161j)>,
|
99
|
+
:formated_departure_date=>"2015-06-27",
|
100
|
+
:formated_return_date=>"2015-07-02"
|
101
|
+
}
|
102
|
+
|
103
|
+
>> Random.departure_and_return_dates(30..40)
|
104
|
+
=> {
|
105
|
+
:departure_date=>#<Date: 2015-05-17 ((2457160j,0s,0n),+0s,2299161j)>,
|
106
|
+
:return_date=>#<Date: 2015-05-24 ((2457167j,0s,0n),+0s,2299161j)>,
|
107
|
+
:formated_departure_date=>"2015-05-17",
|
108
|
+
:formated_return_date=>"2015-05-24"
|
109
|
+
}
|
110
|
+
|
111
|
+
>> Random.passenger_birthdate("adult")
|
112
|
+
=> {:age => adt_age,
|
113
|
+
:month => month,
|
114
|
+
:day => rand(1..month_adt_days)
|
115
|
+
}
|
116
|
+
|
117
|
+
>> Random.email
|
118
|
+
=> "zrodriguez@example.com"
|
119
|
+
|
120
|
+
>> Random.phone
|
121
|
+
=> "564-103-8353"
|
122
|
+
|
123
|
+
>> Random.international_phone
|
124
|
+
=> "011-24-37-9704"
|
125
|
+
|
126
|
+
>> Random.address_line_1
|
127
|
+
=> "38367 Adams Rd"
|
128
|
+
|
129
|
+
>> Random.address_line_2
|
130
|
+
=> "Lot 247"
|
131
|
+
|
132
|
+
>> Random.zipcode
|
133
|
+
=> 22904
|
134
|
+
|
135
|
+
(Note that the zipcodes are totally random and may not be real zipcodes)
|
136
|
+
|
137
|
+
>> Random.state_code
|
138
|
+
=> "MD"
|
139
|
+
|
140
|
+
>> Random.state_full
|
141
|
+
=> "New Mexico"
|
142
|
+
|
143
|
+
>> Random.country
|
144
|
+
=> "Philippines"
|
145
|
+
|
146
|
+
>> Random.random_card_number("^5(?:[1-5]|[7-9])[0-9]+$", 16)
|
147
|
+
=> "5367179454341632"
|
148
|
+
|
149
|
+
== Contact
|
150
|
+
Let me know if you have patches, comments, or suggestions: mailto:mike@subelsky.com
|
151
|
+
|
152
|
+
== Special Thanks
|
153
|
+
Major thanks to Hugh Sasse and {Paul Barry}[http://paulbarry.com/] for their contributions.
|
154
|
+
|
155
|
+
== Copyright
|
156
|
+
Copyright (c) 2008 {Mike Subelsky}[http://subelsky.com/], Baltimore, Maryland, released under the MIT license.
|