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