enumerize 2.5.0 → 2.6.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.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +7 -7
- data/CHANGELOG.md +8 -0
- data/Gemfile +1 -1
- data/README.md +3 -3
- data/enumerize.gemspec +1 -1
- data/lib/enumerize/activerecord.rb +1 -1
- data/lib/enumerize/attribute.rb +4 -0
- data/lib/enumerize/base.rb +20 -16
- data/lib/enumerize/mongoid.rb +7 -0
- data/lib/enumerize/predicatable.rb +1 -1
- data/lib/enumerize/version.rb +1 -1
- data/lib/enumerize.rb +1 -1
- data/test/activemodel_test.rb +1 -1
- data/test/activerecord_test.rb +6 -3
- data/test/attribute_test.rb +1 -1
- data/test/base_test.rb +27 -1
- data/test/mongo_mapper_test.rb +1 -1
- data/test/mongoid_test.rb +1 -1
- data/test/multiple_test.rb +1 -1
- data/test/predicates_test.rb +1 -1
- data/test/sequel_test.rb +198 -200
- data/test/set_test.rb +1 -1
- data/test/test_helper.rb +8 -0
- data/test/value_test.rb +1 -1
- metadata +30 -8
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 7ed5759e8b7d540b7261ef4112d6ed175403650cd18f904e19c15826cc1b87b5
         | 
| 4 | 
            +
              data.tar.gz: 44fdf94b2adcf41a5ffd35e415b9ff622dab59658fd2d16efac6f52ddd89bfcb
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 0aab786d5ef4ebbd156211e9c659b6397facab2b1b075767f170ed706b7787d953baec2c3ffecb9a918d0cd3f87eecd541f41b7868045f4beafbb2584ca83fe3
         | 
| 7 | 
            +
              data.tar.gz: 06af74a445ac38938b90e15e5e14cfc529332189328b86929a976593c376f46189ae6ded196ce1ca93c3c31d9f5b68b5ef03c91d65fe7e38d8a392ba88ef1dc6
         | 
    
        data/.github/workflows/ruby.yml
    CHANGED
    
    | @@ -32,7 +32,7 @@ jobs: | |
| 32 32 | 
             
                strategy:
         | 
| 33 33 | 
             
                  fail-fast: false
         | 
| 34 34 | 
             
                  matrix:
         | 
| 35 | 
            -
                    ruby-version: ['2. | 
| 35 | 
            +
                    ruby-version: ['2.7', '3.0', '3.1']
         | 
| 36 36 | 
             
                    gemfile:
         | 
| 37 37 | 
             
                      - Gemfile
         | 
| 38 38 | 
             
                      - Gemfile.rails60
         | 
| @@ -47,14 +47,14 @@ jobs: | |
| 47 47 | 
             
                    exclude:
         | 
| 48 48 | 
             
                      - gemfile: Gemfile.mongo_mapper
         | 
| 49 49 | 
             
                        db: postgresql
         | 
| 50 | 
            -
                      - ruby-version: '3.0 | 
| 50 | 
            +
                      - ruby-version: '3.0'
         | 
| 51 51 | 
             
                        gemfile: Gemfile
         | 
| 52 | 
            -
                      - ruby-version: '3. | 
| 52 | 
            +
                      - ruby-version: '3.1'
         | 
| 53 | 
            +
                        gemfile: Gemfile
         | 
| 54 | 
            +
                      - ruby-version: '3.0'
         | 
| 55 | 
            +
                        gemfile: Gemfile.mongo_mapper
         | 
| 56 | 
            +
                      - ruby-version: '3.1'
         | 
| 53 57 | 
             
                        gemfile: Gemfile.mongo_mapper
         | 
| 54 | 
            -
                      - ruby-version: '2.6'
         | 
| 55 | 
            -
                        gemfile: Gemfile.rails70
         | 
| 56 | 
            -
                      - ruby-version: '2.6'
         | 
| 57 | 
            -
                        gemfile: Gemfile.railsmaster
         | 
| 58 58 | 
             
                env:
         | 
| 59 59 | 
             
                  BUNDLE_GEMFILE: "${{ matrix.gemfile }}"
         | 
| 60 60 | 
             
                  DB: "${{ matrix.db }}"
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,3 +1,11 @@ | |
| 1 | 
            +
            ## 2.6.0 (March 7, 2023)
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            ### enhancements
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            * Add `Enumerize::Attribute#value?`. This new method prevents the following breakage 
         | 
| 6 | 
            +
              when autocorrecting with Performance/InefficientHashSearch cop. (by [@koic](https://github.com/koic))
         | 
| 7 | 
            +
            * Allow usage of kwargs with inheritance in Ruby 3.x. Support only Ruby 2.7+. (by [@mortik](https://github.com/mortik))
         | 
| 8 | 
            +
             | 
| 1 9 | 
             
            ## 2.5.0 (December 24, 2021)
         | 
| 2 10 |  | 
| 3 11 | 
             
            ### enhancements
         | 
    
        data/Gemfile
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            # Enumerize [](https://github.com/brainspec/enumerize/actions/workflows/ruby.yml)
         | 
| 2 2 |  | 
| 3 3 | 
             
            Enumerated attributes with I18n and ActiveRecord/Mongoid/MongoMapper/Sequel support
         | 
| 4 4 |  | 
| @@ -46,7 +46,7 @@ Or install it yourself as: | |
| 46 46 |  | 
| 47 47 | 
             
            ## Supported Versions
         | 
| 48 48 |  | 
| 49 | 
            -
            - Ruby 2. | 
| 49 | 
            +
            - Ruby 2.7+
         | 
| 50 50 | 
             
            - Rails 5.2+
         | 
| 51 51 |  | 
| 52 52 | 
             
            ## Usage
         | 
| @@ -61,7 +61,7 @@ class User | |
| 61 61 | 
             
            end
         | 
| 62 62 | 
             
            ```
         | 
| 63 63 |  | 
| 64 | 
            -
            Note that enumerized values are just  | 
| 64 | 
            +
            Note that enumerized values are just identifiers so if you want to use multi-word, etc. values then you should use `I18n` feature.
         | 
| 65 65 |  | 
| 66 66 | 
             
            ---
         | 
| 67 67 |  | 
    
        data/enumerize.gemspec
    CHANGED
    
    
    
        data/lib/enumerize/attribute.rb
    CHANGED
    
    
    
        data/lib/enumerize/base.rb
    CHANGED
    
    | @@ -49,7 +49,7 @@ module Enumerize | |
| 49 49 | 
             
                  end
         | 
| 50 50 | 
             
                end
         | 
| 51 51 |  | 
| 52 | 
            -
                def initialize(*)
         | 
| 52 | 
            +
                def initialize(*args, **kwargs)
         | 
| 53 53 | 
             
                  super
         | 
| 54 54 | 
             
                  _set_default_value_for_enumerized_attributes
         | 
| 55 55 | 
             
                end
         | 
| @@ -90,22 +90,26 @@ module Enumerize | |
| 90 90 |  | 
| 91 91 | 
             
                def _set_default_value_for_enumerized_attributes
         | 
| 92 92 | 
             
                  self.class.enumerized_attributes.each do |attr|
         | 
| 93 | 
            -
                     | 
| 94 | 
            -
             | 
| 95 | 
            -
             | 
| 96 | 
            -
             | 
| 97 | 
            -
             | 
| 98 | 
            -
             | 
| 99 | 
            -
             | 
| 100 | 
            -
             | 
| 101 | 
            -
                       | 
| 102 | 
            -
             | 
| 103 | 
            -
                       | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 93 | 
            +
                    _set_default_value_for_enumerized_attribute(attr)
         | 
| 94 | 
            +
                  end
         | 
| 95 | 
            +
                end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                def _set_default_value_for_enumerized_attribute(attr)
         | 
| 98 | 
            +
                  return if attr.default_value.nil?
         | 
| 99 | 
            +
                  begin
         | 
| 100 | 
            +
                    if respond_to?(attr.name)
         | 
| 101 | 
            +
                      attr_value = public_send(attr.name)
         | 
| 102 | 
            +
                    else
         | 
| 103 | 
            +
                      return
         | 
| 104 | 
            +
                    end
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                    value_for_validation = _enumerized_values_for_validation[attr.name.to_s]
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                    if (!attr_value || attr_value.empty?) && (!value_for_validation || value_for_validation.empty?)
         | 
| 109 | 
            +
                      value = Utils.call_if_callable(attr.default_value, self)
         | 
| 110 | 
            +
                      public_send("#{attr.name}=", value)
         | 
| 108 111 | 
             
                    end
         | 
| 112 | 
            +
                  rescue ActiveModel::MissingAttributeError
         | 
| 109 113 | 
             
                  end
         | 
| 110 114 | 
             
                end
         | 
| 111 115 | 
             
              end
         | 
    
        data/lib/enumerize/mongoid.rb
    CHANGED
    
    
    
        data/lib/enumerize/version.rb
    CHANGED
    
    
    
        data/lib/enumerize.rb
    CHANGED
    
    
    
        data/test/activemodel_test.rb
    CHANGED
    
    
    
        data/test/activerecord_test.rb
    CHANGED
    
    | @@ -8,6 +8,9 @@ db = (ENV['DB'] || 'sqlite3').to_sym | |
| 8 8 |  | 
| 9 9 | 
             
            silence_warnings do
         | 
| 10 10 | 
             
              ActiveRecord::Migration.verbose = false
         | 
| 11 | 
            +
              if ActiveRecord::Base.respond_to?(:use_yaml_unsafe_load)
         | 
| 12 | 
            +
                ActiveRecord::Base.use_yaml_unsafe_load = true
         | 
| 13 | 
            +
              end
         | 
| 11 14 | 
             
              ActiveRecord::Base.logger = Logger.new(nil)
         | 
| 12 15 | 
             
              ActiveRecord::Base.configurations = {
         | 
| 13 16 | 
             
                'sqlite3' => {
         | 
| @@ -151,7 +154,7 @@ class SkipValidationsLambdaWithParamUser < ActiveRecord::Base | |
| 151 154 | 
             
              include SkipValidationsLambdaWithParamEnum
         | 
| 152 155 | 
             
            end
         | 
| 153 156 |  | 
| 154 | 
            -
             | 
| 157 | 
            +
            class ActiveRecordTest < MiniTest::Spec
         | 
| 155 158 | 
             
              it 'sets nil if invalid value is passed' do
         | 
| 156 159 | 
             
                user = User.new
         | 
| 157 160 | 
             
                user.sex = :invalid
         | 
| @@ -511,7 +514,7 @@ describe Enumerize::ActiveRecordSupport do | |
| 511 514 | 
             
                user = User.create(:status => :active)
         | 
| 512 515 | 
             
                user.status = :blocked
         | 
| 513 516 |  | 
| 514 | 
            -
                assert_equal [1, 2],  | 
| 517 | 
            +
                assert_equal [1, 2], unsafe_yaml_load(user.changes.to_yaml)[:status]
         | 
| 515 518 | 
             
              end
         | 
| 516 519 |  | 
| 517 520 | 
             
              it 'does not change by the practical same value' do
         | 
| @@ -630,7 +633,7 @@ describe Enumerize::ActiveRecordSupport do | |
| 630 633 | 
             
              end
         | 
| 631 634 |  | 
| 632 635 | 
             
              it "doesn't break YAML serialization" do
         | 
| 633 | 
            -
                user =  | 
| 636 | 
            +
                user = unsafe_yaml_load(User.create(status: :blocked).to_yaml)
         | 
| 634 637 | 
             
                expect(user.status).must_equal 'blocked'
         | 
| 635 638 | 
             
              end
         | 
| 636 639 |  | 
    
        data/test/attribute_test.rb
    CHANGED
    
    
    
        data/test/base_test.rb
    CHANGED
    
    | @@ -2,7 +2,7 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            require 'test_helper'
         | 
| 4 4 |  | 
| 5 | 
            -
             | 
| 5 | 
            +
            class BaseTest < MiniTest::Spec
         | 
| 6 6 | 
             
              let(:kklass) do
         | 
| 7 7 | 
             
                Class.new do
         | 
| 8 8 | 
             
                  extend Enumerize
         | 
| @@ -201,4 +201,30 @@ describe Enumerize::Base do | |
| 201 201 | 
             
                object.foo = :b
         | 
| 202 202 | 
             
                expect(object.foo_value).must_equal 2
         | 
| 203 203 | 
             
              end
         | 
| 204 | 
            +
             | 
| 205 | 
            +
              it 'allows initialize method with arguments' do
         | 
| 206 | 
            +
                klass = Class.new do
         | 
| 207 | 
            +
                  extend Enumerize
         | 
| 208 | 
            +
             | 
| 209 | 
            +
                  def initialize(argument, key_word_argument: nil); end
         | 
| 210 | 
            +
                end
         | 
| 211 | 
            +
             | 
| 212 | 
            +
                klass.new('arg1', key_word_argument: 'kwargs1')
         | 
| 213 | 
            +
              end
         | 
| 214 | 
            +
             | 
| 215 | 
            +
              it 'allows initialize method with arguments for inherited classes' do
         | 
| 216 | 
            +
                parent_klass = Class.new do
         | 
| 217 | 
            +
                  def initialize(argument, key_word_argument: nil); end
         | 
| 218 | 
            +
                end
         | 
| 219 | 
            +
             | 
| 220 | 
            +
                klass = Class.new(parent_klass) do
         | 
| 221 | 
            +
                  extend Enumerize
         | 
| 222 | 
            +
             | 
| 223 | 
            +
                  def initialize(argument, key_word_argument: nil)
         | 
| 224 | 
            +
                    super
         | 
| 225 | 
            +
                  end
         | 
| 226 | 
            +
                end
         | 
| 227 | 
            +
             | 
| 228 | 
            +
                klass.new('arg1', key_word_argument: 'kwargs1')
         | 
| 229 | 
            +
              end
         | 
| 204 230 | 
             
            end
         | 
    
        data/test/mongo_mapper_test.rb
    CHANGED
    
    | @@ -10,7 +10,7 @@ end | |
| 10 10 |  | 
| 11 11 | 
             
            MongoMapper.connection = Mongo::Client.new(['localhost:27017'], database: 'enumerize-test-suite-of-mongomapper')
         | 
| 12 12 |  | 
| 13 | 
            -
             | 
| 13 | 
            +
            class MongoMapperTest < MiniTest::Spec
         | 
| 14 14 | 
             
              class MongoMapperUser
         | 
| 15 15 | 
             
                include MongoMapper::Document
         | 
| 16 16 | 
             
                extend Enumerize
         | 
    
        data/test/mongoid_test.rb
    CHANGED
    
    
    
        data/test/multiple_test.rb
    CHANGED
    
    
    
        data/test/predicates_test.rb
    CHANGED
    
    
    
        data/test/sequel_test.rb
    CHANGED
    
    | @@ -5,7 +5,7 @@ require 'sequel' | |
| 5 5 | 
             
            require 'logger'
         | 
| 6 6 | 
             
            require 'jdbc/sqlite3' if RUBY_PLATFORM == 'java'
         | 
| 7 7 |  | 
| 8 | 
            -
             | 
| 8 | 
            +
            class SequelTest < MiniTest::Spec
         | 
| 9 9 | 
             
              silence_warnings do
         | 
| 10 10 | 
             
                DB = if RUBY_PLATFORM == 'java'
         | 
| 11 11 | 
             
                  Sequel.connect('jdbc:sqlite::memory:')
         | 
| @@ -89,256 +89,254 @@ module SequelTest | |
| 89 89 | 
             
                include SkipValidationsLambdaWithParamEnum
         | 
| 90 90 | 
             
              end
         | 
| 91 91 |  | 
| 92 | 
            -
               | 
| 93 | 
            -
                 | 
| 94 | 
            -
             | 
| 95 | 
            -
             | 
| 96 | 
            -
             | 
| 97 | 
            -
                end
         | 
| 92 | 
            +
              it 'sets nil if invalid value is passed' do
         | 
| 93 | 
            +
                user = User.new
         | 
| 94 | 
            +
                user.sex = :invalid
         | 
| 95 | 
            +
                expect(user.sex).must_be_nil
         | 
| 96 | 
            +
              end
         | 
| 98 97 |  | 
| 99 | 
            -
             | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 98 | 
            +
              it 'saves value' do
         | 
| 99 | 
            +
                User.filter{ true }.delete
         | 
| 100 | 
            +
                user = User.new
         | 
| 101 | 
            +
                user.sex = :female
         | 
| 102 | 
            +
                user.save
         | 
| 103 | 
            +
                expect(user.sex).must_equal 'female'
         | 
| 104 | 
            +
              end
         | 
| 106 105 |  | 
| 107 | 
            -
             | 
| 108 | 
            -
             | 
| 109 | 
            -
             | 
| 110 | 
            -
             | 
| 111 | 
            -
             | 
| 112 | 
            -
             | 
| 113 | 
            -
             | 
| 114 | 
            -
                  end
         | 
| 106 | 
            +
              it 'loads value' do
         | 
| 107 | 
            +
                User.filter{ true }.delete
         | 
| 108 | 
            +
                User.create(:sex => :male)
         | 
| 109 | 
            +
                store_translations(:en, :enumerize => {:sex => {:male => 'Male'}}) do
         | 
| 110 | 
            +
                  user = User.first
         | 
| 111 | 
            +
                  expect(user.sex).must_equal 'male'
         | 
| 112 | 
            +
                  expect(user.sex_text).must_equal 'Male'
         | 
| 115 113 | 
             
                end
         | 
| 114 | 
            +
              end
         | 
| 116 115 |  | 
| 117 | 
            -
             | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 120 | 
            -
             | 
| 116 | 
            +
              it 'has default value' do
         | 
| 117 | 
            +
                expect(User.new.role).must_equal 'user'
         | 
| 118 | 
            +
                expect(User.new.values[:role]).must_equal 'user'
         | 
| 119 | 
            +
              end
         | 
| 121 120 |  | 
| 122 | 
            -
             | 
| 123 | 
            -
             | 
| 124 | 
            -
             | 
| 121 | 
            +
              it 'does not set default value for not selected attributes' do
         | 
| 122 | 
            +
                User.filter{ true }.delete
         | 
| 123 | 
            +
                User.create(:sex => :male)
         | 
| 125 124 |  | 
| 126 | 
            -
             | 
| 127 | 
            -
             | 
| 125 | 
            +
                assert_equal [:id], User.select(:id).first.values.keys
         | 
| 126 | 
            +
              end
         | 
| 128 127 |  | 
| 129 | 
            -
             | 
| 130 | 
            -
             | 
| 131 | 
            -
             | 
| 132 | 
            -
             | 
| 133 | 
            -
             | 
| 134 | 
            -
             | 
| 135 | 
            -
             | 
| 128 | 
            +
              it 'has default value with lambda' do
         | 
| 129 | 
            +
                expect(User.new.lambda_role).must_equal 'admin'
         | 
| 130 | 
            +
                expect(User.new.values[:lambda_role]).must_equal 'admin'
         | 
| 131 | 
            +
              end
         | 
| 132 | 
            +
              it 'uses after_initialize callback to set default value' do
         | 
| 133 | 
            +
                User.filter{ true }.delete
         | 
| 134 | 
            +
                User.create(sex: 'male', lambda_role: nil)
         | 
| 136 135 |  | 
| 137 | 
            -
             | 
| 138 | 
            -
             | 
| 139 | 
            -
             | 
| 136 | 
            +
                user = User.where(:sex => 'male').first
         | 
| 137 | 
            +
                expect(user.lambda_role).must_equal 'admin'
         | 
| 138 | 
            +
              end
         | 
| 140 139 |  | 
| 141 | 
            -
             | 
| 142 | 
            -
             | 
| 143 | 
            -
             | 
| 140 | 
            +
              it 'uses default value from db column' do
         | 
| 141 | 
            +
                expect(User.new.account_type).must_equal 'basic'
         | 
| 142 | 
            +
              end
         | 
| 144 143 |  | 
| 145 | 
            -
             | 
| 146 | 
            -
             | 
| 147 | 
            -
             | 
| 148 | 
            -
             | 
| 149 | 
            -
             | 
| 150 | 
            -
             | 
| 144 | 
            +
              it 'validates inclusion' do
         | 
| 145 | 
            +
                user = User.new
         | 
| 146 | 
            +
                user.role = 'wrong'
         | 
| 147 | 
            +
                expect(user).wont_be :valid?
         | 
| 148 | 
            +
                expect(user.errors[:role]).must_include 'is not included in the list'
         | 
| 149 | 
            +
              end
         | 
| 151 150 |  | 
| 152 | 
            -
             | 
| 153 | 
            -
             | 
| 154 | 
            -
             | 
| 155 | 
            -
                  end
         | 
| 151 | 
            +
              it 'validates inclusion on mass assignment' do
         | 
| 152 | 
            +
                assert_raises Sequel::ValidationFailed do
         | 
| 153 | 
            +
                  User.create(role: 'wrong')
         | 
| 156 154 | 
             
                end
         | 
| 155 | 
            +
              end
         | 
| 157 156 |  | 
| 158 | 
            -
             | 
| 159 | 
            -
             | 
| 160 | 
            -
             | 
| 161 | 
            -
             | 
| 157 | 
            +
              it "uses persisted value for validation if it hasn't been set" do
         | 
| 158 | 
            +
                user = User.create :sex => :male
         | 
| 159 | 
            +
                expect(User[user.id].read_attribute_for_validation(:sex)).must_equal 'male'
         | 
| 160 | 
            +
              end
         | 
| 162 161 |  | 
| 163 | 
            -
             | 
| 164 | 
            -
             | 
| 165 | 
            -
             | 
| 166 | 
            -
             | 
| 167 | 
            -
             | 
| 162 | 
            +
              it 'is valid with empty string assigned' do
         | 
| 163 | 
            +
                user = User.new
         | 
| 164 | 
            +
                user.role = ''
         | 
| 165 | 
            +
                expect(user).must_be :valid?
         | 
| 166 | 
            +
              end
         | 
| 168 167 |  | 
| 169 | 
            -
             | 
| 170 | 
            -
             | 
| 171 | 
            -
             | 
| 172 | 
            -
             | 
| 173 | 
            -
             | 
| 168 | 
            +
              it 'stores nil when empty string assigned' do
         | 
| 169 | 
            +
                user = User.new
         | 
| 170 | 
            +
                user.role = ''
         | 
| 171 | 
            +
                expect(user.values[:role]).must_be_nil
         | 
| 172 | 
            +
              end
         | 
| 174 173 |  | 
| 175 | 
            -
             | 
| 176 | 
            -
             | 
| 177 | 
            -
             | 
| 178 | 
            -
             | 
| 179 | 
            -
             | 
| 180 | 
            -
             | 
| 174 | 
            +
              it 'validates inclusion when :skip_validations = false' do
         | 
| 175 | 
            +
                user = DoNotSkipValidationsUser.new
         | 
| 176 | 
            +
                user.foo = 'wrong'
         | 
| 177 | 
            +
                expect(user).wont_be :valid?
         | 
| 178 | 
            +
                expect(user.errors[:foo]).must_include 'is not included in the list'
         | 
| 179 | 
            +
              end
         | 
| 181 180 |  | 
| 182 | 
            -
             | 
| 183 | 
            -
             | 
| 184 | 
            -
             | 
| 185 | 
            -
             | 
| 186 | 
            -
             | 
| 181 | 
            +
              it 'does not validate inclusion when :skip_validations = true' do
         | 
| 182 | 
            +
                user = SkipValidationsUser.new
         | 
| 183 | 
            +
                user.foo = 'wrong'
         | 
| 184 | 
            +
                expect(user).must_be :valid?
         | 
| 185 | 
            +
              end
         | 
| 187 186 |  | 
| 188 | 
            -
             | 
| 189 | 
            -
             | 
| 190 | 
            -
             | 
| 191 | 
            -
             | 
| 192 | 
            -
             | 
| 187 | 
            +
              it 'supports :skip_validations option as lambda' do
         | 
| 188 | 
            +
                user = SkipValidationsLambdaUser.new
         | 
| 189 | 
            +
                user.foo = 'wrong'
         | 
| 190 | 
            +
                expect(user).must_be :valid?
         | 
| 191 | 
            +
              end
         | 
| 193 192 |  | 
| 194 | 
            -
             | 
| 195 | 
            -
             | 
| 196 | 
            -
             | 
| 197 | 
            -
             | 
| 198 | 
            -
             | 
| 193 | 
            +
              it 'supports :skip_validations option as lambda with a parameter' do
         | 
| 194 | 
            +
                user = SkipValidationsLambdaWithParamUser.new
         | 
| 195 | 
            +
                user.foo = 'wrong'
         | 
| 196 | 
            +
                expect(user).must_be :valid?
         | 
| 197 | 
            +
              end
         | 
| 199 198 |  | 
| 200 | 
            -
             | 
| 201 | 
            -
             | 
| 202 | 
            -
             | 
| 203 | 
            -
             | 
| 204 | 
            -
             | 
| 205 | 
            -
             | 
| 206 | 
            -
             | 
| 207 | 
            -
             | 
| 208 | 
            -
             | 
| 209 | 
            -
             | 
| 210 | 
            -
             | 
| 211 | 
            -
             | 
| 212 | 
            -
             | 
| 213 | 
            -
             | 
| 214 | 
            -
             | 
| 215 | 
            -
             | 
| 216 | 
            -
             | 
| 217 | 
            -
             | 
| 218 | 
            -
             | 
| 219 | 
            -
             | 
| 220 | 
            -
             | 
| 199 | 
            +
              it 'supports multiple attributes' do
         | 
| 200 | 
            +
                user = User.new
         | 
| 201 | 
            +
                user.interests ||= []
         | 
| 202 | 
            +
                expect(user.interests).must_be_empty
         | 
| 203 | 
            +
                user.interests << "music"
         | 
| 204 | 
            +
                expect(user.interests).must_equal %w(music)
         | 
| 205 | 
            +
                user.save
         | 
| 206 | 
            +
             | 
| 207 | 
            +
                user = User[user.id]
         | 
| 208 | 
            +
                expect(user.interests).must_be_instance_of Enumerize::Set
         | 
| 209 | 
            +
                expect(user.interests).must_equal %w(music)
         | 
| 210 | 
            +
                user.interests << "sports"
         | 
| 211 | 
            +
                expect(user.interests).must_equal %w(music sports)
         | 
| 212 | 
            +
             | 
| 213 | 
            +
                user.interests = []
         | 
| 214 | 
            +
                interests = user.interests
         | 
| 215 | 
            +
                interests << "music"
         | 
| 216 | 
            +
                expect(interests).must_equal %w(music)
         | 
| 217 | 
            +
                interests << "dancing"
         | 
| 218 | 
            +
                expect(interests).must_equal %w(music dancing)
         | 
| 219 | 
            +
              end
         | 
| 221 220 |  | 
| 222 | 
            -
             | 
| 223 | 
            -
             | 
| 224 | 
            -
             | 
| 225 | 
            -
             | 
| 226 | 
            -
             | 
| 227 | 
            -
             | 
| 228 | 
            -
             | 
| 221 | 
            +
              it 'returns invalid multiple value for validation' do
         | 
| 222 | 
            +
                user = User.new
         | 
| 223 | 
            +
                user.interests << :music
         | 
| 224 | 
            +
                user.interests << :invalid
         | 
| 225 | 
            +
                values = user.read_attribute_for_validation(:interests)
         | 
| 226 | 
            +
                expect(values).must_equal %w(music invalid)
         | 
| 227 | 
            +
              end
         | 
| 229 228 |  | 
| 230 | 
            -
             | 
| 231 | 
            -
             | 
| 232 | 
            -
             | 
| 233 | 
            -
             | 
| 229 | 
            +
              it 'validates multiple attributes' do
         | 
| 230 | 
            +
                user = User.new
         | 
| 231 | 
            +
                user.interests << :invalid
         | 
| 232 | 
            +
                expect(user).wont_be :valid?
         | 
| 234 233 |  | 
| 235 | 
            -
             | 
| 236 | 
            -
             | 
| 234 | 
            +
                user.interests = Object.new
         | 
| 235 | 
            +
                expect(user).wont_be :valid?
         | 
| 237 236 |  | 
| 238 | 
            -
             | 
| 239 | 
            -
             | 
| 240 | 
            -
             | 
| 237 | 
            +
                user.interests = ['music', '']
         | 
| 238 | 
            +
                expect(user).must_be :valid?
         | 
| 239 | 
            +
              end
         | 
| 241 240 |  | 
| 242 | 
            -
             | 
| 243 | 
            -
             | 
| 241 | 
            +
              it 'stores custom values for multiple attributes' do
         | 
| 242 | 
            +
                User.filter{ true }.delete
         | 
| 244 243 |  | 
| 245 | 
            -
             | 
| 246 | 
            -
             | 
| 244 | 
            +
                klass = Class.new(User)
         | 
| 245 | 
            +
                klass.enumerize :interests, in: { music: 0, sports: 1, dancing: 2, programming: 3}, multiple: true
         | 
| 247 246 |  | 
| 248 | 
            -
             | 
| 249 | 
            -
             | 
| 250 | 
            -
             | 
| 251 | 
            -
             | 
| 247 | 
            +
                user = klass.new
         | 
| 248 | 
            +
                user.interests << :music
         | 
| 249 | 
            +
                expect(user.interests).must_equal %w(music)
         | 
| 250 | 
            +
                user.save
         | 
| 252 251 |  | 
| 253 | 
            -
             | 
| 254 | 
            -
             | 
| 255 | 
            -
             | 
| 252 | 
            +
                user = klass[user.id]
         | 
| 253 | 
            +
                expect(user.interests).must_equal %w(music)
         | 
| 254 | 
            +
              end
         | 
| 256 255 |  | 
| 257 | 
            -
             | 
| 258 | 
            -
             | 
| 256 | 
            +
              it 'adds scope' do
         | 
| 257 | 
            +
                User.filter{ true }.delete
         | 
| 259 258 |  | 
| 260 | 
            -
             | 
| 261 | 
            -
             | 
| 262 | 
            -
             | 
| 259 | 
            +
                user_1 = User.create(sex: :female, skill: :noob, status: :active, role: :admin)
         | 
| 260 | 
            +
                user_2 = User.create(sex: :female, skill: :casual, status: :blocked)
         | 
| 261 | 
            +
                user_3 = User.create(sex: :male, skill: :pro)
         | 
| 263 262 |  | 
| 264 | 
            -
             | 
| 265 | 
            -
             | 
| 266 | 
            -
             | 
| 263 | 
            +
                expect(User.with_status(:active).to_a).must_equal [user_1]
         | 
| 264 | 
            +
                expect(User.with_status(:blocked).to_a).must_equal [user_2]
         | 
| 265 | 
            +
                expect(User.with_status(:active, :blocked).to_set).must_equal [user_1, user_2].to_set
         | 
| 267 266 |  | 
| 268 | 
            -
             | 
| 269 | 
            -
             | 
| 267 | 
            +
                expect(User.without_status(:active).to_a).must_equal [user_2]
         | 
| 268 | 
            +
                expect(User.without_status(:active, :blocked).to_a).must_equal []
         | 
| 270 269 |  | 
| 271 | 
            -
             | 
| 272 | 
            -
             | 
| 273 | 
            -
             | 
| 270 | 
            +
                expect(User.having_role(:admin).to_a).must_equal [user_1]
         | 
| 271 | 
            +
                expect(User.male.to_a).must_equal [user_3]
         | 
| 272 | 
            +
                expect(User.pro.to_a).must_equal [user_3]
         | 
| 274 273 |  | 
| 275 | 
            -
             | 
| 276 | 
            -
             | 
| 277 | 
            -
             | 
| 274 | 
            +
                expect(User.not_male.to_set).must_equal [user_1, user_2].to_set
         | 
| 275 | 
            +
                expect(User.not_pro.to_set).must_equal [user_1, user_2].to_set
         | 
| 276 | 
            +
              end
         | 
| 278 277 |  | 
| 279 | 
            -
             | 
| 280 | 
            -
             | 
| 281 | 
            -
             | 
| 282 | 
            -
             | 
| 278 | 
            +
              it 'allows either key or value as valid' do
         | 
| 279 | 
            +
                user_1 = User.new(status: :active)
         | 
| 280 | 
            +
                user_2 = User.new(status: 1)
         | 
| 281 | 
            +
                user_3 = User.new(status: '1')
         | 
| 283 282 |  | 
| 284 | 
            -
             | 
| 285 | 
            -
             | 
| 286 | 
            -
             | 
| 283 | 
            +
                expect(user_1.status).must_equal 'active'
         | 
| 284 | 
            +
                expect(user_2.status).must_equal 'active'
         | 
| 285 | 
            +
                expect(user_3.status).must_equal 'active'
         | 
| 287 286 |  | 
| 288 | 
            -
             | 
| 289 | 
            -
             | 
| 290 | 
            -
             | 
| 291 | 
            -
             | 
| 287 | 
            +
                expect(user_1).must_be :valid?
         | 
| 288 | 
            +
                expect(user_2).must_be :valid?
         | 
| 289 | 
            +
                expect(user_3).must_be :valid?
         | 
| 290 | 
            +
              end
         | 
| 292 291 |  | 
| 293 | 
            -
             | 
| 294 | 
            -
             | 
| 292 | 
            +
              it 'supports defining enumerized attributes on abstract class' do
         | 
| 293 | 
            +
                Document.filter{ true }.delete
         | 
| 295 294 |  | 
| 296 | 
            -
             | 
| 297 | 
            -
             | 
| 298 | 
            -
             | 
| 299 | 
            -
             | 
| 295 | 
            +
                document = Document.new
         | 
| 296 | 
            +
                document.visibility = :protected
         | 
| 297 | 
            +
                expect(document.visibility).must_equal 'protected'
         | 
| 298 | 
            +
              end
         | 
| 300 299 |  | 
| 301 | 
            -
             | 
| 302 | 
            -
             | 
| 300 | 
            +
              it 'supports defining enumerized scopes on abstract class' do
         | 
| 301 | 
            +
                Document.filter{ true }.delete
         | 
| 303 302 |  | 
| 304 | 
            -
             | 
| 305 | 
            -
             | 
| 303 | 
            +
                document_1 = Document.create(visibility: :public)
         | 
| 304 | 
            +
                document_2 = Document.create(visibility: :private)
         | 
| 306 305 |  | 
| 307 | 
            -
             | 
| 308 | 
            -
             | 
| 306 | 
            +
                expect(Document.with_visibility(:public).to_a).must_equal [document_1]
         | 
| 307 | 
            +
              end
         | 
| 309 308 |  | 
| 310 | 
            -
             | 
| 311 | 
            -
             | 
| 309 | 
            +
              it 'validates uniqueness' do
         | 
| 310 | 
            +
                user = User.create(status: :active, sex: "male")
         | 
| 312 311 |  | 
| 313 | 
            -
             | 
| 314 | 
            -
             | 
| 315 | 
            -
             | 
| 316 | 
            -
             | 
| 312 | 
            +
                user = UniqStatusUser.new
         | 
| 313 | 
            +
                user.sex = "male"
         | 
| 314 | 
            +
                user.status = :active
         | 
| 315 | 
            +
                expect(user.valid?).must_equal false
         | 
| 317 316 |  | 
| 318 | 
            -
             | 
| 319 | 
            -
             | 
| 317 | 
            +
                expect(user.errors[:status]).wont_be :empty?
         | 
| 318 | 
            +
              end
         | 
| 320 319 |  | 
| 321 | 
            -
             | 
| 322 | 
            -
             | 
| 320 | 
            +
              it "doesn't update record" do
         | 
| 321 | 
            +
                Document.filter{ true }.delete
         | 
| 323 322 |  | 
| 324 | 
            -
             | 
| 323 | 
            +
                expected = Time.new(2010, 10, 10)
         | 
| 325 324 |  | 
| 326 | 
            -
             | 
| 327 | 
            -
             | 
| 328 | 
            -
             | 
| 325 | 
            +
                document = Document.new
         | 
| 326 | 
            +
                document.updated_at = expected
         | 
| 327 | 
            +
                document.save
         | 
| 329 328 |  | 
| 330 | 
            -
             | 
| 331 | 
            -
             | 
| 329 | 
            +
                document = Document.last
         | 
| 330 | 
            +
                document.save
         | 
| 332 331 |  | 
| 333 | 
            -
             | 
| 334 | 
            -
             | 
| 332 | 
            +
                assert_equal expected, document.updated_at
         | 
| 333 | 
            +
              end
         | 
| 335 334 |  | 
| 336 | 
            -
             | 
| 337 | 
            -
             | 
| 338 | 
            -
             | 
| 335 | 
            +
              it 'changes from dirty should be serialized as scalar values' do
         | 
| 336 | 
            +
                user = User.create(:status => :active)
         | 
| 337 | 
            +
                user.status = :blocked
         | 
| 339 338 |  | 
| 340 | 
            -
             | 
| 341 | 
            -
             | 
| 342 | 
            -
                end
         | 
| 339 | 
            +
                expected = { status: [1, 2] }.to_yaml
         | 
| 340 | 
            +
                assert_equal expected, user.column_changes.to_yaml
         | 
| 343 341 | 
             
              end
         | 
| 344 342 | 
             
            end
         | 
    
        data/test/set_test.rb
    CHANGED
    
    
    
        data/test/test_helper.rb
    CHANGED
    
    
    
        data/test/value_test.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: enumerize
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 2. | 
| 4 | 
            +
              version: 2.6.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Sergey Nartimov
         | 
| 8 | 
            -
            autorequire: | 
| 8 | 
            +
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2023-03-07 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activesupport
         | 
| @@ -99,7 +99,7 @@ homepage: https://github.com/brainspec/enumerize | |
| 99 99 | 
             
            licenses:
         | 
| 100 100 | 
             
            - MIT
         | 
| 101 101 | 
             
            metadata: {}
         | 
| 102 | 
            -
            post_install_message: | 
| 102 | 
            +
            post_install_message:
         | 
| 103 103 | 
             
            rdoc_options: []
         | 
| 104 104 | 
             
            require_paths:
         | 
| 105 105 | 
             
            - lib
         | 
| @@ -107,15 +107,37 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 107 107 | 
             
              requirements:
         | 
| 108 108 | 
             
              - - ">="
         | 
| 109 109 | 
             
                - !ruby/object:Gem::Version
         | 
| 110 | 
            -
                  version:  | 
| 110 | 
            +
                  version: '2.7'
         | 
| 111 111 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 112 112 | 
             
              requirements:
         | 
| 113 113 | 
             
              - - ">="
         | 
| 114 114 | 
             
                - !ruby/object:Gem::Version
         | 
| 115 115 | 
             
                  version: '0'
         | 
| 116 116 | 
             
            requirements: []
         | 
| 117 | 
            -
            rubygems_version: 3. | 
| 118 | 
            -
            signing_key: | 
| 117 | 
            +
            rubygems_version: 3.4.7
         | 
| 118 | 
            +
            signing_key:
         | 
| 119 119 | 
             
            specification_version: 4
         | 
| 120 120 | 
             
            summary: Enumerated attributes with I18n and ActiveRecord/Mongoid/MongoMapper support
         | 
| 121 | 
            -
            test_files: | 
| 121 | 
            +
            test_files:
         | 
| 122 | 
            +
            - spec/enumerize/integrations/rspec/matcher_spec.rb
         | 
| 123 | 
            +
            - spec/spec_helper.rb
         | 
| 124 | 
            +
            - test/activemodel_test.rb
         | 
| 125 | 
            +
            - test/activerecord_test.rb
         | 
| 126 | 
            +
            - test/attribute_map_test.rb
         | 
| 127 | 
            +
            - test/attribute_test.rb
         | 
| 128 | 
            +
            - test/base_test.rb
         | 
| 129 | 
            +
            - test/formtastic_test.rb
         | 
| 130 | 
            +
            - test/module_attributes_test.rb
         | 
| 131 | 
            +
            - test/mongo_mapper_test.rb
         | 
| 132 | 
            +
            - test/mongoid_test.rb
         | 
| 133 | 
            +
            - test/multiple_test.rb
         | 
| 134 | 
            +
            - test/predicates_test.rb
         | 
| 135 | 
            +
            - test/rails_admin_test.rb
         | 
| 136 | 
            +
            - test/sequel_test.rb
         | 
| 137 | 
            +
            - test/set_test.rb
         | 
| 138 | 
            +
            - test/simple_form_test.rb
         | 
| 139 | 
            +
            - test/support/mock_controller.rb
         | 
| 140 | 
            +
            - test/support/shared_enums.rb
         | 
| 141 | 
            +
            - test/support/view_test_helper.rb
         | 
| 142 | 
            +
            - test/test_helper.rb
         | 
| 143 | 
            +
            - test/value_test.rb
         |