jimmy 2.0.3 → 2.1.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/lib/jimmy/declaration.rb +1 -4
- data/lib/jimmy/json/array.rb +14 -0
- data/lib/jimmy/json/collection.rb +26 -0
- data/lib/jimmy/schema.rb +13 -0
- data/lib/jimmy/schema/object.rb +3 -1
- data/lib/jimmy/version.rb +1 -1
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: c29ca2691ce60d6ca698f214635267bf12a42fa5bac9e11a4b9ac481e0815588
         | 
| 4 | 
            +
              data.tar.gz: 47a0adde3910f636342b685fed70b10861e0e2145f3a9bf76267f82ef1b4a537
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: d33b595d483877f6f1617af4c45550447219dc758913586bd956ddae81ae28fd862cd055124f43581a6404747c008a100f0f1aab99606d0966cabb1f17eeaba7
         | 
| 7 | 
            +
              data.tar.gz: 9f7a0af3a887108a9ef799979755b4e5a98f6ed951fb2585f74cc327049ffbade07509b040b0edb047b973eb8124797ea0fe2d8b7612dc03448de3b62e2c4254
         | 
    
        data/lib/jimmy/declaration.rb
    CHANGED
    
    | @@ -127,10 +127,7 @@ module Jimmy | |
| 127 127 | 
             
                  property_name = cast_key(property_name)
         | 
| 128 128 | 
             
                  key           = cast_key(key)
         | 
| 129 129 | 
             
                  hash          = getset(property_name) { {} }
         | 
| 130 | 
            -
                   | 
| 131 | 
            -
                    "Property '#{property_name}' already has a member '#{key}'"
         | 
| 132 | 
            -
                  end
         | 
| 133 | 
            -
                  schema = cast_schema(schema)
         | 
| 130 | 
            +
                  schema        = cast_schema(schema)
         | 
| 134 131 | 
             
                  yield schema if block_given?
         | 
| 135 132 | 
             
                  hash[key] = schema
         | 
| 136 133 | 
             
                  self
         | 
    
        data/lib/jimmy/json/array.rb
    CHANGED
    
    | @@ -35,6 +35,13 @@ module Jimmy | |
| 35 35 |  | 
| 36 36 | 
             
                  alias << push
         | 
| 37 37 |  | 
| 38 | 
            +
                  # Assign a member to the array at the given index.
         | 
| 39 | 
            +
                  # @param [Integer] index
         | 
| 40 | 
            +
                  # @param [Object] value
         | 
| 41 | 
            +
                  def []=(index, value)
         | 
| 42 | 
            +
                    @members[index] = cast_value(value)
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
             | 
| 38 45 | 
             
                  # Iterate over items in the array. If a block with a single argument is
         | 
| 39 46 | 
             
                  # given, only values will be yielded. Otherwise, indexes and values will
         | 
| 40 47 | 
             
                  # be yielded.
         | 
| @@ -75,6 +82,13 @@ module Jimmy | |
| 75 82 | 
             
                  alias count length
         | 
| 76 83 | 
             
                  alias size length
         | 
| 77 84 |  | 
| 85 | 
            +
                  # Returns true if the array contains the given +obj+.
         | 
| 86 | 
            +
                  # @param [Object] obj
         | 
| 87 | 
            +
                  # @return [true, false]
         | 
| 88 | 
            +
                  def include?(obj)
         | 
| 89 | 
            +
                    @members.include? obj
         | 
| 90 | 
            +
                  end
         | 
| 91 | 
            +
             | 
| 78 92 | 
             
                  protected
         | 
| 79 93 |  | 
| 80 94 | 
             
                  def export_pairs(pairs)
         | 
| @@ -67,6 +67,20 @@ module Jimmy | |
| 67 67 | 
             
                    self
         | 
| 68 68 | 
             
                  end
         | 
| 69 69 |  | 
| 70 | 
            +
                  # Duplicate the collection.
         | 
| 71 | 
            +
                  # @return [Jimmy::Json::Collection]
         | 
| 72 | 
            +
                  def dup
         | 
| 73 | 
            +
                    self.class.new @members
         | 
| 74 | 
            +
                  end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                  # Duplicate the collection and all of its members, recursively.
         | 
| 77 | 
            +
                  # @return [Jimmy::Json::Collection]
         | 
| 78 | 
            +
                  def deep_dup(index = {})
         | 
| 79 | 
            +
                    return index[object_id] if index.key? object_id
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                    deep_dup_enumerable(self, index) { |new, k, v| new[k] = v }
         | 
| 82 | 
            +
                  end
         | 
| 83 | 
            +
             | 
| 70 84 | 
             
                  protected
         | 
| 71 85 |  | 
| 72 86 | 
             
                  def cast_value(value)
         | 
| @@ -82,6 +96,18 @@ module Jimmy | |
| 82 96 | 
             
                      value.as_json
         | 
| 83 97 | 
             
                    end
         | 
| 84 98 | 
             
                  end
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                  def deep_dup_value(value = self, index = {})
         | 
| 101 | 
            +
                    return value.deep_dup(index) if value.is_a? Collection
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                    value.dup
         | 
| 104 | 
            +
                  end
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                  def deep_dup_enumerable(value, index)
         | 
| 107 | 
            +
                    index[value.object_id] = new = value.class.new
         | 
| 108 | 
            +
                    value.each { |*args, v| yield new, *args, deep_dup_value(v, index) }
         | 
| 109 | 
            +
                    new
         | 
| 110 | 
            +
                  end
         | 
| 85 111 | 
             
                end
         | 
| 86 112 | 
             
              end
         | 
| 87 113 | 
             
            end
         | 
    
        data/lib/jimmy/schema.rb
    CHANGED
    
    | @@ -115,6 +115,19 @@ module Jimmy | |
| 115 115 | 
             
                  PROPERTY_SEQUENCE.fetch(key) { raise KeyError, 'Not a valid schema key' }
         | 
| 116 116 | 
             
                end
         | 
| 117 117 |  | 
| 118 | 
            +
                # Duplicate the schema with a shallow copy. Collections like properties,
         | 
| 119 | 
            +
                # enum, etc, will be shared with the duplicate.
         | 
| 120 | 
            +
                # @return [Jimmy::Json::Schema]
         | 
| 121 | 
            +
                def dup
         | 
| 122 | 
            +
                  nothing? ? self.class.new.nothing : super
         | 
| 123 | 
            +
                end
         | 
| 124 | 
            +
             | 
| 125 | 
            +
                # Duplicate the schema.
         | 
| 126 | 
            +
                # @return [Jimmy::Json::Schema]
         | 
| 127 | 
            +
                def deep_dup(*)
         | 
| 128 | 
            +
                  nothing? ? self.class.new.nothing : super
         | 
| 129 | 
            +
                end
         | 
| 130 | 
            +
             | 
| 118 131 | 
             
                protected
         | 
| 119 132 |  | 
| 120 133 | 
             
                def schema
         | 
    
        data/lib/jimmy/schema/object.rb
    CHANGED
    
    | @@ -58,7 +58,9 @@ module Jimmy | |
| 58 58 | 
             
                    if name.is_a? Hash
         | 
| 59 59 | 
             
                      self.properties name, required: true, &block
         | 
| 60 60 | 
             
                    else
         | 
| 61 | 
            -
                      getset('required') {  | 
| 61 | 
            +
                      arr  = getset('required') { [] }
         | 
| 62 | 
            +
                      name = validate_property_name(name)
         | 
| 63 | 
            +
                      arr << name unless arr.include? name
         | 
| 62 64 | 
             
                    end
         | 
| 63 65 | 
             
                  end
         | 
| 64 66 | 
             
                  self
         | 
    
        data/lib/jimmy/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: jimmy
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 2.0 | 
| 4 | 
            +
              version: 2.1.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Neil E. Pearson
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2020-06- | 
| 11 | 
            +
            date: 2020-06-10 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies: []
         | 
| 13 13 | 
             
            description: Jimmy the Gem
         | 
| 14 14 | 
             
            email:
         |