classy_enum 1.3.2 → 1.4.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.
- data/CHANGELOG.md +116 -0
- data/Gemfile +2 -1
- data/Gemfile.lock +17 -17
- data/{README.textile → README.md} +86 -70
- data/VERSION +1 -1
- data/classy_enum.gemspec +17 -16
- data/lib/classy_enum/attributes.rb +13 -4
- data/spec/active_record_spec.rb +26 -15
- data/spec/spec_helper.rb +1 -1
- metadata +18 -17
    
        data/CHANGELOG.md
    ADDED
    
    | @@ -0,0 +1,116 @@ | |
| 1 | 
            +
            # ClassyEnum Changelog
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            ## 1.3.2
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            * Added support for Ruby 1.9.3
         | 
| 6 | 
            +
            * Stop hijacking enum initialize method
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            ## 1.3.1
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            * Fixed JSON recursion issue
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            ## 1.3.0
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            * Added support for Rails 3.1.x
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            ## 1.2.0
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            * Added support for owner enum reference
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            ## 1.1.0
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            * Code refactor
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            ## 1.0.0
         | 
| 25 | 
            +
             | 
| 26 | 
            +
            * Removed support for Rails 2.x.x
         | 
| 27 | 
            +
            * Fixed support for validates_uniqueness_of with an enum scope
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            ## 0.9.1
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            * Fixed Rails dependency requirement
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            ## 0.9.0
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            * Further decoupled Formtastic support
         | 
| 36 | 
            +
             | 
| 37 | 
            +
            ## 0.8.1
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            * Added `:allow_blank` option
         | 
| 40 | 
            +
            * Added blank/nil option support to Formtastic
         | 
| 41 | 
            +
            * Fixed documentation typos
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            ## 0.8.0
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            * Updated development dependencies
         | 
| 46 | 
            +
            * Changed API for column and enum name differences
         | 
| 47 | 
            +
             | 
| 48 | 
            +
            ## 0.7.1
         | 
| 49 | 
            +
             | 
| 50 | 
            +
            * Added Comparable support
         | 
| 51 | 
            +
            * Fixed an issue with invalid objects set to empty string
         | 
| 52 | 
            +
            * Added allow blank support to Formtastic
         | 
| 53 | 
            +
            * Improved error messages
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            ## 0.7.0
         | 
| 56 | 
            +
             | 
| 57 | 
            +
            * Added "boolean" methods (i.e. `instance.enum?`)
         | 
| 58 | 
            +
            * Improved documentation
         | 
| 59 | 
            +
            * Updated generators to make inheritance more explicit
         | 
| 60 | 
            +
            * Removed ActiveRecord dependency
         | 
| 61 | 
            +
             | 
| 62 | 
            +
            ## 0.6.1
         | 
| 63 | 
            +
             | 
| 64 | 
            +
            * Fixed validates_presence_of support
         | 
| 65 | 
            +
            * Improved Formtastic support
         | 
| 66 | 
            +
             | 
| 67 | 
            +
            ## 0.6.0
         | 
| 68 | 
            +
             | 
| 69 | 
            +
            * Changed enums to use inheritance instead of mixins
         | 
| 70 | 
            +
            * Fixed issue with generators
         | 
| 71 | 
            +
            * Fixed documentation typos
         | 
| 72 | 
            +
             | 
| 73 | 
            +
            ## 0.5.0
         | 
| 74 | 
            +
             | 
| 75 | 
            +
            * Fixed documentation
         | 
| 76 | 
            +
             | 
| 77 | 
            +
            ## 0.4.2
         | 
| 78 | 
            +
             | 
| 79 | 
            +
            * Cleaned up hacky support for Rails 3.0.x
         | 
| 80 | 
            +
            * Fixed Formtastic load support
         | 
| 81 | 
            +
             | 
| 82 | 
            +
            ## 0.4.1
         | 
| 83 | 
            +
             | 
| 84 | 
            +
            * Fixed validation issue in Rails 3.0.x
         | 
| 85 | 
            +
             | 
| 86 | 
            +
            ## 0.4.0
         | 
| 87 | 
            +
             | 
| 88 | 
            +
            * Added enum generator for Rails 3.0.x
         | 
| 89 | 
            +
            * Added support for Ruby 1.9.2
         | 
| 90 | 
            +
            * Fixed support for apps that are not using Formtastic
         | 
| 91 | 
            +
             | 
| 92 | 
            +
            ## 0.3.1
         | 
| 93 | 
            +
             | 
| 94 | 
            +
            * Fixed Formtastic helper support w/ Rails 3.0.x
         | 
| 95 | 
            +
             | 
| 96 | 
            +
            ## 0.3.0
         | 
| 97 | 
            +
             | 
| 98 | 
            +
            * Added custom Formtastic input type
         | 
| 99 | 
            +
             | 
| 100 | 
            +
            ## 0.2.0
         | 
| 101 | 
            +
             | 
| 102 | 
            +
            * Internal changes to how methods are defined
         | 
| 103 | 
            +
             | 
| 104 | 
            +
            ## 0.1.0
         | 
| 105 | 
            +
             | 
| 106 | 
            +
            * Added enum generator for Rails 2.3.x
         | 
| 107 | 
            +
            * Internal changes to how ActiveRecord is extended
         | 
| 108 | 
            +
            * More test coverage
         | 
| 109 | 
            +
             | 
| 110 | 
            +
            ## 0.0.2
         | 
| 111 | 
            +
             | 
| 112 | 
            +
            * Fixed initialized constant warning
         | 
| 113 | 
            +
             | 
| 114 | 
            +
            ## 0.0.1
         | 
| 115 | 
            +
             | 
| 116 | 
            +
            * Initial Release
         | 
    
        data/Gemfile
    CHANGED
    
    | @@ -4,7 +4,8 @@ gem 'rails', '>= 3.0.0' | |
| 4 4 |  | 
| 5 5 | 
             
            group :development do
         | 
| 6 6 | 
             
              gem "jeweler", "~> 1.6.2"
         | 
| 7 | 
            -
              gem "rspec-rails", "~> 2. | 
| 7 | 
            +
              gem "rspec-rails", "~> 2.8.1"
         | 
| 8 8 | 
             
              gem 'formtastic', '~> 1.2.4'
         | 
| 9 9 | 
             
              gem 'sqlite3-ruby', :require => 'sqlite3'
         | 
| 10 | 
            +
              # gem 'ruby-debug19', :require => 'false'
         | 
| 10 11 | 
             
            end
         | 
    
        data/Gemfile.lock
    CHANGED
    
    | @@ -30,7 +30,7 @@ GEM | |
| 30 30 | 
             
                activesupport (3.0.5)
         | 
| 31 31 | 
             
                arel (2.0.10)
         | 
| 32 32 | 
             
                builder (2.1.2)
         | 
| 33 | 
            -
                diff-lcs (1.1. | 
| 33 | 
            +
                diff-lcs (1.1.3)
         | 
| 34 34 | 
             
                erubis (2.6.6)
         | 
| 35 35 | 
             
                  abstract (>= 1.0.0)
         | 
| 36 36 | 
             
                formtastic (1.2.4)
         | 
| @@ -50,7 +50,7 @@ GEM | |
| 50 50 | 
             
                  treetop (~> 1.4.8)
         | 
| 51 51 | 
             
                mime-types (1.16)
         | 
| 52 52 | 
             
                polyglot (0.3.2)
         | 
| 53 | 
            -
                rack (1.2. | 
| 53 | 
            +
                rack (1.2.5)
         | 
| 54 54 | 
             
                rack-mount (0.6.14)
         | 
| 55 55 | 
             
                  rack (>= 1.0.0)
         | 
| 56 56 | 
             
                rack-test (0.5.7)
         | 
| @@ -68,26 +68,26 @@ GEM | |
| 68 68 | 
             
                  activesupport (= 3.0.5)
         | 
| 69 69 | 
             
                  rake (>= 0.8.7)
         | 
| 70 70 | 
             
                  thor (~> 0.14.4)
         | 
| 71 | 
            -
                rake (0.9.2)
         | 
| 72 | 
            -
                rspec (2. | 
| 73 | 
            -
                  rspec-core (~> 2. | 
| 74 | 
            -
                  rspec-expectations (~> 2. | 
| 75 | 
            -
                  rspec-mocks (~> 2. | 
| 76 | 
            -
                rspec-core (2. | 
| 77 | 
            -
                rspec-expectations (2. | 
| 71 | 
            +
                rake (0.9.2.2)
         | 
| 72 | 
            +
                rspec (2.8.0)
         | 
| 73 | 
            +
                  rspec-core (~> 2.8.0)
         | 
| 74 | 
            +
                  rspec-expectations (~> 2.8.0)
         | 
| 75 | 
            +
                  rspec-mocks (~> 2.8.0)
         | 
| 76 | 
            +
                rspec-core (2.8.0)
         | 
| 77 | 
            +
                rspec-expectations (2.8.0)
         | 
| 78 78 | 
             
                  diff-lcs (~> 1.1.2)
         | 
| 79 | 
            -
                rspec-mocks (2. | 
| 80 | 
            -
                rspec-rails (2. | 
| 81 | 
            -
                  actionpack ( | 
| 82 | 
            -
                  activesupport ( | 
| 83 | 
            -
                  railties ( | 
| 84 | 
            -
                  rspec (~> 2. | 
| 79 | 
            +
                rspec-mocks (2.8.0)
         | 
| 80 | 
            +
                rspec-rails (2.8.1)
         | 
| 81 | 
            +
                  actionpack (>= 3.0)
         | 
| 82 | 
            +
                  activesupport (>= 3.0)
         | 
| 83 | 
            +
                  railties (>= 3.0)
         | 
| 84 | 
            +
                  rspec (~> 2.8.0)
         | 
| 85 85 | 
             
                sqlite3-ruby (1.3.1)
         | 
| 86 86 | 
             
                thor (0.14.6)
         | 
| 87 87 | 
             
                treetop (1.4.10)
         | 
| 88 88 | 
             
                  polyglot
         | 
| 89 89 | 
             
                  polyglot (>= 0.3.1)
         | 
| 90 | 
            -
                tzinfo (0.3. | 
| 90 | 
            +
                tzinfo (0.3.31)
         | 
| 91 91 |  | 
| 92 92 | 
             
            PLATFORMS
         | 
| 93 93 | 
             
              ruby
         | 
| @@ -96,5 +96,5 @@ DEPENDENCIES | |
| 96 96 | 
             
              formtastic (~> 1.2.4)
         | 
| 97 97 | 
             
              jeweler (~> 1.6.2)
         | 
| 98 98 | 
             
              rails (>= 3.0.0)
         | 
| 99 | 
            -
              rspec-rails (~> 2. | 
| 99 | 
            +
              rspec-rails (~> 2.8.1)
         | 
| 100 100 | 
             
              sqlite3-ruby
         | 
| @@ -1,40 +1,40 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            # classy_enum
         | 
| 2 2 |  | 
| 3 | 
            -
             | 
| 3 | 
            +
            [](http://travis-ci.org/beerlington/classy_enum)
         | 
| 4 4 |  | 
| 5 | 
            -
             | 
| 5 | 
            +
            ClassyEnum is a Ruby on Rails gem that adds class-based enumerator functionality to ActiveRecord attributes.
         | 
| 6 6 |  | 
| 7 | 
            -
             | 
| 7 | 
            +
            ## Rails & Ruby Versions Supported
         | 
| 8 8 |  | 
| 9 9 | 
             
            *Rails:*
         | 
| 10 10 |  | 
| 11 | 
            -
              * 3. | 
| 12 | 
            -
             | 
| 13 | 
            -
              * 2.3.x: If you need support for Rails 2.3.x, please install  | 
| 11 | 
            +
              * 3.0.x - 3.2.x: Fully tested in a production application. See below
         | 
| 12 | 
            +
                for known issues.
         | 
| 13 | 
            +
              * 2.3.x: If you need support for Rails 2.3.x, please install [version 0.9.1](https://rubygems.org/gems/classy_enum/versions/0.9.1)
         | 
| 14 14 |  | 
| 15 | 
            -
            *Ruby:* Ruby 1.8.7 and 1.9. | 
| 15 | 
            +
            *Ruby:* Ruby 1.8.7, 1.9.2, and 1.9.3 are tested and supported
         | 
| 16 16 |  | 
| 17 | 
            -
             | 
| 17 | 
            +
            ## Installation
         | 
| 18 18 |  | 
| 19 | 
            -
            The gem is hosted at  | 
| 19 | 
            +
            The gem is hosted at [rubygems.org](https://rubygems.org/gems/classy_enum)
         | 
| 20 20 |  | 
| 21 | 
            -
            You will also need to add  | 
| 21 | 
            +
            You will also need to add `app/enums` as an autoloadable path. This configuration will depend on which version of rails you are using.
         | 
| 22 22 |  | 
| 23 | 
            -
             | 
| 23 | 
            +
            ## Example Usage
         | 
| 24 24 |  | 
| 25 | 
            -
            The most common use for ClassyEnum is to replace database lookup tables where the content and behavior is mostly static and has multiple "types". In this example, I have an ActiveRecord model called  | 
| 25 | 
            +
            The most common use for ClassyEnum is to replace database lookup tables where the content and behavior is mostly static and has multiple "types". In this example, I have an ActiveRecord model called `Alarm` with an attribute called `priority`. Priority is stored as a string (VARCHAR) type in the database and is converted to an enum value when requested. 
         | 
| 26 26 |  | 
| 27 | 
            -
             | 
| 27 | 
            +
            ### 1. Generate the Enum
         | 
| 28 28 |  | 
| 29 29 | 
             
            The fastest way to get up and running with ClassyEnum is to use the built-in Rails generator like so:
         | 
| 30 30 |  | 
| 31 | 
            -
             | 
| 31 | 
            +
            ```
         | 
| 32 32 | 
             
            rails g classy_enum Priority low medium high
         | 
| 33 | 
            -
             | 
| 33 | 
            +
            ```
         | 
| 34 34 |  | 
| 35 35 | 
             
            A new enum template file will be created at app/enums/priority.rb that will look like:
         | 
| 36 36 |  | 
| 37 | 
            -
             | 
| 37 | 
            +
            ```ruby
         | 
| 38 38 | 
             
            class Priority < ClassyEnum::Base
         | 
| 39 39 | 
             
              enum_classes :low, :medium, :high
         | 
| 40 40 | 
             
            end
         | 
| @@ -47,19 +47,19 @@ end | |
| 47 47 |  | 
| 48 48 | 
             
            class PriorityHigh < Priority
         | 
| 49 49 | 
             
            end
         | 
| 50 | 
            -
             | 
| 50 | 
            +
            ```
         | 
| 51 51 |  | 
| 52 | 
            -
            The  | 
| 52 | 
            +
            The `enum_classes` macro will add all the ClassyEnum behavior, which is described further down in this document.
         | 
| 53 53 |  | 
| 54 | 
            -
             | 
| 54 | 
            +
            ### 2. Customize the Enum
         | 
| 55 55 |  | 
| 56 56 | 
             
            The generator creates a default setup, but each enum member can be changed to fit your needs.
         | 
| 57 57 |  | 
| 58 | 
            -
            Using the  | 
| 58 | 
            +
            Using the `enum_classes` method, I have defined three priority levels: low, medium, and high. Each priority level can have different properties and methods associated with it.
         | 
| 59 59 |  | 
| 60 | 
            -
            I would like to add a method called  | 
| 60 | 
            +
            I would like to add a method called `send_email?` that all member subclasses respond to. By default this method will return false, but will be overridden for high priority alarms to return true.
         | 
| 61 61 |  | 
| 62 | 
            -
             | 
| 62 | 
            +
            ```ruby
         | 
| 63 63 | 
             
            class Priority < ClassyEnum::Base
         | 
| 64 64 | 
             
              enum_classes :low, :medium, :high
         | 
| 65 65 |  | 
| @@ -73,34 +73,34 @@ class PriorityHigh < Priority | |
| 73 73 | 
             
                true
         | 
| 74 74 | 
             
              end
         | 
| 75 75 | 
             
            end
         | 
| 76 | 
            -
             | 
| 76 | 
            +
            ```
         | 
| 77 77 |  | 
| 78 | 
            -
            Note: Defining the subclasses within your enum file is only required when you will be overriding behavior and/or properties. The member subclasses still exist without being defined here because ClassyEnum.enum_classes automatically creates a class for each member. The generator only creates these subclass definitions for convenience, but they can be deleted as shown in this example.
         | 
| 78 | 
            +
            Note: Defining the subclasses within your enum file is only required when you will be overriding behavior and/or properties. The member subclasses still exist without being defined here because `ClassyEnum.enum_classes` automatically creates a class for each member. The generator only creates these subclass definitions for convenience, but they can be deleted as shown in this example.
         | 
| 79 79 |  | 
| 80 | 
            -
             | 
| 80 | 
            +
            ### 3. Setup the ActiveRecord model
         | 
| 81 81 |  | 
| 82 82 | 
             
            My ActiveRecord Alarm model needs a text field that will store a string representing the enum member. An example model schema might look something like:
         | 
| 83 83 |  | 
| 84 | 
            -
             | 
| 84 | 
            +
            ```ruby
         | 
| 85 85 | 
             
            create_table "alarms", :force => true do |t|
         | 
| 86 86 | 
             
              t.string   "priority"
         | 
| 87 87 | 
             
              t.boolean  "enabled"
         | 
| 88 88 | 
             
            end
         | 
| 89 | 
            -
             | 
| 89 | 
            +
            ```
         | 
| 90 90 |  | 
| 91 | 
            -
            Then in my model I've added a line that calls  | 
| 91 | 
            +
            Then in my model I've added a line that calls `classy_enum_attr` with a single argument representing the enum I want to associate with my model. I am also delegating the send_email? method to my Priority enum class.
         | 
| 92 92 |  | 
| 93 | 
            -
             | 
| 93 | 
            +
            ```ruby
         | 
| 94 94 | 
             
            class Alarm < ActiveRecord::Base
         | 
| 95 95 | 
             
              classy_enum_attr :priority
         | 
| 96 96 |  | 
| 97 97 | 
             
              delegate :send_email?, :to => :priority
         | 
| 98 98 | 
             
            end
         | 
| 99 | 
            -
             | 
| 99 | 
            +
            ```
         | 
| 100 100 |  | 
| 101 101 | 
             
            With this setup, I can now do the following:
         | 
| 102 102 |  | 
| 103 | 
            -
             | 
| 103 | 
            +
            ```ruby
         | 
| 104 104 | 
             
            @alarm = Alarm.create(:priority => :medium)
         | 
| 105 105 |  | 
| 106 106 | 
             
            @alarm.priority  # => PriorityMedium
         | 
| @@ -113,19 +113,19 @@ With this setup, I can now do the following: | |
| 113 113 | 
             
            @alarm.send_email? # => false
         | 
| 114 114 | 
             
            @alarm.priority = :high
         | 
| 115 115 | 
             
            @alarm.send_email? # => true
         | 
| 116 | 
            -
             | 
| 116 | 
            +
            ```
         | 
| 117 117 |  | 
| 118 | 
            -
            The enum field works like any other model attribute. It can be mass-assigned using  | 
| 118 | 
            +
            The enum field works like any other model attribute. It can be mass-assigned using `update_attribute(s)`.
         | 
| 119 119 |  | 
| 120 | 
            -
             | 
| 120 | 
            +
            ## Back reference to owning object
         | 
| 121 121 |  | 
| 122 | 
            -
            In some cases you may want an enum class to be able to reference the owning object (an instance of the active record model). Think of it as a  | 
| 122 | 
            +
            In some cases you may want an enum class to be able to reference the owning object (an instance of the active record model). Think of it as a `belongs_to` relationship, where the enum can reference its owning object.
         | 
| 123 123 |  | 
| 124 | 
            -
            In order to create the back reference, you must declare how you wish to refer to the owner using the  | 
| 124 | 
            +
            In order to create the back reference, you must declare how you wish to refer to the owner using the `owner` class method.
         | 
| 125 125 |  | 
| 126 126 | 
             
            For example:
         | 
| 127 127 |  | 
| 128 | 
            -
             | 
| 128 | 
            +
            ```ruby
         | 
| 129 129 | 
             
            class Priority < ClassyEnum::Base
         | 
| 130 130 | 
             
              enum_classes :low, :medium, :high
         | 
| 131 131 | 
             
              owner :alarm
         | 
| @@ -136,108 +136,124 @@ class PriorityHigh < Priority | |
| 136 136 | 
             
                alarm.enabled?
         | 
| 137 137 | 
             
              end
         | 
| 138 138 | 
             
            end
         | 
| 139 | 
            -
             | 
| 139 | 
            +
            ```
         | 
| 140 140 |  | 
| 141 141 | 
             
            In the above example, high priority alarms are only emailed if the owning alarm is enabled.
         | 
| 142 142 |  | 
| 143 | 
            -
             | 
| 143 | 
            +
            ```ruby
         | 
| 144 144 | 
             
            @alarm = Alarm.create(:priority => :high, :enabled => true)
         | 
| 145 145 |  | 
| 146 146 | 
             
            # Should this alarm send an email?
         | 
| 147 147 | 
             
            @alarm.send_email? # => true
         | 
| 148 148 | 
             
            @alarm.enabled = false
         | 
| 149 149 | 
             
            @alarm.send_email? # => false
         | 
| 150 | 
            -
             | 
| 150 | 
            +
            ```
         | 
| 151 151 |  | 
| 152 | 
            -
             | 
| 152 | 
            +
            ## Serializing as JSON
         | 
| 153 153 |  | 
| 154 154 | 
             
            By default, the enum will be serialized as a string representing the value:
         | 
| 155 155 |  | 
| 156 | 
            -
             | 
| 156 | 
            +
            ```ruby
         | 
| 157 157 | 
             
            @alarm = Alarm.create(:priority => :high, :enabled => true)
         | 
| 158 158 | 
             
            @alarm.to_json.should == "{\"alarm\":{\"priority\":\"high\"}}"
         | 
| 159 | 
            -
             | 
| 159 | 
            +
            ```
         | 
| 160 160 |  | 
| 161 | 
            -
            This behavior can be overridden by using the  | 
| 161 | 
            +
            This behavior can be overridden by using the `:serialize_as_json => true` option in your ActiveRecord model:
         | 
| 162 162 |  | 
| 163 | 
            -
             | 
| 163 | 
            +
            ```ruby
         | 
| 164 164 | 
             
            class Alarm < ActiveRecord::Base
         | 
| 165 165 | 
             
              classy_enum_attr :priority, :serialize_as_json => true
         | 
| 166 166 | 
             
            end
         | 
| 167 167 |  | 
| 168 168 | 
             
            @alarm = Alarm.create(:priority => :high, :enabled => true)
         | 
| 169 169 | 
             
            @alarm.to_json.should == "{\"alarm\":{\"priority\":{}}}"
         | 
| 170 | 
            -
             | 
| 170 | 
            +
            ```
         | 
| 171 171 |  | 
| 172 | 
            -
             | 
| 172 | 
            +
            ## Special Cases and Known Issue
         | 
| 173 173 |  | 
| 174 | 
            -
            What if your enum class name is not the same as your model's attribute name? No problem! Just use a second arugment in  | 
| 174 | 
            +
            What if your enum class name is not the same as your model's attribute name? No problem! Just use a second arugment in `classy_enum_attr` to declare the attribute name. In this case, the model's attribute is called *alarm_priority*.
         | 
| 175 175 |  | 
| 176 | 
            -
             | 
| 176 | 
            +
            ```ruby
         | 
| 177 177 | 
             
            class Alarm < ActiveRecord::Base
         | 
| 178 178 | 
             
              classy_enum_attr :alarm_priority, :enum => :priority
         | 
| 179 179 | 
             
            end
         | 
| 180 180 |  | 
| 181 181 | 
             
            @alarm = Alarm.create(:alarm_priority => :medium)
         | 
| 182 182 | 
             
            @alarm.alarm_priority  # => PriorityMedium
         | 
| 183 | 
            -
             | 
| 183 | 
            +
            ```
         | 
| 184 | 
            +
             | 
| 185 | 
            +
            There is an [issue](https://github.com/beerlington/classy_enum/issues/8)
         | 
| 186 | 
            +
            with Rails 3.1 and higher when using validates_uniqueness_of
         | 
| 187 | 
            +
            and a scope that is the enum field. This issue also occurs when using
         | 
| 188 | 
            +
            `composed_of` and is not a bug with ClassyEnum. As a workaround to this
         | 
| 189 | 
            +
            problem, you can use the reader suffix option when declaring your field:
         | 
| 190 | 
            +
             | 
| 191 | 
            +
            ```ruby
         | 
| 192 | 
            +
            class Alarm < ActiveRecord::Base
         | 
| 193 | 
            +
              classy_enum_attr :priority, :suffix => 'type'
         | 
| 194 | 
            +
            end
         | 
| 195 | 
            +
             | 
| 196 | 
            +
            alarm = Alarm.create(:priority => :high)
         | 
| 197 | 
            +
            alarm.priority # => 'high'
         | 
| 198 | 
            +
            alarm.priority_type # instance of PriorityHigh enum
         | 
| 199 | 
            +
            ```
         | 
| 184 200 |  | 
| 185 | 
            -
             | 
| 201 | 
            +
            ## Model Validation
         | 
| 186 202 |  | 
| 187 | 
            -
            An ActiveRecord validator  | 
| 203 | 
            +
            An ActiveRecord validator `validates_inclusion_of :field, :in => ENUM.all` is automatically added to your model when you use `classy_enum_attr`. 
         | 
| 188 204 |  | 
| 189 205 | 
             
            If your enum only has members low, medium, and high, then the following validation behavior would be expected:
         | 
| 190 206 |  | 
| 191 | 
            -
             | 
| 207 | 
            +
            ```ruby
         | 
| 192 208 | 
             
            @alarm = Alarm.new(:priority => :really_high)
         | 
| 193 209 | 
             
            @alarm.valid? # => false
         | 
| 194 210 | 
             
            @alarm.priority = :high
         | 
| 195 211 | 
             
            @alarm.valid? # => true
         | 
| 196 | 
            -
             | 
| 212 | 
            +
            ```
         | 
| 197 213 |  | 
| 198 | 
            -
            To allow nil or blank values, you can pass in  | 
| 214 | 
            +
            To allow nil or blank values, you can pass in `:allow_nil` and `:allow_blank` as options to `classy_enum_attr`:
         | 
| 199 215 |  | 
| 200 | 
            -
             | 
| 216 | 
            +
            ```ruby
         | 
| 201 217 | 
             
            class Alarm < ActiveRecord::Base
         | 
| 202 218 | 
             
              classy_enum_attr :priority, :allow_nil => true
         | 
| 203 219 | 
             
            end
         | 
| 204 220 |  | 
| 205 221 | 
             
            @alarm = Alarm.new(:priority => nil)
         | 
| 206 222 | 
             
            @alarm.valid? # => true
         | 
| 207 | 
            -
             | 
| 223 | 
            +
            ```
         | 
| 208 224 |  | 
| 209 | 
            -
             | 
| 225 | 
            +
            ## Working with ClassyEnum outside of ActiveRecord
         | 
| 210 226 |  | 
| 211 227 | 
             
            While ClassyEnum was designed to be used directly with ActiveRecord, it can also be used outside of it. Here are some examples based on the enum class defined earlier in this document.
         | 
| 212 228 |  | 
| 213 229 | 
             
            Instantiate an enum member subclass *PriorityLow*
         | 
| 214 230 |  | 
| 215 | 
            -
             | 
| 231 | 
            +
            ```ruby
         | 
| 216 232 | 
             
            # These statements are all equivalent
         | 
| 217 233 | 
             
            low = Priority.build(:low)
         | 
| 218 234 | 
             
            low = Priority.build('low')
         | 
| 219 235 | 
             
            low = Priority.find(:low)
         | 
| 220 236 | 
             
            low = PriorityLow.new
         | 
| 221 | 
            -
             | 
| 237 | 
            +
            ```
         | 
| 222 238 |  | 
| 223 239 | 
             
            Get a list of the valid enum options
         | 
| 224 240 |  | 
| 225 | 
            -
             | 
| 241 | 
            +
            ```ruby
         | 
| 226 242 | 
             
            Priority.valid_options # => low, medium, high
         | 
| 227 | 
            -
             | 
| 243 | 
            +
            ```
         | 
| 228 244 |  | 
| 229 | 
            -
             | 
| 245 | 
            +
            ## Formtastic Support
         | 
| 230 246 |  | 
| 231 247 | 
             
            To add ClassyEnum support to Formtastic, add the following to your formtastic.rb initializer (config/initializers/formtastic.rb):
         | 
| 232 248 |  | 
| 233 | 
            -
             | 
| 249 | 
            +
            ```ruby
         | 
| 234 250 | 
             
            require 'classy_enum/semantic_form_builder'
         | 
| 235 | 
            -
             | 
| 251 | 
            +
            ```
         | 
| 236 252 |  | 
| 237 | 
            -
            Then in your Formtastic view forms, use this syntax:  | 
| 253 | 
            +
            Then in your Formtastic view forms, use this syntax: `<%= f.input :priority, :as => :enum_select %>`
         | 
| 238 254 |  | 
| 239 | 
            -
            Note: ClassyEnum respects the  | 
| 255 | 
            +
            Note: ClassyEnum respects the `:allow_blank` and `:allow_nil` options and will include a blank select option in these cases
         | 
| 240 256 |  | 
| 241 | 
            -
             | 
| 257 | 
            +
            ## Copyright
         | 
| 242 258 |  | 
| 243 | 
            -
            Copyright (c) 2011 Peter Brown. See LICENSE for details.
         | 
| 259 | 
            +
            Copyright (c) 2011 [Peter Brown](https://github.com/beerlington). See LICENSE for details.
         | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            1. | 
| 1 | 
            +
            1.4.0
         | 
    
        data/classy_enum.gemspec
    CHANGED
    
    | @@ -4,26 +4,27 @@ | |
| 4 4 | 
             
            # -*- encoding: utf-8 -*-
         | 
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |s|
         | 
| 7 | 
            -
              s.name =  | 
| 8 | 
            -
              s.version = "1. | 
| 7 | 
            +
              s.name = "classy_enum"
         | 
| 8 | 
            +
              s.version = "1.4.0"
         | 
| 9 9 |  | 
| 10 10 | 
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 11 | 
            -
              s.authors = [ | 
| 12 | 
            -
              s.date =  | 
| 13 | 
            -
              s.description =  | 
| 14 | 
            -
              s.email =  | 
| 11 | 
            +
              s.authors = ["Peter Brown"]
         | 
| 12 | 
            +
              s.date = "2012-02-05"
         | 
| 13 | 
            +
              s.description = "A utility that adds class based enum functionality to ActiveRecord attributes"
         | 
| 14 | 
            +
              s.email = "github@lette.us"
         | 
| 15 15 | 
             
              s.extra_rdoc_files = [
         | 
| 16 16 | 
             
                "LICENSE",
         | 
| 17 | 
            -
                "README. | 
| 17 | 
            +
                "README.md"
         | 
| 18 18 | 
             
              ]
         | 
| 19 19 | 
             
              s.files = [
         | 
| 20 20 | 
             
                ".document",
         | 
| 21 21 | 
             
                ".rvmrc",
         | 
| 22 22 | 
             
                ".travis.yml",
         | 
| 23 | 
            +
                "CHANGELOG.md",
         | 
| 23 24 | 
             
                "Gemfile",
         | 
| 24 25 | 
             
                "Gemfile.lock",
         | 
| 25 26 | 
             
                "LICENSE",
         | 
| 26 | 
            -
                "README. | 
| 27 | 
            +
                "README.md",
         | 
| 27 28 | 
             
                "Rakefile",
         | 
| 28 29 | 
             
                "VERSION",
         | 
| 29 30 | 
             
                "classy_enum.gemspec",
         | 
| @@ -43,11 +44,11 @@ Gem::Specification.new do |s| | |
| 43 44 | 
             
                "spec/classy_enum_spec.rb",
         | 
| 44 45 | 
             
                "spec/spec_helper.rb"
         | 
| 45 46 | 
             
              ]
         | 
| 46 | 
            -
              s.homepage =  | 
| 47 | 
            -
              s.licenses = [ | 
| 48 | 
            -
              s.require_paths = [ | 
| 49 | 
            -
              s.rubygems_version =  | 
| 50 | 
            -
              s.summary =  | 
| 47 | 
            +
              s.homepage = "http://github.com/beerlington/classy_enum"
         | 
| 48 | 
            +
              s.licenses = ["MIT"]
         | 
| 49 | 
            +
              s.require_paths = ["lib"]
         | 
| 50 | 
            +
              s.rubygems_version = "1.8.15"
         | 
| 51 | 
            +
              s.summary = "A class based enumerator utility for Ruby on Rails"
         | 
| 51 52 |  | 
| 52 53 | 
             
              if s.respond_to? :specification_version then
         | 
| 53 54 | 
             
                s.specification_version = 3
         | 
| @@ -55,20 +56,20 @@ Gem::Specification.new do |s| | |
| 55 56 | 
             
                if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
         | 
| 56 57 | 
             
                  s.add_runtime_dependency(%q<rails>, [">= 3.0.0"])
         | 
| 57 58 | 
             
                  s.add_development_dependency(%q<jeweler>, ["~> 1.6.2"])
         | 
| 58 | 
            -
                  s.add_development_dependency(%q<rspec-rails>, ["~> 2. | 
| 59 | 
            +
                  s.add_development_dependency(%q<rspec-rails>, ["~> 2.8.1"])
         | 
| 59 60 | 
             
                  s.add_development_dependency(%q<formtastic>, ["~> 1.2.4"])
         | 
| 60 61 | 
             
                  s.add_development_dependency(%q<sqlite3-ruby>, [">= 0"])
         | 
| 61 62 | 
             
                else
         | 
| 62 63 | 
             
                  s.add_dependency(%q<rails>, [">= 3.0.0"])
         | 
| 63 64 | 
             
                  s.add_dependency(%q<jeweler>, ["~> 1.6.2"])
         | 
| 64 | 
            -
                  s.add_dependency(%q<rspec-rails>, ["~> 2. | 
| 65 | 
            +
                  s.add_dependency(%q<rspec-rails>, ["~> 2.8.1"])
         | 
| 65 66 | 
             
                  s.add_dependency(%q<formtastic>, ["~> 1.2.4"])
         | 
| 66 67 | 
             
                  s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
         | 
| 67 68 | 
             
                end
         | 
| 68 69 | 
             
              else
         | 
| 69 70 | 
             
                s.add_dependency(%q<rails>, [">= 3.0.0"])
         | 
| 70 71 | 
             
                s.add_dependency(%q<jeweler>, ["~> 1.6.2"])
         | 
| 71 | 
            -
                s.add_dependency(%q<rspec-rails>, ["~> 2. | 
| 72 | 
            +
                s.add_dependency(%q<rspec-rails>, ["~> 2.8.1"])
         | 
| 72 73 | 
             
                s.add_dependency(%q<formtastic>, ["~> 1.2.4"])
         | 
| 73 74 | 
             
                s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
         | 
| 74 75 | 
             
              end
         | 
| @@ -22,22 +22,31 @@ module ClassyEnum | |
| 22 22 | 
             
                  options = args.extract_options!
         | 
| 23 23 |  | 
| 24 24 | 
             
                  attribute = args[0]
         | 
| 25 | 
            +
             | 
| 25 26 | 
             
                  enum = options[:enum] || attribute
         | 
| 26 27 | 
             
                  allow_blank = options[:allow_blank] || false
         | 
| 27 28 | 
             
                  allow_nil = options[:allow_nil] || false
         | 
| 28 29 | 
             
                  serialize_as_json = options[:serialize_as_json] || false
         | 
| 29 30 |  | 
| 31 | 
            +
                  reader_method = attribute.to_s
         | 
| 32 | 
            +
                  reader_method += "_#{options[:suffix]}" if options.has_key?(:suffix)
         | 
| 33 | 
            +
             | 
| 30 34 | 
             
                  klass = enum.to_s.camelize.constantize
         | 
| 31 35 |  | 
| 36 | 
            +
                  valid_attributes = reader_method == attribute.to_s ? klass.all : klass.all.map(&:to_s)
         | 
| 37 | 
            +
             | 
| 32 38 | 
             
                  self.instance_eval do
         | 
| 33 39 |  | 
| 34 40 | 
             
                    # Add ActiveRecord validation to ensure it won't be saved unless it's an option
         | 
| 35 | 
            -
                    validates_inclusion_of attribute, | 
| 36 | 
            -
             | 
| 41 | 
            +
                    validates_inclusion_of attribute,
         | 
| 42 | 
            +
                      :in => valid_attributes,
         | 
| 43 | 
            +
                      :message => "must be one of #{klass.valid_options}",
         | 
| 44 | 
            +
                      :allow_blank => allow_blank,
         | 
| 45 | 
            +
                      :allow_nil => allow_nil
         | 
| 37 46 |  | 
| 38 47 | 
             
                    # Define getter method that returns a ClassyEnum instance
         | 
| 39 | 
            -
                    define_method  | 
| 40 | 
            -
                      klass.build( | 
| 48 | 
            +
                    define_method reader_method do
         | 
| 49 | 
            +
                      klass.build(read_attribute(attribute), :owner => self, :serialize_as_json => serialize_as_json)
         | 
| 41 50 | 
             
                    end
         | 
| 42 51 |  | 
| 43 52 | 
             
                    # Define setter method that accepts either string or symbol for member
         | 
    
        data/spec/active_record_spec.rb
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
         | 
| 2 2 |  | 
| 3 3 | 
             
            class ActiveDog < ActiveRecord::Base
         | 
| 4 | 
            -
              classy_enum_attr :breed
         | 
| 4 | 
            +
              classy_enum_attr :breed, :suffix => 'type'
         | 
| 5 5 |  | 
| 6 6 | 
             
              validates :name,
         | 
| 7 7 | 
             
                :presence => true,
         | 
| @@ -12,24 +12,35 @@ class ActiveDog < ActiveRecord::Base | |
| 12 12 | 
             
            end
         | 
| 13 13 |  | 
| 14 14 | 
             
            describe ActiveDog do
         | 
| 15 | 
            -
              before do
         | 
| 16 | 
            -
                ActiveDog.destroy_all
         | 
| 17 | 
            -
                @golden = ActiveDog.create!(:name => 'Sebastian', :breed => :golden_retriever) 
         | 
| 18 | 
            -
                @husky = ActiveDog.create!(:name => 'Sirius', :breed => :husky)
         | 
| 19 | 
            -
              end
         | 
| 20 15 |  | 
| 21 | 
            -
               | 
| 22 | 
            -
                 | 
| 23 | 
            -
             | 
| 24 | 
            -
                 | 
| 16 | 
            +
              context 'valid instance' do
         | 
| 17 | 
            +
                subject { ActiveDog.new(:name => 'sirius', :breed => :golden_retriever) }
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                it { should have(:no).errors_on(:breed) }
         | 
| 20 | 
            +
                its(:breed_type) { should be_a_golden_retriever }
         | 
| 21 | 
            +
                its(:breed) { should == 'golden_retriever' }
         | 
| 25 22 | 
             
              end
         | 
| 26 23 |  | 
| 27 | 
            -
               | 
| 28 | 
            -
                ActiveDog. | 
| 24 | 
            +
              context 'invalid instance' do
         | 
| 25 | 
            +
                subject { ActiveDog.new(:name => 'sirius', :breed => :golden_retrievers) }
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                it { should have(1).error_on(:breed) }
         | 
| 29 28 | 
             
              end
         | 
| 30 29 |  | 
| 31 | 
            -
               | 
| 32 | 
            -
                ActiveDog. | 
| 33 | 
            -
                ActiveDog. | 
| 30 | 
            +
              context 'scopes' do
         | 
| 31 | 
            +
                let!(:golden) { ActiveDog.create!(:name => 'Sebastian', :breed => :golden_retriever) }
         | 
| 32 | 
            +
                let!(:husky) { ActiveDog.create!(:name => 'Sirius', :breed => :husky) }
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                after { ActiveDog.destroy_all }
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                it 'should know all dogs' do
         | 
| 37 | 
            +
                  ActiveDog.all.should include(golden, husky)
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                it 'should have a working scope' do
         | 
| 41 | 
            +
                  ActiveDog.goldens.should include(golden)
         | 
| 42 | 
            +
                  ActiveDog.goldens.should_not include(husky)
         | 
| 43 | 
            +
                end
         | 
| 34 44 | 
             
              end
         | 
| 45 | 
            +
             | 
| 35 46 | 
             
            end
         | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | @@ -2,13 +2,13 @@ $LOAD_PATH.unshift(File.dirname(__FILE__)) | |
| 2 2 | 
             
            $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
         | 
| 3 3 |  | 
| 4 4 | 
             
            require 'rubygems'
         | 
| 5 | 
            -
            require 'rspec'
         | 
| 6 5 | 
             
            require 'active_record'
         | 
| 7 6 | 
             
            require 'active_support'
         | 
| 8 7 | 
             
            require 'action_pack'
         | 
| 9 8 | 
             
            require 'action_view'
         | 
| 10 9 | 
             
            require 'action_controller'
         | 
| 11 10 | 
             
            require 'formtastic'
         | 
| 11 | 
            +
            require 'rspec/rails'
         | 
| 12 12 | 
             
            require 'classy_enum'
         | 
| 13 13 |  | 
| 14 14 | 
             
            ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: classy_enum
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: 1.4.0
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,11 +9,11 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date:  | 
| 12 | 
            +
            date: 2012-02-05 00:00:00.000000000Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: rails
         | 
| 16 | 
            -
              requirement: & | 
| 16 | 
            +
              requirement: &70293149209880 !ruby/object:Gem::Requirement
         | 
| 17 17 | 
             
                none: false
         | 
| 18 18 | 
             
                requirements:
         | 
| 19 19 | 
             
                - - ! '>='
         | 
| @@ -21,10 +21,10 @@ dependencies: | |
| 21 21 | 
             
                    version: 3.0.0
         | 
| 22 22 | 
             
              type: :runtime
         | 
| 23 23 | 
             
              prerelease: false
         | 
| 24 | 
            -
              version_requirements: * | 
| 24 | 
            +
              version_requirements: *70293149209880
         | 
| 25 25 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 26 26 | 
             
              name: jeweler
         | 
| 27 | 
            -
              requirement: & | 
| 27 | 
            +
              requirement: &70293149209000 !ruby/object:Gem::Requirement
         | 
| 28 28 | 
             
                none: false
         | 
| 29 29 | 
             
                requirements:
         | 
| 30 30 | 
             
                - - ~>
         | 
| @@ -32,21 +32,21 @@ dependencies: | |
| 32 32 | 
             
                    version: 1.6.2
         | 
| 33 33 | 
             
              type: :development
         | 
| 34 34 | 
             
              prerelease: false
         | 
| 35 | 
            -
              version_requirements: * | 
| 35 | 
            +
              version_requirements: *70293149209000
         | 
| 36 36 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 37 37 | 
             
              name: rspec-rails
         | 
| 38 | 
            -
              requirement: & | 
| 38 | 
            +
              requirement: &70293149208180 !ruby/object:Gem::Requirement
         | 
| 39 39 | 
             
                none: false
         | 
| 40 40 | 
             
                requirements:
         | 
| 41 41 | 
             
                - - ~>
         | 
| 42 42 | 
             
                  - !ruby/object:Gem::Version
         | 
| 43 | 
            -
                    version: 2. | 
| 43 | 
            +
                    version: 2.8.1
         | 
| 44 44 | 
             
              type: :development
         | 
| 45 45 | 
             
              prerelease: false
         | 
| 46 | 
            -
              version_requirements: * | 
| 46 | 
            +
              version_requirements: *70293149208180
         | 
| 47 47 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 48 48 | 
             
              name: formtastic
         | 
| 49 | 
            -
              requirement: & | 
| 49 | 
            +
              requirement: &70293149207360 !ruby/object:Gem::Requirement
         | 
| 50 50 | 
             
                none: false
         | 
| 51 51 | 
             
                requirements:
         | 
| 52 52 | 
             
                - - ~>
         | 
| @@ -54,10 +54,10 @@ dependencies: | |
| 54 54 | 
             
                    version: 1.2.4
         | 
| 55 55 | 
             
              type: :development
         | 
| 56 56 | 
             
              prerelease: false
         | 
| 57 | 
            -
              version_requirements: * | 
| 57 | 
            +
              version_requirements: *70293149207360
         | 
| 58 58 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 59 59 | 
             
              name: sqlite3-ruby
         | 
| 60 | 
            -
              requirement: & | 
| 60 | 
            +
              requirement: &70293149206540 !ruby/object:Gem::Requirement
         | 
| 61 61 | 
             
                none: false
         | 
| 62 62 | 
             
                requirements:
         | 
| 63 63 | 
             
                - - ! '>='
         | 
| @@ -65,22 +65,23 @@ dependencies: | |
| 65 65 | 
             
                    version: '0'
         | 
| 66 66 | 
             
              type: :development
         | 
| 67 67 | 
             
              prerelease: false
         | 
| 68 | 
            -
              version_requirements: * | 
| 68 | 
            +
              version_requirements: *70293149206540
         | 
| 69 69 | 
             
            description: A utility that adds class based enum functionality to ActiveRecord attributes
         | 
| 70 70 | 
             
            email: github@lette.us
         | 
| 71 71 | 
             
            executables: []
         | 
| 72 72 | 
             
            extensions: []
         | 
| 73 73 | 
             
            extra_rdoc_files:
         | 
| 74 74 | 
             
            - LICENSE
         | 
| 75 | 
            -
            - README. | 
| 75 | 
            +
            - README.md
         | 
| 76 76 | 
             
            files:
         | 
| 77 77 | 
             
            - .document
         | 
| 78 78 | 
             
            - .rvmrc
         | 
| 79 79 | 
             
            - .travis.yml
         | 
| 80 | 
            +
            - CHANGELOG.md
         | 
| 80 81 | 
             
            - Gemfile
         | 
| 81 82 | 
             
            - Gemfile.lock
         | 
| 82 83 | 
             
            - LICENSE
         | 
| 83 | 
            -
            - README. | 
| 84 | 
            +
            - README.md
         | 
| 84 85 | 
             
            - Rakefile
         | 
| 85 86 | 
             
            - VERSION
         | 
| 86 87 | 
             
            - classy_enum.gemspec
         | 
| @@ -114,7 +115,7 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 114 115 | 
             
                  version: '0'
         | 
| 115 116 | 
             
                  segments:
         | 
| 116 117 | 
             
                  - 0
         | 
| 117 | 
            -
                  hash: - | 
| 118 | 
            +
                  hash: -3670451766157368452
         | 
| 118 119 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 119 120 | 
             
              none: false
         | 
| 120 121 | 
             
              requirements:
         | 
| @@ -123,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 123 124 | 
             
                  version: '0'
         | 
| 124 125 | 
             
            requirements: []
         | 
| 125 126 | 
             
            rubyforge_project: 
         | 
| 126 | 
            -
            rubygems_version: 1.8. | 
| 127 | 
            +
            rubygems_version: 1.8.15
         | 
| 127 128 | 
             
            signing_key: 
         | 
| 128 129 | 
             
            specification_version: 3
         | 
| 129 130 | 
             
            summary: A class based enumerator utility for Ruby on Rails
         |