govuk_navigation_helpers 0.0.1 → 1.0.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -0
- data/LICENCE.txt +20 -0
- data/README.md +40 -3
- data/Rakefile +10 -9
- data/govuk_navigation_helpers.gemspec +4 -0
- data/jenkins.sh +15 -0
- data/lib/govuk_navigation_helpers.rb +17 -1
- data/lib/govuk_navigation_helpers/breadcrumbs.rb +30 -0
- data/lib/govuk_navigation_helpers/version.rb +1 -1
- data/spec/breadcrumbs_spec.rb +103 -0
- data/spec/spec_helper.rb +3 -0
- metadata +63 -3
- data/LICENSE.txt +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f4176c900f1ecc9f326253506091426c84a04185
|
4
|
+
data.tar.gz: 1382b484bfbdf27857da344c9eab90ea44f6cecb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8382fe5f7de451bdba0ca038f1e0a481ede4a19d9e05231178e5c7e2fa166783e11896755ae7c999330760f73c3b5ac0bf6a18b56391f054803d88c467f103a7
|
7
|
+
data.tar.gz: f8862c700764b6e0fea0cc61a6307b5f2661d255ef99ec350620f4233913b0dde4d83d2f996c53ee814c85825d300fb088bc4c95aa8ad365f78766792098d078
|
data/CHANGELOG.md
ADDED
data/LICENCE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
Copyright (C) 2016 Crown copyright (Government Digital Service)
|
3
|
+
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
5
|
+
this software and associated documentation files (the "Software"), to deal in
|
6
|
+
the Software without restriction, including without limitation the rights to
|
7
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
8
|
+
of the Software, and to permit persons to whom the Software is furnished to do
|
9
|
+
so, subject to the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be included in all
|
12
|
+
copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
20
|
+
SOFTWARE.
|
data/README.md
CHANGED
@@ -2,7 +2,15 @@
|
|
2
2
|
|
3
3
|
This is a gem to share code between GOV.UK frontends.
|
4
4
|
|
5
|
-
##
|
5
|
+
## Nomenclature
|
6
|
+
|
7
|
+
- **content item**: An object returned by the content store
|
8
|
+
|
9
|
+
## Technical documentation
|
10
|
+
|
11
|
+
These helpers format data from the [content store](https://github.com/alphagov/content-store) for use with [GOV.UK Components](http://govuk-component-guide.herokuapp.com/about).
|
12
|
+
|
13
|
+
### Installation
|
6
14
|
|
7
15
|
Add this line to your application's Gemfile:
|
8
16
|
|
@@ -14,6 +22,35 @@ And then execute:
|
|
14
22
|
|
15
23
|
$ bundle
|
16
24
|
|
17
|
-
|
25
|
+
### Usage
|
26
|
+
|
27
|
+
Get the JSON representation of a page and initialise the helper:
|
28
|
+
|
29
|
+
```ruby
|
30
|
+
def some_controller_method
|
31
|
+
content_item = Services.content_store.content_item("/register-to-vote")
|
32
|
+
@navigation = GovukNavigationHelpers::NavigationHelper.new(content_item)
|
33
|
+
end
|
34
|
+
```
|
35
|
+
|
36
|
+
Render the component:
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
<%= render partial: 'govuk_component/breadcrumbs', locals: { breadcrumbs: @navigation.breadcrumbs }
|
40
|
+
```
|
41
|
+
|
42
|
+
### Running the test suite
|
43
|
+
|
44
|
+
`bundle exec rake`
|
45
|
+
|
46
|
+
### Documentation
|
47
|
+
|
48
|
+
See [RubyDoc](http://www.rubydoc.info/gems/govuk_navigation_helpers) for some limited documentation.
|
49
|
+
|
50
|
+
To run a Yard server locally to preview documentation, run:
|
51
|
+
|
52
|
+
$ bundle exec yard server --reload
|
53
|
+
|
54
|
+
## Licence
|
18
55
|
|
19
|
-
|
56
|
+
[MIT License](LICENCE.txt)
|
data/Rakefile
CHANGED
@@ -1,17 +1,18 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
|
+
require "rspec/core/rake_task"
|
3
|
+
require "gem_publisher"
|
2
4
|
|
3
|
-
|
4
|
-
require 'rspec/core/rake_task'
|
5
|
-
RSpec::Core::RakeTask.new(:spec)
|
6
|
-
rescue LoadError
|
7
|
-
end
|
8
|
-
|
9
|
-
task :default => [:spec]
|
5
|
+
RSpec::Core::RakeTask.new(:spec)
|
10
6
|
|
11
|
-
|
7
|
+
task default: [:spec, :lint]
|
12
8
|
|
13
9
|
desc "Publish gem to RubyGems"
|
14
|
-
task :publish_gem do |
|
10
|
+
task :publish_gem do |_t|
|
15
11
|
published_gem = GemPublisher.publish_if_updated("govuk_navigation_helpers.gemspec", :rubygems)
|
16
12
|
puts "Published #{published_gem}" if published_gem
|
17
13
|
end
|
14
|
+
|
15
|
+
desc "Run govuk-lint with similar params to CI"
|
16
|
+
task "lint" do
|
17
|
+
sh "bundle exec govuk-lint-ruby --format clang"
|
18
|
+
end
|
@@ -22,6 +22,10 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
23
|
spec.add_development_dependency "rspec", "~> 3.5"
|
24
24
|
spec.add_development_dependency "gem_publisher", "~> 1.5.0"
|
25
|
+
spec.add_development_dependency "govuk-lint", "~> 1.2.1"
|
26
|
+
spec.add_development_dependency "pry-byebug", "~> 3.4"
|
27
|
+
spec.add_development_dependency "yard", "~> 0.8"
|
28
|
+
spec.add_development_dependency "govuk_schemas", "~> 0.1"
|
25
29
|
|
26
30
|
spec.required_ruby_version = ">= 2.3.1"
|
27
31
|
end
|
data/jenkins.sh
CHANGED
@@ -36,6 +36,21 @@ git clean -fdx
|
|
36
36
|
# is master.
|
37
37
|
git merge --no-commit origin/master || git merge --abort
|
38
38
|
|
39
|
+
echo "Running ruby linter"
|
40
|
+
bundle install --path "${HOME}/bundles/${JOB_NAME}"
|
41
|
+
bundle exec govuk-lint-ruby \
|
42
|
+
--format html --out rubocop-${GIT_COMMIT}.html \
|
43
|
+
--format clang
|
44
|
+
|
45
|
+
# Clone govuk-content-schemas depedency for contract tests
|
46
|
+
rm -rf /tmp/govuk-content-schemas
|
47
|
+
git clone git@github.com:alphagov/govuk-content-schemas.git /tmp/govuk-content-schemas
|
48
|
+
(
|
49
|
+
cd /tmp/govuk-content-schemas
|
50
|
+
git checkout ${SCHEMA_GIT_COMMIT:-"master"}
|
51
|
+
)
|
52
|
+
export GOVUK_CONTENT_SCHEMAS_PATH=/tmp/govuk-content-schemas
|
53
|
+
|
39
54
|
# Bundle and run tests against multiple ruby versions
|
40
55
|
for version in 2.3.1; do
|
41
56
|
rm -f Gemfile.lock
|
@@ -1,5 +1,21 @@
|
|
1
1
|
require "govuk_navigation_helpers/version"
|
2
|
+
require "govuk_navigation_helpers/breadcrumbs"
|
2
3
|
|
3
4
|
module GovukNavigationHelpers
|
4
|
-
|
5
|
+
class NavigationHelper
|
6
|
+
def initialize(content_item)
|
7
|
+
@content_item = content_item
|
8
|
+
end
|
9
|
+
|
10
|
+
# Generate a breacrumb trail
|
11
|
+
#
|
12
|
+
# @return [Array<Hash>] Each item is a hash containing `:title` and `:url` for one link in the breadcrumb
|
13
|
+
def breadcrumbs
|
14
|
+
Breadcrumbs.new(content_item).breadcrumbs
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
attr_reader :content_item
|
20
|
+
end
|
5
21
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module GovukNavigationHelpers
|
2
|
+
class Breadcrumbs
|
3
|
+
def initialize(content_item)
|
4
|
+
@content_item = content_item
|
5
|
+
end
|
6
|
+
|
7
|
+
def breadcrumbs
|
8
|
+
direct_parent = content_item.dig("links", "parent", 0)
|
9
|
+
|
10
|
+
ordered_parents = []
|
11
|
+
|
12
|
+
while direct_parent
|
13
|
+
ordered_parents << {
|
14
|
+
title: direct_parent["title"],
|
15
|
+
url: direct_parent["base_path"],
|
16
|
+
}
|
17
|
+
|
18
|
+
direct_parent = direct_parent.dig("links", "parent", 0)
|
19
|
+
end
|
20
|
+
|
21
|
+
ordered_parents << { title: "Home", url: "/" }
|
22
|
+
|
23
|
+
ordered_parents.reverse
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
attr_reader :content_item
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'govuk_navigation_helpers'
|
3
|
+
require 'govuk_schemas'
|
4
|
+
|
5
|
+
RSpec.describe GovukNavigationHelpers::Breadcrumbs do
|
6
|
+
describe "#breadcrumbs" do
|
7
|
+
it "can handle any valid content item" do
|
8
|
+
generator = GovukSchemas::RandomExample.for_schema("placeholder", schema_type: "frontend")
|
9
|
+
|
10
|
+
50.times do
|
11
|
+
expect {
|
12
|
+
described_class.new(generator.payload).breadcrumbs
|
13
|
+
}.to_not raise_error
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
it "returns the root when parent is not specified" do
|
18
|
+
content_item = { "links" => {} }
|
19
|
+
breadcrumbs = breadcrumbs_for(content_item)
|
20
|
+
|
21
|
+
expect(breadcrumbs).to eq(
|
22
|
+
[
|
23
|
+
{ title: "Home", url: "/" },
|
24
|
+
]
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "returns the root when parent is empty" do
|
29
|
+
content_item = content_item_with_parents([])
|
30
|
+
breadcrumbs = breadcrumbs_for(content_item)
|
31
|
+
|
32
|
+
expect(breadcrumbs).to eq(
|
33
|
+
[
|
34
|
+
{ title: "Home", url: "/" },
|
35
|
+
]
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "places parent under the root when there is a parent" do
|
40
|
+
parent = {
|
41
|
+
"content_id" => "30c1b93d-2553-47c9-bc3c-fc5b513ecc32",
|
42
|
+
"locale" => "en",
|
43
|
+
"title" => "A-parent",
|
44
|
+
"base_path" => "/a-parent",
|
45
|
+
}
|
46
|
+
|
47
|
+
content_item = content_item_with_parents([parent])
|
48
|
+
breadcrumbs = breadcrumbs_for(content_item)
|
49
|
+
|
50
|
+
expect(breadcrumbs).to eq(
|
51
|
+
[
|
52
|
+
{ title: "Home", url: "/" },
|
53
|
+
{ title: "A-parent", url: "/a-parent" }
|
54
|
+
]
|
55
|
+
)
|
56
|
+
end
|
57
|
+
|
58
|
+
it "includes grandparent when available" do
|
59
|
+
grandparent = {
|
60
|
+
"title" => "Another-parent",
|
61
|
+
"base_path" => "/another-parent",
|
62
|
+
"content_id" => "30c1b93d-2553-47c9-bc3c-fc5b513ecc32",
|
63
|
+
"locale" => "en",
|
64
|
+
}
|
65
|
+
|
66
|
+
parent = {
|
67
|
+
"content_id" => "30c1b93d-2553-47c9-bc3c-fc5b513ecc32",
|
68
|
+
"locale" => "en",
|
69
|
+
"title" => "A-parent",
|
70
|
+
"base_path" => "/a-parent",
|
71
|
+
"links" => {
|
72
|
+
"parent" => [grandparent]
|
73
|
+
}
|
74
|
+
}
|
75
|
+
|
76
|
+
content_item = content_item_with_parents([parent])
|
77
|
+
breadcrumbs = breadcrumbs_for(content_item)
|
78
|
+
|
79
|
+
expect(breadcrumbs).to eq(
|
80
|
+
[
|
81
|
+
{ title: "Home", url: "/" },
|
82
|
+
{ title: "Another-parent", url: "/another-parent" },
|
83
|
+
{ title: "A-parent", url: "/a-parent" }
|
84
|
+
]
|
85
|
+
)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def content_item_with_parents(parents)
|
90
|
+
{
|
91
|
+
"links" => { "parent" => parents }
|
92
|
+
}
|
93
|
+
end
|
94
|
+
|
95
|
+
def breadcrumbs_for(content_item)
|
96
|
+
generator = GovukSchemas::RandomExample.for_schema("placeholder", schema_type: "frontend")
|
97
|
+
fully_valid_content_item = generator.merge_and_validate(content_item)
|
98
|
+
|
99
|
+
# Use the main class instead of GovukNavigationHelpers::Breadcrumbs, so that
|
100
|
+
# we're testing both at the same time.
|
101
|
+
GovukNavigationHelpers::NavigationHelper.new(fully_valid_content_item).breadcrumbs
|
102
|
+
end
|
103
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -16,6 +16,9 @@
|
|
16
16
|
# users commonly want.
|
17
17
|
#
|
18
18
|
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
19
|
+
|
20
|
+
require 'pry-byebug'
|
21
|
+
|
19
22
|
RSpec.configure do |config|
|
20
23
|
# rspec-expectations config goes here. You can use an alternate
|
21
24
|
# assertion/expectation library such as wrong or the stdlib/minitest
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: govuk_navigation_helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GOV.UK Dev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-09-
|
11
|
+
date: 2016-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,6 +66,62 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 1.5.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: govuk-lint
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.2.1
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.2.1
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pry-byebug
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.4'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3.4'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: yard
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.8'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.8'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: govuk_schemas
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0.1'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0.1'
|
69
125
|
description: Gem to transform items from the content-store into payloads for GOV.UK
|
70
126
|
components
|
71
127
|
email:
|
@@ -77,14 +133,17 @@ files:
|
|
77
133
|
- ".gitignore"
|
78
134
|
- ".rspec"
|
79
135
|
- ".ruby-version"
|
136
|
+
- CHANGELOG.md
|
80
137
|
- Gemfile
|
81
|
-
-
|
138
|
+
- LICENCE.txt
|
82
139
|
- README.md
|
83
140
|
- Rakefile
|
84
141
|
- govuk_navigation_helpers.gemspec
|
85
142
|
- jenkins.sh
|
86
143
|
- lib/govuk_navigation_helpers.rb
|
144
|
+
- lib/govuk_navigation_helpers/breadcrumbs.rb
|
87
145
|
- lib/govuk_navigation_helpers/version.rb
|
146
|
+
- spec/breadcrumbs_spec.rb
|
88
147
|
- spec/spec_helper.rb
|
89
148
|
homepage: https://github.com/alphagov/govuk_navigation_helpers
|
90
149
|
licenses:
|
@@ -111,4 +170,5 @@ signing_key:
|
|
111
170
|
specification_version: 4
|
112
171
|
summary: Gem to transform items from the content-store into payloads for GOV.UK components
|
113
172
|
test_files:
|
173
|
+
- spec/breadcrumbs_spec.rb
|
114
174
|
- spec/spec_helper.rb
|
data/LICENSE.txt
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
Copyright (c) 2016 Tijmen Brommet
|
2
|
-
|
3
|
-
MIT License
|
4
|
-
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
-
a copy of this software and associated documentation files (the
|
7
|
-
"Software"), to deal in the Software without restriction, including
|
8
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
-
permit persons to whom the Software is furnished to do so, subject to
|
11
|
-
the following conditions:
|
12
|
-
|
13
|
-
The above copyright notice and this permission notice shall be
|
14
|
-
included in all copies or substantial portions of the Software.
|
15
|
-
|
16
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
-
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|