genderizr 0.0.5 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -4,11 +4,11 @@ A ruby gem to genderize strings. It owes a little to [JackDanger's feminizer](h
4
4
 
5
5
  ## Usage
6
6
 
7
- `feminize_string(string)` replaces masculine words in `string` with their feminine counterparts
7
+ `Genderizr.feminize(string)` replaces masculine words in *string* with their feminine counterparts
8
8
 
9
- `masculize_string(string)` replaces feminine words
9
+ `Genderizr.masculize(string)` replaces feminine words
10
10
 
11
- `genderize_string(string, turn_feminine)` Feminizes `string` if `turn_feminine` evaluates to `true`, masculizes `string` otherwise.
11
+ `Genderizr.genderize(string, turnFeminine)` Takes a masculine *string* and Feminizes it if *turnFeminine* evaluates to *true*, otherwise masculizes *string*.
12
12
 
13
13
  ### On its own
14
14
 
@@ -17,7 +17,7 @@ A ruby gem to genderize strings. It owes a little to [JackDanger's feminizer](h
17
17
  1.9.3-p0 :001 > require 'genderizr'
18
18
  => true
19
19
 
20
- 1.9.3-p0 :002 > Genderizr.feminize_string("A man needs to keep his head up")
20
+ 1.9.3-p0 :002 > Genderizr.feminize("A man needs to keep his head up")
21
21
  => "A woman needs to keep her head up"
22
22
  ```
23
23
 
@@ -25,12 +25,20 @@ A ruby gem to genderize strings. It owes a little to [JackDanger's feminizer](h
25
25
 
26
26
  Genderizr monkey-patches the String class... cause that's the Rails Way.
27
27
 
28
- It adds `String#feminize`, `String#genderize(turn_feminine)` and `String#masculize`
28
+ It adds `String#feminize`, `String#genderize(turnFeminine)` and `String#masculize`
29
29
 
30
30
  Now you can do cool stuff like
31
31
 
32
32
  ```ruby
33
33
  # app/views/users/show.html.erb
34
34
 
35
- <%= @user.name %> <%= "updated his status".genderize(@user.female?) %>
35
+ <%= "#{@user.name} updated his status".genderize(@user.female?) %>
36
+ ```
37
+ Produces
38
+ ```
39
+ Dean updated his status.
40
+ ```
41
+ or
42
+ ```
43
+ Adrienne updated her status.
36
44
  ```
data/lib/genderizr.rb CHANGED
@@ -1,97 +1,134 @@
1
- require 'genderizr/version'
1
+ # encoding: utf-8
2
2
  require 'strscan'
3
3
 
4
4
  module Genderizr
5
5
 
6
- extend self
6
+ VERSION = "0.0.7"
7
7
 
8
- def feminize(string)
9
- genderize(string, true)
8
+ def self.monkey_patch(mod)
9
+ mod.send(:include, Genderizr::InstanceMethods)
10
+ mod.send(:extend, Genderizr::Forms)
10
11
  end
11
12
 
12
13
 
13
- def genderize(string,turn_feminine)
14
- return "" if string.nil?
15
- result = ""
16
- s = StringScanner.new(string)
17
- until s.eos? do
18
- word = s.scan(/\w+|\W+/)
19
- genderized = turn_feminine ? masculine_to_feminine[word] :
20
- feminine_to_masculine[word]
21
- result << (genderized.nil? ? word : genderized)
14
+ module Changers
15
+
16
+ def feminize(string)
17
+ genderize(string, true)
22
18
  end
23
- result
24
- end
25
19
 
26
20
 
27
- def masculize(string)
28
- genderize(string, false)
29
- end
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
30
32
 
31
33
 
32
- module StringMethods
33
- def feminize; Genderizr.feminize(self); end
34
- def genderize(turn_feminine); Genderizr.genderize(self,turn_feminine); end
35
- def masculize; Genderizr.masculize(self); end
34
+ def masculize(string)
35
+ genderize(string, false)
36
+ end
37
+
36
38
  end
39
+ extend Genderizr::Changers
40
+
41
+
42
+ module Forms
43
+
44
+ def m2f_forms
45
+ @m2f_forms ||= masculine_to_feminine
46
+ end
47
+
37
48
 
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
38
114
 
39
- private
40
115
 
41
- def feminine_to_masculine
42
- masculine_to_feminine.invert
116
+ def masculine_to_feminine
117
+ @m2f_forms ||= default_m2f_forms
118
+ end
119
+
43
120
  end
121
+ extend Genderizr::Forms
44
122
 
45
- def masculine_to_feminine
46
- {
47
- 'boy' => 'girl',
48
- 'boyish' => 'girlish',
49
- 'boys' => 'girls',
50
- 'brother' => 'sister',
51
- 'brothers' => 'sisters',
52
- 'cowboy' => 'cowgirl',
53
- 'cowboys' => 'cowgirls',
54
- 'craftsman' => 'craftswoman',
55
- 'dad' => 'mom',
56
- 'daddy' => 'mommy',
57
- 'dick' => 'pussy',
58
- 'dude' => 'lady',
59
- 'dudes' => 'ladies',
60
- 'ex-wife' => 'ex-husband',
61
- 'father' => 'mother',
62
- 'fathers' => 'mothers',
63
- 'gentleman' => 'lady',
64
- 'gentlemen' => 'ladies',
65
- 'guy' => 'gal',
66
- 'guys' => 'gals',
67
- 'he' => 'she',
68
- 'him' => 'her',
69
- 'himself' => 'herself',
70
- 'his' => 'her',
71
- 'king' => 'queen',
72
- 'kings' => 'queens',
73
- 'male' => 'female',
74
- 'man' => 'woman',
75
- 'manhood' => 'womanhood',
76
- 'manlier' => 'womanlier',
77
- 'manliest' => 'womanliest',
78
- 'manliness' => 'womanliness',
79
- 'manly' => 'womanly',
80
- 'masculine' => 'feminine',
81
- 'masculinity' => 'femininity',
82
- 'men' => 'women',
83
- 'mr' => 'ms',
84
- 'mr.' => 'ms.',
85
- 'nobleman' => 'noblewoman',
86
- 'patriarch' => 'matriarch',
87
- 'prince' => 'princess',
88
- 'princes' => 'princesses',
89
- 'waitress' => 'waiter',
90
- 'waitressed' => 'waited'
91
- }
123
+
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
92
128
  end
129
+
93
130
  end
94
131
 
95
- if defined?(Rails) && Rails::VERSION::MAJOR >= 3
96
- require 'genderizr/rails'
132
+ if defined?(Rails)
133
+ Genderizr.monkey_patch(String)
97
134
  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.5
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-20 00:00:00.000000000 Z
12
+ date: 2012-05-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -35,8 +35,6 @@ extensions: []
35
35
  extra_rdoc_files: []
36
36
  files:
37
37
  - README.md
38
- - lib/genderizr/rails.rb
39
- - lib/genderizr/version.rb
40
38
  - lib/genderizr.rb
41
39
  homepage: https://github.com/brundage/genderizr
42
40
  licenses: []
@@ -1,2 +0,0 @@
1
- require 'genderizr'
2
- class String; include Genderizr::StringMethods; end
@@ -1 +0,0 @@
1
- module Genderizr; VERSION = "0.0.5"; end