genderize 0.0.8 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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