slimmer 3.1.1 → 3.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.
@@ -18,6 +18,8 @@ module Slimmer
18
18
  SKIP_HEADER = "#{HEADER_PREFIX}-Skip"
19
19
  SEARCH_PATH_HEADER = "#{HEADER_PREFIX}-Search-Path"
20
20
  ARTEFACT_HEADER = "#{HEADER_PREFIX}-Artefact"
21
+ FORMAT_HEADER = "#{HEADER_PREFIX}-Format"
22
+ RESULT_COUNT_HEADER = "#{HEADER_PREFIX}-Result-Count"
21
23
 
22
24
  def set_slimmer_headers(hash)
23
25
  raise InvalidHeader if (hash.keys - SLIMMER_HEADER_MAPPING.keys).any?
@@ -28,7 +30,11 @@ module Slimmer
28
30
  end
29
31
 
30
32
  def set_slimmer_artefact(artefact_input)
31
- artefact = artefact_input.dup
33
+ if artefact_input.is_a?(Hash) or artefact_input.is_a?(OpenStruct)
34
+ artefact = artefact_input.dup
35
+ elsif artefact_input.respond_to?(:to_hash)
36
+ artefact = artefact_input.to_hash
37
+ end
32
38
  headers[ARTEFACT_HEADER] = artefact.to_json
33
39
  end
34
40
 
@@ -3,25 +3,24 @@ require "json"
3
3
  module Slimmer::Processors
4
4
  class GoogleAnalyticsConfigurator
5
5
  PAGE_LEVEL_EVENT = 3
6
- HEADER_MAPPING = {
7
- "Section" => "X-SLIMMER-SECTION",
8
- "Format" => "X-SLIMMER-FORMAT",
9
- "NeedID" => "X-SLIMMER-NEED-ID",
10
- "Proposition" => "X-SLIMMER-PROPOSITION",
11
- "ResultCount" => "X-SLIMMER-RESULT-COUNT"
12
- }
13
6
 
14
- def initialize(response)
7
+ def initialize(response, artefact)
15
8
  @headers = response.headers
9
+ @artefact = artefact
16
10
  end
17
11
 
18
12
  def filter(src, dest)
19
- custom_vars = HEADER_MAPPING.map.with_index(1) { |(name, key), slot|
20
- set_custom_var(slot, name, @headers[key])
21
- }.compact.join("\n");
13
+ custom_vars = []
14
+ if @artefact
15
+ custom_vars << set_custom_var(1, "Section", @artefact.primary_section["title"]) if @artefact.primary_section
16
+ custom_vars << set_custom_var(3, "NeedID", @artefact.need_id)
17
+ custom_vars << set_custom_var(4, "Proposition", (@artefact.business_proposition ? 'business' : 'citizen')) unless @artefact.business_proposition.nil?
18
+ end
19
+ custom_vars << set_custom_var(2, "Format", @headers[Slimmer::Headers::FORMAT_HEADER])
20
+ custom_vars << set_custom_var(5, "ResultCount", @headers[Slimmer::Headers::RESULT_COUNT_HEADER])
22
21
 
23
22
  if dest.at_css("#ga-params")
24
- dest.at_css("#ga-params").content += custom_vars
23
+ dest.at_css("#ga-params").content += custom_vars.compact.join("\n")
25
24
  end
26
25
  end
27
26
 
@@ -8,20 +8,26 @@ module Slimmer::Processors
8
8
  if @artefact and (list = dest.at_css('.header-context nav[role=navigation] ol'))
9
9
  if (section = @artefact.primary_section)
10
10
  append_tag(list, section["parent"]) if section["parent"]
11
- append_tag(list, section)
11
+ append_tag(list, section, :strong => true)
12
12
  end
13
13
  end
14
14
  end
15
15
 
16
16
  private
17
17
 
18
- def append_tag(list, tag)
18
+ def append_tag(list, tag, opts = {})
19
19
  link_node = Nokogiri::XML::Node.new('a', list)
20
20
  link_node['href'] = tag["content_with_tag"]["web_url"]
21
21
  link_node.content = tag["title"]
22
22
 
23
23
  list_item = Nokogiri::XML::Node.new('li', list)
24
- list_item.add_child(link_node)
24
+ if opts[:strong]
25
+ strong = Nokogiri::XML::Node.new('strong', list)
26
+ strong.add_child(link_node)
27
+ list_item.add_child(strong)
28
+ else
29
+ list_item.add_child(link_node)
30
+ end
25
31
 
26
32
  list.add_child(list_item)
27
33
  end
@@ -129,7 +129,7 @@ module Slimmer
129
129
  Processors::BodyClassCopier.new,
130
130
  Processors::HeaderContextInserter.new(),
131
131
  Processors::SectionInserter.new(artefact),
132
- Processors::GoogleAnalyticsConfigurator.new(response),
132
+ Processors::GoogleAnalyticsConfigurator.new(response, artefact),
133
133
  Processors::SearchPathSetter.new(response),
134
134
  Processors::RelatedItemsInserter.new(self, artefact),
135
135
  Processors::LogoClassInserter.new(artefact),
@@ -1,3 +1,3 @@
1
1
  module Slimmer
2
- VERSION = '3.1.1'
2
+ VERSION = '3.2.0'
3
3
  end
@@ -77,6 +77,13 @@ describe Slimmer::Headers do
77
77
  assert_equal({"foo" => "bar"}.to_json, headers[Slimmer::Headers::ARTEFACT_HEADER])
78
78
  end
79
79
 
80
+ it "should handle an object that responds to :to_hash" do
81
+ hash = {"foo" => "bar", "slug" => "vat-rates"}
82
+ artefact = stub("Response", :to_hash => hash)
83
+ self.set_slimmer_artefact(artefact)
84
+ assert_equal hash.to_json, headers[Slimmer::Headers::ARTEFACT_HEADER]
85
+ end
86
+
80
87
  it "should not have side-effects on the passed in hash" do
81
88
  artefact = {"foo" => "bar", "slug" => "vat-rates", "actions" => "some_actions"}
82
89
  artefact_copy = artefact.dup
@@ -1,4 +1,4 @@
1
- require "test_helper"
1
+ require_relative "../test_helper"
2
2
  require "v8"
3
3
 
4
4
  module GoogleAnalyticsTest
@@ -51,15 +51,22 @@ module GoogleAnalyticsTest
51
51
  include JavaScriptAssertions
52
52
  PAGE_LEVEL_EVENT = 3
53
53
 
54
- headers = {
55
- "X-Slimmer-Section" => "RHUBARB",
56
- "X-Slimmer-Format" => "custard",
57
- "X-Slimmer-Need-ID" => "42",
58
- "X-Slimmer-Proposition" => "trifle",
59
- "X-Slimmer-Result-Count" => "3"
60
- }
54
+ def setup
55
+ super
61
56
 
62
- given_response 200, GENERIC_DOCUMENT, headers
57
+ artefact = artefact_for_slug_in_a_section("something", "rhubarb")
58
+ artefact["details"].merge!(
59
+ "need_id" => "42",
60
+ "business_proposition" => true
61
+ )
62
+ headers = {
63
+ Slimmer::Headers::FORMAT_HEADER => "custard",
64
+ Slimmer::Headers::RESULT_COUNT_HEADER => "3",
65
+ Slimmer::Headers::ARTEFACT_HEADER => artefact.to_json
66
+ }
67
+
68
+ given_response 200, GENERIC_DOCUMENT, headers
69
+ end
63
70
 
64
71
  def test_should_pass_section_to_GA
65
72
  assert_custom_var 1, "Section", "rhubarb", PAGE_LEVEL_EVENT
@@ -86,7 +93,7 @@ module GoogleAnalyticsTest
86
93
  end
87
94
 
88
95
  def test_should_pass_proposition_to_GA
89
- assert_custom_var 4, "Proposition", "trifle", PAGE_LEVEL_EVENT
96
+ assert_custom_var 4, "Proposition", "business", PAGE_LEVEL_EVENT
90
97
  end
91
98
 
92
99
  def test_should_set_section_in_GOVUK_object
@@ -38,7 +38,7 @@ class SectionInserterTest < MiniTest::Unit::TestCase
38
38
  Slimmer::Processors::SectionInserter.new(artefact).filter(:any_source, template)
39
39
  list = template.at_css(".header-context nav[role=navigation] ol")
40
40
  assert_in list, "li:nth-child(1)", %{<a href="/">Home</a>}
41
- assert_in list, "li:nth-child(2)", %{<a href="https://www.test.gov.uk/browse/business">Business</a>}
41
+ assert_in list, "li:nth-child(2)", %{<strong><a href="https://www.test.gov.uk/browse/business">Business</a></strong>}
42
42
  end
43
43
 
44
44
  def test_should_add_section_link_subsection_link_and_title_to_breadcrumb
@@ -62,7 +62,7 @@ class SectionInserterTest < MiniTest::Unit::TestCase
62
62
  list = template.at_css(".header-context nav[role=navigation] ol")
63
63
  assert_in list, "li:nth-child(1)", %{<a href="/">Home</a>}
64
64
  assert_in list, "li:nth-child(2)", %{<a href="https://www.test.gov.uk/browse/business">Business</a>}
65
- assert_in list, "li:nth-child(3)", %{<a href="https://www.test.gov.uk/browse/business/employing-people">Employing people</a>}
65
+ assert_in list, "li:nth-child(3)", %{<strong><a href="https://www.test.gov.uk/browse/business/employing-people">Employing people</a></strong>}
66
66
  end
67
67
 
68
68
  def test_should_add_links_after_last_item_in_breadcrumb
@@ -90,7 +90,7 @@ class SectionInserterTest < MiniTest::Unit::TestCase
90
90
  assert_in list, "li:nth-child(1)", %{<a href="/">Home</a>}
91
91
  assert_in list, "li:nth-child(2)", %{<a href="/browse">All Sections</a>}
92
92
  assert_in list, "li:nth-child(3)", %{<a href="https://www.test.gov.uk/browse/business">Business</a>}
93
- assert_in list, "li:nth-child(4)", %{<a href="https://www.test.gov.uk/browse/business/employing-people">Employing people</a>}
93
+ assert_in list, "li:nth-child(4)", %{<strong><a href="https://www.test.gov.uk/browse/business/employing-people">Employing people</a></strong>}
94
94
  end
95
95
 
96
96
  def test_should_do_nothing_if_navigation_not_in_template
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: slimmer
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 3.1.1
5
+ version: 3.2.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Ben Griffiths
@@ -11,7 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2012-09-14 00:00:00 Z
14
+ date: 2012-09-17 00:00:00 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: nokogiri
@@ -159,49 +159,49 @@ files:
159
159
  - README.md
160
160
  - CHANGELOG.md
161
161
  - lib/tasks/slimmer.rake
162
- - lib/slimmer.rb
163
- - lib/slimmer/skin.rb
164
- - lib/slimmer/railtie.rb
165
- - lib/slimmer/template.rb
166
- - lib/slimmer/test_template.rb
167
- - lib/slimmer/test.rb
168
- - lib/slimmer/app.rb
169
- - lib/slimmer/processors/logo_class_inserter.rb
162
+ - lib/slimmer/version.rb
170
163
  - lib/slimmer/processors/body_class_copier.rb
171
- - lib/slimmer/processors/tag_mover.rb
172
- - lib/slimmer/processors/search_path_setter.rb
173
- - lib/slimmer/processors/title_inserter.rb
174
164
  - lib/slimmer/processors/google_analytics_configurator.rb
175
- - lib/slimmer/processors/conditional_comment_mover.rb
176
165
  - lib/slimmer/processors/related_items_inserter.rb
177
- - lib/slimmer/processors/header_context_inserter.rb
178
166
  - lib/slimmer/processors/body_inserter.rb
179
- - lib/slimmer/processors/admin_title_inserter.rb
167
+ - lib/slimmer/processors/logo_class_inserter.rb
180
168
  - lib/slimmer/processors/report_a_problem_inserter.rb
181
- - lib/slimmer/processors/section_inserter.rb
182
169
  - lib/slimmer/processors/footer_remover.rb
183
- - lib/slimmer/headers.rb
184
- - lib/slimmer/version.rb
170
+ - lib/slimmer/processors/conditional_comment_mover.rb
171
+ - lib/slimmer/processors/admin_title_inserter.rb
172
+ - lib/slimmer/processors/section_inserter.rb
173
+ - lib/slimmer/processors/search_path_setter.rb
174
+ - lib/slimmer/processors/tag_mover.rb
175
+ - lib/slimmer/processors/title_inserter.rb
176
+ - lib/slimmer/processors/header_context_inserter.rb
177
+ - lib/slimmer/template.rb
178
+ - lib/slimmer/railtie.rb
179
+ - lib/slimmer/test.rb
185
180
  - lib/slimmer/artefact.rb
181
+ - lib/slimmer/skin.rb
182
+ - lib/slimmer/app.rb
183
+ - lib/slimmer/headers.rb
184
+ - lib/slimmer/test_template.rb
185
+ - lib/slimmer.rb
186
186
  - Rakefile
187
- - test/headers_test.rb
188
- - test/artefact_test.rb
189
- - test/fixtures/related.raw.html.erb
190
- - test/fixtures/500.html.erb
191
- - test/fixtures/404.html.erb
192
- - test/fixtures/wrapper.html.erb
193
- - test/fixtures/report_a_problem.raw.html.erb
194
- - test/skin_test.rb
195
- - test/processors/logo_class_inserter_test.rb
196
- - test/processors/google_analytics_test.rb
187
+ - test/processors/related_items_inserter_test.rb
197
188
  - test/processors/report_a_problem_inserter_test.rb
198
- - test/processors/body_inserter_test.rb
199
- - test/processors/search_path_setter_test.rb
200
189
  - test/processors/section_inserter_test.rb
201
- - test/processors/related_items_inserter_test.rb
190
+ - test/processors/google_analytics_test.rb
202
191
  - test/processors/header_context_inserter_test.rb
203
- - test/typical_usage_test.rb
192
+ - test/processors/body_inserter_test.rb
193
+ - test/processors/logo_class_inserter_test.rb
194
+ - test/processors/search_path_setter_test.rb
195
+ - test/artefact_test.rb
196
+ - test/skin_test.rb
197
+ - test/headers_test.rb
204
198
  - test/test_template_dependency_on_static_test.rb
199
+ - test/typical_usage_test.rb
200
+ - test/fixtures/500.html.erb
201
+ - test/fixtures/404.html.erb
202
+ - test/fixtures/report_a_problem.raw.html.erb
203
+ - test/fixtures/related.raw.html.erb
204
+ - test/fixtures/wrapper.html.erb
205
205
  - test/test_helper.rb
206
206
  - bin/render_slimmer_error
207
207
  homepage: http://github.com/alphagov/slimmer
@@ -217,7 +217,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
217
217
  requirements:
218
218
  - - ">="
219
219
  - !ruby/object:Gem::Version
220
- hash: -2539638205319737760
220
+ hash: 3747362976319846846
221
221
  segments:
222
222
  - 0
223
223
  version: "0"
@@ -226,7 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
226
226
  requirements:
227
227
  - - ">="
228
228
  - !ruby/object:Gem::Version
229
- hash: -2539638205319737760
229
+ hash: 3747362976319846846
230
230
  segments:
231
231
  - 0
232
232
  version: "0"
@@ -238,22 +238,22 @@ signing_key:
238
238
  specification_version: 3
239
239
  summary: Thinner than the skinner
240
240
  test_files:
241
- - test/headers_test.rb
242
- - test/artefact_test.rb
243
- - test/fixtures/related.raw.html.erb
244
- - test/fixtures/500.html.erb
245
- - test/fixtures/404.html.erb
246
- - test/fixtures/wrapper.html.erb
247
- - test/fixtures/report_a_problem.raw.html.erb
248
- - test/skin_test.rb
249
- - test/processors/logo_class_inserter_test.rb
250
- - test/processors/google_analytics_test.rb
241
+ - test/processors/related_items_inserter_test.rb
251
242
  - test/processors/report_a_problem_inserter_test.rb
252
- - test/processors/body_inserter_test.rb
253
- - test/processors/search_path_setter_test.rb
254
243
  - test/processors/section_inserter_test.rb
255
- - test/processors/related_items_inserter_test.rb
244
+ - test/processors/google_analytics_test.rb
256
245
  - test/processors/header_context_inserter_test.rb
257
- - test/typical_usage_test.rb
246
+ - test/processors/body_inserter_test.rb
247
+ - test/processors/logo_class_inserter_test.rb
248
+ - test/processors/search_path_setter_test.rb
249
+ - test/artefact_test.rb
250
+ - test/skin_test.rb
251
+ - test/headers_test.rb
258
252
  - test/test_template_dependency_on_static_test.rb
253
+ - test/typical_usage_test.rb
254
+ - test/fixtures/500.html.erb
255
+ - test/fixtures/404.html.erb
256
+ - test/fixtures/report_a_problem.raw.html.erb
257
+ - test/fixtures/related.raw.html.erb
258
+ - test/fixtures/wrapper.html.erb
259
259
  - test/test_helper.rb