spicerack 0.25.3 → 0.25.4
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/lib/spicerack/hash_model.rb +28 -2
- data/lib/spicerack/rspec/custom_matchers/define_field.rb +1 -1
- data/lib/spicerack/version.rb +1 -1
- metadata +16 -16
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: c7afa73ffa6ebc50d2ee2e37e69e9da61bd343d9f58eacb4a34d3d894a0454a5
         | 
| 4 | 
            +
              data.tar.gz: 271cf1031356c0e921f3c4b27ffb7a35a8a155f05b269fbe7678c7e7dbfa0e5b
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 553b6da722c20cf74da06bdd74c9d8672a0ab279650a50b00d1ec0db5be76b942c2991e18eaca66c1ac36ada60061de1b7d6ca6616685eafc828dbb855b63bb9
         | 
| 7 | 
            +
              data.tar.gz: 3e49c44b2accd83a196bef0e65b63601b69f42c66a887cf36738d62645d10d2eb208213d794bfe0601c4d526fd15433c04eae1dd3e7705704717ba4b6e956e2e
         | 
    
        data/lib/spicerack/hash_model.rb
    CHANGED
    
    | @@ -3,6 +3,7 @@ | |
| 3 3 | 
             
            require "active_model"
         | 
| 4 4 |  | 
| 5 5 | 
             
            module Spicerack
         | 
| 6 | 
            +
              # Provides on-demand synchronization between a `data' object and ActiveModel::Attributes
         | 
| 6 7 | 
             
              module HashModel
         | 
| 7 8 | 
             
                extend ActiveSupport::Concern
         | 
| 8 9 |  | 
| @@ -23,6 +24,7 @@ module Spicerack | |
| 23 24 | 
             
                  private
         | 
| 24 25 |  | 
| 25 26 | 
             
                  def field(name, type = Type::Value.new, **options)
         | 
| 27 | 
            +
                    name = name.to_s
         | 
| 26 28 | 
             
                    _fields << name
         | 
| 27 29 | 
             
                    attribute(name, type, **options)
         | 
| 28 30 | 
             
                    define_field_methods(name)
         | 
| @@ -30,12 +32,36 @@ module Spicerack | |
| 30 32 |  | 
| 31 33 | 
             
                  def define_field_methods(name)
         | 
| 32 34 | 
             
                    define_method("#{name}?".to_sym) { data[name].present? }
         | 
| 33 | 
            -
                    define_method("#{name}=".to_sym)  | 
| 35 | 
            +
                    define_method("#{name}=".to_sym) do |value|  
         | 
| 36 | 
            +
                      data[name] = value
         | 
| 37 | 
            +
                      synchronize_attribute_from_datastore(name)
         | 
| 38 | 
            +
                    end
         | 
| 34 39 | 
             
                    define_method(name) do
         | 
| 35 | 
            -
                       | 
| 40 | 
            +
                      synchronize_attribute_from_datastore(name)
         | 
| 36 41 | 
             
                      attribute(name)
         | 
| 37 42 | 
             
                    end
         | 
| 38 43 | 
             
                  end
         | 
| 39 44 | 
             
                end
         | 
| 45 | 
            +
                  
         | 
| 46 | 
            +
                private
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                # The data object can be anything from a normal hash to a hash-like object backed by redis.
         | 
| 49 | 
            +
                def synchronize_attribute_from_datastore(name)
         | 
| 50 | 
            +
                  value_from_datastore = data[name]
         | 
| 51 | 
            +
                  value_from_attribute = attribute(name)
         | 
| 52 | 
            +
                  return if value_from_datastore == value_from_attribute
         | 
| 53 | 
            +
                  
         | 
| 54 | 
            +
                  value = value_from_datastore || value_from_attribute
         | 
| 55 | 
            +
                  
         | 
| 56 | 
            +
                  # Otherwise, the dataset is value takes priority and is written as the attribute value
         | 
| 57 | 
            +
                  # ActiveModel changed the interface to this method between Rails 6.0 and 6.1
         | 
| 58 | 
            +
                  # This method is a patch which allows this class to work with either version
         | 
| 59 | 
            +
                  # Once support for pre rails 6.0 is sunset this should likely be removed
         | 
| 60 | 
            +
                  if respond_to?(:_write_attribute, true)
         | 
| 61 | 
            +
                    _write_attribute(name, value)
         | 
| 62 | 
            +
                  else
         | 
| 63 | 
            +
                    write_attribute(name, value)
         | 
| 64 | 
            +
                  end
         | 
| 65 | 
            +
                end
         | 
| 40 66 | 
             
              end
         | 
| 41 67 | 
             
            end
         | 
| @@ -20,7 +20,7 @@ RSpec::Matchers.define :define_field do |field, type = nil, default: nil| | |
| 20 20 | 
             
              match do
         | 
| 21 21 | 
             
                expect(test_subject.attribute_types[field.to_s].type).to eq type unless type.nil?
         | 
| 22 22 | 
             
                expect(test_subject._default_attributes[field.to_s].value).to eq default unless default.nil?
         | 
| 23 | 
            -
                expect(test_subject._fields).to include field
         | 
| 23 | 
            +
                expect(test_subject._fields).to include field.to_s
         | 
| 24 24 | 
             
              end
         | 
| 25 25 | 
             
              description { "define field #{field}" }
         | 
| 26 26 | 
             
              failure_message { "expected #{test_subject} to define field #{field} #{with_details(type, default)}" }
         | 
    
        data/lib/spicerack/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: spicerack
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.25. | 
| 4 | 
            +
              version: 0.25.4
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Eric Garside
         | 
| @@ -12,7 +12,7 @@ authors: | |
| 12 12 | 
             
            autorequire: 
         | 
| 13 13 | 
             
            bindir: bin
         | 
| 14 14 | 
             
            cert_chain: []
         | 
| 15 | 
            -
            date:  | 
| 15 | 
            +
            date: 2021-02-17 00:00:00.000000000 Z
         | 
| 16 16 | 
             
            dependencies:
         | 
| 17 17 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 18 18 | 
             
              name: around_the_world
         | 
| @@ -20,70 +20,70 @@ dependencies: | |
| 20 20 | 
             
                requirements:
         | 
| 21 21 | 
             
                - - '='
         | 
| 22 22 | 
             
                  - !ruby/object:Gem::Version
         | 
| 23 | 
            -
                    version: 0.25. | 
| 23 | 
            +
                    version: 0.25.4
         | 
| 24 24 | 
             
              type: :runtime
         | 
| 25 25 | 
             
              prerelease: false
         | 
| 26 26 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 27 27 | 
             
                requirements:
         | 
| 28 28 | 
             
                - - '='
         | 
| 29 29 | 
             
                  - !ruby/object:Gem::Version
         | 
| 30 | 
            -
                    version: 0.25. | 
| 30 | 
            +
                    version: 0.25.4
         | 
| 31 31 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 32 32 | 
             
              name: redis_hash
         | 
| 33 33 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 34 34 | 
             
                requirements:
         | 
| 35 35 | 
             
                - - '='
         | 
| 36 36 | 
             
                  - !ruby/object:Gem::Version
         | 
| 37 | 
            -
                    version: 0.25. | 
| 37 | 
            +
                    version: 0.25.4
         | 
| 38 38 | 
             
              type: :runtime
         | 
| 39 39 | 
             
              prerelease: false
         | 
| 40 40 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 41 41 | 
             
                requirements:
         | 
| 42 42 | 
             
                - - '='
         | 
| 43 43 | 
             
                  - !ruby/object:Gem::Version
         | 
| 44 | 
            -
                    version: 0.25. | 
| 44 | 
            +
                    version: 0.25.4
         | 
| 45 45 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 46 46 | 
             
              name: short_circu_it
         | 
| 47 47 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 48 48 | 
             
                requirements:
         | 
| 49 49 | 
             
                - - '='
         | 
| 50 50 | 
             
                  - !ruby/object:Gem::Version
         | 
| 51 | 
            -
                    version: 0.25. | 
| 51 | 
            +
                    version: 0.25.4
         | 
| 52 52 | 
             
              type: :runtime
         | 
| 53 53 | 
             
              prerelease: false
         | 
| 54 54 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 55 55 | 
             
                requirements:
         | 
| 56 56 | 
             
                - - '='
         | 
| 57 57 | 
             
                  - !ruby/object:Gem::Version
         | 
| 58 | 
            -
                    version: 0.25. | 
| 58 | 
            +
                    version: 0.25.4
         | 
| 59 59 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 60 60 | 
             
              name: technologic
         | 
| 61 61 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 62 62 | 
             
                requirements:
         | 
| 63 63 | 
             
                - - '='
         | 
| 64 64 | 
             
                  - !ruby/object:Gem::Version
         | 
| 65 | 
            -
                    version: 0.25. | 
| 65 | 
            +
                    version: 0.25.4
         | 
| 66 66 | 
             
              type: :runtime
         | 
| 67 67 | 
             
              prerelease: false
         | 
| 68 68 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 69 69 | 
             
                requirements:
         | 
| 70 70 | 
             
                - - '='
         | 
| 71 71 | 
             
                  - !ruby/object:Gem::Version
         | 
| 72 | 
            -
                    version: 0.25. | 
| 72 | 
            +
                    version: 0.25.4
         | 
| 73 73 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 74 74 | 
             
              name: tablesalt
         | 
| 75 75 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 76 76 | 
             
                requirements:
         | 
| 77 77 | 
             
                - - '='
         | 
| 78 78 | 
             
                  - !ruby/object:Gem::Version
         | 
| 79 | 
            -
                    version: 0.25. | 
| 79 | 
            +
                    version: 0.25.4
         | 
| 80 80 | 
             
              type: :runtime
         | 
| 81 81 | 
             
              prerelease: false
         | 
| 82 82 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 83 83 | 
             
                requirements:
         | 
| 84 84 | 
             
                - - '='
         | 
| 85 85 | 
             
                  - !ruby/object:Gem::Version
         | 
| 86 | 
            -
                    version: 0.25. | 
| 86 | 
            +
                    version: 0.25.4
         | 
| 87 87 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 88 88 | 
             
              name: bundler
         | 
| 89 89 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -208,28 +208,28 @@ dependencies: | |
| 208 208 | 
             
                requirements:
         | 
| 209 209 | 
             
                - - '='
         | 
| 210 210 | 
             
                  - !ruby/object:Gem::Version
         | 
| 211 | 
            -
                    version: 0.25. | 
| 211 | 
            +
                    version: 0.25.4
         | 
| 212 212 | 
             
              type: :development
         | 
| 213 213 | 
             
              prerelease: false
         | 
| 214 214 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 215 215 | 
             
                requirements:
         | 
| 216 216 | 
             
                - - '='
         | 
| 217 217 | 
             
                  - !ruby/object:Gem::Version
         | 
| 218 | 
            -
                    version: 0.25. | 
| 218 | 
            +
                    version: 0.25.4
         | 
| 219 219 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 220 220 | 
             
              name: spicerack-styleguide
         | 
| 221 221 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 222 222 | 
             
                requirements:
         | 
| 223 223 | 
             
                - - '='
         | 
| 224 224 | 
             
                  - !ruby/object:Gem::Version
         | 
| 225 | 
            -
                    version: 0.25. | 
| 225 | 
            +
                    version: 0.25.4
         | 
| 226 226 | 
             
              type: :development
         | 
| 227 227 | 
             
              prerelease: false
         | 
| 228 228 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 229 229 | 
             
                requirements:
         | 
| 230 230 | 
             
                - - '='
         | 
| 231 231 | 
             
                  - !ruby/object:Gem::Version
         | 
| 232 | 
            -
                    version: 0.25. | 
| 232 | 
            +
                    version: 0.25.4
         | 
| 233 233 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 234 234 | 
             
              name: will_paginate
         | 
| 235 235 | 
             
              requirement: !ruby/object:Gem::Requirement
         |