media_types 2.2.0 → 2.3.0

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