media_types 0.3.0 → 0.4.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/CHANGELOG.md +8 -0
- data/Gemfile.lock +1 -1
- data/lib/media_types/constructable.rb +15 -8
- data/lib/media_types/dsl.rb +16 -8
- data/lib/media_types/minitest/assert_media_type_format.rb +1 -11
- data/lib/media_types/scheme.rb +7 -11
- data/lib/media_types/validations.rb +4 -2
- data/lib/media_types/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c410b6e7c2eaa9df298c4fef6306704921b75e1b
|
4
|
+
data.tar.gz: 9b21dfaf70f6d82c365a0309f5631565b5045ce9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da2ad8aa866bc5bc0aacceec506f9c0bd8c460fe5681f5beb80c6bbbfb9fa7795910889a6d4cbe9118122c05c9b5e9ffbec969a1708da10b965419e3093c0ffa
|
7
|
+
data.tar.gz: 2206345f8cca161de2cec0acde03b359cb5fd28fe1b2fa64fddbb14273c51a9e8bb806c1c6ff16daea9c33664ce82dde255b502c899d7efeead26a03a3b1a3a2
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
# 0.4.0
|
2
|
+
|
3
|
+
- Simplify `assert_media_type_format` by dumping views completely
|
4
|
+
- Add test for `merge`
|
5
|
+
- Add test for nested blocks in `validations` using `view` and `version` nesting
|
6
|
+
- Add test for `validatable?`
|
7
|
+
- Add block passing to `Scheme.new`
|
8
|
+
|
1
9
|
# 0.3.0
|
2
10
|
|
3
11
|
- Add `merge` dsl to merge two `Scheme`
|
data/Gemfile.lock
CHANGED
@@ -77,13 +77,16 @@ module MediaTypes
|
|
77
77
|
|
78
78
|
def to_str(qualifier = nil)
|
79
79
|
# TODO: remove warning by slicing out these arguments if they don't appear in the format
|
80
|
-
qualified(
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
80
|
+
qualified(
|
81
|
+
qualifier,
|
82
|
+
format(
|
83
|
+
opts.fetch(:format),
|
84
|
+
version: opts.fetch(:version),
|
85
|
+
suffix: opts.fetch(:suffix) { :json },
|
86
|
+
type: opts.fetch(:type),
|
87
|
+
view: format_view(opts[:view])
|
88
|
+
)
|
89
|
+
)
|
87
90
|
end
|
88
91
|
|
89
92
|
def valid?(output, **validation_opts)
|
@@ -102,6 +105,10 @@ module MediaTypes
|
|
102
105
|
)
|
103
106
|
end
|
104
107
|
|
108
|
+
def validatable?
|
109
|
+
__getobj__.validatable?(self)
|
110
|
+
end
|
111
|
+
|
105
112
|
alias inspect to_str
|
106
113
|
alias to_s to_str
|
107
114
|
|
@@ -116,7 +123,7 @@ module MediaTypes
|
|
116
123
|
attr_accessor :opts
|
117
124
|
|
118
125
|
def with(more_opts)
|
119
|
-
Hash(opts).merge(more_opts)
|
126
|
+
Hash(opts).clone.merge(more_opts)
|
120
127
|
end
|
121
128
|
|
122
129
|
def qualified(qualifier, media_type)
|
data/lib/media_types/dsl.rb
CHANGED
@@ -21,7 +21,9 @@ module MediaTypes
|
|
21
21
|
module ClassMethods
|
22
22
|
|
23
23
|
def to_constructable
|
24
|
-
media_type_constructable.dup
|
24
|
+
media_type_constructable.dup.tap do |constructable|
|
25
|
+
constructable.__setobj__(self)
|
26
|
+
end
|
25
27
|
end
|
26
28
|
|
27
29
|
def valid?(output, media_type = to_constructable, **opts)
|
@@ -32,6 +34,10 @@ module MediaTypes
|
|
32
34
|
validations.find(String(media_type)).validate(output, backtrace: ['.'], **opts)
|
33
35
|
end
|
34
36
|
|
37
|
+
def validatable?(media_type = to_constructable)
|
38
|
+
validations.find(String(media_type), -> { nil })
|
39
|
+
end
|
40
|
+
|
35
41
|
def register
|
36
42
|
registrations.to_a.map do |registerable|
|
37
43
|
MediaTypes.register(registerable)
|
@@ -42,23 +48,25 @@ module MediaTypes
|
|
42
48
|
private
|
43
49
|
|
44
50
|
def media_type(name, defaults: {})
|
45
|
-
self.media_type_constructable =
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
.view(defaults.fetch(:view) { nil })
|
51
|
+
self.media_type_constructable = Constructable.new(self, format: base_format, type: name)
|
52
|
+
.version(defaults.fetch(:version) { nil })
|
53
|
+
.suffix(defaults.fetch(:suffix) { nil })
|
54
|
+
.view(defaults.fetch(:view) { nil })
|
50
55
|
end
|
51
56
|
|
52
57
|
def defaults(&block)
|
58
|
+
return media_type_constructable unless block_given?
|
53
59
|
self.media_type_constructable = Defaults.new(to_constructable, &block).to_constructable
|
54
60
|
end
|
55
61
|
|
56
62
|
def registrations(symbol = nil, &block)
|
57
|
-
|
63
|
+
return media_type_registrar unless block_given?
|
64
|
+
self.media_type_registrar = Registrar.new(self, symbol: symbol, &block)
|
58
65
|
end
|
59
66
|
|
60
67
|
def validations(&block)
|
61
|
-
|
68
|
+
return media_type_validations unless block_given?
|
69
|
+
self.media_type_validations = Validations.new(to_constructable, &block)
|
62
70
|
end
|
63
71
|
end
|
64
72
|
end
|
@@ -3,17 +3,7 @@
|
|
3
3
|
module MediaTypes
|
4
4
|
module Assertions
|
5
5
|
def assert_media_type_format(media_type, output, **opts)
|
6
|
-
|
7
|
-
output[:_embedded].each do |embedded|
|
8
|
-
assert_media_type_format(media_type.view(nil), embedded, **opts)
|
9
|
-
end
|
10
|
-
return
|
11
|
-
end
|
12
|
-
|
13
|
-
if media_type.index?
|
14
|
-
return output[:_index] # TODO: sub_schema the "self" link
|
15
|
-
end
|
16
|
-
|
6
|
+
return pass unless media_type.validatable?
|
17
7
|
assert media_type.validate!(output, **opts)
|
18
8
|
end
|
19
9
|
end
|
data/lib/media_types/scheme.rb
CHANGED
@@ -58,12 +58,14 @@ module MediaTypes
|
|
58
58
|
#
|
59
59
|
# @see MissingValidation
|
60
60
|
#
|
61
|
-
def initialize(allow_empty: false, force: nil)
|
61
|
+
def initialize(allow_empty: false, force: nil, &block)
|
62
62
|
self.validations = {}
|
63
63
|
self.allow_empty = allow_empty
|
64
64
|
self.force = force
|
65
65
|
|
66
66
|
validations.default = MissingValidation.new
|
67
|
+
|
68
|
+
instance_exec(&block) if block_given?
|
67
69
|
end
|
68
70
|
|
69
71
|
##
|
@@ -213,10 +215,7 @@ module MediaTypes
|
|
213
215
|
return validations.default = scheme
|
214
216
|
end
|
215
217
|
|
216
|
-
|
217
|
-
scheme.instance_exec(&block)
|
218
|
-
|
219
|
-
validations.default = scheme
|
218
|
+
validations.default = Scheme.new(allow_empty: allow_empty, force: force, &block)
|
220
219
|
end
|
221
220
|
|
222
221
|
##
|
@@ -225,7 +224,7 @@ module MediaTypes
|
|
225
224
|
# @param [Scheme] scheme the scheme to merge into this
|
226
225
|
#
|
227
226
|
def merge(scheme, &block)
|
228
|
-
self.validations = validations.merge(scheme.send(:validations).
|
227
|
+
self.validations = validations.merge(scheme.send(:validations).clone)
|
229
228
|
instance_exec(&block) if block_given?
|
230
229
|
end
|
231
230
|
|
@@ -307,10 +306,7 @@ module MediaTypes
|
|
307
306
|
)
|
308
307
|
end
|
309
308
|
|
310
|
-
|
311
|
-
scheme.instance_exec(&block)
|
312
|
-
|
313
|
-
validations[String(key)] = scheme
|
309
|
+
validations[String(key)] = Scheme.new(allow_empty: allow_empty, force: force, &block)
|
314
310
|
end
|
315
311
|
|
316
312
|
##
|
@@ -419,7 +415,7 @@ module MediaTypes
|
|
419
415
|
return yield(->(_) {})
|
420
416
|
end
|
421
417
|
|
422
|
-
exhaustive_keys = keys.
|
418
|
+
exhaustive_keys = keys.clone.map(&:to_s)
|
423
419
|
# noinspection RubyScope
|
424
420
|
result = yield ->(key) { exhaustive_keys.delete(String(key)) }
|
425
421
|
return result if exhaustive_keys.empty?
|
@@ -38,8 +38,10 @@ module MediaTypes
|
|
38
38
|
# @param [lambda] default the lambda if nothing can be found
|
39
39
|
# @return [Scheme] the scheme for the given +media_type+
|
40
40
|
#
|
41
|
-
def find(media_type, default = -> { Scheme
|
42
|
-
registry.fetch(String(media_type))
|
41
|
+
def find(media_type, default = -> { Scheme.new(allow_empty: true) { not_strict } })
|
42
|
+
registry.fetch(String(media_type)) do
|
43
|
+
default.call
|
44
|
+
end
|
43
45
|
end
|
44
46
|
|
45
47
|
def method_missing(method_name, *arguments, &block)
|
data/lib/media_types/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: media_types
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Derk-Jan Karrenbeld
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-10-
|
11
|
+
date: 2018-10-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: awesome_print
|