assignable_values 0.10.0 → 0.11.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 +15 -0
- data/README.md +8 -4
- data/lib/assignable_values/active_record/restriction/base.rb +14 -7
- data/lib/assignable_values/version.rb +1 -1
- data/spec/rails-3.0/Gemfile.lock +1 -1
- data/spec/rails-3.2/Gemfile.lock +1 -1
- data/spec/rails-4.1/Gemfile.lock +1 -1
- data/spec/rails-4.1/Rakefile +1 -1
- data/spec/shared/assignable_values/active_record_spec.rb +27 -2
- metadata +84 -105
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            !binary "U0hBMQ==":
         | 
| 3 | 
            +
              metadata.gz: !binary |-
         | 
| 4 | 
            +
                NmQwMjA2ZmZiMjQyOTRhOWMwNWViYTI4OTg4NTljMWFjMTRhNDUyYg==
         | 
| 5 | 
            +
              data.tar.gz: !binary |-
         | 
| 6 | 
            +
                NDM4YzA1NTk3ZGU2NjNiMmUyNjZiNDI2MWIwYTIxMTdkZTNjZmU1NA==
         | 
| 7 | 
            +
            SHA512:
         | 
| 8 | 
            +
              metadata.gz: !binary |-
         | 
| 9 | 
            +
                ZWFkZTk3NzkyMjk5ZjA3MmM0NDA3ZGQwMDA0ZTc0MDc3NjFjYjgzYzMyNjg2
         | 
| 10 | 
            +
                ODQ2YWE1YTI0ZjNhZmQ5NDc2YjNjOTUxMWQ0ZjhjM2U4MzhjMDIxYmI5ZGNk
         | 
| 11 | 
            +
                MzM4OWUyMTY5MTIwZGE0YTZmMTRiMjY0MDBlZDkyYjNkMWY3NGI=
         | 
| 12 | 
            +
              data.tar.gz: !binary |-
         | 
| 13 | 
            +
                OGEyZWQ2OTBhN2ZhMTNjNDg3ZTFhNzdmNzcyNDQ1NmIyNTJiZTQwNzEwNmZh
         | 
| 14 | 
            +
                ZDdiYTQ2OWFlYTQ2NTYwMzA2ZmNhM2EyNjdjYmRlMzRhMTRhNjQ1OWFkYWZm
         | 
| 15 | 
            +
                ZTNlMDViOTNmZmQ4Mjg4ZmE0YzQxYTQ5NTZhNmNmNmE5MzNlOWY=
         | 
    
        data/README.md
    CHANGED
    
    | @@ -158,11 +158,15 @@ If a value has been saved before, it will remain valid, even if it is no longer | |
| 158 158 |  | 
| 159 159 | 
             
            It will also be returned when obtaining the list of assignable values:
         | 
| 160 160 |  | 
| 161 | 
            -
                song. | 
| 161 | 
            +
                song.assignable_years # => [2010, 2011, 2012, 1985]
         | 
| 162 | 
            +
             | 
| 163 | 
            +
            However, if you want only those values that are actually intended to be assignable, e.g. when updating a `<select>` via AJAX, pass an option:
         | 
| 164 | 
            +
             | 
| 165 | 
            +
                song.assignable_years(include_stored_value: false) # => [2010, 2011, 2012]
         | 
| 162 166 |  | 
| 163 167 | 
             
            Once a changed value has been saved, the previous value disappears from the list of assignable values:
         | 
| 164 168 |  | 
| 165 | 
            -
                song. | 
| 169 | 
            +
                song.year = '2010'
         | 
| 166 170 | 
             
                song.save!
         | 
| 167 171 | 
             
                song.assignable_years # => [2010, 2011, 2012]
         | 
| 168 172 | 
             
                song.year = 1985
         | 
| @@ -176,7 +180,7 @@ Restricting belongs_to associations | |
| 176 180 |  | 
| 177 181 | 
             
            You can restrict `belongs_to` associations in the same manner as scalar attributes:
         | 
| 178 182 |  | 
| 179 | 
            -
                class Song
         | 
| 183 | 
            +
                class Song < ActiveRecord::Base
         | 
| 180 184 |  | 
| 181 185 | 
             
                  belongs_to :artist
         | 
| 182 186 |  | 
| @@ -202,7 +206,7 @@ Listing and validating als works the same: | |
| 202 206 | 
             
                song.valid? # => false
         | 
| 203 207 |  | 
| 204 208 | 
             
            Similiar to scalar attributes, associations are only validated when the foreign key (`artist_id` in the example above) changes.
         | 
| 205 | 
            -
             | 
| 209 | 
            +
            Values stored in the database will remain assignable until they are changed, and you can query actually assignable values with `song.assignable_artists(include_stored_value: false)`.
         | 
| 206 210 |  | 
| 207 211 | 
             
            Validation errors will be attached to the association's foreign key (`artist_id` in the example above).
         | 
| 208 212 |  | 
| @@ -45,19 +45,23 @@ module AssignableValues | |
| 45 45 | 
             
                      assignable_values(record).include?(value)
         | 
| 46 46 | 
             
                    end
         | 
| 47 47 |  | 
| 48 | 
            -
                    def assignable_values(record,  | 
| 48 | 
            +
                    def assignable_values(record, options = {})
         | 
| 49 49 | 
             
                      assignable_values = []
         | 
| 50 50 | 
             
                      parsed_values = parsed_assignable_values(record)
         | 
| 51 51 | 
             
                      current_values = parsed_values.delete(:values)
         | 
| 52 | 
            -
             | 
| 53 | 
            -
                      if  | 
| 54 | 
            -
                         | 
| 52 | 
            +
             | 
| 53 | 
            +
                      if options.fetch(:include_old_value, true)
         | 
| 54 | 
            +
                        old_value = previously_saved_value(record)
         | 
| 55 | 
            +
                        if old_value.present? && !current_values.include?(old_value)
         | 
| 56 | 
            +
                          assignable_values << old_value
         | 
| 57 | 
            +
                        end
         | 
| 55 58 | 
             
                      end
         | 
| 59 | 
            +
             | 
| 56 60 | 
             
                      assignable_values += current_values
         | 
| 57 61 | 
             
                      parsed_values.each do |meta_name, meta_content|
         | 
| 58 62 | 
             
                        assignable_values.singleton_class.send(:define_method, meta_name) { meta_content }
         | 
| 59 63 | 
             
                      end
         | 
| 60 | 
            -
                      if decorate
         | 
| 64 | 
            +
                      if options[:decorate]
         | 
| 61 65 | 
             
                        assignable_values = decorate_values(assignable_values)
         | 
| 62 66 | 
             
                      end
         | 
| 63 67 | 
             
                      assignable_values
         | 
| @@ -179,8 +183,11 @@ module AssignableValues | |
| 179 183 | 
             
                      restriction = self
         | 
| 180 184 | 
             
                      enhance_model do
         | 
| 181 185 | 
             
                        assignable_values_method = "assignable_#{restriction.property.to_s.pluralize}"
         | 
| 182 | 
            -
                        define_method assignable_values_method do
         | 
| 183 | 
            -
                           | 
| 186 | 
            +
                        define_method assignable_values_method do |*args|
         | 
| 187 | 
            +
                          # Ruby 1.8.7 does not support optional block arguments :(
         | 
| 188 | 
            +
                          options = args.first || {}
         | 
| 189 | 
            +
                          options.merge!({:decorate => true})
         | 
| 190 | 
            +
                          restriction.assignable_values(self, options)
         | 
| 184 191 | 
             
                        end
         | 
| 185 192 | 
             
                      end
         | 
| 186 193 | 
             
                    end
         | 
    
        data/spec/rails-3.0/Gemfile.lock
    CHANGED
    
    
    
        data/spec/rails-3.2/Gemfile.lock
    CHANGED
    
    
    
        data/spec/rails-4.1/Gemfile.lock
    CHANGED
    
    
    
        data/spec/rails-4.1/Rakefile
    CHANGED
    
    
| @@ -13,7 +13,7 @@ describe AssignableValues::ActiveRecord do | |
| 13 13 | 
             
                  end.to raise_error(AssignableValues::NoValuesGiven)
         | 
| 14 14 | 
             
                end
         | 
| 15 15 |  | 
| 16 | 
            -
                context 'when  | 
| 16 | 
            +
                context 'when validating virtual attributes' do
         | 
| 17 17 |  | 
| 18 18 | 
             
                  before :each do
         | 
| 19 19 | 
             
                    @klass = Song.disposable_copy do
         | 
| @@ -71,7 +71,7 @@ describe AssignableValues::ActiveRecord do | |
| 71 71 |  | 
| 72 72 | 
             
                    it 'should allow a previously saved value even if that value is no longer allowed' do
         | 
| 73 73 | 
             
                      record = @klass.create!(:genre => 'pop')
         | 
| 74 | 
            -
                      @klass.update_all(:genre => ' | 
| 74 | 
            +
                      @klass.update_all(:genre => 'pretend previously valid value') # update without validations for the sake of this test
         | 
| 75 75 | 
             
                      record.reload.should be_valid
         | 
| 76 76 | 
             
                    end
         | 
| 77 77 |  | 
| @@ -516,6 +516,31 @@ describe AssignableValues::ActiveRecord do | |
| 516 516 | 
             
                    record.assignable_genres.should == %w[pop rock]
         | 
| 517 517 | 
             
                  end
         | 
| 518 518 |  | 
| 519 | 
            +
                  it 'should allow omitting a previously saved value' do
         | 
| 520 | 
            +
                    klass = Song.disposable_copy do
         | 
| 521 | 
            +
                      assignable_values_for :genre do
         | 
| 522 | 
            +
                        %w[pop rock]
         | 
| 523 | 
            +
                      end
         | 
| 524 | 
            +
                    end
         | 
| 525 | 
            +
                    record = klass.create!(:genre => 'pop')
         | 
| 526 | 
            +
                    klass.update_all(:genre => 'ballad') # update without validation for the sake of this test
         | 
| 527 | 
            +
                    record.reload.assignable_genres(:include_old_value => false).should == %w[pop rock]
         | 
| 528 | 
            +
                  end
         | 
| 529 | 
            +
             | 
| 530 | 
            +
                  it 'should allow omitting a previously saved association' do
         | 
| 531 | 
            +
                    allowed_association = Artist.create!
         | 
| 532 | 
            +
                    disallowed_association = Artist.create!
         | 
| 533 | 
            +
                    klass = Song.disposable_copy
         | 
| 534 | 
            +
             | 
| 535 | 
            +
                    record = klass.create!(:artist => disallowed_association)
         | 
| 536 | 
            +
                    klass.class_eval do
         | 
| 537 | 
            +
                      assignable_values_for :artist do
         | 
| 538 | 
            +
                        [allowed_association]
         | 
| 539 | 
            +
                      end
         | 
| 540 | 
            +
                    end
         | 
| 541 | 
            +
                    record.assignable_artists(:include_old_value => false).should =~ [allowed_association]
         | 
| 542 | 
            +
                  end
         | 
| 543 | 
            +
             | 
| 519 544 | 
             
                  context 'humanization' do
         | 
| 520 545 |  | 
| 521 546 | 
             
                    it 'should define a method that return pairs of values and their humanization' do
         | 
    
        metadata
    CHANGED
    
    | @@ -1,104 +1,92 @@ | |
| 1 | 
            -
            --- !ruby/object:Gem::Specification | 
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: assignable_values
         | 
| 3 | 
            -
            version: !ruby/object:Gem::Version | 
| 4 | 
            -
               | 
| 5 | 
            -
              prerelease: 
         | 
| 6 | 
            -
              segments: 
         | 
| 7 | 
            -
              - 0
         | 
| 8 | 
            -
              - 10
         | 
| 9 | 
            -
              - 0
         | 
| 10 | 
            -
              version: 0.10.0
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.11.0
         | 
| 11 5 | 
             
            platform: ruby
         | 
| 12 | 
            -
            authors: | 
| 6 | 
            +
            authors:
         | 
| 13 7 | 
             
            - Henning Koch
         | 
| 14 8 | 
             
            autorequire: 
         | 
| 15 9 | 
             
            bindir: bin
         | 
| 16 10 | 
             
            cert_chain: []
         | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 11 | 
            +
            date: 2014-06-16 00:00:00.000000000 Z
         | 
| 12 | 
            +
            dependencies:
         | 
| 13 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 21 14 | 
             
              name: activerecord
         | 
| 22 | 
            -
               | 
| 23 | 
            -
             | 
| 24 | 
            -
                 | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
                  - !ruby/object:Gem::Version 
         | 
| 28 | 
            -
                    hash: 3
         | 
| 29 | 
            -
                    segments: 
         | 
| 30 | 
            -
                    - 0
         | 
| 31 | 
            -
                    version: "0"
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - ! '>='
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: '0'
         | 
| 32 20 | 
             
              type: :runtime
         | 
| 33 | 
            -
              version_requirements: *id001
         | 
| 34 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 35 | 
            -
              name: rails
         | 
| 36 21 | 
             
              prerelease: false
         | 
| 37 | 
            -
               | 
| 38 | 
            -
                 | 
| 39 | 
            -
                 | 
| 22 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            +
                requirements:
         | 
| 24 | 
            +
                - - ! '>='
         | 
| 25 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            +
                    version: '0'
         | 
| 27 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            +
              name: rails
         | 
| 29 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 | 
            +
                requirements:
         | 
| 40 31 | 
             
                - - ~>
         | 
| 41 | 
            -
                  - !ruby/object:Gem::Version | 
| 42 | 
            -
                     | 
| 43 | 
            -
                    segments: 
         | 
| 44 | 
            -
                    - 3
         | 
| 45 | 
            -
                    - 1
         | 
| 46 | 
            -
                    version: "3.1"
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: '3.1'
         | 
| 47 34 | 
             
              type: :development
         | 
| 48 | 
            -
              version_requirements: *id002
         | 
| 49 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 50 | 
            -
              name: rspec
         | 
| 51 35 | 
             
              prerelease: false
         | 
| 52 | 
            -
               | 
| 53 | 
            -
                 | 
| 54 | 
            -
                requirements: 
         | 
| 36 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 | 
            +
                requirements:
         | 
| 55 38 | 
             
                - - ~>
         | 
| 56 | 
            -
                  - !ruby/object:Gem::Version | 
| 57 | 
            -
                     | 
| 58 | 
            -
             | 
| 59 | 
            -
             | 
| 60 | 
            -
             | 
| 61 | 
            -
             | 
| 39 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            +
                    version: '3.1'
         | 
| 41 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            +
              name: rspec
         | 
| 43 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 | 
            +
                requirements:
         | 
| 45 | 
            +
                - - ~>
         | 
| 46 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                    version: '2.8'
         | 
| 62 48 | 
             
              type: :development
         | 
| 63 | 
            -
              version_requirements: *id003
         | 
| 64 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 65 | 
            -
              name: rspec-rails
         | 
| 66 49 | 
             
              prerelease: false
         | 
| 67 | 
            -
               | 
| 68 | 
            -
                 | 
| 69 | 
            -
                requirements: 
         | 
| 50 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 | 
            +
                requirements:
         | 
| 70 52 | 
             
                - - ~>
         | 
| 71 | 
            -
                  - !ruby/object:Gem::Version | 
| 72 | 
            -
                     | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 75 | 
            -
             | 
| 76 | 
            -
             | 
| 53 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                    version: '2.8'
         | 
| 55 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            +
              name: rspec-rails
         | 
| 57 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 | 
            +
                requirements:
         | 
| 59 | 
            +
                - - ~>
         | 
| 60 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            +
                    version: '2.8'
         | 
| 77 62 | 
             
              type: :development
         | 
| 78 | 
            -
              version_requirements: *id004
         | 
| 79 | 
            -
            - !ruby/object:Gem::Dependency 
         | 
| 80 | 
            -
              name: sqlite3
         | 
| 81 63 | 
             
              prerelease: false
         | 
| 82 | 
            -
               | 
| 83 | 
            -
                 | 
| 84 | 
            -
                 | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 87 | 
            -
             | 
| 88 | 
            -
             | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 64 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 | 
            +
                requirements:
         | 
| 66 | 
            +
                - - ~>
         | 
| 67 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            +
                    version: '2.8'
         | 
| 69 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 70 | 
            +
              name: sqlite3
         | 
| 71 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 72 | 
            +
                requirements:
         | 
| 73 | 
            +
                - - ! '>='
         | 
| 74 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 75 | 
            +
                    version: '0'
         | 
| 91 76 | 
             
              type: :development
         | 
| 92 | 
            -
               | 
| 93 | 
            -
             | 
| 77 | 
            +
              prerelease: false
         | 
| 78 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 | 
            +
                requirements:
         | 
| 80 | 
            +
                - - ! '>='
         | 
| 81 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            +
                    version: '0'
         | 
| 83 | 
            +
            description: Restrict the values assignable to ActiveRecord attributes or associations.
         | 
| 84 | 
            +
              Or enums on steroids.
         | 
| 94 85 | 
             
            email: henning.koch@makandra.de
         | 
| 95 86 | 
             
            executables: []
         | 
| 96 | 
            -
             | 
| 97 87 | 
             
            extensions: []
         | 
| 98 | 
            -
             | 
| 99 88 | 
             
            extra_rdoc_files: []
         | 
| 100 | 
            -
             | 
| 101 | 
            -
            files: 
         | 
| 89 | 
            +
            files:
         | 
| 102 90 | 
             
            - .gitignore
         | 
| 103 91 | 
             
            - .rspec
         | 
| 104 92 | 
             
            - .ruby-version
         | 
| @@ -214,39 +202,31 @@ files: | |
| 214 202 | 
             
            - spec/shared/assignable_values/active_record_spec.rb
         | 
| 215 203 | 
             
            - spec/shared/assignable_values/humanized_value_spec.rb
         | 
| 216 204 | 
             
            homepage: https://github.com/makandra/assignable_values
         | 
| 217 | 
            -
            licenses: | 
| 205 | 
            +
            licenses:
         | 
| 218 206 | 
             
            - MIT
         | 
| 207 | 
            +
            metadata: {}
         | 
| 219 208 | 
             
            post_install_message: 
         | 
| 220 209 | 
             
            rdoc_options: []
         | 
| 221 | 
            -
             | 
| 222 | 
            -
            require_paths: 
         | 
| 210 | 
            +
            require_paths:
         | 
| 223 211 | 
             
            - lib
         | 
| 224 | 
            -
            required_ruby_version: !ruby/object:Gem::Requirement | 
| 225 | 
            -
               | 
| 226 | 
            -
               | 
| 227 | 
            -
             | 
| 228 | 
            -
             | 
| 229 | 
            -
             | 
| 230 | 
            -
             | 
| 231 | 
            -
             | 
| 232 | 
            -
             | 
| 233 | 
            -
             | 
| 234 | 
            -
              none: false
         | 
| 235 | 
            -
              requirements: 
         | 
| 236 | 
            -
              - - ">="
         | 
| 237 | 
            -
                - !ruby/object:Gem::Version 
         | 
| 238 | 
            -
                  hash: 3
         | 
| 239 | 
            -
                  segments: 
         | 
| 240 | 
            -
                  - 0
         | 
| 241 | 
            -
                  version: "0"
         | 
| 212 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 213 | 
            +
              requirements:
         | 
| 214 | 
            +
              - - ! '>='
         | 
| 215 | 
            +
                - !ruby/object:Gem::Version
         | 
| 216 | 
            +
                  version: '0'
         | 
| 217 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 218 | 
            +
              requirements:
         | 
| 219 | 
            +
              - - ! '>='
         | 
| 220 | 
            +
                - !ruby/object:Gem::Version
         | 
| 221 | 
            +
                  version: '0'
         | 
| 242 222 | 
             
            requirements: []
         | 
| 243 | 
            -
             | 
| 244 223 | 
             
            rubyforge_project: 
         | 
| 245 | 
            -
            rubygems_version:  | 
| 224 | 
            +
            rubygems_version: 2.2.1
         | 
| 246 225 | 
             
            signing_key: 
         | 
| 247 | 
            -
            specification_version:  | 
| 248 | 
            -
            summary: Restrict the values assignable to ActiveRecord attributes or associations. | 
| 249 | 
            -
             | 
| 226 | 
            +
            specification_version: 4
         | 
| 227 | 
            +
            summary: Restrict the values assignable to ActiveRecord attributes or associations.
         | 
| 228 | 
            +
              Or enums on steroids.
         | 
| 229 | 
            +
            test_files:
         | 
| 250 230 | 
             
            - spec/rails-2.3/Gemfile
         | 
| 251 231 | 
             
            - spec/rails-2.3/Gemfile.lock
         | 
| 252 232 | 
             
            - spec/rails-2.3/Rakefile
         | 
| @@ -344,4 +324,3 @@ test_files: | |
| 344 324 | 
             
            - spec/shared/app_root/db/migrate/003_create_recordings.rb
         | 
| 345 325 | 
             
            - spec/shared/assignable_values/active_record_spec.rb
         | 
| 346 326 | 
             
            - spec/shared/assignable_values/humanized_value_spec.rb
         | 
| 347 | 
            -
            has_rdoc: 
         |