media_types 2.1.1 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/debian.yml +43 -43
  3. data/.github/workflows/publish-bookworm.yml +33 -0
  4. data/.github/workflows/publish-sid.yml +33 -0
  5. data/.github/workflows/ruby.yml +22 -23
  6. data/.gitignore +20 -10
  7. data/.rubocop.yml +29 -29
  8. data/CHANGELOG.md +175 -164
  9. data/Gemfile +6 -6
  10. data/Gemfile.lock +9 -9
  11. data/LICENSE +21 -21
  12. data/README.md +666 -664
  13. data/Rakefile +12 -12
  14. data/bin/console +15 -15
  15. data/bin/setup +8 -8
  16. data/lib/media_types/constructable.rb +161 -160
  17. data/lib/media_types/dsl/errors.rb +18 -18
  18. data/lib/media_types/dsl.rb +172 -172
  19. data/lib/media_types/errors.rb +25 -19
  20. data/lib/media_types/formatter.rb +56 -56
  21. data/lib/media_types/hash.rb +21 -21
  22. data/lib/media_types/object.rb +35 -35
  23. data/lib/media_types/scheme/allow_nil.rb +30 -30
  24. data/lib/media_types/scheme/any_of.rb +41 -41
  25. data/lib/media_types/scheme/attribute.rb +46 -46
  26. data/lib/media_types/scheme/enumeration_context.rb +18 -18
  27. data/lib/media_types/scheme/enumeration_of_type.rb +80 -80
  28. data/lib/media_types/scheme/errors.rb +87 -87
  29. data/lib/media_types/scheme/links.rb +54 -54
  30. data/lib/media_types/scheme/missing_validation.rb +41 -41
  31. data/lib/media_types/scheme/not_strict.rb +15 -15
  32. data/lib/media_types/scheme/output_empty_guard.rb +45 -45
  33. data/lib/media_types/scheme/output_iterator_with_predicate.rb +66 -66
  34. data/lib/media_types/scheme/output_type_guard.rb +39 -39
  35. data/lib/media_types/scheme/rules.rb +186 -173
  36. data/lib/media_types/scheme/rules_exhausted_guard.rb +73 -73
  37. data/lib/media_types/scheme/validation_options.rb +44 -43
  38. data/lib/media_types/scheme.rb +535 -513
  39. data/lib/media_types/testing/assertions.rb +20 -20
  40. data/lib/media_types/validations.rb +118 -105
  41. data/lib/media_types/version.rb +5 -5
  42. data/lib/media_types/views.rb +12 -12
  43. data/lib/media_types.rb +73 -73
  44. data/media_types.gemspec +33 -33
  45. metadata +14 -12
data/CHANGELOG.md CHANGED
@@ -1,164 +1,175 @@
1
- # Changelog
2
-
3
- ## 2.1.1
4
-
5
- - Fix Ruby 2.6 to 2.7 incompatible change
6
-
7
- ## 2.1.0
8
-
9
- - Add `override_suffix` to force a specific suffix
10
- - Fix all deprecation warnings
11
-
12
- ## 2.0.1
13
-
14
- - Views can now be accessed indifferently.
15
- - Attribute keys no longer match indifferently.
16
- - Fixed infinite loop when validating non-hash, non-array items.
17
-
18
- ## 2.0.0
19
-
20
- - Removed ability to set default suffix. All suffixes now default to `+json`.
21
- - Suffixes are now set for a given view and version instead of as a block.
22
- - Added `suffix :yoursuffix` command to override the default `:json` suffix.
23
- - Removed defaults block.
24
- - Removed registrations block.
25
-
26
- ## 1.0.0
27
-
28
- - Added the ability to do inline tests when defining validations using `assert_pass '<json>'` and `assert_fail '<json>'`.
29
- - `media_type` has been replaced with `use_name`.
30
- - It is no longer possible to set a default version. Please use `version <x> do` instead.
31
- - You no longer need to specify a custom format string. If you set an organisation with `def self.organisation` or set a module wide organisation with `MediaTypes::set_organisation <module>, '<organisation>'` the library will generate identifiers for you.
32
- - `self.base_format` has been replaced by `identifier_format do |type:, view:, version:, suffix:|`.
33
- - Added the `empty` validation to mark an empty object as valid.
34
- - Added the `identifier` function to get the [Media Type Identifier](https://en.wikipedia.org/wiki/Media_type) for the validator.
35
- - Added `version(x)` and `view(x)` functions.
36
- - Added an `available_validations` functions that returns all defined validations.
37
- - Fixed an issue where validations could accidentally merge if defined with a bad `base_format`.
38
- - Fixed an issue where undefined validations would accept an empty object.
39
-
40
- ## 0.6.2
41
-
42
- - Fix handling empty collections
43
-
44
- ## 0.6.1
45
-
46
- - Fix no `validations` error on `validatable?` (now returns `false`)
47
- - Update `bundler` to `2.x`
48
-
49
- ## 0.6.0
50
-
51
- - Change default expected type for `attribute` to Object
52
- - Remove default `actionpack` calls for `.register`
53
- - Add integration for registering with `actionpack` (rails)
54
- - Add integration for registering with `http` (http.rb)
55
- - Fix stack overflow for cyclic schema
56
-
57
- ## 0.5.5
58
-
59
- - Fix an issue with `attribute(optional:, &block)` not passing `optional:` to the created `collection`.
60
-
61
- ## 0.5.4
62
-
63
- - Fix formatter reworked template when fields are not present
64
-
65
- ## 0.5.3
66
-
67
- - Remove `require 'awesome_print'` in library code as it's marked as a development dependency onlvy
68
-
69
- ## 0.5.2
70
-
71
- - Add requires in files with missing requires
72
-
73
- ## 0.5.1
74
-
75
- - Fix merging optional attributes
76
- - Change `#inspect` to look like a tree
77
-
78
- ## 0.5.0
79
-
80
- - Change internal representation of key to symbol
81
- - Change default type from `nil` to `Object`, removing special behaviour for nil
82
- - Add `Rules` class to handle normalization of keys and handling `rules` (`Scheme`, `Attribute`, etc)
83
- - Add guard classes to handle guard behaviour (`OutputEmptyGuard`, `OutputTypeGuard` and `RulesExhaustedGuard`)
84
- - Add `optional:` keywords to most dsl (`attribute`, `collection`, `any`, `link`)
85
- - Add `Formatter` class to handle formatting of the `Constructable#to_s`
86
- - Add behaviour to strip leading dot (`.`) or plus (`+`) from `+%<var>` if `var` is nil, fixing weird media types
87
- - Add behaviour to remove format variable values if format variable is not present, fixing warnings
88
- - Add `inspect` for most public classes
89
- - Add second argument for type or scheme to `any` dsl, mimicking `collection`
90
- - Add tests for most dsl, common permutations
91
- - Rename `force` to `expected_type`
92
- - Remove `format_view` behaviour where it adds a dot (`.`) if a view is present
93
- - Remove special iteration behaviour for `Links` (`link` dsl), allowing them to be optional, or non-exhaustive
94
- - Raise error if `self.base_format` is not available at time of `Dsl.media_type` call
95
- - Fix `expected_type` guard for arrays, nil, or arrays with nil.
96
-
97
- ## 0.4.1
98
-
99
- - Use strings for `:_links`, matching the other validation keys
100
-
101
- ## 0.4.0
102
-
103
- - Simplify `assert_media_type_format` by dumping views completely
104
- - Add test for `merge`
105
- - Add test for nested blocks in `validations` using `view` and `version` nesting
106
- - Add test for `validatable?`
107
- - Add block passing to `Scheme.new`
108
-
109
- ## 0.3.0
110
-
111
- - Add `merge` dsl to merge two `Scheme`
112
-
113
- ## 0.2.6
114
-
115
- - Change validation to accept both symbolised and stringified input ánd validations
116
-
117
- ## 0.2.5
118
-
119
- - Add automatic require for `media_types/scheme/any_of`
120
-
121
- ## 0.2.4
122
-
123
- - Change messages for `assert_media_types_registered` to be more informative and consistent
124
-
125
- ## 0.2.3
126
-
127
- - Fix an issue with `Hash#compact` which was introduce in 2.4+. Now works with Ruby 2.3
128
-
129
- ## 0.2.2
130
-
131
- - Fix an issue with `Registrar#versions`
132
- - Fix link in the gemspec to Github
133
-
134
- ## 0.2.1
135
-
136
- - Fix an issue with `Constructable#valid?` and `Constructable#validate!`
137
-
138
- ## 0.2.0
139
-
140
- Breaking changes to update public API and usage
141
-
142
- - Remove `Base` class (use `MediaTypes::Dsl` instead)
143
- - Remove a lot of configuration options as they are deemed unneeded
144
- - Remove `active_support` dependency
145
- - Rename `ConstructableMimeType` to `Constructable`
146
- - Moved global scheme types to `Scheme` as subtype
147
- - Add `MediaTypes::Dsl`
148
- - Add `validations` block to capture schemes
149
- - Add `registrations` block to capture register intent
150
- - Add `defaults` block to capture mime type defaults
151
- - Add `MediaTypes.register` class method to call `Mime::Type.register`
152
- - Add `Registerable` capture class
153
- - Add type / base setting for `Constructable`
154
- - Add versioned validations
155
- - Add forced types of `collection`s
156
- - Add `attribute` with block
157
- - Add `EnumerationOfType` for schema typed arrays
158
- - Add `AnyOf` for scheme enum types
159
- - Add non-block calls for `Scheme` dsl
160
- - Add yard documentation to `/docs`
161
-
162
- ## 0.1.0
163
-
164
- :baby: initial release
1
+ # Changelog
2
+
3
+ ## 2.3.0
4
+
5
+ - Add ability to define multiple versions using one block.
6
+ - Add `index` attribute type that automatically generates a link list compatible with media_types-serialization.
7
+ - Add support for `collection` to automatically look up a previously defined schema when passing a view.
8
+ - Add ability to mark certain attributes as optional when validating with `loose: true` and required otherwise.
9
+
10
+ ## 2.2.0
11
+
12
+ - Change dependencies and build output to be debian compatible
13
+
14
+ ## 2.1.1
15
+
16
+ - Fix Ruby 2.6 to 2.7 incompatible change
17
+
18
+ ## 2.1.0
19
+
20
+ - Add `override_suffix` to force a specific suffix
21
+ - Fix all deprecation warnings
22
+
23
+ ## 2.0.1
24
+
25
+ - Views can now be accessed indifferently.
26
+ - Attribute keys no longer match indifferently.
27
+ - Fixed infinite loop when validating non-hash, non-array items.
28
+
29
+ ## 2.0.0
30
+
31
+ - Remove ability to set default suffix. All suffixes now default to `+json`.
32
+ - Suffixes are now set for a given view and version instead of as a block.
33
+ - Add `suffix :yoursuffix` command to override the default `:json` suffix.
34
+ - Remove defaults block.
35
+ - Remove registrations block.
36
+
37
+ ## 1.0.0
38
+
39
+ - Add the ability to do inline tests when defining validations using `assert_pass '<json>'` and `assert_fail '<json>'`.
40
+ - `media_type` has been replaced with `use_name`.
41
+ - It is no longer possible to set a default version. Please use `version <x> do` instead.
42
+ - You no longer need to specify a custom format string. If you set an organisation with `def self.organisation` or set a module wide organisation with `MediaTypes::set_organisation <module>, '<organisation>'` the library will generate identifiers for you.
43
+ - `self.base_format` has been replaced by `identifier_format do |type:, view:, version:, suffix:|`.
44
+ - Add the `empty` validation to mark an empty object as valid.
45
+ - Add the `identifier` function to get the [Media Type Identifier](https://en.wikipedia.org/wiki/Media_type) for the validator.
46
+ - Add `version(x)` and `view(x)` functions.
47
+ - Add an `available_validations` functions that returns all defined validations.
48
+ - Fix an issue where validations could accidentally merge if defined with a bad `base_format`.
49
+ - Fix an issue where undefined validations would accept an empty object.
50
+
51
+ ## 0.6.2
52
+
53
+ - Fix handling empty collections
54
+
55
+ ## 0.6.1
56
+
57
+ - Fix no `validations` error on `validatable?` (now returns `false`)
58
+ - Update `bundler` to `2.x`
59
+
60
+ ## 0.6.0
61
+
62
+ - Change default expected type for `attribute` to Object
63
+ - Remove default `actionpack` calls for `.register`
64
+ - Add integration for registering with `actionpack` (rails)
65
+ - Add integration for registering with `http` (http.rb)
66
+ - Fix stack overflow for cyclic schema
67
+
68
+ ## 0.5.5
69
+
70
+ - Fix an issue with `attribute(optional:, &block)` not passing `optional:` to the created `collection`.
71
+
72
+ ## 0.5.4
73
+
74
+ - Fix formatter reworked template when fields are not present
75
+
76
+ ## 0.5.3
77
+
78
+ - Remove `require 'awesome_print'` in library code as it's marked as a development dependency onlvy
79
+
80
+ ## 0.5.2
81
+
82
+ - Add requires in files with missing requires
83
+
84
+ ## 0.5.1
85
+
86
+ - Fix merging optional attributes
87
+ - Change `#inspect` to look like a tree
88
+
89
+ ## 0.5.0
90
+
91
+ - Change internal representation of key to symbol
92
+ - Change default type from `nil` to `Object`, removing special behaviour for nil
93
+ - Add `Rules` class to handle normalization of keys and handling `rules` (`Scheme`, `Attribute`, etc)
94
+ - Add guard classes to handle guard behaviour (`OutputEmptyGuard`, `OutputTypeGuard` and `RulesExhaustedGuard`)
95
+ - Add `optional:` keywords to most dsl (`attribute`, `collection`, `any`, `link`)
96
+ - Add `Formatter` class to handle formatting of the `Constructable#to_s`
97
+ - Add behaviour to strip leading dot (`.`) or plus (`+`) from `+%<var>` if `var` is nil, fixing weird media types
98
+ - Add behaviour to remove format variable values if format variable is not present, fixing warnings
99
+ - Add `inspect` for most public classes
100
+ - Add second argument for type or scheme to `any` dsl, mimicking `collection`
101
+ - Add tests for most dsl, common permutations
102
+ - Rename `force` to `expected_type`
103
+ - Remove `format_view` behaviour where it adds a dot (`.`) if a view is present
104
+ - Remove special iteration behaviour for `Links` (`link` dsl), allowing them to be optional, or non-exhaustive
105
+ - Raise error if `self.base_format` is not available at time of `Dsl.media_type` call
106
+ - Fix `expected_type` guard for arrays, nil, or arrays with nil.
107
+
108
+ ## 0.4.1
109
+
110
+ - Use strings for `:_links`, matching the other validation keys
111
+
112
+ ## 0.4.0
113
+
114
+ - Simplify `assert_media_type_format` by dumping views completely
115
+ - Add test for `merge`
116
+ - Add test for nested blocks in `validations` using `view` and `version` nesting
117
+ - Add test for `validatable?`
118
+ - Add block passing to `Scheme.new`
119
+
120
+ ## 0.3.0
121
+
122
+ - Add `merge` dsl to merge two `Scheme`
123
+
124
+ ## 0.2.6
125
+
126
+ - Change validation to accept both symbolised and stringified input ánd validations
127
+
128
+ ## 0.2.5
129
+
130
+ - Add automatic require for `media_types/scheme/any_of`
131
+
132
+ ## 0.2.4
133
+
134
+ - Change messages for `assert_media_types_registered` to be more informative and consistent
135
+
136
+ ## 0.2.3
137
+
138
+ - Fix an issue with `Hash#compact` which was introduce in 2.4+. Now works with Ruby 2.3
139
+
140
+ ## 0.2.2
141
+
142
+ - Fix an issue with `Registrar#versions`
143
+ - Fix link in the gemspec to Github
144
+
145
+ ## 0.2.1
146
+
147
+ - Fix an issue with `Constructable#valid?` and `Constructable#validate!`
148
+
149
+ ## 0.2.0
150
+
151
+ Breaking changes to update public API and usage
152
+
153
+ - Remove `Base` class (use `MediaTypes::Dsl` instead)
154
+ - Remove a lot of configuration options as they are deemed unneeded
155
+ - Remove `active_support` dependency
156
+ - Rename `ConstructableMimeType` to `Constructable`
157
+ - Moved global scheme types to `Scheme` as subtype
158
+ - Add `MediaTypes::Dsl`
159
+ - Add `validations` block to capture schemes
160
+ - Add `registrations` block to capture register intent
161
+ - Add `defaults` block to capture mime type defaults
162
+ - Add `MediaTypes.register` class method to call `Mime::Type.register`
163
+ - Add `Registerable` capture class
164
+ - Add type / base setting for `Constructable`
165
+ - Add versioned validations
166
+ - Add forced types of `collection`s
167
+ - Add `attribute` with block
168
+ - Add `EnumerationOfType` for schema typed arrays
169
+ - Add `AnyOf` for scheme enum types
170
+ - Add non-block calls for `Scheme` dsl
171
+ - Add yard documentation to `/docs`
172
+
173
+ ## 0.1.0
174
+
175
+ :baby: initial release
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
- source "https://rubygems.org"
2
-
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
-
5
- # Specify your gem's dependencies in media_types.gemspec
6
- gemspec
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in media_types.gemspec
6
+ gemspec
data/Gemfile.lock CHANGED
@@ -10,21 +10,21 @@ GEM
10
10
  awesome_print (1.9.2)
11
11
  builder (3.2.4)
12
12
  docile (1.4.0)
13
- minitest (5.14.4)
14
- minitest-reporters (1.4.3)
13
+ minitest (5.18.0)
14
+ minitest-reporters (1.6.0)
15
15
  ansi
16
16
  builder
17
17
  minitest (>= 5.0)
18
18
  ruby-progressbar
19
- oj (3.13.1)
19
+ oj (3.14.2)
20
20
  rake (13.0.6)
21
- ruby-progressbar (1.11.0)
22
- simplecov (0.21.2)
21
+ ruby-progressbar (1.13.0)
22
+ simplecov (0.22.0)
23
23
  docile (~> 1.1)
24
24
  simplecov-html (~> 0.11)
25
25
  simplecov_json_formatter (~> 0.1)
26
26
  simplecov-html (0.12.3)
27
- simplecov_json_formatter (0.1.3)
27
+ simplecov_json_formatter (0.1.4)
28
28
 
29
29
  PLATFORMS
30
30
  x64-mingw32
@@ -33,11 +33,11 @@ DEPENDENCIES
33
33
  awesome_print
34
34
  bundler (>= 2)
35
35
  media_types!
36
- minitest (~> 5.0)
36
+ minitest
37
37
  minitest-reporters
38
38
  oj
39
- rake (>= 12.0)
39
+ rake
40
40
  simplecov
41
41
 
42
42
  BUNDLED WITH
43
- 2.2.17
43
+ 2.1.4
data/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2020 Derk-Jan Karrenbeld
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2020 Derk-Jan Karrenbeld
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.