Skip to content

chrisb87/attr_enumerator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

1775181 · May 3, 2013

History

36 Commits
May 2, 2013
May 2, 2013
Mar 15, 2011
Mar 15, 2011
Mar 15, 2011
May 3, 2013
May 6, 2011
May 3, 2013
Mar 15, 2011
Jul 7, 2011
May 2, 2013
May 3, 2013
May 3, 2013
May 3, 2013

Repository files navigation

attr_enumerator

A method for restricting an attribute to a set of choices.

An invocation of attr_enumerator will create:

  • a class constant containing all valid choices

  • a validation requiring the attribute’s value to be one of the choices

  • instance methods for each choice, returning true if the attribute is that value and false otherwise

  • scopes for each choice that retrieve records where the attribute is that value

Example

class Car < ActiveRecord::Base
  attr_enumerator :color, ['red', 'blue']
end

# constant
Car::COLORS           # => ['red', 'blue']

# validation
car = Car.new
car.color = 'green'
car.valid?            # => false
car.errors            # => {:color => ["is invalid"]}
car.color = 'red'
car.valid?            # => true

# instance methods
car.red?              # => true
car.blue?             # => false

# scopes
car.save
Car.red               # => [<#Car>]

With or without ActiveRecord

The AttrEnumerator module will be automatically included in ActiveRecord::Base, making the attr_enumerator method available in all ActiveRecord models.

To include AttrEnumerator on a non-ActiveRecord model the class must also include ActiveModel::Validations and provide an accessor to the attribute. The model will have all the above functionality except no scopes will be generated.

class Car
  include ActiveModel::Validations
  include AttrEnumerator

  attr_accessor :color
  attr_enumerator :color, ['red', 'blue']
end

Configuration

Options may be passed as the last argument to attr_enumerator to configure its behavior. For example:

class Car < ActiveRecord::Base
  attr_enumerator :color, ['red', 'blue'], :constant => :PAINT_COLORS, :prefix => :painted
end

Car::PAINT_COLORS   # => ['red', 'blue']

car = Car.new
car.color = 'red'
car.painted_red?    # => true

Options

  • constant (default: pluralized, uppercased attribute name)

    Set a custom constant name.

  • prefix (default: nil)

    Set a prefix for generated methods and scopes.

  • message (default: internationalized "is invalid")

    Set the validation error message when the attribute is not a valid value. Use %{value} to refer to the value of the attribute, e.g. "%{value} is not a valid choice".

  • allow_nil / allow_blank (default: false)

    Do not fail validation when the attribute is nil or blank.

  • if / unless (default: unused)

    Set a method, proc or string to call to determine if the validation should occur. See ActiveModel::Validations for more details.

Contributing to attr_enumerator

  • Check out the latest master to make sure the feature hasn’t been implemented or the bug hasn’t been fixed yet

  • Check out the issue tracker to make sure someone already hasn’t requested it and/or contributed it

  • Fork the project

  • Start a feature/bugfix branch

  • Commit and push until you are happy with your contribution

  • Make sure to add tests for it. This is important so I don’t break it in a future version unintentionally.

  • Create a pull request

  • Let me know if you want to be included in CONTRIBUTORS.txt

About

A method for restricting an attribute to a set of choices.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages