hashema 0.1.1 → 0.2.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 +7 -0
- data/README.md +7 -0
- data/lib/hashema.rb +1 -0
- data/lib/hashema/compiler.rb +2 -0
- data/lib/hashema/optional.rb +9 -0
- data/lib/hashema/schema.rb +35 -6
- data/lib/hashema/validator.rb +1 -6
- data/lib/hashema/version.rb +1 -1
- metadata +14 -17
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA1:
         | 
| 3 | 
            +
              metadata.gz: 663a42c26082914a797a078f3c45be35d9819726
         | 
| 4 | 
            +
              data.tar.gz: 94a947af82292a51ccac8bee2034309275e23e61
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: 963f4928cf2664b10735f72c094f72eec7a12af292ff3b96d94b8c2f657ee2f818bb6be469521b54d173e7df98006c1402ef6975a521c2ed575bed682c2360f8
         | 
| 7 | 
            +
              data.tar.gz: 1c30aaec10287aae3b1234297f312f8081249522e3ab8b9b630160565c1433f09c019e2af0e9eba2bb1cec6b4e7c6660fb6f01555e85e7f7b82f09280076e2bc
         | 
    
        data/README.md
    CHANGED
    
    | @@ -111,6 +111,13 @@ expect( | |
| 111 111 | 
             
            )
         | 
| 112 112 | 
             
            ```
         | 
| 113 113 |  | 
| 114 | 
            +
            ### Making a hash key optional
         | 
| 115 | 
            +
             | 
| 116 | 
            +
            ```ruby
         | 
| 117 | 
            +
            expect({entree: "eggs"})
         | 
| 118 | 
            +
              .to conform_to_schema({entree: String, side: Hashema::Optional(String)})
         | 
| 119 | 
            +
            ```
         | 
| 120 | 
            +
             | 
| 114 121 | 
             
            ## RSpec matcher options
         | 
| 115 122 |  | 
| 116 123 | 
             
            ### with_indifferent_access
         | 
    
        data/lib/hashema.rb
    CHANGED
    
    
    
        data/lib/hashema/compiler.rb
    CHANGED
    
    
    
        data/lib/hashema/schema.rb
    CHANGED
    
    | @@ -1,3 +1,5 @@ | |
| 1 | 
            +
            require "set"
         | 
| 2 | 
            +
             | 
| 1 3 | 
             
            module Hashema
         | 
| 2 4 | 
             
              class Schema < Struct.new(:expected)
         | 
| 3 5 | 
             
                # A Schema is a Comparison factory.
         | 
| @@ -5,6 +7,10 @@ module Hashema | |
| 5 7 | 
             
                  self.class.const_get('Comparison').new(actual, expected)
         | 
| 6 8 | 
             
                end
         | 
| 7 9 |  | 
| 10 | 
            +
                def required_if_map_value?
         | 
| 11 | 
            +
                  true
         | 
| 12 | 
            +
                end
         | 
| 13 | 
            +
             | 
| 8 14 | 
             
                def inspect
         | 
| 9 15 | 
             
                  expected.inspect
         | 
| 10 16 | 
             
                end
         | 
| @@ -147,7 +153,7 @@ module Hashema | |
| 147 153 | 
             
                  end
         | 
| 148 154 |  | 
| 149 155 | 
             
                  def missing_keys
         | 
| 150 | 
            -
                    @missing_keys ||=  | 
| 156 | 
            +
                    @missing_keys ||= demanded_keys - actual_keys
         | 
| 151 157 | 
             
                  end
         | 
| 152 158 |  | 
| 153 159 | 
             
                  def matching_keys
         | 
| @@ -162,6 +168,12 @@ module Hashema | |
| 162 168 | 
             
                    @expected_keys ||= Set.new(expected.keys)
         | 
| 163 169 | 
             
                  end
         | 
| 164 170 |  | 
| 171 | 
            +
                  def demanded_keys
         | 
| 172 | 
            +
                    @demanded_keys ||= Set.new(expected_keys.select { |key|
         | 
| 173 | 
            +
                      fetch(key, expected).required_if_map_value?
         | 
| 174 | 
            +
                    })
         | 
| 175 | 
            +
                  end
         | 
| 176 | 
            +
             | 
| 165 177 | 
             
                  def actual_keys
         | 
| 166 178 | 
             
                    @actual_keys ||= Set.new(actual.keys)
         | 
| 167 179 | 
             
                  end
         | 
| @@ -198,15 +210,13 @@ module Hashema | |
| 198 210 |  | 
| 199 211 | 
             
                  def extra_keys
         | 
| 200 212 | 
             
                    @extra_keys ||= actual.keys.reject do |key|
         | 
| 201 | 
            -
                       | 
| 202 | 
            -
                        expected.has_key? string_to_symbol key
         | 
| 213 | 
            +
                      has_key?(key, expected)
         | 
| 203 214 | 
             
                    end
         | 
| 204 215 | 
             
                  end
         | 
| 205 216 |  | 
| 206 217 | 
             
                  def missing_keys
         | 
| 207 | 
            -
                    @missing_keys ||= expected.keys. | 
| 208 | 
            -
                       | 
| 209 | 
            -
                        actual.has_key? string_to_symbol key
         | 
| 218 | 
            +
                    @missing_keys ||= expected.keys.select do |key|
         | 
| 219 | 
            +
                      !has_key?(key, actual) and fetch(key, expected).required_if_map_value?
         | 
| 210 220 | 
             
                    end
         | 
| 211 221 | 
             
                  end
         | 
| 212 222 |  | 
| @@ -216,6 +226,10 @@ module Hashema | |
| 216 226 | 
             
                      Set.new(actual.keys.map(&method(:symbol_to_string)))
         | 
| 217 227 | 
             
                  end
         | 
| 218 228 |  | 
| 229 | 
            +
                  def has_key?(key, hash)
         | 
| 230 | 
            +
                    hash.has_key?(symbol_to_string key) or hash.has_key?(string_to_symbol key)
         | 
| 231 | 
            +
                  end
         | 
| 232 | 
            +
             | 
| 219 233 | 
             
                  def fetch(key, hash)
         | 
| 220 234 | 
             
                    return hash[symbol_to_string key] if hash.has_key? symbol_to_string key
         | 
| 221 235 | 
             
                    return hash[string_to_symbol key] if hash.has_key? string_to_symbol key
         | 
| @@ -239,6 +253,21 @@ module Hashema | |
| 239 253 | 
             
                end
         | 
| 240 254 | 
             
              end
         | 
| 241 255 |  | 
| 256 | 
            +
              class OptionalValueInHash < Schema
         | 
| 257 | 
            +
                def required_if_map_value?
         | 
| 258 | 
            +
                  false
         | 
| 259 | 
            +
                end
         | 
| 260 | 
            +
             | 
| 261 | 
            +
                class Comparison < Hashema::Comparison
         | 
| 262 | 
            +
             | 
| 263 | 
            +
                  private
         | 
| 264 | 
            +
             | 
| 265 | 
            +
                  def find_mismatches
         | 
| 266 | 
            +
                    expected.compare(actual).mismatches
         | 
| 267 | 
            +
                  end
         | 
| 268 | 
            +
                end
         | 
| 269 | 
            +
              end
         | 
| 270 | 
            +
             | 
| 242 271 | 
             
              class Mismatch < Struct.new(:actual, :expected, :location, :verb)
         | 
| 243 272 | 
             
                def self.at(location, original)
         | 
| 244 273 | 
             
                  new original.actual,
         | 
    
        data/lib/hashema/validator.rb
    CHANGED
    
    | @@ -4,8 +4,7 @@ module Hashema | |
| 4 4 | 
             
              class Validator
         | 
| 5 5 | 
             
                def initialize(actual, schema, options={})
         | 
| 6 6 | 
             
                  @actual = actual
         | 
| 7 | 
            -
                  @schema = schema
         | 
| 8 | 
            -
                  @schema = compile schema, options
         | 
| 7 | 
            +
                  @schema = Compiler.compile schema, options
         | 
| 9 8 | 
             
                end
         | 
| 10 9 |  | 
| 11 10 | 
             
                def valid?
         | 
| @@ -18,10 +17,6 @@ module Hashema | |
| 18 17 |  | 
| 19 18 | 
             
                private
         | 
| 20 19 |  | 
| 21 | 
            -
                def compile(schema, options={})
         | 
| 22 | 
            -
                  Hashema::Compiler.compile(schema, options)
         | 
| 23 | 
            -
                end
         | 
| 24 | 
            -
             | 
| 25 20 | 
             
                def comparison
         | 
| 26 21 | 
             
                  @comparison ||= @schema.compare(@actual)
         | 
| 27 22 | 
             
                end
         | 
    
        data/lib/hashema/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,30 +1,27 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: hashema
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 5 | 
            -
              prerelease: 
         | 
| 4 | 
            +
              version: 0.2.0
         | 
| 6 5 | 
             
            platform: ruby
         | 
| 7 6 | 
             
            authors:
         | 
| 8 7 | 
             
            - Ben Christel
         | 
| 9 8 | 
             
            autorequire: 
         | 
| 10 9 | 
             
            bindir: bin
         | 
| 11 10 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date:  | 
| 11 | 
            +
            date: 2020-03-26 00:00:00.000000000 Z
         | 
| 13 12 | 
             
            dependencies:
         | 
| 14 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 14 | 
             
              name: rspec
         | 
| 16 15 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 17 | 
            -
                none: false
         | 
| 18 16 | 
             
                requirements:
         | 
| 19 | 
            -
                - -  | 
| 17 | 
            +
                - - ">="
         | 
| 20 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 21 19 | 
             
                    version: 2.0.0
         | 
| 22 20 | 
             
              type: :development
         | 
| 23 21 | 
             
              prerelease: false
         | 
| 24 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 25 | 
            -
                none: false
         | 
| 26 23 | 
             
                requirements:
         | 
| 27 | 
            -
                - -  | 
| 24 | 
            +
                - - ">="
         | 
| 28 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 29 26 | 
             
                    version: 2.0.0
         | 
| 30 27 | 
             
            description: Assert that JSONable objects conform to a schema
         | 
| @@ -34,38 +31,38 @@ extensions: [] | |
| 34 31 | 
             
            extra_rdoc_files:
         | 
| 35 32 | 
             
            - README.md
         | 
| 36 33 | 
             
            files:
         | 
| 34 | 
            +
            - License.txt
         | 
| 35 | 
            +
            - README.md
         | 
| 37 36 | 
             
            - lib/hashema.rb
         | 
| 38 37 | 
             
            - lib/hashema/compiler.rb
         | 
| 39 38 | 
             
            - lib/hashema/conform_to_schema.rb
         | 
| 39 | 
            +
            - lib/hashema/optional.rb
         | 
| 40 40 | 
             
            - lib/hashema/schema.rb
         | 
| 41 41 | 
             
            - lib/hashema/validator.rb
         | 
| 42 42 | 
             
            - lib/hashema/version.rb
         | 
| 43 | 
            -
            - License.txt
         | 
| 44 | 
            -
            - README.md
         | 
| 45 43 | 
             
            homepage: http://github.com/benchristel/hashema
         | 
| 46 44 | 
             
            licenses:
         | 
| 47 45 | 
             
            - MIT
         | 
| 46 | 
            +
            metadata: {}
         | 
| 48 47 | 
             
            post_install_message: 
         | 
| 49 48 | 
             
            rdoc_options:
         | 
| 50 | 
            -
            - --charset=UTF-8
         | 
| 49 | 
            +
            - "--charset=UTF-8"
         | 
| 51 50 | 
             
            require_paths:
         | 
| 52 51 | 
             
            - lib
         | 
| 53 52 | 
             
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 54 | 
            -
              none: false
         | 
| 55 53 | 
             
              requirements:
         | 
| 56 | 
            -
              - -  | 
| 54 | 
            +
              - - ">="
         | 
| 57 55 | 
             
                - !ruby/object:Gem::Version
         | 
| 58 56 | 
             
                  version: '0'
         | 
| 59 57 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 60 | 
            -
              none: false
         | 
| 61 58 | 
             
              requirements:
         | 
| 62 | 
            -
              - -  | 
| 59 | 
            +
              - - ">="
         | 
| 63 60 | 
             
                - !ruby/object:Gem::Version
         | 
| 64 61 | 
             
                  version: '0'
         | 
| 65 62 | 
             
            requirements: []
         | 
| 66 63 | 
             
            rubyforge_project: 
         | 
| 67 | 
            -
            rubygems_version:  | 
| 64 | 
            +
            rubygems_version: 2.5.2.3
         | 
| 68 65 | 
             
            signing_key: 
         | 
| 69 | 
            -
            specification_version:  | 
| 70 | 
            -
            summary: hashema-0. | 
| 66 | 
            +
            specification_version: 4
         | 
| 67 | 
            +
            summary: hashema-0.2.0
         | 
| 71 68 | 
             
            test_files: []
         |