govuk_content_models 12.1.0 → 12.2.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.
- data/CHANGELOG.md +4 -0
- data/app/models/artefact.rb +1 -0
- data/app/models/manual_change_history.rb +18 -0
- data/app/validators/slug_validator.rb +45 -2
- data/lib/govuk_content_models/version.rb +1 -1
- data/test/models/manual_change_history_test.rb +10 -0
- data/test/validators/slug_validator_test.rb +32 -0
- metadata +7 -4
data/CHANGELOG.md
CHANGED
data/app/models/artefact.rb
CHANGED
|
@@ -83,6 +83,7 @@ class Artefact
|
|
|
83
83
|
"custom-application" => ["custom-application"], # In this case the owning_app is overriden. eg calendars, licencefinder
|
|
84
84
|
"travel-advice-publisher" => ["travel-advice"],
|
|
85
85
|
"specialist-publisher" => ["manual",
|
|
86
|
+
"manual-change-history",
|
|
86
87
|
"manual-section",
|
|
87
88
|
"specialist-document"],
|
|
88
89
|
"finder-api" => ["finder"],
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
require "prerendered_entity"
|
|
2
|
+
|
|
3
|
+
class ManualChangeHistory
|
|
4
|
+
include Mongoid::Document
|
|
5
|
+
include Mongoid::Timestamps
|
|
6
|
+
extend PrerenderedEntity
|
|
7
|
+
|
|
8
|
+
field :updates, type: Array
|
|
9
|
+
field :slug, type: String
|
|
10
|
+
field :manual_slug, type: String
|
|
11
|
+
|
|
12
|
+
index "slug", unique: true
|
|
13
|
+
|
|
14
|
+
validates :slug, uniqueness: true
|
|
15
|
+
validates_with SafeHtml
|
|
16
|
+
|
|
17
|
+
GOVSPEAK_FIELDS = []
|
|
18
|
+
end
|
|
@@ -7,6 +7,7 @@ class SlugValidator < ActiveModel::EachValidator
|
|
|
7
7
|
HelpPageValidator,
|
|
8
8
|
GovernmentPageValidator,
|
|
9
9
|
ManualPageValidator,
|
|
10
|
+
ManualChangeHistoryValidator,
|
|
10
11
|
SpecialistDocumentPageValidator,
|
|
11
12
|
BrowsePageValidator,
|
|
12
13
|
DefaultValidator
|
|
@@ -18,7 +19,11 @@ class SlugValidator < ActiveModel::EachValidator
|
|
|
18
19
|
protected
|
|
19
20
|
class InstanceValidator < Struct.new(:record, :attribute, :value)
|
|
20
21
|
def starts_with?(expected_prefix)
|
|
21
|
-
value.to_s
|
|
22
|
+
value.to_s.start_with?(expected_prefix)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def ends_with?(expected_suffix)
|
|
26
|
+
value.to_s.end_with?(expected_suffix)
|
|
22
27
|
end
|
|
23
28
|
|
|
24
29
|
def of_kind?(expected_kind)
|
|
@@ -121,7 +126,45 @@ protected
|
|
|
121
126
|
|
|
122
127
|
def validate_guidance_prefix!
|
|
123
128
|
unless starts_with?('guidance/')
|
|
124
|
-
record.errors[attribute] << '
|
|
129
|
+
record.errors[attribute] << 'must have a guidance/ prefix'
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def validate_parts_as_slugs!
|
|
134
|
+
unless url_parts.all? { |url_part| valid_slug?(url_part) }
|
|
135
|
+
record.errors[attribute] << 'must be usable in a URL'
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
class ManualChangeHistoryValidator < InstanceValidator
|
|
141
|
+
def applicable?
|
|
142
|
+
of_kind?('manual-change-history')
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def validate!
|
|
146
|
+
validate_number_of_parts!
|
|
147
|
+
validate_guidance_prefix!
|
|
148
|
+
validate_updates_suffix!
|
|
149
|
+
validate_parts_as_slugs!
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
private
|
|
153
|
+
def validate_number_of_parts!
|
|
154
|
+
unless url_parts.size == 3
|
|
155
|
+
record.errors[attribute] << 'must contain three path parts'
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
def validate_guidance_prefix!
|
|
160
|
+
unless starts_with?('guidance/')
|
|
161
|
+
record.errors[attribute] << 'must have a guidance/ prefix'
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def validate_updates_suffix!
|
|
166
|
+
unless ends_with?('/updates')
|
|
167
|
+
record.errors[attribute] << 'must have a /updates suffix'
|
|
125
168
|
end
|
|
126
169
|
end
|
|
127
170
|
|
|
@@ -104,6 +104,38 @@ class SlugTest < ActiveSupport::TestCase
|
|
|
104
104
|
end
|
|
105
105
|
end
|
|
106
106
|
|
|
107
|
+
context "Manual change history" do
|
|
108
|
+
should "allow slugs of the form guidance/manual-slug/updates" do
|
|
109
|
+
assert document_with_slug("guidance/a-manual/updates",
|
|
110
|
+
kind: "manual-change-history").valid?
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
should "refuse slugs that don't start with guidance/" do
|
|
114
|
+
refute document_with_slug("manuals/a-manual/updates",
|
|
115
|
+
kind: "manual-change-history").valid?
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
should "refuse slugs that don't end with /updates" do
|
|
119
|
+
refute document_with_slug("guidance/a-manual/change-history",
|
|
120
|
+
kind: "manual-change-history").valid?
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
should "refuse slugs that don't have a manual-slug" do
|
|
124
|
+
refute document_with_slug("guidance/change-history",
|
|
125
|
+
kind: "manual-change-history").valid?
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
should "refuse slugs that have extra sections" do
|
|
129
|
+
refute document_with_slug("guidance/a-manual/a-section/updates",
|
|
130
|
+
kind: "manual-change-history").valid?
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
should "not allow invalid path segments" do
|
|
134
|
+
refute document_with_slug("guidance/bad.manual.slug/updates",
|
|
135
|
+
kind: "manual-change-history").valid?
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
107
139
|
context "Manual pages" do
|
|
108
140
|
should "allow slugs starting guidance/" do
|
|
109
141
|
refute document_with_slug("manuals/a-manual", kind: "manual").valid?
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: govuk_content_models
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 12.
|
|
4
|
+
version: 12.2.0
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2014-06-
|
|
12
|
+
date: 2014-06-16 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: bson_ext
|
|
@@ -370,6 +370,7 @@ files:
|
|
|
370
370
|
- app/models/local_interaction.rb
|
|
371
371
|
- app/models/local_service.rb
|
|
372
372
|
- app/models/local_transaction_edition.rb
|
|
373
|
+
- app/models/manual_change_history.rb
|
|
373
374
|
- app/models/overview_dashboard.rb
|
|
374
375
|
- app/models/part.rb
|
|
375
376
|
- app/models/parted.rb
|
|
@@ -429,6 +430,7 @@ files:
|
|
|
429
430
|
- test/models/local_authority_test.rb
|
|
430
431
|
- test/models/local_service_test.rb
|
|
431
432
|
- test/models/local_transaction_edition_test.rb
|
|
433
|
+
- test/models/manual_change_history_test.rb
|
|
432
434
|
- test/models/overview_dashboard_test.rb
|
|
433
435
|
- test/models/prerendered_entity_tests.rb
|
|
434
436
|
- test/models/rendered_manual_test.rb
|
|
@@ -466,7 +468,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
466
468
|
version: '0'
|
|
467
469
|
segments:
|
|
468
470
|
- 0
|
|
469
|
-
hash:
|
|
471
|
+
hash: -3252707521846681022
|
|
470
472
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
471
473
|
none: false
|
|
472
474
|
requirements:
|
|
@@ -475,7 +477,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
475
477
|
version: '0'
|
|
476
478
|
segments:
|
|
477
479
|
- 0
|
|
478
|
-
hash:
|
|
480
|
+
hash: -3252707521846681022
|
|
479
481
|
requirements: []
|
|
480
482
|
rubyforge_project:
|
|
481
483
|
rubygems_version: 1.8.23
|
|
@@ -508,6 +510,7 @@ test_files:
|
|
|
508
510
|
- test/models/local_authority_test.rb
|
|
509
511
|
- test/models/local_service_test.rb
|
|
510
512
|
- test/models/local_transaction_edition_test.rb
|
|
513
|
+
- test/models/manual_change_history_test.rb
|
|
511
514
|
- test/models/overview_dashboard_test.rb
|
|
512
515
|
- test/models/prerendered_entity_tests.rb
|
|
513
516
|
- test/models/rendered_manual_test.rb
|