aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases/enum_test.rb
Commit message (Collapse)AuthorAgeFilesLines
* Enum mappings are now exposed via class methods instead of constants.Godfrey Chan2014-01-141-3/+3
| | | | | | | | | | | | | | | | Example: class Conversation < ActiveRecord::Base enum status: [ :active, :archived ] end Before: Conversation::STATUS # => { "active" => 0, "archived" => 1 } After: Conversation.statuses # => { "active" => 0, "archived" => 1 }
* use enum labels as form values. Achieved by `_before_type_cast`.Yves Senn2014-01-111-0/+4
| | | | | | | | | | | | | | | | | | | Closes #13650, #13672 This is an alternate implementation to solve #13650. Currently form fields contain the enum value (eg. "1"). This breaks because the setter `enum=` expects the label (eg. "active"). ActiveRecord::Enum allows you to use labels in your application but store numbers. We should make sure that all parts after AR are dealing with labels and not the underlying mapping to a number. This patch defines `_before_type_cast` on every enum column to return the label. This method is later used to fetch the value to display in form fields. I deliberately copied the implementation of the enum getter instead of delegating to it. This allows you to overwrite the getter and for example return a `Value Object` but have it still work for form fields.
* Building new records with enum scopes now works as expectedGodfrey Chan2014-01-031-6/+7
| | | | | | | | | | | | | | | | | | | | | | Previously, this would give an `ArgumentError`: class Issue < ActiveRecord::Base enum :status, [:open, :finished] end Issue.open.build # => ArgumentError: '0' is not a valid status Issue.open.create # => ArgumentError: '0' is not a valid status PR #13542 muted the error, but the issue remains. This commit fixes the issue by allowing the enum value to be written directly via the setter: Issue.new.status = 0 # This now sets status to :open Assigning a value directly via the setter like this is not part of the documented public API, so users should not rely on this behavior. Closes #13530.
* Fix the enums writer methodsRobin Dupret2014-01-011-1/+10
| | | | | | | | | | | Previously, the writer methods would simply check whether the passed argument was the symbol representing the integer value of an enum field. Therefore, it was not possible to specify the numeric value itself but the dynamically defined scopes generate where clauses relying on this kind of values so a chained call to a method like `find_or_initialize_by` would trigger an `ArgumentError`. Reference #13530
* Add the ability to nullify the `enum` columnAmr Tamimi2014-01-011-0/+15
|
* bring back constant to expose the enum mapping as HWIA.Yves Senn2013-11-061-0/+6
|
* store enum mapping using `Strings` instead of `Symbols`.Yves Senn2013-11-051-2/+7
| | | | | This allows to assign both `String` and `Symbol` values to the enum without having to call `to_sym`, which is a security problem.
* direct enum assignment rasies ArgumentError for unknown values.Yves Senn2013-11-051-0/+12
|
* define enum methods inside a `Module` to make them overwritable.Yves Senn2013-11-051-0/+5
|
* The enum value constant isn't used, so rm it for now.Aaron Patterson2013-11-041-10/+0
|
* fix copy & paste test-case naming. [ci skip]Yves Senn2013-11-041-1/+1
|
* Explicit mapping for enumYury Korolev2013-11-021-0/+8
|
* Add a test case for the scope enum addsDavid Heinemeier Hansson2013-11-021-0/+4
|
* Use an already existing fixtureCarlos Antonio da Silva2013-11-021-1/+1
|
* Fix to work on Ruby 1.9.3, example and changelog improvementsCarlos Antonio da Silva2013-11-021-3/+3
|
* Added ActiveRecord::Base#enum for declaring enum attributes where the values ↵David Heinemeier Hansson2013-11-021-0/+36
map to integers in the database, but can be queried by name