genderizr 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,82 @@
1
+ # encoding: utf-8
2
+ module Genderizr
3
+ module Forms
4
+
5
+ def m2f_forms
6
+ @m2f_forms ||= masculine_to_feminine
7
+ end
8
+
9
+
10
+ def m2f_forms=(hash)
11
+ @f2m_forms = hash.invert
12
+ @m2f_forms = hash
13
+ end
14
+
15
+ private
16
+
17
+ def feminine_to_masculine
18
+ @f2m_forms ||= m2f_forms.invert
19
+ end
20
+
21
+
22
+ def default_m2f_forms
23
+ {
24
+ '♂' => '♀',
25
+ '⚨' => '♀',
26
+ '⚩' => '♀',
27
+ '⚣' => '⚢',
28
+ 'boy' => 'girl',
29
+ 'boyish' => 'girlish',
30
+ 'boys' => 'girls',
31
+ 'brother' => 'sister',
32
+ 'brothers' => 'sisters',
33
+ 'cowboy' => 'cowgirl',
34
+ 'cowboys' => 'cowgirls',
35
+ 'craftsman' => 'craftswoman',
36
+ 'dad' => 'mom',
37
+ 'daddy' => 'mommy',
38
+ 'dick' => 'pussy',
39
+ 'dude' => 'lady',
40
+ 'dudes' => 'ladies',
41
+ 'ex-wife' => 'ex-husband',
42
+ 'father' => 'mother',
43
+ 'fathers' => 'mothers',
44
+ 'gentleman' => 'lady',
45
+ 'gentlemen' => 'ladies',
46
+ 'guy' => 'gal',
47
+ 'guys' => 'gals',
48
+ 'he' => 'she',
49
+ 'him' => 'her',
50
+ 'himself' => 'herself',
51
+ 'his' => 'her',
52
+ 'king' => 'queen',
53
+ 'kings' => 'queens',
54
+ 'male' => 'female',
55
+ 'man' => 'woman',
56
+ 'manhood' => 'womanhood',
57
+ 'manlier' => 'womanlier',
58
+ 'manliest' => 'womanliest',
59
+ 'manliness' => 'womanliness',
60
+ 'manly' => 'womanly',
61
+ 'masculine' => 'feminine',
62
+ 'masculinity' => 'femininity',
63
+ 'men' => 'women',
64
+ 'mister' => 'miss', # Careful here going from feminine to masculine
65
+ 'mr' => 'ms',
66
+ 'mr.' => 'ms.',
67
+ 'nobleman' => 'noblewoman',
68
+ 'patriarch' => 'matriarch',
69
+ 'prince' => 'princess',
70
+ 'princes' => 'princesses',
71
+ 'waited' => 'waitressed',
72
+ 'waiter' => 'waitress'
73
+ }
74
+ end
75
+
76
+
77
+ def masculine_to_feminine
78
+ @m2f_forms ||= default_m2f_forms
79
+ end
80
+
81
+ end
82
+ end
@@ -0,0 +1,7 @@
1
+ module Genderizr
2
+ module StringMethods
3
+ def feminize; Genderizr.feminize(self); end
4
+ def genderize(turn_feminine); Genderizr.genderize(self,turn_feminine); end
5
+ def masculize; Genderizr.masculize(self); end
6
+ end
7
+ end
@@ -0,0 +1 @@
1
+ module Genderizr; VERSION = '0.0.8'; end
data/lib/genderizr.rb CHANGED
@@ -1,130 +1,40 @@
1
- # encoding: utf-8
2
1
  require 'strscan'
2
+ require 'genderizr/version'
3
3
 
4
4
  module Genderizr
5
5
 
6
- VERSION = "0.0.7"
7
-
8
- def self.monkey_patch(mod)
9
- mod.send(:include, Genderizr::InstanceMethods)
10
- mod.send(:extend, Genderizr::Forms)
11
- end
12
-
13
-
14
- module Changers
15
-
16
- def feminize(string)
17
- genderize(string, true)
18
- end
6
+ autoload :Forms, 'genderizr/forms'
7
+ autoload :StringMethods, 'genderizr/string_methods'
8
+ autoload :Version, 'genderizr/version'
19
9
 
10
+ extend Forms
20
11
 
21
- def genderize(string,turn_feminine)
22
- return "" if string.nil?
23
- lookup = turn_feminine ? masculine_to_feminine : feminine_to_masculine
24
- result = ""
25
- s = StringScanner.new(string)
26
- until s.eos? do
27
- word = s.scan(/\w+|\W+/)
28
- result << (lookup[word].nil? ? word : lookup[word])
29
- end
30
- result
31
- end
32
-
33
-
34
- def masculize(string)
35
- genderize(string, false)
36
- end
37
-
12
+ def self.feminize(string)
13
+ genderize(string, true)
38
14
  end
39
- extend Genderizr::Changers
40
-
41
15
 
42
- module Forms
43
16
 
44
- def m2f_forms
45
- @m2f_forms ||= masculine_to_feminine
17
+ def self.genderize(string,turn_feminine)
18
+ return "" if string.nil?
19
+ lookup = turn_feminine ? masculine_to_feminine : feminine_to_masculine
20
+ result = ""
21
+ s = StringScanner.new(string)
22
+ until s.eos? do
23
+ word = s.scan(/\w+|\W+/)
24
+ result << (lookup[word].nil? ? word : lookup[word])
46
25
  end
26
+ result
27
+ end
47
28
 
48
29
 
49
- def m2f_forms=(hash)
50
- @f2m_forms = hash.invert
51
- @m2f_forms = hash
52
- end
53
-
54
- private
55
-
56
- def feminine_to_masculine
57
- @f2m_forms ||= m2f_forms.invert
58
- end
59
-
60
-
61
- def default_m2f_forms
62
- {
63
- '♂' => '♀',
64
- '⚨' => '♀',
65
- '⚩' => '♀',
66
- '⚣' => '⚢',
67
- 'boy' => 'girl',
68
- 'boyish' => 'girlish',
69
- 'boys' => 'girls',
70
- 'brother' => 'sister',
71
- 'brothers' => 'sisters',
72
- 'cowboy' => 'cowgirl',
73
- 'cowboys' => 'cowgirls',
74
- 'craftsman' => 'craftswoman',
75
- 'dad' => 'mom',
76
- 'daddy' => 'mommy',
77
- 'dick' => 'pussy',
78
- 'dude' => 'lady',
79
- 'dudes' => 'ladies',
80
- 'ex-wife' => 'ex-husband',
81
- 'father' => 'mother',
82
- 'fathers' => 'mothers',
83
- 'gentleman' => 'lady',
84
- 'gentlemen' => 'ladies',
85
- 'guy' => 'gal',
86
- 'guys' => 'gals',
87
- 'he' => 'she',
88
- 'him' => 'her',
89
- 'himself' => 'herself',
90
- 'his' => 'her',
91
- 'king' => 'queen',
92
- 'kings' => 'queens',
93
- 'male' => 'female',
94
- 'man' => 'woman',
95
- 'manhood' => 'womanhood',
96
- 'manlier' => 'womanlier',
97
- 'manliest' => 'womanliest',
98
- 'manliness' => 'womanliness',
99
- 'manly' => 'womanly',
100
- 'masculine' => 'feminine',
101
- 'masculinity' => 'femininity',
102
- 'men' => 'women',
103
- 'mister' => 'miss', # Careful here going from feminine to masculine
104
- 'mr' => 'ms',
105
- 'mr.' => 'ms.',
106
- 'nobleman' => 'noblewoman',
107
- 'patriarch' => 'matriarch',
108
- 'prince' => 'princess',
109
- 'princes' => 'princesses',
110
- 'waited' => 'waitressed',
111
- 'waiter' => 'waitress'
112
- }
113
- end
114
-
115
-
116
- def masculine_to_feminine
117
- @m2f_forms ||= default_m2f_forms
118
- end
119
-
30
+ def self.masculize(string)
31
+ genderize(string, false)
120
32
  end
121
- extend Genderizr::Forms
122
33
 
123
34
 
124
- module InstanceMethods
125
- def feminize; Genderizr.feminize(self); end
126
- def genderize(turn_feminine); Genderizr.genderize(self,turn_feminine); end
127
- def masculize; Genderizr.masculize(self); end
35
+ def self.monkey_patch(mod)
36
+ mod.send(:include, Genderizr::StringMethods)
37
+ mod.send(:extend, Genderizr::Forms)
128
38
  end
129
39
 
130
40
  end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ describe Genderizr do
4
+
5
+ it_behaves_like 'a genderized module'
6
+ it_behaves_like 'genderizr form changer'
7
+
8
+ it "doesn't add methods to String by default" do
9
+ FEMININE.should_not respond_to(:feminize)
10
+ FEMININE.should_not respond_to(:genderize)
11
+ FEMININE.should_not respond_to(:masculize)
12
+ end
13
+
14
+ end
@@ -0,0 +1,66 @@
1
+ MASCULINE = "king"
2
+ FEMININE = "queen"
3
+
4
+ shared_examples 'a genderized module' do
5
+
6
+ it "handles a blank string" do
7
+ subject.feminize("").should eq ""
8
+ subject.masculize("").should eq ""
9
+ end
10
+
11
+ it "handles a nil argument" do
12
+ subject.feminize(nil).should eq ""
13
+ subject.masculize(nil).should eq ""
14
+ end
15
+
16
+ it "switches genders of a masculine string when requested" do
17
+ subject.genderize(MASCULINE,true).should eq FEMININE
18
+ end
19
+
20
+ it "doesn't switch genders of a masculine string when requested" do
21
+ subject.genderize(MASCULINE,false).should eq MASCULINE
22
+ end
23
+
24
+ it "switches genders of a feminine string when requested" do
25
+ subject.genderize(FEMININE,false).should eq MASCULINE
26
+ end
27
+
28
+ it "doesn't switch genders of a feminine string when requested" do
29
+ subject.genderize(FEMININE,true).should eq FEMININE
30
+ end
31
+
32
+ it "does the same thing with the explicit and generic method calls" do
33
+ subject.feminize(MASCULINE).should eq subject.genderize(MASCULINE,true)
34
+ subject.feminize(FEMININE).should eq subject.genderize(FEMININE,true)
35
+ subject.masculize(MASCULINE).should eq subject.genderize(MASCULINE,false)
36
+ subject.masculize(FEMININE).should eq subject.genderize(FEMININE,false)
37
+ end
38
+
39
+ it "ignores punctuation" do
40
+ subject.feminize("#{MASCULINE}.").should eq "#{FEMININE}."
41
+ subject.feminize("#{MASCULINE}-").should eq "#{FEMININE}-"
42
+ subject.feminize("!#{MASCULINE}-").should eq "!#{FEMININE}-"
43
+ end
44
+
45
+ it "doesn't ignore punctuation in 'mr.' and 'ms.'" do
46
+ mr = 'mr.'; ms = 'ms.'
47
+ subject.feminize(mr).should eq ms
48
+ subject.masculize(ms).should eq mr
49
+ end
50
+
51
+ it "preserves whitespace" do
52
+ subject.feminize(" #{MASCULINE}").should eq " #{FEMININE}"
53
+ subject.feminize(" #{MASCULINE}").should eq " #{FEMININE}"
54
+ subject.feminize("\t#{MASCULINE}").should eq " #{FEMININE}"
55
+ end
56
+
57
+ it "deals with multi-word strings" do
58
+ subject.feminize("#{MASCULINE} #{MASCULINE} #{FEMININE}").should eq "#{FEMININE} #{FEMININE} #{FEMININE}"
59
+ end
60
+
61
+ it "doesn't change the gender of words with in words" do
62
+ words_within_words = "#{MASCULINE}ified}"
63
+ subject.feminize(words_within_words).should eq words_within_words
64
+ end
65
+
66
+ end
@@ -0,0 +1,11 @@
1
+ shared_examples 'genderizr form changer' do
2
+
3
+ subject { described_class }
4
+
5
+ it "allows you to change the masculine to feminine forms" do
6
+ forms = { "han" => "leia" }
7
+ subject.m2f_forms = forms
8
+ subject.m2f_forms.should eq forms
9
+ end
10
+
11
+ end
@@ -0,0 +1,3 @@
1
+ $:.unshift('lib')
2
+ require 'genderizr'
3
+ Dir["./spec/shared/*.rb"].each { |f| require f }
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe String do
4
+
5
+ before :all do
6
+ Genderizr.monkey_patch(String)
7
+ end
8
+
9
+ it_behaves_like 'genderizr form changer'
10
+
11
+ it "behaves the same" do
12
+ FEMININE.feminize.should eq Genderizr.feminize(FEMININE)
13
+ FEMININE.genderize(false).should eq Genderizr.genderize(FEMININE,false)
14
+ FEMININE.genderize(true).should eq Genderizr.genderize(FEMININE,true)
15
+ FEMININE.masculize.should eq Genderizr.masculize(FEMININE)
16
+
17
+ MASCULINE.feminize.should eq Genderizr.feminize(MASCULINE)
18
+ MASCULINE.genderize(true).should eq Genderizr.genderize(MASCULINE,true)
19
+ MASCULINE.genderize(false).should eq Genderizr.genderize(MASCULINE,false)
20
+ MASCULINE.masculize.should eq Genderizr.masculize(MASCULINE)
21
+ end
22
+
23
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: genderizr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,6 +11,22 @@ bindir: bin
11
11
  cert_chain: []
12
12
  date: 2012-05-26 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: guard-rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
14
30
  - !ruby/object:Gem::Dependency
15
31
  name: rspec
16
32
  requirement: !ruby/object:Gem::Requirement
@@ -35,7 +51,15 @@ extensions: []
35
51
  extra_rdoc_files: []
36
52
  files:
37
53
  - README.md
54
+ - lib/genderizr/string_methods.rb
55
+ - lib/genderizr/version.rb
56
+ - lib/genderizr/forms.rb
38
57
  - lib/genderizr.rb
58
+ - spec/genderizr_spec.rb
59
+ - spec/spec_helper.rb
60
+ - spec/string_methods_spec.rb
61
+ - spec/shared/a_genderized_module.rb
62
+ - spec/shared/genderizr_form_changer.rb
39
63
  homepage: https://github.com/brundage/genderizr
40
64
  licenses: []
41
65
  post_install_message:
@@ -55,10 +79,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
55
79
  - !ruby/object:Gem::Version
56
80
  version: '0'
57
81
  requirements: []
58
- rubyforge_project:
82
+ rubyforge_project: genderizr
59
83
  rubygems_version: 1.8.24
60
84
  signing_key:
61
85
  specification_version: 3
62
86
  summary: A gem to genderize strings
63
- test_files: []
87
+ test_files:
88
+ - spec/genderizr_spec.rb
89
+ - spec/spec_helper.rb
90
+ - spec/string_methods_spec.rb
91
+ - spec/shared/a_genderized_module.rb
92
+ - spec/shared/genderizr_form_changer.rb
64
93
  has_rdoc: