scorpio 0.2.2 → 0.2.3
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/CHANGELOG.md +5 -0
- data/lib/scorpio/json/node.rb +10 -0
- data/lib/scorpio/schema_instance_base.rb +24 -22
- data/lib/scorpio/typelike_modules.rb +0 -4
- data/lib/scorpio/util.rb +8 -2
- data/lib/scorpio/version.rb +1 -1
- data/scorpio.gemspec +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: 7d8f3fb8a266157352a5f4054b732210bbbff161fb11d780828a3fbbdbf6922d
|
4
|
+
data.tar.gz: 7ba1d3d214decdfa3c8b40df5d3d63377a160b8a6cb937090f8c3b67e47d4f45
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ed9a28136c4661fab6bbe9309533e3521df809f8146e3e92eb397baf37f7880a80d7d3491d8d2d5670e06189653c6fac51fff349409af46402be6f29658efff
|
7
|
+
data.tar.gz: a4cd19c9266a038a93330d42aa1bb407b4d493dad6f7ddd3e1c61e5803c4fa84a65cf3802b7ceeba9d859e9cb5ed20b3124d140ed215d087d338b8e60fae579a
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
# v0.2.3
|
2
|
+
- fix mutability of SchemaInstanceBase with #[]=; instance is modified in place
|
3
|
+
- add mutability to JSON::Node with #[]=
|
4
|
+
- fix problems with initialize extending SchemaInstanceBase instances with Enumerable; just include it on SchemaInstanceBase itself
|
5
|
+
|
1
6
|
# v0.2.2
|
2
7
|
- Scorpio::SchemaInstanceJSONCoder
|
3
8
|
|
data/lib/scorpio/json/node.rb
CHANGED
@@ -66,6 +66,14 @@ module Scorpio
|
|
66
66
|
end
|
67
67
|
end
|
68
68
|
|
69
|
+
def []=(k, v)
|
70
|
+
if v.is_a?(Node)
|
71
|
+
content[k] = v.content
|
72
|
+
else
|
73
|
+
content[k] = v
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
69
77
|
def deref
|
70
78
|
content = self.content
|
71
79
|
|
@@ -203,6 +211,7 @@ module Scorpio
|
|
203
211
|
to_a
|
204
212
|
end
|
205
213
|
|
214
|
+
include Enumerable
|
206
215
|
include Arraylike
|
207
216
|
|
208
217
|
def as_json(*opt) # needs redefined after including Enumerable
|
@@ -231,6 +240,7 @@ module Scorpio
|
|
231
240
|
inject({}) { |h, (k, v)| h[k] = v; h }
|
232
241
|
end
|
233
242
|
|
243
|
+
include Enumerable
|
234
244
|
include Hashlike
|
235
245
|
|
236
246
|
def as_json(*opt) # needs redefined after including Enumerable
|
@@ -5,6 +5,7 @@ module Scorpio
|
|
5
5
|
# base class for representing an instance of an instance described by a schema
|
6
6
|
class SchemaInstanceBase
|
7
7
|
include Memoize
|
8
|
+
include Enumerable
|
8
9
|
|
9
10
|
class << self
|
10
11
|
def schema_id
|
@@ -58,18 +59,16 @@ module Scorpio
|
|
58
59
|
elsif @instance.is_a?(Scorpio::JSON::ArrayNode)
|
59
60
|
extend SchemaInstanceBaseArray
|
60
61
|
end
|
61
|
-
# certain methods need to be redefined after we are extended by Enumerable
|
62
|
-
extend OverrideFromExtensions
|
63
|
-
end
|
64
|
-
|
65
|
-
module OverrideFromExtensions
|
66
|
-
def as_json(*opt)
|
67
|
-
Typelike.as_json(instance, *opt)
|
68
|
-
end
|
69
62
|
end
|
70
63
|
|
71
64
|
attr_reader :instance
|
72
65
|
|
66
|
+
# each is overridden by SchemaInstanceBaseHash or SchemaInstanceBaseArray when appropriate. the base
|
67
|
+
# #each is not actually implemented, along with all the methods of Enumerable.
|
68
|
+
def each
|
69
|
+
raise NoMethodError, "Enumerable methods and #each not implemented for instance that is not like a hash or array: #{instance.pretty_inspect.chomp}"
|
70
|
+
end
|
71
|
+
|
73
72
|
def parents
|
74
73
|
parent = @origin
|
75
74
|
(@origin.instance.path.size...self.instance.path.size).map do |i|
|
@@ -130,6 +129,10 @@ module Scorpio
|
|
130
129
|
instance.object_group_text
|
131
130
|
end
|
132
131
|
|
132
|
+
def as_json(*opt)
|
133
|
+
Typelike.as_json(instance, *opt)
|
134
|
+
end
|
135
|
+
|
133
136
|
def fingerprint
|
134
137
|
{class: self.class, instance: instance}
|
135
138
|
end
|
@@ -137,11 +140,8 @@ module Scorpio
|
|
137
140
|
|
138
141
|
private
|
139
142
|
def instance=(thing)
|
140
|
-
clear_memo(:[])
|
141
143
|
if instance_variable_defined?(:@instance)
|
142
|
-
|
143
|
-
raise(Scorpio::Bug, "will not accept instance of different class #{thing.class} to current instance class #{@instance.class} on #{self.class.inspect}")
|
144
|
-
end
|
144
|
+
raise(Scorpio::Bug, "overwriting instance is not supported")
|
145
145
|
end
|
146
146
|
if thing.is_a?(SchemaInstanceBase)
|
147
147
|
warn "assigning instance to a SchemaInstanceBase instance is incorrect. received: #{thing.pretty_inspect.chomp}"
|
@@ -152,6 +152,15 @@ module Scorpio
|
|
152
152
|
@instance = Scorpio::JSON::Node.new_by_type(Scorpio.deep_stringify_symbol_keys(thing), [])
|
153
153
|
end
|
154
154
|
end
|
155
|
+
|
156
|
+
def subscript_assign(subscript, value)
|
157
|
+
clear_memo(:[], subscript)
|
158
|
+
if value.is_a?(SchemaInstanceBase)
|
159
|
+
instance[subscript] = value.instance
|
160
|
+
else
|
161
|
+
instance[subscript] = value
|
162
|
+
end
|
163
|
+
end
|
155
164
|
end
|
156
165
|
|
157
166
|
# this module is just a namespace for schema classes.
|
@@ -211,7 +220,7 @@ module Scorpio
|
|
211
220
|
end
|
212
221
|
|
213
222
|
if schema.describes_hash?
|
214
|
-
instance_method_modules = [m, SchemaInstanceBase, SchemaInstanceBaseArray, SchemaInstanceBaseHash
|
223
|
+
instance_method_modules = [m, SchemaInstanceBase, SchemaInstanceBaseArray, SchemaInstanceBaseHash]
|
215
224
|
instance_methods = instance_method_modules.map do |mod|
|
216
225
|
mod.instance_methods + mod.private_instance_methods
|
217
226
|
end.inject(Set.new, &:|)
|
@@ -271,11 +280,8 @@ module Scorpio
|
|
271
280
|
end
|
272
281
|
end
|
273
282
|
end
|
274
|
-
|
275
283
|
def []=(property_name, value)
|
276
|
-
|
277
|
-
hash.merge(property_name => value)
|
278
|
-
end
|
284
|
+
subscript_assign(property_name, value)
|
279
285
|
end
|
280
286
|
end
|
281
287
|
|
@@ -313,11 +319,7 @@ module Scorpio
|
|
313
319
|
end
|
314
320
|
end
|
315
321
|
def []=(i, value)
|
316
|
-
|
317
|
-
ary.each_with_index.map do |el, ary_i|
|
318
|
-
ary_i == i ? value : el
|
319
|
-
end
|
320
|
-
end
|
322
|
+
subscript_assign(i, value)
|
321
323
|
end
|
322
324
|
end
|
323
325
|
end
|
@@ -33,8 +33,6 @@ module Scorpio
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
module Hashlike
|
36
|
-
include Enumerable
|
37
|
-
|
38
36
|
# safe methods which can be delegated to #to_hash (which the includer is assumed to have defined).
|
39
37
|
# 'safe' means, in this context, nondestructive - methods which do not modify the receiver.
|
40
38
|
|
@@ -99,8 +97,6 @@ module Scorpio
|
|
99
97
|
end
|
100
98
|
end
|
101
99
|
module Arraylike
|
102
|
-
include Enumerable
|
103
|
-
|
104
100
|
# safe methods which can be delegated to #to_ary (which the includer is assumed to have defined).
|
105
101
|
# 'safe' means, in this context, nondestructive - methods which do not modify the receiver.
|
106
102
|
|
data/lib/scorpio/util.rb
CHANGED
@@ -74,9 +74,15 @@ module Scorpio
|
|
74
74
|
@memos[key][args_]
|
75
75
|
end
|
76
76
|
|
77
|
-
def clear_memo(key)
|
77
|
+
def clear_memo(key, *args)
|
78
78
|
@memos ||= {}
|
79
|
-
|
79
|
+
if @memos[key]
|
80
|
+
if args.empty?
|
81
|
+
@memos[key].clear
|
82
|
+
else
|
83
|
+
@memos[key].delete(args)
|
84
|
+
end
|
85
|
+
end
|
80
86
|
end
|
81
87
|
end
|
82
88
|
extend Memoize
|
data/lib/scorpio/version.rb
CHANGED
data/scorpio.gemspec
CHANGED
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_dependency "faraday"
|
24
24
|
# we are monkey patching json-schema with a fix that has not been merged in a timely fashion.
|
25
25
|
spec.add_dependency "json-schema", "~> 2.8"
|
26
|
+
spec.add_dependency "api_hammer"
|
26
27
|
spec.add_development_dependency "bundler", "~> 1.12"
|
27
28
|
spec.add_development_dependency "rake", "~> 10.0"
|
28
29
|
spec.add_development_dependency "minitest", "~> 5.0"
|
@@ -32,7 +33,6 @@ Gem::Specification.new do |spec|
|
|
32
33
|
spec.add_development_dependency "rack", "~> 1.0"
|
33
34
|
spec.add_development_dependency "rack-accept"
|
34
35
|
spec.add_development_dependency "rack-test"
|
35
|
-
spec.add_development_dependency "api_hammer"
|
36
36
|
spec.add_development_dependency "activerecord"
|
37
37
|
spec.add_development_dependency "sqlite3"
|
38
38
|
spec.add_development_dependency "database_cleaner"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scorpio
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ethan
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-08-
|
11
|
+
date: 2018-08-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '2.8'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: api_hammer
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: bundler
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -164,20 +178,6 @@ dependencies:
|
|
164
178
|
- - ">="
|
165
179
|
- !ruby/object:Gem::Version
|
166
180
|
version: '0'
|
167
|
-
- !ruby/object:Gem::Dependency
|
168
|
-
name: api_hammer
|
169
|
-
requirement: !ruby/object:Gem::Requirement
|
170
|
-
requirements:
|
171
|
-
- - ">="
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '0'
|
174
|
-
type: :development
|
175
|
-
prerelease: false
|
176
|
-
version_requirements: !ruby/object:Gem::Requirement
|
177
|
-
requirements:
|
178
|
-
- - ">="
|
179
|
-
- !ruby/object:Gem::Version
|
180
|
-
version: '0'
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
182
|
name: activerecord
|
183
183
|
requirement: !ruby/object:Gem::Requirement
|