genderize 0.0.8 → 0.1.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9d5896e1856dac2e401a587209c71b2cae369821
4
- data.tar.gz: 6a116943a73774552baf065423aba613f3b4642c
3
+ metadata.gz: 2ee1ba31da4da138caff5ae82d75060bc9b7a65e
4
+ data.tar.gz: 02a6a2d5a0894b28b546db7fdedee478c9fe2a1d
5
5
  SHA512:
6
- metadata.gz: 6f1afe0ebcb4288691692cebffc584697e5c83cd328ee9165892b98571d8bcddeed28270dd5ae492ccc6b87cb851bff25b4a8257328926fd5c1030dd024cf748
7
- data.tar.gz: 5140e5c42950d1f64e6cc5715a31d37eea13fa7f65a6ff39c4abdd15e8d47a345927e89e7cc4afe50218280435baba9240312af4bf7ac90ed9248ef422fcabb3
6
+ metadata.gz: 949548a45ebe65219d834b7d9f8e3a92f3ed525ac67cb38570d8580d0d97fd474cc832c71f5e8af49e3fb7b46b480af53f52ba29c0b18fe291850992a9cff94d
7
+ data.tar.gz: 1b8c9cac5895dd580e0ab0733c45ed77d7be7c085be9e8bf9f22ce03e4ee0ce46de3fea67c02309802860152d4f3f5665d93a510ea2b81dd82a2389f859467ab
data/README.md CHANGED
@@ -2,28 +2,126 @@
2
2
 
3
3
  Genderize is a simple Rails gem for adding gender helper methods to Rails models.
4
4
 
5
+ _New:_ we now have non-binary as an option
6
+
5
7
  ## Example
6
8
 
7
9
 
8
- # Setting the gender is simple - just set the attribute value to "m" or "f"
10
+ ### Feminine
11
+
12
+ # Setting the gender is simple - just set the attribute value to "m", "n", or "f"
9
13
  @user = User.new(gender: "f")
10
14
 
15
+ # This also works
16
+ @user = User.new(gender: "female")
17
+
11
18
  # This gives us a few helper methods to add gender specific text to our views
12
- @user.gender.male? # => false
19
+ @user.gender.male? # => false
20
+ @user.gender.non_binary? # => false
13
21
  @user.gender.name # => "female"
14
22
  @user.gender.to_s # => "f"
15
23
  @user.gender.abbr # => "f"
16
-
24
+
17
25
  # gender pronouns
18
26
  # As the subject of a sentence
19
27
  @user.gender.subject # => 'she'
28
+
20
29
  # As the object of a sentence
21
30
  @user.gender.object # => 'her'
31
+
22
32
  # Showing possession
23
33
  @user.gender.possessive # => 'her'
34
+
35
+ # Writing a casual form of the gender
36
+ @user.gender.casual # => "girl"
37
+
38
+ ### Masculine
39
+
40
+ # Setting the gender is simple - just set the attribute value to "m", "n", or "f"
41
+ @user = User.new(gender: "m")
42
+
43
+ # This also works
44
+ @user = User.new(gender: "male")
45
+
46
+ # This gives us a few helper methods to add gender specific text to our views
47
+ @user.gender.female? # => false
48
+ @user.gender.non_binary? # => false
49
+ @user.gender.name # => "male"
50
+ @user.gender.to_s # => "m"
51
+ @user.gender.abbr # => "m"
52
+
53
+ # gender pronouns
54
+ # As the subject of a sentence
55
+ @user.gender.subject # => 'he'
56
+
57
+ # As the object of a sentence
58
+ @user.gender.object # => 'him'
59
+
60
+ # Showing possession
61
+ @user.gender.possessive # => 'his'
62
+
63
+ # Writing a casual form of the gender
64
+ @user.gender.casual # => "guy"
65
+
66
+ ### Non-binary
67
+
68
+ # Setting the gender is simple - just set the attribute value to "m", "n", or "f"
69
+ @user = User.new(gender: "n")
70
+
71
+ # This also works
72
+ @user = User.new(gender: "non-binary")
73
+ @user = User.new(gender: "non_binary")
74
+ @user = User.new(gender: "non binary")
75
+
76
+ # This gives us a few helper methods to add gender specific text to our views
77
+ @user.gender.female? # => false
78
+ @user.gender.male? # => false
79
+ @user.gender.non_binary? # => true
80
+ @user.gender.name # => "non_binary"
81
+ @user.gender.to_s # => "n"
82
+ @user.gender.abbr # => "n"
83
+
84
+ # gender pronouns
85
+ # As the subject of a sentence
86
+ @user.gender.subject # => 'they'
87
+
88
+ # As the object of a sentence
89
+ @user.gender.object # => 'them'
90
+
91
+ # Showing possession
92
+ @user.gender.possessive # => 'their'
93
+
94
+ # Writing a casual form of the gender
95
+ @user.gender.casual # => "person"
96
+
97
+ ### Blank (no gender specified)
98
+
99
+ @user = User.new(gender: "")
100
+
101
+ # This gives us a few helper methods to add gender specific text to our views
102
+ @user.gender.female? # => false
103
+ @user.gender.male? # => false
104
+ @user.gender.name # => ""
105
+ @user.gender.to_s # => ""
106
+ @user.gender.abbr # => ""
107
+
108
+ # gender pronouns
109
+ # As the subject of a sentence
110
+ @user.gender.subject # => 'they'
111
+
112
+ # As the object of a sentence
113
+ @user.gender.object # => 'them'
114
+
115
+ # Showing possession
116
+ @user.gender.possessive # => 'their'
117
+
24
118
  # Writing a casual form of the gender
25
- @user.gender.casual # => "chick"
26
-
119
+ @user.gender.casual # => "person"
120
+
121
+ ## Changing these values
122
+
123
+ You can change the values for each of the methods described above by modifying your locales file. See [config/locales/en.yml](config/locales/genderize.en.yml) for more info.
124
+
27
125
  ## Installation
28
126
 
29
127
  Add this to your Gemfile:
@@ -45,7 +143,7 @@ Finally, to *genderize* a model attribute:
45
143
  class User < ActiveRecord::Base
46
144
 
47
145
  genderize
48
-
146
+
49
147
  # ... or, if your db column isn't named `gender`
50
148
  genderize(:user_gender)
51
149
 
@@ -61,7 +159,7 @@ by another Githuber
61
159
 
62
160
  ## Documentation
63
161
 
64
- Full documentation is available here: http://rubydoc.info/gems/blogit
162
+ Full documentation is available here: http://rubydoc.info/gems/genderize
65
163
 
66
164
  ## Contributing
67
165
 
@@ -71,12 +169,12 @@ You're welcome to contribute to Genderize.
71
169
 
72
170
  Copyright 2013 [Katana Code Ltd.](http://katanacode.com)
73
171
 
74
- See (LEGAL)[LEGAL] for full details.
172
+ See [LEGAL](MIT-LICENSE) for full details.
75
173
 
76
174
  ## Credits
77
175
 
78
- Developed by [Katana Code](http://katanacode.com)
176
+ Developed by [Katana](http://katanacode.com)
79
177
 
80
- ## About Katana Code
178
+ ## About Katana
81
179
 
82
- Katana Code are [Ruby on Rails Developers Based in Edinburgh, Scotland](http://katanacode.com/ "Katana Code").
180
+ Katana are [mobile and web app developers based in Edinburgh, Scotland](http://katanacode.com/ "Katana").
@@ -3,26 +3,31 @@ en:
3
3
  name:
4
4
  masculine: "male"
5
5
  feminine: "female"
6
+ non_binary: "non_binary"
6
7
  blank: ""
7
8
 
8
9
  # pronouns
9
10
  subject:
10
11
  masculine: 'he'
11
12
  feminine: 'she'
13
+ non_binary: they
12
14
  blank: "they"
13
15
 
14
16
  object:
15
17
  masculine: 'him'
16
18
  feminine: 'her'
19
+ non_binary: them
17
20
  blank: "them"
18
21
 
19
22
  possessive:
20
23
  masculine: 'his'
21
24
  feminine: 'her'
25
+ non_binary: their
22
26
  blank: "their"
23
27
 
24
28
  # Other forms
25
29
  casual:
26
30
  masculine: guy
27
31
  feminine: girl
32
+ non_binary: person
28
33
  blank: person
data/lib/genderize.rb CHANGED
@@ -35,16 +35,12 @@ module Genderize
35
35
  # Raises ArgumentError if gender is not a single alphanumeric character "m" or "f"
36
36
  define_method "#{col_name}=" do |string|
37
37
  string = string.to_s.first
38
- unless string.to_s =~ /\A(m|f|)\Z/i
39
- raise ArgumentError, "Gender must be one of '', 'm', or 'f'"
38
+ unless string.to_s =~ /\A(m|f|n|)\Z/i
39
+ raise ArgumentError, "Gender must be one of '', 'n', 'm', or 'f'"
40
40
  end
41
41
  write_attribute(col_name, string)
42
42
 
43
- if string.blank?
44
- instance_variable_set("@#{col_name}", string)
45
- else
46
- instance_variable_set("@#{col_name}", Genderize::Gender.new(read_attribute(col_name)))
47
- end
43
+ instance_variable_set("@#{col_name}", Genderize::Gender.new(read_attribute(col_name)))
48
44
  end
49
45
 
50
46
  end
@@ -4,13 +4,13 @@ module Genderize
4
4
  include I18n
5
5
 
6
6
  # Maps the gender abbreviation name to the full name for translation keys
7
- ABR_KEY_NAME_MAPPING = { "" => "blank", "m" => "masculine", "f" => "feminine" }
7
+ ABR_KEY_NAME_MAPPING = { "" => "blank", "m" => "masculine", "f" => "feminine", "n" => "non_binary" }
8
8
 
9
9
 
10
10
  attr_reader :abbr
11
11
 
12
12
  def initialize(abbr)
13
- unless abbr.blank? or abbr.to_s =~ /\A(f|m|female|male)\Z/i
13
+ unless abbr.blank? or abbr.to_s =~ /\A(f|m|n|female|male|non[ -_]?binary)\Z/i
14
14
  raise "Invalid abbreviation: '#{abbr}'"
15
15
  end
16
16
  @abbr = abbr.blank? ? '' : abbr.to_s.first.downcase
@@ -48,6 +48,10 @@ module Genderize
48
48
  abbr == 'f'
49
49
  end
50
50
 
51
+ def non_binary?
52
+ abbr == 'n'
53
+ end
54
+
51
55
  def blank?
52
56
  abbr == ""
53
57
  end
@@ -1,3 +1,3 @@
1
1
  module Genderize
2
- VERSION = "0.0.8"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -4,26 +4,69 @@ describe User, type: :model do
4
4
 
5
5
  describe "gender" do
6
6
 
7
- let(:user) { User.new(gender: "f") }
7
+ let(:user) { User.new(gender: gender) }
8
8
 
9
- it "should return a Gender object" do
10
- expect(user.gender).to be_an_instance_of(Genderize::Gender)
9
+ context "when female" do
10
+ let(:gender) { "f" }
11
+
12
+ it "should return a Gender object" do
13
+ expect(user.gender).to be_an_instance_of(Genderize::Gender)
14
+ end
15
+
16
+ it "should be female?" do
17
+ expect(user.gender).to be_female
18
+ end
11
19
  end
12
20
 
13
- it "should be female?" do
14
- expect(user.gender).to be_female
21
+ context "when male" do
22
+ let(:gender) { "m" }
23
+
24
+ it "should return a Gender object" do
25
+ expect(user.gender).to be_an_instance_of(Genderize::Gender)
26
+ end
27
+
28
+ it "should be male?" do
29
+ expect(user.gender).to be_male
30
+ end
15
31
  end
16
32
 
17
- it "should be male when changed" do
18
- user.gender = "m"
19
- expect(user.gender).to be_male
33
+ context "when non-binary" do
34
+ let(:gender) { "n" }
35
+
36
+ it "should return a Gender object" do
37
+ expect(user.gender).to be_an_instance_of(Genderize::Gender)
38
+ end
39
+
40
+ it "should be non_binary?" do
41
+ expect(user.gender).to be_non_binary
42
+ end
20
43
  end
21
44
 
22
- it "should be blank when changed" do
23
- user.gender = ""
24
- expect(user.gender).to be_empty
45
+ context "when blank" do
46
+ let(:gender) { "" }
47
+
48
+ it "should return a Gender object" do
49
+ expect(user.gender).to be_an_instance_of(Genderize::Gender)
50
+ end
51
+
52
+ it "should be blank?" do
53
+ expect(user.gender).to be_blank
54
+ end
25
55
  end
26
56
 
57
+ context "when changed" do
58
+ let(:gender) { "f" }
59
+
60
+ it "should be male when changed" do
61
+ user.gender = "m"
62
+ expect(user.gender).to be_male
63
+ end
64
+
65
+ it "should be blank when changed" do
66
+ user.gender = ""
67
+ expect(user.gender).to be_blank
68
+ end
69
+ end
27
70
  end
28
71
 
29
72
  describe "full gender names" do
@@ -31,6 +74,7 @@ describe User, type: :model do
31
74
  it 'should set the gender as the abbreviation' do
32
75
  expect(User.new(gender: "female").gender).to be_female
33
76
  expect(User.new(gender: "male").gender).to be_male
77
+ expect(User.new(gender: "non-binary").gender).to be_non_binary
34
78
  expect(User.new(gender: "").gender).to be_blank
35
79
  end
36
80
 
@@ -2,18 +2,27 @@ require "spec_helper"
2
2
 
3
3
  describe Genderize::Gender do
4
4
 
5
- let(:female) { Gender.new("f") }
6
- let(:male) { Gender.new("M") }
7
- let(:blank) { Gender.new('') }
5
+ let(:female) { Gender.new("f") }
6
+ let(:male) { Gender.new("M") }
7
+ let(:non_binary) { Gender.new("n") }
8
+ let(:blank) { Gender.new('') }
8
9
 
9
10
  context "when full gender name is used" do
10
11
 
11
12
  it "should find the correct abbreviation" do
12
13
  expect(Gender.new("female").abbr).to eql('f')
13
14
  expect(Gender.new("male").abbr).to eql('m')
15
+ expect(Gender.new("non_binary").abbr).to eql('n')
14
16
  expect(Gender.new("").abbr).to eql('')
15
17
  end
16
18
 
19
+ it "can match a dash, underscore, space, or no separator for non_binary" do
20
+ separators = ["-", "_", " ", ''].each do |separator|
21
+ name = "non#{separator}binary"
22
+ expect(Gender.new(name).abbr).to eql('n')
23
+ end
24
+ end
25
+
17
26
  end
18
27
 
19
28
 
@@ -35,6 +44,14 @@ describe Genderize::Gender do
35
44
 
36
45
  end
37
46
 
47
+ context "when non_binary" do
48
+
49
+ it "should be 'non_binary" do
50
+ expect(non_binary.name).to eql("non_binary")
51
+ end
52
+
53
+ end
54
+
38
55
  context "when blank" do
39
56
 
40
57
  it "should be ''" do
@@ -64,6 +81,14 @@ describe Genderize::Gender do
64
81
 
65
82
  end
66
83
 
84
+ context "when non_binary" do
85
+
86
+ it "should be 'n'" do
87
+ expect(non_binary.abbr).to eql("n")
88
+ end
89
+
90
+ end
91
+
67
92
  context "when blank" do
68
93
 
69
94
  it "should be ''" do
@@ -93,6 +118,14 @@ describe Genderize::Gender do
93
118
 
94
119
  end
95
120
 
121
+ context "when non_binary" do
122
+
123
+ it "should be 'they'" do
124
+ expect(non_binary.subject).to eql("they")
125
+ end
126
+
127
+ end
128
+
96
129
  context "when blank" do
97
130
 
98
131
  it "should be 'they'" do
@@ -121,6 +154,14 @@ describe Genderize::Gender do
121
154
 
122
155
  end
123
156
 
157
+ context "when non_binary" do
158
+
159
+ it "should be 'them'" do
160
+ expect(non_binary.object).to eql("them")
161
+ end
162
+
163
+ end
164
+
124
165
  context "when blank" do
125
166
 
126
167
  it "should be 'them'" do
@@ -150,6 +191,14 @@ describe Genderize::Gender do
150
191
 
151
192
  end
152
193
 
194
+ context "when non_binary" do
195
+
196
+ it "should be 'their'" do
197
+ expect(non_binary.possessive).to eql("their")
198
+ end
199
+
200
+ end
201
+
153
202
  context "when blank" do
154
203
 
155
204
  it "should be 'their'" do
@@ -180,6 +229,14 @@ describe Genderize::Gender do
180
229
 
181
230
  end
182
231
 
232
+ context "when non_binary" do
233
+
234
+ it "should be 'person'" do
235
+ expect(non_binary.casual).to eql("person")
236
+ end
237
+
238
+ end
239
+
183
240
  context "when blank" do
184
241
 
185
242
  it "should be 'person'" do
@@ -194,15 +251,17 @@ describe Genderize::Gender do
194
251
  describe :to_s do
195
252
 
196
253
  it "should equal the abbr value" do
197
- expect(male.to_s).to eql(male.abbr)
198
- expect(female.to_s).to eql(female.abbr)
199
- expect(blank.to_s).to eql(blank.abbr)
254
+ expect(male.to_s).to eql(male.abbr)
255
+ expect(female.to_s).to eql(female.abbr)
256
+ expect(non_binary.to_s).to eql(non_binary.abbr)
257
+ expect(blank.to_s).to eql(blank.abbr)
200
258
  end
201
259
 
202
260
  it "returns a string" do
203
- expect(male.to_s).to be_an_instance_of(String)
204
- expect(female.to_s).to be_an_instance_of(String)
205
- expect(blank.to_s).to be_an_instance_of(String)
261
+ expect(male.to_s).to be_an_instance_of(String)
262
+ expect(female.to_s).to be_an_instance_of(String)
263
+ expect(non_binary.to_s).to be_an_instance_of(String)
264
+ expect(blank.to_s).to be_an_instance_of(String)
206
265
  end
207
266
 
208
267
  end
@@ -210,9 +269,10 @@ describe Genderize::Gender do
210
269
  describe :capital_abbr do
211
270
 
212
271
  it "should equal the abbr value capitalized" do
213
- expect(male.capital_abbr).to eql(male.abbr.capitalize)
214
- expect(female.capital_abbr).to eql(female.abbr.capitalize)
215
- expect(blank.capital_abbr).to eql(blank.abbr.capitalize)
272
+ expect(male.capital_abbr).to eql(male.abbr.capitalize)
273
+ expect(female.capital_abbr).to eql(female.abbr.capitalize)
274
+ expect(non_binary.capital_abbr).to eql(non_binary.abbr.capitalize)
275
+ expect(blank.capital_abbr).to eql(blank.abbr.capitalize)
216
276
  end
217
277
 
218
278
  end
@@ -222,6 +282,7 @@ describe Genderize::Gender do
222
282
  it "should return true if passed abbr value" do
223
283
  expect(male == "m").to be_truthy
224
284
  expect(female == "f").to be_truthy
285
+ expect(non_binary == "n").to be_truthy
225
286
  expect(blank == nil).to be_truthy
226
287
  expect(blank == '').to be_truthy
227
288
  end
@@ -229,6 +290,7 @@ describe Genderize::Gender do
229
290
  it "should return false if not passed abbr value" do
230
291
  expect(male == "f").to be_falsey
231
292
  expect(female == 1).to be_falsey
293
+ expect(non_binary == "").to be_falsey
232
294
  expect(blank == "$").to be_falsey
233
295
  end
234
296
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: genderize
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bodacious
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-27 00:00:00.000000000 Z
11
+ date: 2017-08-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rdoc
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  description: A helpful class for gender-specific models in Ruby applications. Genderize
56
70
  adds useful helper methods for various pronouns and other written forms of male
57
71
  and female genders.
@@ -131,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
131
145
  version: '0'
132
146
  requirements: []
133
147
  rubyforge_project:
134
- rubygems_version: 2.6.3
148
+ rubygems_version: 2.6.11
135
149
  signing_key:
136
150
  specification_version: 4
137
151
  summary: A helpful class for gender-specific models in Ruby applications