Giter VIP home page Giter VIP logo

genderize's Introduction

Genderize

Genderize is a simple Rails gem for adding gender helper methods to Rails models.

New:

  • (0.1.1) options to coerce invalid input to nil or to coerce empty string to nil
  • (0.1.0) we now have non-binary as an option

Example

Feminine

# Setting the gender is simple - just set the attribute value to "m", "n", or "f"
@user = User.new(gender: "f")

# This also works
@user = User.new(gender: "female")

# This gives us a few helper methods to add gender specific text to our views
@user.gender.male? # => false
@user.gender.non_binary? # => false
@user.gender.name # => "female"
@user.gender.to_s # => "f"
@user.gender.abbr # => "f"

# gender pronouns
# As the subject of a sentence
@user.gender.subject # => 'she'

# As the object of a sentence
@user.gender.object # => 'her'

# Showing possession
@user.gender.possessive # => 'her'

# Writing a casual form of the gender
@user.gender.casual # => "girl"

Masculine

# Setting the gender is simple - just set the attribute value to "m", "n", or "f"
@user = User.new(gender: "m")

# This also works
@user = User.new(gender: "male")

# This gives us a few helper methods to add gender specific text to our views
@user.gender.female? # => false
@user.gender.non_binary? # => false
@user.gender.name # => "male"
@user.gender.to_s # => "m"
@user.gender.abbr # => "m"

# gender pronouns
# As the subject of a sentence
@user.gender.subject # => 'he'

# As the object of a sentence
@user.gender.object # => 'him'

# Showing possession
@user.gender.possessive # => 'his'

# Writing a casual form of the gender
@user.gender.casual # => "guy"

Non-binary

# Setting the gender is simple - just set the attribute value to "m", "n", or "f"
@user = User.new(gender: "n")

# This also works
@user = User.new(gender: "non-binary")
@user = User.new(gender: "non_binary")
@user = User.new(gender: "non binary")

# This gives us a few helper methods to add gender specific text to our views
@user.gender.female? # => false
@user.gender.male? # => false
@user.gender.non_binary? # => true
@user.gender.name # => "non_binary"
@user.gender.to_s # => "n"
@user.gender.abbr # => "n"

# gender pronouns
# As the subject of a sentence
@user.gender.subject # => 'they'

# As the object of a sentence
@user.gender.object # => 'them'

# Showing possession
@user.gender.possessive # => 'their'

# Writing a casual form of the gender
@user.gender.casual # => "person"

Blank (no gender specified)

@user = User.new(gender: "")

# This gives us a few helper methods to add gender specific text to our views
@user.gender.female? # => false
@user.gender.male? # => false
@user.gender.name # => ""
@user.gender.to_s # => ""
@user.gender.abbr # => ""

# gender pronouns
# As the subject of a sentence
@user.gender.subject # => 'they'

# As the object of a sentence
@user.gender.object # => 'them'

# Showing possession
@user.gender.possessive # => 'their'

# Writing a casual form of the gender
@user.gender.casual # => "person"

Changing these values

You can change the values for each of the methods described above by modifying your locales file. See config/locales/en.yml for more info.

Installation

Add this to your Gemfile:

gem "genderize"

...and run bundle install to install the gem.

Next, run:

$ rails g genderize:install

... to install the genderize.en.yml file in your locales directory

Finally, to genderize a model attribute:

class User < ActiveRecord::Base

  genderize

  # ... or, if your db column isn't named `gender`
  genderize(:user_gender)

  ### New opts (must specify column name to use)
  # ... to prevent storing empty strings and store them as nil instead
  genderize(:gender, no_empty_string: true)

  # ... to coerce invalid arguments to nil rather than throwing ArgumentError
  genderize(:gender, set_invalid_to_nil: true)

  # ... these can be combined together
  genderize(:gender, set_invalid_to_nil: true, no_empty_string: true)

end      

Issues

If you discover a problem with Genderize, please let us know about it.

Remember to search the issues list first in case your issue has already been raised by another Githuber

Documentation

Full documentation is available here: http://rubydoc.info/gems/genderize

Contributing

You're welcome to contribute to Genderize.

Legal Stuff

Copyright 2013 Katana Code Ltd.

See LEGAL for full details.

Credits

Developed by Katana

About Katana

Katana are mobile and web app developers based in Edinburgh, Scotland.

genderize's People

Contributors

bodacious avatar courtneymiller2010 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

genderize's Issues

attr_encrypted

Does this work with attr_encrypted fields? Our database has the field encrypted_gender, which is then decrypted and mapped to gender.

Add neutral gender

Another suggestion from the team here is to add a neutral gender for when the column is nil. Right now, were getting stuck with a number of if gender.present? to avoid the app from breaking down when we call gender.name if the gender column is nil.

It would be awesome to have genderize return a neutral object (them instead of him etc).

Accept male/female as well as m/f

It would be awesome if genderize would accept male/female as well as just m/f. This would make integration with e.g. Facebook a lot easier. Any chance of adding this?

Blank gender does not returned wrapped object

When the object has a blank gender, it does not get wrapped as a Genderize::Gender, thus you cannot call:

user = User.new(gender: '')
user.gender.object

It would throw this error:

 Failure/Error: user.gender.object
     
     NoMethodError:
       undefined method `object' for "":String
       Did you mean?  object_id

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.