gendered 0.0.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/.bundle/config +2 -0
- data/.gitignore +12 -0
- data/.rspec +3 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +45 -0
- data/Rakefile +2 -0
- data/exec/bundler +16 -0
- data/exec/htmldiff +16 -0
- data/exec/ldiff +16 -0
- data/exec/rake +16 -0
- data/exec/rspec +16 -0
- data/gendered.gemspec +26 -0
- data/lib/gendered.rb +12 -0
- data/lib/gendered/guesser.rb +42 -0
- data/lib/gendered/name.rb +67 -0
- data/lib/gendered/name_list.rb +34 -0
- data/lib/gendered/version.rb +3 -0
- data/spec/lib/gendered/guesser_spec.rb +34 -0
- data/spec/lib/gendered/name_list_spec.rb +33 -0
- data/spec/lib/gendered/name_spec.rb +147 -0
- data/spec/spec_helper.rb +5 -0
- metadata +127 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4f5859ca1d1852db42a01dd6bebff96919f330de
|
4
|
+
data.tar.gz: a140d18f8c36eb7a57c96442de2ab59e1c21daf9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a9b94c3fe3227f97963dd2bc391a27d8d4cf51de5d621c0635e56666e30c1a115bf51c6f5f3e18a2c8e8f42c83fb6b7a183362a19085ae0ab73aee94e990f499
|
7
|
+
data.tar.gz: 579f61a222de993b23679c4aee149892840040d45f91fbb9852dee8b7a5efa30b893e15699450535f62f0799fc16c3ea9a235dcde595754584fd27134f608f9d
|
data/.bundle/config
ADDED
data/.gitignore
ADDED
data/.rspec
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Sean Devine
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
# Gendered
|
2
|
+
|
3
|
+
**THIS LIBRARY IS STILL IN DEVELOPMENT.**
|
4
|
+
|
5
|
+
Guess the gender of a name with the help of the [genderize.io](http://genderize.io).
|
6
|
+
|
7
|
+
```bash
|
8
|
+
gem install gendered
|
9
|
+
```
|
10
|
+
|
11
|
+
You can guess one name at a time...
|
12
|
+
```ruby
|
13
|
+
> require 'gendered'
|
14
|
+
> name = Gendered::Name.new("Sean")
|
15
|
+
> name.gender
|
16
|
+
> :not_guessed
|
17
|
+
> name.guess!
|
18
|
+
=> :male
|
19
|
+
> name.male?
|
20
|
+
=> true
|
21
|
+
> name.female?
|
22
|
+
=> false
|
23
|
+
> name.probability
|
24
|
+
=> "0.99E0"
|
25
|
+
> name.sample_size
|
26
|
+
=> 967
|
27
|
+
```
|
28
|
+
|
29
|
+
Or batch up a list of names (which sends only one request to the API)...
|
30
|
+
```ruby
|
31
|
+
> require 'gendered'
|
32
|
+
> name_list = Gendered::NameList.new(["Sean","Theresa"])
|
33
|
+
> name_list.guess!
|
34
|
+
=> [:male, :female]
|
35
|
+
> name_list.collect { |name| name.male? }
|
36
|
+
=> [true, false]
|
37
|
+
> name_list.collect { |name| name.female? }
|
38
|
+
=> [false, true]
|
39
|
+
> name_list.collect { |name| name.probability.to_f }
|
40
|
+
=> [0.99, 1.0]
|
41
|
+
> name_list.collect { |name| name.sample_size }
|
42
|
+
=> [967, 370]
|
43
|
+
> name_list["Sean"].gender
|
44
|
+
=> :male
|
45
|
+
```
|
data/Rakefile
ADDED
data/exec/bundler
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# This file was generated by Bundler.
|
4
|
+
#
|
5
|
+
# The application 'bundler' is installed as part of a gem, and
|
6
|
+
# this file is here to facilitate running it.
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'pathname'
|
10
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
+
Pathname.new(__FILE__).realpath)
|
12
|
+
|
13
|
+
require 'rubygems'
|
14
|
+
require 'bundler/setup'
|
15
|
+
|
16
|
+
load Gem.bin_path('bundler', 'bundler')
|
data/exec/htmldiff
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# This file was generated by Bundler.
|
4
|
+
#
|
5
|
+
# The application 'htmldiff' is installed as part of a gem, and
|
6
|
+
# this file is here to facilitate running it.
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'pathname'
|
10
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
+
Pathname.new(__FILE__).realpath)
|
12
|
+
|
13
|
+
require 'rubygems'
|
14
|
+
require 'bundler/setup'
|
15
|
+
|
16
|
+
load Gem.bin_path('diff-lcs', 'htmldiff')
|
data/exec/ldiff
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# This file was generated by Bundler.
|
4
|
+
#
|
5
|
+
# The application 'ldiff' is installed as part of a gem, and
|
6
|
+
# this file is here to facilitate running it.
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'pathname'
|
10
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
+
Pathname.new(__FILE__).realpath)
|
12
|
+
|
13
|
+
require 'rubygems'
|
14
|
+
require 'bundler/setup'
|
15
|
+
|
16
|
+
load Gem.bin_path('diff-lcs', 'ldiff')
|
data/exec/rake
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# This file was generated by Bundler.
|
4
|
+
#
|
5
|
+
# The application 'rake' is installed as part of a gem, and
|
6
|
+
# this file is here to facilitate running it.
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'pathname'
|
10
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
+
Pathname.new(__FILE__).realpath)
|
12
|
+
|
13
|
+
require 'rubygems'
|
14
|
+
require 'bundler/setup'
|
15
|
+
|
16
|
+
load Gem.bin_path('rake', 'rake')
|
data/exec/rspec
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# This file was generated by Bundler.
|
4
|
+
#
|
5
|
+
# The application 'rspec' is installed as part of a gem, and
|
6
|
+
# this file is here to facilitate running it.
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'pathname'
|
10
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
+
Pathname.new(__FILE__).realpath)
|
12
|
+
|
13
|
+
require 'rubygems'
|
14
|
+
require 'bundler/setup'
|
15
|
+
|
16
|
+
load Gem.bin_path('rspec-core', 'rspec')
|
data/gendered.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'gendered/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "gendered"
|
8
|
+
spec.version = Gendered::VERSION
|
9
|
+
spec.authors = ["Sean Devine"]
|
10
|
+
spec.email = ["barelyknown@icloud.com"]
|
11
|
+
spec.summary = "Guess the gender of a name."
|
12
|
+
spec.description = spec.summary
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency "http", ">= 0.6.2"
|
22
|
+
|
23
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
24
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
25
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
26
|
+
end
|
data/lib/gendered.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
module Gendered
|
2
|
+
class Guesser
|
3
|
+
|
4
|
+
attr_accessor :names
|
5
|
+
|
6
|
+
def initialize(values)
|
7
|
+
raise ArgumentError, "cannot be empty" if Array(values).empty?
|
8
|
+
|
9
|
+
@names = Array(values)
|
10
|
+
end
|
11
|
+
|
12
|
+
def guess!
|
13
|
+
response = HTTP.get(url)
|
14
|
+
case response.code
|
15
|
+
when 200
|
16
|
+
@names = JSON.parse(response.body).collect do |guess|
|
17
|
+
name = names.find { |n| n.to_s == guess["name"] }
|
18
|
+
|
19
|
+
if name.is_a?(String)
|
20
|
+
name = Name.new(guess["name"])
|
21
|
+
end
|
22
|
+
|
23
|
+
name.tap do |n|
|
24
|
+
n.gender = guess["gender"].to_sym
|
25
|
+
n.probability = guess["probability"]
|
26
|
+
n.sample_size = guess["count"]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
self.names
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def url
|
34
|
+
url = "http://api.genderize.io/?"
|
35
|
+
name_queries = names.collect.with_index do |name, index|
|
36
|
+
"name[#{index}]=#{name}"
|
37
|
+
end
|
38
|
+
url + name_queries.join("&")
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Gendered
|
2
|
+
class Name
|
3
|
+
VALID_GENDERS = %i(male female)
|
4
|
+
|
5
|
+
attr_reader :value
|
6
|
+
|
7
|
+
def initialize(value)
|
8
|
+
@value = value
|
9
|
+
|
10
|
+
@gender, @probability, @sample_size = nil, nil, nil
|
11
|
+
end
|
12
|
+
|
13
|
+
alias_method :to_s, :value
|
14
|
+
|
15
|
+
def guessed?
|
16
|
+
!!@gender
|
17
|
+
end
|
18
|
+
|
19
|
+
def guess!
|
20
|
+
Guesser.new(self).guess!
|
21
|
+
gender
|
22
|
+
end
|
23
|
+
|
24
|
+
def probability=(value)
|
25
|
+
decimal = BigDecimal(value.to_s)
|
26
|
+
raise ArgumentError, "value not between 0.01 and 1.0" if decimal <= 0 || decimal > 1
|
27
|
+
|
28
|
+
@probability = decimal
|
29
|
+
end
|
30
|
+
|
31
|
+
def probability
|
32
|
+
@probability || :unknown
|
33
|
+
end
|
34
|
+
|
35
|
+
def sample_size=(value)
|
36
|
+
integer = Integer(value)
|
37
|
+
raise ArgumentError, "value not greater than or equal to 0" if integer < 0
|
38
|
+
|
39
|
+
@sample_size = integer
|
40
|
+
end
|
41
|
+
|
42
|
+
def sample_size
|
43
|
+
@sample_size || :unknown
|
44
|
+
end
|
45
|
+
|
46
|
+
def gender=(value)
|
47
|
+
symbol = value.to_sym
|
48
|
+
raise ArgumentError, "not a valid gender" unless VALID_GENDERS.include?(symbol)
|
49
|
+
@gender = symbol
|
50
|
+
end
|
51
|
+
|
52
|
+
def gender
|
53
|
+
@gender || :not_guessed
|
54
|
+
end
|
55
|
+
|
56
|
+
def male?
|
57
|
+
return :not_guessed unless guessed?
|
58
|
+
gender == :male
|
59
|
+
end
|
60
|
+
|
61
|
+
def female?
|
62
|
+
return :not_guessed unless guessed?
|
63
|
+
gender == :female
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Gendered
|
2
|
+
class NameList
|
3
|
+
include Enumerable
|
4
|
+
|
5
|
+
attr_reader :names
|
6
|
+
|
7
|
+
def initialize(values)
|
8
|
+
@names = Array(values).collect do |value|
|
9
|
+
case value
|
10
|
+
when String then Name.new(value)
|
11
|
+
when Name then value
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def guess!
|
17
|
+
Guesser.new(names).guess!
|
18
|
+
names.collect(&:gender)
|
19
|
+
end
|
20
|
+
|
21
|
+
def each(&block)
|
22
|
+
names.each do |name|
|
23
|
+
block.call name
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def [](value)
|
28
|
+
names.find do |name|
|
29
|
+
name.value == value
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Gendered
|
2
|
+
describe Guesser do
|
3
|
+
|
4
|
+
let :names do
|
5
|
+
["Sean","Theresa"]
|
6
|
+
end
|
7
|
+
|
8
|
+
subject do
|
9
|
+
described_class.new names
|
10
|
+
end
|
11
|
+
|
12
|
+
it "is initialized with names" do
|
13
|
+
expect(subject.names).to eq names
|
14
|
+
end
|
15
|
+
|
16
|
+
it "creates the correct url" do
|
17
|
+
expect(subject.url).to eq "http://api.genderize.io/?name[0]=Sean&name[1]=Theresa"
|
18
|
+
end
|
19
|
+
|
20
|
+
it "cannot be initialized with an empty array" do
|
21
|
+
expect{described_class.new([])}.to raise_error ArgumentError
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#guess!" do
|
25
|
+
it "returns a valid guesses hash" do
|
26
|
+
names = subject.guess!
|
27
|
+
names.each do |name|
|
28
|
+
expect(name).to be_a Name
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Gendered
|
2
|
+
describe NameList do
|
3
|
+
subject do
|
4
|
+
described_class.new values
|
5
|
+
end
|
6
|
+
let :values do
|
7
|
+
["Sean","Theresa"]
|
8
|
+
end
|
9
|
+
describe "#guess!" do
|
10
|
+
it "guesses correctly" do
|
11
|
+
guesser = double(Guesser)
|
12
|
+
expect(guesser).to receive(:guess!)
|
13
|
+
expect(Guesser).to receive(:new).with(subject.names).and_return(guesser)
|
14
|
+
subject.guess!
|
15
|
+
end
|
16
|
+
end
|
17
|
+
context "when the values are strings" do
|
18
|
+
it "sets the names" do
|
19
|
+
subject.names.each.with_index do |name, index|
|
20
|
+
expect(name.value).to eq values[index]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
context "when the values are names" do
|
25
|
+
let :values do
|
26
|
+
[Name.new("Sean"),Name.new("Theresa")]
|
27
|
+
end
|
28
|
+
it "sets the names" do
|
29
|
+
expect(subject.names).to eq values
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,147 @@
|
|
1
|
+
module Gendered
|
2
|
+
describe Name do
|
3
|
+
|
4
|
+
let :value do
|
5
|
+
"Sean"
|
6
|
+
end
|
7
|
+
|
8
|
+
subject do
|
9
|
+
described_class.new value
|
10
|
+
end
|
11
|
+
|
12
|
+
it "initializes with a value" do
|
13
|
+
expect(subject.value).to eq value
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "#to_s" do
|
17
|
+
it "converts with its value" do
|
18
|
+
expect(subject.to_s).to eq subject.value
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe "guess!" do
|
23
|
+
it "returns the gender" do
|
24
|
+
expect(subject.guess!).to eq :male
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "#gender=" do
|
29
|
+
described_class::VALID_GENDERS.each do |value|
|
30
|
+
it "can set the gender to #{value}" do
|
31
|
+
subject.gender = value
|
32
|
+
expect(subject.gender).to eq value
|
33
|
+
end
|
34
|
+
end
|
35
|
+
it "raises an argument error if the gender is set to something invalid" do
|
36
|
+
%w(eunich).each do |value|
|
37
|
+
expect{subject.gender = value}.to raise_error(ArgumentError)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "#gender" do
|
43
|
+
it "is not_guessed" do
|
44
|
+
expect(subject.gender).to eq :not_guessed
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "when the gender is male" do
|
49
|
+
before { subject.gender = :male }
|
50
|
+
it "is male" do
|
51
|
+
expect(subject).to be_male
|
52
|
+
end
|
53
|
+
it "is not female" do
|
54
|
+
expect(subject).to_not be_female
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context "when the gender is female" do
|
59
|
+
before { subject.gender = :female }
|
60
|
+
it "is female" do
|
61
|
+
expect(subject).to be_female
|
62
|
+
end
|
63
|
+
it "is not male" do
|
64
|
+
expect(subject).to_not be_male
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context "when the gender is not set" do
|
69
|
+
describe "#male?" do
|
70
|
+
it "is not_guessed" do
|
71
|
+
expect(subject.male?).to eq :not_guessed
|
72
|
+
end
|
73
|
+
end
|
74
|
+
describe "#female?" do
|
75
|
+
it "is not_guessed" do
|
76
|
+
expect(subject.female?).to eq :not_guessed
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe "#guessed" do
|
82
|
+
context "when the gender is set" do
|
83
|
+
before do
|
84
|
+
subject.gender = :male
|
85
|
+
end
|
86
|
+
it "is guessed" do
|
87
|
+
expect(subject).to be_guessed
|
88
|
+
end
|
89
|
+
end
|
90
|
+
context "when the gender is not set" do
|
91
|
+
it "is not guessed" do
|
92
|
+
expect(subject).to_not be_guessed
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
describe "#probability=" do
|
98
|
+
it "can set probability greater than 0 and less than or equal to 1" do
|
99
|
+
probabilities = [BigDecimal("0.01")]
|
100
|
+
until probabilities.last == 1
|
101
|
+
probabilities << (probabilities.last + BigDecimal("0.01"))
|
102
|
+
end
|
103
|
+
probabilities.each do |p|
|
104
|
+
subject.probability = p
|
105
|
+
expect(subject.probability).to eq BigDecimal(p.to_s)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
it "raises an ArgumentError if the value is 0" do
|
109
|
+
expect{subject.probability = 0}.to raise_error(ArgumentError)
|
110
|
+
end
|
111
|
+
it "raises an ArgumentError if the value is greater than 1" do
|
112
|
+
expect{subject.probability = 1.01}.to raise_error(ArgumentError)
|
113
|
+
end
|
114
|
+
it "raises an ArgumentError if the value can't convert to a decimal" do
|
115
|
+
expect{subject.probability = "not a decimal"}.to raise_error(ArgumentError)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
describe "#sample_size=" do
|
120
|
+
it "raises an ArgumentError if the value can't be converted to an Integer" do
|
121
|
+
expect{subject.sample_size = "not an integer"}.to raise_error(ArgumentError)
|
122
|
+
end
|
123
|
+
it "can set an integer sample size greater than or equal to 0" do
|
124
|
+
(0..1).each do |value|
|
125
|
+
subject.sample_size = value
|
126
|
+
expect(subject.sample_size).to eq value
|
127
|
+
end
|
128
|
+
end
|
129
|
+
it "raises an ArgumentError if the value is less than 0" do
|
130
|
+
expect{subject.sample_size = -1}.to raise_error(ArgumentError)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
describe "#probability" do
|
135
|
+
it "is :unknown unless set" do
|
136
|
+
expect(subject.probability).to eq :unknown
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
describe "#sample_size" do
|
141
|
+
it "is :unknown unless set" do
|
142
|
+
expect(subject.sample_size).to eq :unknown
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
147
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gendered
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Sean Devine
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-09-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: http
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.6.2
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.6.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.6'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.6'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.0'
|
69
|
+
description: Guess the gender of a name.
|
70
|
+
email:
|
71
|
+
- barelyknown@icloud.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- ".bundle/config"
|
77
|
+
- ".gitignore"
|
78
|
+
- ".rspec"
|
79
|
+
- Gemfile
|
80
|
+
- LICENSE.txt
|
81
|
+
- README.md
|
82
|
+
- Rakefile
|
83
|
+
- exec/bundler
|
84
|
+
- exec/htmldiff
|
85
|
+
- exec/ldiff
|
86
|
+
- exec/rake
|
87
|
+
- exec/rspec
|
88
|
+
- gendered.gemspec
|
89
|
+
- lib/gendered.rb
|
90
|
+
- lib/gendered/guesser.rb
|
91
|
+
- lib/gendered/name.rb
|
92
|
+
- lib/gendered/name_list.rb
|
93
|
+
- lib/gendered/version.rb
|
94
|
+
- spec/lib/gendered/guesser_spec.rb
|
95
|
+
- spec/lib/gendered/name_list_spec.rb
|
96
|
+
- spec/lib/gendered/name_spec.rb
|
97
|
+
- spec/spec_helper.rb
|
98
|
+
homepage: ''
|
99
|
+
licenses:
|
100
|
+
- MIT
|
101
|
+
metadata: {}
|
102
|
+
post_install_message:
|
103
|
+
rdoc_options: []
|
104
|
+
require_paths:
|
105
|
+
- lib
|
106
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0'
|
116
|
+
requirements: []
|
117
|
+
rubyforge_project:
|
118
|
+
rubygems_version: 2.2.2
|
119
|
+
signing_key:
|
120
|
+
specification_version: 4
|
121
|
+
summary: Guess the gender of a name.
|
122
|
+
test_files:
|
123
|
+
- spec/lib/gendered/guesser_spec.rb
|
124
|
+
- spec/lib/gendered/name_list_spec.rb
|
125
|
+
- spec/lib/gendered/name_spec.rb
|
126
|
+
- spec/spec_helper.rb
|
127
|
+
has_rdoc:
|