genderizr 0.0.7 → 0.0.8

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,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: