media_types 2.2.0 → 2.3.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.
Files changed (44) 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 -22
  6. data/.gitignore +20 -10
  7. data/.rubocop.yml +29 -29
  8. data/CHANGELOG.md +175 -164
  9. data/Gemfile +6 -6
  10. data/LICENSE +21 -21
  11. data/README.md +666 -664
  12. data/Rakefile +12 -12
  13. data/bin/console +15 -15
  14. data/bin/setup +8 -8
  15. data/lib/media_types/constructable.rb +161 -160
  16. data/lib/media_types/dsl/errors.rb +18 -18
  17. data/lib/media_types/dsl.rb +172 -172
  18. data/lib/media_types/errors.rb +25 -19
  19. data/lib/media_types/formatter.rb +56 -56
  20. data/lib/media_types/hash.rb +21 -21
  21. data/lib/media_types/object.rb +35 -35
  22. data/lib/media_types/scheme/allow_nil.rb +30 -30
  23. data/lib/media_types/scheme/any_of.rb +41 -41
  24. data/lib/media_types/scheme/attribute.rb +46 -46
  25. data/lib/media_types/scheme/enumeration_context.rb +18 -18
  26. data/lib/media_types/scheme/enumeration_of_type.rb +80 -80
  27. data/lib/media_types/scheme/errors.rb +87 -87
  28. data/lib/media_types/scheme/links.rb +54 -54
  29. data/lib/media_types/scheme/missing_validation.rb +41 -41
  30. data/lib/media_types/scheme/not_strict.rb +15 -15
  31. data/lib/media_types/scheme/output_empty_guard.rb +45 -45
  32. data/lib/media_types/scheme/output_iterator_with_predicate.rb +66 -66
  33. data/lib/media_types/scheme/output_type_guard.rb +39 -39
  34. data/lib/media_types/scheme/rules.rb +186 -173
  35. data/lib/media_types/scheme/rules_exhausted_guard.rb +73 -73
  36. data/lib/media_types/scheme/validation_options.rb +44 -43
  37. data/lib/media_types/scheme.rb +535 -513
  38. data/lib/media_types/testing/assertions.rb +20 -20
  39. data/lib/media_types/validations.rb +118 -105
  40. data/lib/media_types/version.rb +5 -5
  41. data/lib/media_types/views.rb +12 -12
  42. data/lib/media_types.rb +73 -73
  43. data/media_types.gemspec +33 -33
  44. metadata +8 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 60066d3701955c4cd09e1aebea4c444e7bda6f046119fdf535af562757e50b42
4
- data.tar.gz: 54dec80cb8d9b53a1b7dfcb0269f3d6688b06cf48050f74a93f50a91169ac8cc
3
+ metadata.gz: 0e73cbda14f6c92ce158da57f61d1bdf88bcda3db508d9c100519f42ba812975
4
+ data.tar.gz: a051ea9dfcc29933084cfc7d70d1c63edc35ccea7d74d616c8c79f76a75b43eb
5
5
  SHA512:
6
- metadata.gz: 9d75689e60008e8b728082181b81eed52d68fab6709b3588729cec9f257b7aca045dd8739ab2c888dc03730900f530fc1e6cf3f87544964be6028c0a177db4f3
7
- data.tar.gz: cfe50c15068b984cf1f7576fdfb8cc70c2e4486ebb4be7594704160017534288b0c09dd8f59703fcc6b5b98b7068b34daa235185beefab8bc3394df0984d4f60
6
+ metadata.gz: cd93497ea5e07e0371c67d79dff55253eda875ebb5e1ab654bae3ecbca7af916ebd2778642b423fa19d443bba71185798e8fd9a6b73351185fc0538979bae042
7
+ data.tar.gz: b0e39b7c9124bcc60e4cebecb1af587670f37b29a3b0331c295a74605742ccdd0218fe05840adf2355263ba0ebdcec344fdcb965b8469b463d066c164af46184
@@ -1,43 +1,43 @@
1
- name: Debian
2
-
3
- on:
4
- push:
5
- tags:
6
- - "*"
7
-
8
- jobs:
9
- build:
10
- runs-on: ubuntu-latest
11
- steps:
12
- - uses: actions/checkout@v1
13
- - name: Set up Ruby 2.7 (debian ruby)
14
- uses: ruby/setup-ruby@v2
15
- with:
16
- ruby-version: 2.7
17
- - name: Install dependencies
18
- run: |
19
- sudo apt-get update
20
- DEBIAN_FRONTEND=noninteractive sudo apt-get --yes install gem2deb bundler ruby-{actionpack,awesome-print,http,minitest,minitest-reporters,oj,simplecov}
21
- rm Gemfile.lock || true
22
- bundle install --local
23
- sudo apt-file update
24
- - name: Build
25
- run: |
26
- bundle exec rake build
27
- mkdir debpkg
28
- cp pkg/media_types-*.gem media_types.gem
29
- #(cd debpkg; gem2tgz media_types.gem)
30
- #(cd debpkg; dh-make-ruby media_types-*.tar.gz)
31
- #(cd debpkg; dh-make-ruby media_types-*.tar.gz)
32
- (cd pkg; gem2deb media_types*.gem)
33
- mv pkg/ruby-media-types_*_all.deb ruby-media-types.deb
34
- - name: Upload gem
35
- uses: actions/upload-artifact@v1
36
- with:
37
- name: media_types.gem
38
- path: media_types.gem
39
- - name: Upload deb
40
- uses: actions/upload-artifact@v1
41
- with:
42
- name: ruby-media-types.deb
43
- path: ruby-media-types.deb
1
+ name: Debian
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "*"
7
+
8
+ jobs:
9
+ build:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v1
13
+ - name: Set up Ruby 2.7 (debian ruby)
14
+ uses: ruby/setup-ruby@v1
15
+ with:
16
+ ruby-version: 2.7
17
+ - name: Install dependencies
18
+ run: |
19
+ sudo apt-get update
20
+ DEBIAN_FRONTEND=noninteractive sudo apt-get --yes install gem2deb bundler ruby-{actionpack,awesome-print,http,minitest,minitest-reporters,oj,simplecov}
21
+ rm Gemfile.lock || true
22
+ bundle install --local
23
+ sudo apt-file update
24
+ - name: Build
25
+ run: |
26
+ bundle exec rake build
27
+ mkdir debpkg
28
+ cp pkg/media_types-*.gem media_types.gem
29
+ #(cd debpkg; gem2tgz media_types.gem)
30
+ #(cd debpkg; dh-make-ruby media_types-*.tar.gz)
31
+ #(cd debpkg; dh-make-ruby media_types-*.tar.gz)
32
+ (cd pkg; gem2deb media_types*.gem)
33
+ mv pkg/ruby-media-types_*_all.deb ruby-media-types.deb
34
+ - name: Upload gem
35
+ uses: actions/upload-artifact@v1
36
+ with:
37
+ name: media_types.gem
38
+ path: media_types.gem
39
+ - name: Upload deb
40
+ uses: actions/upload-artifact@v1
41
+ with:
42
+ name: ruby-media-types.deb
43
+ path: ruby-media-types.deb
@@ -0,0 +1,33 @@
1
+ name: Publish debian bookworm packages
2
+
3
+ on:
4
+ - workflow_dispatch
5
+
6
+ jobs:
7
+ publish-bookworm:
8
+ runs-on: ubuntu-latest
9
+ container:
10
+ image: debian:bookworm
11
+ steps:
12
+ - uses: actions/checkout@v3
13
+ name: Check out repository
14
+ - name: Install repo
15
+ run: apt-get update && DEBIAN_FRONTEND=noninteractive apt-get --yes install wget && wget -O key.deb https://deb1.ws.maxmaton.nl/key.deb && DEBIAN_FRONTEND=noninteractive apt-get --yes install ./key.deb && echo "deb [signed-by=/usr/share/keyrings/maxmaton.gpg] http://deb.maxmaton.nl/debian bookworm main non-free" > /etc/apt/sources.list.d/maxmaton.list
16
+ - name: Install dependencies
17
+ run: apt-get update && DEBIAN_FRONTEND=noninteractive apt-get --yes install build-essential gem scrypt sshpass gem2deb ruby-actionpack ruby-activesupport ruby-media-types
18
+ - name: Build gem
19
+ run: |
20
+ sed -i -re "s/VERSION\s+=\s+'([0-9]+.[0-9]+.[0-9]+)'/VERSION = '\1.bookworm'/g" lib/media_types/version.rb
21
+ gem build media_types.gemspec
22
+ - name: Build deb
23
+ run: DEBEMAIL=info@delftsolutions.nl gem2deb media_types-*.gem && ls -hal
24
+ - name: Publish
25
+ env:
26
+ PUBLISH_SIGNING_KEY: ${{ secrets.PUBLISH_SIGNING_KEY }}
27
+ SSHPASS: ${{ secrets.SSHPASS }}
28
+ run: |
29
+ echo "deb1.ws.maxmaton.nl ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDgN3TiyKvRTj4xBSyQtYz0OuHZYv2i+x3NL+svh2k0SgPr0Xms4Vu+g3AXntXUQGRM0W9zbcZSHiBIWbliv3Y+20f7lKlj9uXUEMHDuiB7Fu7dXObfHswIvTX3XWiPdDeG1jYQbGM3tENX/wtEoixyL++33O69t2SFR5MkPk+/j+zlGLCFf0ypTAMb7bT5NjRNM3+v0LT2WVSZuawA7Fl8WBVTq7MSSuCZIxHIv1kEq6AWpOjWZHNVZrijs+uRTIPcrZ47wSt6tanjAnWT9sAzu8KqcvQsPw9IQwqV1nfQWz0wMit7ijn9B3MrkNHXP5PaNiZQCezsbrh9glhShz0z" > known_hosts
30
+ echo "deb1.ws.maxmaton.nl ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMr5uAraiRj0pQ9Q9dQO0xMosTzFUAe+VjtMclIUbdJ7r7XMUa3etxh3BfBlW4nq3ZdIFCsV2zwzTaYSmfh95Xs=" >> known_hosts
31
+ echo "deb1.ws.maxmaton.nl ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPhQl7Ik6h7hSQbdo9ZfF78WYFCzch8SAOXFBxxAZH06" >> known_hosts
32
+ echo "Uploading :" ruby-media-types_*.deb
33
+ scrypt enc --passphrase "env:PUBLISH_SIGNING_KEY" ruby-media-types_*.deb | sshpass -e ssh -o "UserKnownHostsFile=known_hosts" publish@deb1.ws.maxmaton.nl "echo 'uploading bookworm' && sudo /opt/max/publish-deb ruby-media-types bookworm main && echo 'bookworm done'"
@@ -0,0 +1,33 @@
1
+ name: Publish debian sid packages
2
+
3
+ on:
4
+ - workflow_dispatch
5
+
6
+ jobs:
7
+ publish-sid:
8
+ runs-on: ubuntu-latest
9
+ container:
10
+ image: debian:sid
11
+ steps:
12
+ - uses: actions/checkout@v3
13
+ name: Check out repository
14
+ - name: Install repo
15
+ run: apt-get update && DEBIAN_FRONTEND=noninteractive apt-get --yes install wget && wget -O key.deb https://deb1.ws.maxmaton.nl/key.deb && DEBIAN_FRONTEND=noninteractive apt-get --yes install ./key.deb && echo "deb [signed-by=/usr/share/keyrings/maxmaton.gpg] http://deb.maxmaton.nl/debian sid main non-free" > /etc/apt/sources.list.d/maxmaton.list
16
+ - name: Install dependencies
17
+ run: apt-get update && DEBIAN_FRONTEND=noninteractive apt-get --yes install build-essential gem scrypt sshpass gem2deb ruby-actionpack ruby-activesupport ruby-media-types
18
+ - name: Build gem
19
+ run: |
20
+ sed -i -re "s/VERSION\s+=\s+'([0-9]+.[0-9]+.[0-9]+)'/VERSION = '\1.sid'/g" lib/media_types/version.rb
21
+ gem build media_types.gemspec
22
+ - name: Build deb
23
+ run: DEBEMAIL=info@delftsolutions.nl gem2deb media_types-*.gem && ls -hal
24
+ - name: Publish
25
+ env:
26
+ PUBLISH_SIGNING_KEY: ${{ secrets.PUBLISH_SIGNING_KEY }}
27
+ SSHPASS: ${{ secrets.SSHPASS }}
28
+ run: |
29
+ echo "deb1.ws.maxmaton.nl ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDgN3TiyKvRTj4xBSyQtYz0OuHZYv2i+x3NL+svh2k0SgPr0Xms4Vu+g3AXntXUQGRM0W9zbcZSHiBIWbliv3Y+20f7lKlj9uXUEMHDuiB7Fu7dXObfHswIvTX3XWiPdDeG1jYQbGM3tENX/wtEoixyL++33O69t2SFR5MkPk+/j+zlGLCFf0ypTAMb7bT5NjRNM3+v0LT2WVSZuawA7Fl8WBVTq7MSSuCZIxHIv1kEq6AWpOjWZHNVZrijs+uRTIPcrZ47wSt6tanjAnWT9sAzu8KqcvQsPw9IQwqV1nfQWz0wMit7ijn9B3MrkNHXP5PaNiZQCezsbrh9glhShz0z" > known_hosts
30
+ echo "deb1.ws.maxmaton.nl ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBMr5uAraiRj0pQ9Q9dQO0xMosTzFUAe+VjtMclIUbdJ7r7XMUa3etxh3BfBlW4nq3ZdIFCsV2zwzTaYSmfh95Xs=" >> known_hosts
31
+ echo "deb1.ws.maxmaton.nl ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPhQl7Ik6h7hSQbdo9ZfF78WYFCzch8SAOXFBxxAZH06" >> known_hosts
32
+ echo "Uploading :" ruby-media-types_*.deb
33
+ scrypt enc --passphrase "env:PUBLISH_SIGNING_KEY" ruby-media-types_*.deb | sshpass -e ssh -o "UserKnownHostsFile=known_hosts" publish@deb1.ws.maxmaton.nl "echo 'uploading sid' && sudo /opt/max/publish-deb ruby-media-types sid main && echo 'sid done'"
@@ -1,22 +1,22 @@
1
- name: Ruby
2
-
3
- on: [push]
4
-
5
- jobs:
6
- build:
7
- runs-on: ubuntu-latest
8
-
9
- steps:
10
- - uses: actions/checkout@v1
11
- - name: Set up Ruby 3.1
12
- uses: actions/setup-ruby@v1
13
- with:
14
- ruby-version: 3.1.x
15
- - name: Build and test with Rake
16
- run: |
17
- sudo apt-get update
18
- DEBIAN_FRONTEND=noninteractive sudo apt-get install --yes bundler
19
- rm Gemfile.lock || true
20
- gem install bundler
21
- bundle install --jobs 4 --retry 3
22
- bundle exec rake
1
+ name: Ruby
2
+
3
+ on: [push]
4
+
5
+ jobs:
6
+ build:
7
+ runs-on: ubuntu-latest
8
+
9
+ steps:
10
+ - uses: actions/checkout@v1
11
+ - name: Set up Ruby 3.1
12
+ uses: actions/setup-ruby@v1
13
+ with:
14
+ ruby-version: 3.1.x
15
+ - name: Build and test with Rake
16
+ run: |
17
+ sudo apt-get update
18
+ DEBIAN_FRONTEND=noninteractive sudo apt-get install --yes bundler
19
+ rm Gemfile.lock || true
20
+ gem install bundler
21
+ bundle install --jobs 4 --retry 3
22
+ bundle exec rake
data/.gitignore CHANGED
@@ -1,10 +1,20 @@
1
- /.bundle/
2
- /.yardoc
3
- /_yardoc/
4
- /coverage/
5
- /doc/
6
- /pkg/
7
- /spec/reports/
8
- /tmp/
9
-
10
- .idea/
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ .idea/
11
+
12
+ /media_types-*.gem
13
+ /media-types-*.tar.gz
14
+ /ruby-media-types-*
15
+ /ruby-media-types_*.deb
16
+ /ruby-media-types_*.buildinfo
17
+ /ruby-media-types_*.changes
18
+ /ruby-media-types_*.debian.tar.xz
19
+ /ruby-media-types_*.dsc
20
+ /ruby-media-types_*.orig.tar.gz
data/.rubocop.yml CHANGED
@@ -1,29 +1,29 @@
1
- AllCops:
2
- Include:
3
- - "**/Rakefile"
4
- - "lib/**/*.rb"
5
- Exclude:
6
- - "Gemfile"
7
- - "bin/**/*"
8
- TargetRubyVersion: 3.0
9
-
10
- Layout/EmptyLinesAroundClassBody:
11
- Enabled: false
12
-
13
- Layout/EndOfLine:
14
- Enabled: false
15
-
16
- Metrics/LineLength:
17
- Max: 120
18
-
19
- Metrics/MethodLength:
20
- Max: 15
21
-
22
- Style/Documentation:
23
- Enabled: false
24
-
25
- Style/EmptyMethod:
26
- EnforcedStyle: expanded
27
-
28
- Style/IfUnlessModifier:
29
- Enabled: false
1
+ AllCops:
2
+ Include:
3
+ - "**/Rakefile"
4
+ - "lib/**/*.rb"
5
+ Exclude:
6
+ - "Gemfile"
7
+ - "bin/**/*"
8
+ TargetRubyVersion: 3.0
9
+
10
+ Layout/EmptyLinesAroundClassBody:
11
+ Enabled: false
12
+
13
+ Layout/EndOfLine:
14
+ Enabled: false
15
+
16
+ Metrics/LineLength:
17
+ Max: 120
18
+
19
+ Metrics/MethodLength:
20
+ Max: 15
21
+
22
+ Style/Documentation:
23
+ Enabled: false
24
+
25
+ Style/EmptyMethod:
26
+ EnforcedStyle: expanded
27
+
28
+ Style/IfUnlessModifier:
29
+ Enabled: false
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