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:
|