spaceborne 0.1.38 → 0.1.39

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d742ea06ad022126a7a61fb008131b02d0f0f1db485d832570b85f845299c655
4
- data.tar.gz: d7d452c83c164adebc69df71aef6aa2f12d50375be2e354463f7b7789b07c290
3
+ metadata.gz: 47de2c6cb6679f19995cba98157fcf914e181ca5cfc1a7c2be9f011fd593851f
4
+ data.tar.gz: 1d598c51e65a741cfa8431c6d603aecca8efe4e6077f4a08f39461a8f1bd980b
5
5
  SHA512:
6
- metadata.gz: 7e16b9d1bc60eabc5257afb91510d4a715bd8ce76acccc820a255a96ad4b19f87732360d98e3dfbfcfd0f53bd2d7524a72868602df29b2bc5fa871a15128e40e
7
- data.tar.gz: 0bac75438755e532b9d39c10864d91430d9a7d281f7d89b9ee1d1943ab7951381432fb0e48ccd39bbc95725dafb8db93a99ba4edc9a53eebec3d6c4bc8e15e59
6
+ metadata.gz: 2d08b29b7f93b28aa1f0c1a54b9576483ac0e35d30c42c5c8f9ac62fe157ebea7832175e46df61997398b2f7c3f5f2cbc097b79dcee40b39a84d92e09c3e8167
7
+ data.tar.gz: ef1903aa05502a28b612046382a2b06612a6231a2582b6e9555c3f138d54b10fbee6cc2fbc5c0c1f16413f733f34d015c53f837ec1531d677de067d9b80c6e27
data/.rubocop.yml CHANGED
@@ -1,3 +1,6 @@
1
+ AllCops:
2
+ SuggestExtensions: false
3
+
1
4
  Style/FrozenStringLiteralComment:
2
5
  Enabled: false
3
6
 
@@ -23,7 +26,7 @@ Metrics/ClassLength:
23
26
  Exclude:
24
27
  - 'bin/*'
25
28
 
26
- Metrics/LineLength:
29
+ Layout/LineLength:
27
30
  Exclude:
28
31
  - 'spec/airborne/**/*.rb'
29
32
 
data/README.md CHANGED
@@ -226,15 +226,16 @@ The following example shows how extensions # 6 & 8 work
226
226
  { "array": [] },
227
227
  { "foo": "bar" }],
228
228
  "highest_array": [ null,
229
- { "array": [{ "present": "name" }]}]
229
+ { "array": [{ "present": "name" }]}],
230
+ "not_an_array": null
230
231
  }
231
232
  ```
232
233
  You can now validate the fact that each element in the collection has a key which is variant, but a value that has a defined format (the first and last field values are strings).
233
234
 
234
235
  expect_json_types('array_of_hashes.*.*', first: :string, last: :string)
235
236
  expect_json_types('hash_of_hashes.*', first: :string, last: :string)
236
- expect_json_types(optional('lowest_array.*.array.*'), present: :string)
237
- expect_json_types(optional('highest_array.*.array.*'), present: :string)
237
+ expect_json_types(optional('lowest_array.*.array.*'), present: :string)
238
+ expect_json_types(optional('highest_array.*.array.*'), present: :string)
238
239
 
239
240
 
240
241
  ## Development
@@ -1,3 +1,3 @@
1
1
  module Spaceborne
2
- VERSION = '0.1.38'.freeze
2
+ VERSION = '0.1.39'.freeze
3
3
  end
data/lib/spaceborne.rb CHANGED
@@ -156,10 +156,12 @@ module Airborne
156
156
 
157
157
  # Extend airborne's expectations
158
158
  module RequestExpectations
159
+ # class used for holding an optional path
159
160
  class OptionalPathExpectations
160
161
  def initialize(string)
161
162
  @string = string
162
163
  end
164
+
163
165
  def to_s
164
166
  @string.to_s
165
167
  end
@@ -272,10 +274,18 @@ module Airborne
272
274
  end
273
275
  end
274
276
 
277
+ def shortcut_validation(path, json)
278
+ return true if json.nil? && path.is_a?(Airborne::OptionalPathExpectations)
279
+
280
+ ensure_array_or_hash(path, json)
281
+ false
282
+ end
283
+
275
284
  def get_by_path(path, json, type: false, &block)
276
285
  iterate_path(path) do |parts, part, index|
277
286
  if %w[* ?].include?(part.to_s)
278
- ensure_array_or_hash(path, json)
287
+ return if shortcut_validation(path, json)
288
+
279
289
  type = part
280
290
  walk_with_path(type, index, path, parts, json, &block) && return if index < parts.length.pred
281
291
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spaceborne
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.38
4
+ version: 0.1.39
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keith Williams
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-08-20 00:00:00.000000000 Z
11
+ date: 2021-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport