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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 772f6b246d831d6737118bed2f363358ac6b62dc055c3503f0a96e04d416985e
4
- data.tar.gz: 20e4a1d856105a0c2f25d80fb252afd7b91bc35f71babc47f2d8ab3fbd46b2df
3
+ metadata.gz: 7d8f3fb8a266157352a5f4054b732210bbbff161fb11d780828a3fbbdbf6922d
4
+ data.tar.gz: 7ba1d3d214decdfa3c8b40df5d3d63377a160b8a6cb937090f8c3b67e47d4f45
5
5
  SHA512:
6
- metadata.gz: 8796f5f5227d3a70c374ae94b30cb6be1d7ad4dad71fb399c37c6c74e21117442d582a44d3417c828f156e42690d8f34a692bc3de5fcae4070431583ba1e5d88
7
- data.tar.gz: 5d1b897306c6a43e16016e13f125e81d0408e3aca0c94009a2d8804aef0835b3a5cec144441de2979b51c9436e2fff016f0a1046e65d25dcc17471f60cda5869
6
+ metadata.gz: 2ed9a28136c4661fab6bbe9309533e3521df809f8146e3e92eb397baf37f7880a80d7d3491d8d2d5670e06189653c6fac51fff349409af46402be6f29658efff
7
+ data.tar.gz: a4cd19c9266a038a93330d42aa1bb407b4d493dad6f7ddd3e1c61e5803c4fa84a65cf3802b7ceeba9d859e9cb5ed20b3124d140ed215d087d338b8e60fae579a
@@ -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
 
@@ -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
- if @instance.class != thing.class
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, SchemaInstanceBase::OverrideFromExtensions]
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
- self.instance = instance.modified_copy do |hash|
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
- self.instance = instance.modified_copy do |ary|
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
 
@@ -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
- @memos[key].clear if @memos[key]
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
@@ -1,3 +1,3 @@
1
1
  module Scorpio
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.3"
3
3
  end
@@ -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.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-06 00:00:00.000000000 Z
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