govuk_schemas 4.4.1 → 4.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +0 -11
- data/.github/workflows/ci.yml +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +2 -2
- data/Rakefile +3 -1
- data/govuk_schemas.gemspec +3 -2
- data/lib/govuk_schemas/document_types.rb +1 -1
- data/lib/govuk_schemas/example.rb +2 -2
- data/lib/govuk_schemas/random_content_generator.rb +5 -4
- data/lib/govuk_schemas/random_example.rb +3 -3
- data/lib/govuk_schemas/random_schema_generator.rb +2 -5
- data/lib/govuk_schemas/rspec_matchers.rb +1 -5
- data/lib/govuk_schemas/schema.rb +3 -3
- data/lib/govuk_schemas/validator.rb +1 -1
- data/lib/govuk_schemas/version.rb +1 -1
- data/lib/govuk_schemas.rb +7 -2
- metadata +27 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b7843ee3adf4523d3d0a0a8c722f5ae3175edaf3a4d1ee248a4fdafee9b596cf
|
4
|
+
data.tar.gz: b04e4942d146c69782e5b0e70f2d441e0f4aa6822afa054ad78d77cd40aaab7f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 14d5fb78761952ed355573bfd62c5cef13d2b723011a7bad969c5cf43926231e8a02af778aadcc514e73af3137703fa950b11264b90ac5111192c252f567f1f6
|
7
|
+
data.tar.gz: 6e13df6f72f725fc504fb4151ca849dd2faeeae26c7d0c3f16f923ce3eec218293d3f66642d9237634c9666c481731f018b47df739ec8719929c82c1429b47dc
|
data/.github/dependabot.yml
CHANGED
@@ -4,14 +4,3 @@ updates:
|
|
4
4
|
directory: /
|
5
5
|
schedule:
|
6
6
|
interval: daily
|
7
|
-
allow:
|
8
|
-
# Internal gems
|
9
|
-
- dependency-name: "govuk*"
|
10
|
-
dependency-type: direct
|
11
|
-
- dependency-name: rubocop-govuk
|
12
|
-
dependency-type: direct
|
13
|
-
# Framework gems
|
14
|
-
- dependency-name: rake
|
15
|
-
dependency-type: direct
|
16
|
-
- dependency-name: rspec
|
17
|
-
dependency-type: direct
|
data/.github/workflows/ci.yml
CHANGED
@@ -11,19 +11,19 @@ jobs:
|
|
11
11
|
runs-on: ubuntu-latest
|
12
12
|
steps:
|
13
13
|
- uses: actions/checkout@v2
|
14
|
-
- name: Clone
|
14
|
+
- name: Clone content-schemas
|
15
15
|
uses: actions/checkout@v2
|
16
16
|
with:
|
17
|
-
repository: alphagov/
|
17
|
+
repository: alphagov/publishing-api
|
18
18
|
ref: deployed-to-production
|
19
|
-
path: tmp/
|
19
|
+
path: tmp/publishing-api
|
20
20
|
- uses: ruby/setup-ruby@v1
|
21
21
|
with:
|
22
22
|
ruby-version: ${{ matrix.ruby }}
|
23
23
|
bundler-cache: true
|
24
24
|
- run: bundle exec rake
|
25
25
|
env:
|
26
|
-
GOVUK_CONTENT_SCHEMAS_PATH: tmp/
|
26
|
+
GOVUK_CONTENT_SCHEMAS_PATH: tmp/publishing-api/content_schemas
|
27
27
|
|
28
28
|
# Branch protection rules cannot directly depend on status checks from matrix jobs.
|
29
29
|
# So instead we define `test` as a dummy job which only runs after the preceding `test_matrix` checks have passed.
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
# 4.5.0
|
2
|
+
|
3
|
+
General support for content schemas in publishing api:
|
4
|
+
* Update default content schemas url to point to publishing api rather than govuk-content-schemas. This is because we are merging schemas into publishing api.
|
5
|
+
* Update path of allowed_document_types.yml to reflect new location in publishing api, allowing us to remove a symlink.
|
6
|
+
* Introduce a setter method for manually configuring the path to schemas, outside of an env variable
|
7
|
+
|
1
8
|
# 4.4.1
|
2
9
|
|
3
10
|
* Fix `Validator` module to handle JSON or other object types being passed as the payload ([#68](https://github.com/alphagov/govuk_schemas/pull/68))
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# GOV.UK Schemas
|
2
2
|
|
3
|
-
Gem to work with the [
|
3
|
+
Gem to work with the [schemas in publishing api](https://github.com/alphagov/publishing-api/tree/main/content_schemas).
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -16,7 +16,7 @@ gem "govuk_schemas", "~> VERSION"
|
|
16
16
|
|
17
17
|
## Running the test suite
|
18
18
|
|
19
|
-
Make sure you have `
|
19
|
+
Make sure you have `publishing-api` cloned in a sibling directory:
|
20
20
|
|
21
21
|
```
|
22
22
|
bundle exec rake
|
data/Rakefile
CHANGED
data/govuk_schemas.gemspec
CHANGED
@@ -18,9 +18,10 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
19
|
spec.require_paths = %w[lib]
|
20
20
|
|
21
|
-
# This should be kept in sync with the json-schema version of
|
22
|
-
spec.add_dependency "json-schema", "
|
21
|
+
# This should be kept in sync with the json-schema version of publishing-api.
|
22
|
+
spec.add_dependency "json-schema", ">= 2.8", "< 3.1"
|
23
23
|
|
24
|
+
spec.add_development_dependency "climate_control"
|
24
25
|
spec.add_development_dependency "pry-byebug"
|
25
26
|
spec.add_development_dependency "rake", "~> 13.0"
|
26
27
|
spec.add_development_dependency "rspec", "~> 3.4"
|
@@ -3,7 +3,7 @@ module GovukSchemas
|
|
3
3
|
# Return all of the document types on GOV.UK
|
4
4
|
def self.valid_document_types
|
5
5
|
@valid_document_types ||= begin
|
6
|
-
filename = "#{GovukSchemas
|
6
|
+
filename = "#{GovukSchemas.content_schema_dir}/allowed_document_types.yml"
|
7
7
|
YAML.load_file(filename)
|
8
8
|
end
|
9
9
|
end
|
@@ -27,11 +27,11 @@ module GovukSchemas
|
|
27
27
|
# @param schema_name [String] like "detailed_guide", "policy" or "publication"
|
28
28
|
# @return [String] the path to use for examples
|
29
29
|
def self.examples_path(schema_name)
|
30
|
-
examples_dir = "#{GovukSchemas
|
30
|
+
examples_dir = "#{GovukSchemas.content_schema_dir}/examples"
|
31
31
|
if Dir.exist?(examples_dir)
|
32
32
|
"#{examples_dir}/#{schema_name}/frontend"
|
33
33
|
else
|
34
|
-
"#{GovukSchemas
|
34
|
+
"#{GovukSchemas.content_schema_dir}/formats/#{schema_name}/frontend/examples"
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
@@ -8,9 +8,10 @@ module GovukSchemas
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def string_for_type(type)
|
11
|
-
|
11
|
+
case type
|
12
|
+
when "date-time"
|
12
13
|
time
|
13
|
-
|
14
|
+
when "uri"
|
14
15
|
uri
|
15
16
|
else
|
16
17
|
raise "Unknown attribute type `#{type}`"
|
@@ -28,7 +29,7 @@ module GovukSchemas
|
|
28
29
|
end
|
29
30
|
|
30
31
|
def base_path
|
31
|
-
"
|
32
|
+
"/#{@random.rand(1..5).times.map { uuid }.join('/')}"
|
32
33
|
end
|
33
34
|
|
34
35
|
def govuk_subdomain_url
|
@@ -101,7 +102,7 @@ module GovukSchemas
|
|
101
102
|
raise <<-DOC
|
102
103
|
Don't know how to generate random string for pattern #{pattern.inspect}
|
103
104
|
|
104
|
-
This propably means you've introduced a new regex in
|
105
|
+
This propably means you've introduced a new regex in publishing api.
|
105
106
|
Because it's very hard to generate a valid string from a regex alone,
|
106
107
|
we have to specify a method to generate random data for each regex in
|
107
108
|
the schemas.
|
@@ -9,7 +9,7 @@ module GovukSchemas
|
|
9
9
|
#
|
10
10
|
# - The gem doesn't support `patternProperties` yet. On GOV.UK we [use this in
|
11
11
|
# the expanded frontend
|
12
|
-
# links](https://github.com/alphagov/
|
12
|
+
# links](https://github.com/alphagov/publishing-api/blob/a8039d430e44c86c3f54a69569f07ad48a4fc912/content_schemas/formats/shared/definitions/frontend_links.jsonnet#L118-L121).
|
13
13
|
# - It's complicated to generate random data for `oneOf` properties. According
|
14
14
|
# to the JSON Schema spec a `oneOf` schema is only valid if the data is valid
|
15
15
|
# against *only one* of the clauses. To do this properly, we'd have to make
|
@@ -90,7 +90,7 @@ module GovukSchemas
|
|
90
90
|
payload = yield(payload)
|
91
91
|
# check the payload again after customisation
|
92
92
|
errors = validation_errors_for(payload)
|
93
|
-
raise InvalidContentGenerated, error_message(payload, errors, true) if errors.any?
|
93
|
+
raise InvalidContentGenerated, error_message(payload, errors, customised: true) if errors.any?
|
94
94
|
end
|
95
95
|
|
96
96
|
payload
|
@@ -102,7 +102,7 @@ module GovukSchemas
|
|
102
102
|
JSON::Validator.fully_validate(@schema, item, errors_as_objects: true)
|
103
103
|
end
|
104
104
|
|
105
|
-
def error_message(item, errors, customised
|
105
|
+
def error_message(item, errors, customised: false)
|
106
106
|
details = <<~ERR
|
107
107
|
Generated payload:
|
108
108
|
--------------------------
|
@@ -103,11 +103,7 @@ module GovukSchemas
|
|
103
103
|
next unless should_generate_value
|
104
104
|
|
105
105
|
one_of_properties = (one_of_sample["properties"] || {})[attribute_name]
|
106
|
-
document[attribute_name] =
|
107
|
-
generate_value(one_of_properties)
|
108
|
-
else
|
109
|
-
generate_value(attribute_properties)
|
110
|
-
end
|
106
|
+
document[attribute_name] = generate_value(one_of_properties || attribute_properties)
|
111
107
|
end
|
112
108
|
|
113
109
|
document
|
@@ -129,6 +125,7 @@ module GovukSchemas
|
|
129
125
|
if unique && items.include?(new_value)
|
130
126
|
attempts += 1
|
131
127
|
raise "Failed to create a unique array item after #{max_attempts} attempts" if attempts >= max_attempts
|
128
|
+
|
132
129
|
next
|
133
130
|
end
|
134
131
|
|
@@ -2,7 +2,6 @@ require "govuk_schemas/validator"
|
|
2
2
|
|
3
3
|
module GovukSchemas
|
4
4
|
module RSpecMatchers
|
5
|
-
|
6
5
|
%w[links frontend publisher notification].each do |schema_type|
|
7
6
|
RSpec::Matchers.define "be_valid_against_#{schema_type}_schema".to_sym do |schema_name|
|
8
7
|
match do |item|
|
@@ -10,10 +9,7 @@ module GovukSchemas
|
|
10
9
|
@validator.valid?
|
11
10
|
end
|
12
11
|
|
13
|
-
|
14
|
-
failure_message do |actual|
|
15
|
-
@validator.error_message
|
16
|
-
end
|
12
|
+
failure_message { @validator.error_message }
|
17
13
|
end
|
18
14
|
end
|
19
15
|
end
|
data/lib/govuk_schemas/schema.rb
CHANGED
@@ -11,7 +11,7 @@ module GovukSchemas
|
|
11
11
|
# GovukSchemas::Schema.find(notification_schema: "detailed_guide")
|
12
12
|
# @return [Hash] the JSON schema as a hash
|
13
13
|
def self.find(schema)
|
14
|
-
file_path = "#{GovukSchemas
|
14
|
+
file_path = "#{GovukSchemas.content_schema_dir}/dist/formats/#{location_for_schema_name(schema)}"
|
15
15
|
JSON.parse(File.read(file_path))
|
16
16
|
end
|
17
17
|
|
@@ -21,7 +21,7 @@ module GovukSchemas
|
|
21
21
|
# @return [Array<Hash>] List of JSON schemas as hashes
|
22
22
|
def self.all(schema_type: "*")
|
23
23
|
schema_type = "publisher_v2" if schema_type == "publisher"
|
24
|
-
Dir.glob("#{GovukSchemas
|
24
|
+
Dir.glob("#{GovukSchemas.content_schema_dir}/dist/formats/*/#{schema_type}/*.json").each_with_object({}) do |file_path, hash|
|
25
25
|
hash[file_path] = JSON.parse(File.read(file_path))
|
26
26
|
end
|
27
27
|
end
|
@@ -38,7 +38,7 @@ module GovukSchemas
|
|
38
38
|
#
|
39
39
|
# @return [Array] all the schema names
|
40
40
|
def self.schema_names
|
41
|
-
Dir.glob("#{GovukSchemas
|
41
|
+
Dir.glob("#{GovukSchemas.content_schema_dir}/dist/formats/*").map do |directory|
|
42
42
|
File.basename(directory)
|
43
43
|
end
|
44
44
|
end
|
@@ -29,7 +29,7 @@ module GovukSchemas
|
|
29
29
|
def errors
|
30
30
|
schema = Schema.find("#{type}_schema": schema_name)
|
31
31
|
validator = JSON::Validator.fully_validate(schema, payload)
|
32
|
-
validator.map { |message| "-
|
32
|
+
validator.map { |message| "- #{humanized_error(message)}" }.join("\n")
|
33
33
|
end
|
34
34
|
|
35
35
|
def formatted_payload
|
data/lib/govuk_schemas.rb
CHANGED
@@ -5,8 +5,13 @@ require "govuk_schemas/document_types"
|
|
5
5
|
require "govuk_schemas/example"
|
6
6
|
|
7
7
|
module GovukSchemas
|
8
|
-
|
9
|
-
|
8
|
+
def self.content_schema_dir=(path_to_schemas)
|
9
|
+
@content_schema_dir = path_to_schemas
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.content_schema_dir
|
13
|
+
@content_schema_dir ||= ENV.fetch("GOVUK_CONTENT_SCHEMAS_PATH", "../publishing-api/content_schemas")
|
14
|
+
end
|
10
15
|
|
11
16
|
# @private
|
12
17
|
class InvalidContentGenerated < RuntimeError
|
metadata
CHANGED
@@ -1,29 +1,49 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: govuk_schemas
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GOV.UK Dev
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-11-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json-schema
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.8'
|
20
|
+
- - "<"
|
18
21
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
22
|
+
version: '3.1'
|
20
23
|
type: :runtime
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
|
-
- - "
|
27
|
+
- - ">="
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version: 2.8
|
29
|
+
version: '2.8'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '3.1'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: climate_control
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
type: :development
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
27
47
|
- !ruby/object:Gem::Dependency
|
28
48
|
name: pry-byebug
|
29
49
|
requirement: !ruby/object:Gem::Requirement
|
@@ -145,7 +165,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
165
|
- !ruby/object:Gem::Version
|
146
166
|
version: '0'
|
147
167
|
requirements: []
|
148
|
-
rubygems_version: 3.3.
|
168
|
+
rubygems_version: 3.3.26
|
149
169
|
signing_key:
|
150
170
|
specification_version: 4
|
151
171
|
summary: Gem to generate test data based on GOV.UK content schemas
|