scorpio 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|