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