slimmer 4.2.0 → 4.2.1
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 +5 -0
- data/lib/slimmer.rb +2 -0
- data/lib/slimmer/app.rb +4 -1
- data/lib/slimmer/cache.rb +46 -0
- data/lib/slimmer/component_resolver.rb +10 -1
- data/lib/slimmer/skin.rb +3 -12
- data/lib/slimmer/version.rb +1 -1
- data/test/cache_test.rb +53 -0
- data/test/headers_test.rb +1 -1
- data/test/processors/alpha_label_inserter_test.rb +1 -1
- data/test/processors/beta_label_inserter_test.rb +1 -1
- data/test/processors/body_inserter_test.rb +1 -1
- data/test/processors/header_context_inserter_test.rb +1 -1
- data/test/processors/navigation_mover_test.rb +1 -1
- data/test/processors/related_items_inserter_test.rb +1 -1
- data/test/processors/report_a_problem_inserter_test.rb +1 -1
- data/test/processors/section_inserter_test.rb +1 -1
- data/test/processors/tag_mover_test.rb +1 -1
- data/test/skin_test.rb +16 -76
- data/test/test_helper.rb +3 -4
- data/test/test_template_dependency_on_static_test.rb +1 -1
- data/test/typical_usage_test.rb +2 -2
- metadata +53 -130
data/CHANGELOG.md
CHANGED
data/lib/slimmer.rb
CHANGED
data/lib/slimmer/app.rb
CHANGED
@@ -28,7 +28,10 @@ module Slimmer
|
|
28
28
|
options[:asset_host] = Plek.current.find("static")
|
29
29
|
end
|
30
30
|
|
31
|
-
|
31
|
+
cache = Cache.instance
|
32
|
+
cache.use_cache = options[:use_cache] if options[:use_cache]
|
33
|
+
|
34
|
+
@skin = Skin.new options.merge(logger: self.logger, cache: cache)
|
32
35
|
end
|
33
36
|
|
34
37
|
def call(env)
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
|
3
|
+
module Slimmer
|
4
|
+
class Cache
|
5
|
+
include Singleton
|
6
|
+
attr_writer :use_cache, :cache_ttl
|
7
|
+
|
8
|
+
# TODO: use a real cache rather than an in memory hash
|
9
|
+
def initialize
|
10
|
+
@cache_last_reset= Time.now
|
11
|
+
|
12
|
+
@use_cache = false
|
13
|
+
@cache_ttl = (5 * 60) # 5 mins
|
14
|
+
|
15
|
+
@data_store = {}
|
16
|
+
end
|
17
|
+
|
18
|
+
def clear
|
19
|
+
@data_store.clear
|
20
|
+
end
|
21
|
+
|
22
|
+
def fetch(key)
|
23
|
+
clear_cache_if_stale
|
24
|
+
data = @data_store[key]
|
25
|
+
|
26
|
+
if data.nil?
|
27
|
+
data = yield
|
28
|
+
end
|
29
|
+
|
30
|
+
if @use_cache
|
31
|
+
@data_store[key] = data
|
32
|
+
end
|
33
|
+
|
34
|
+
data
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
def clear_cache_if_stale
|
39
|
+
time_to_clear_cache = @cache_last_reset + @cache_ttl
|
40
|
+
if time_to_clear_cache < Time.now
|
41
|
+
@data_store.clear
|
42
|
+
@cache_last_reset = Time.now
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -3,14 +3,23 @@ require 'active_support/core_ext/string/inflections'
|
|
3
3
|
|
4
4
|
module Slimmer
|
5
5
|
class ComponentResolver < ::ActionView::Resolver
|
6
|
+
def self.caching
|
7
|
+
# this turns off the default ActionView::Resolver caching which caches
|
8
|
+
# all templates for the duration of the current process in production
|
9
|
+
false
|
10
|
+
end
|
11
|
+
|
6
12
|
def find_templates(name, prefix, partial, details)
|
7
13
|
return [] unless prefix == 'govuk_component'
|
14
|
+
cache = Cache.instance
|
8
15
|
|
9
16
|
template_path = [prefix, name].join('/')
|
10
17
|
if test?
|
11
18
|
template_body = test_body(template_path)
|
12
19
|
else
|
13
|
-
template_body = fetch(
|
20
|
+
template_body = cache.fetch(template_path) do
|
21
|
+
fetch(template_url(template_path))
|
22
|
+
end
|
14
23
|
end
|
15
24
|
|
16
25
|
details = {
|
data/lib/slimmer/skin.rb
CHANGED
@@ -3,28 +3,19 @@ require 'slimmer/govuk_request_id'
|
|
3
3
|
|
4
4
|
module Slimmer
|
5
5
|
class Skin
|
6
|
-
attr_accessor :
|
6
|
+
attr_accessor :template_cache, :asset_host, :logger, :strict, :options
|
7
7
|
|
8
|
-
# TODO: Extract the cache to something we can pass in instead of using
|
9
|
-
# true/false and an in-memory cache.
|
10
8
|
def initialize options = {}
|
11
9
|
@options = options
|
12
10
|
@asset_host = options[:asset_host]
|
13
|
-
|
14
|
-
@use_cache = options[:use_cache] || false
|
15
|
-
@cache_ttl = options[:cache_ttl] || (15 * 60) # 15 mins
|
16
|
-
@template_cache = LRUCache.new(:ttl => @cache_ttl) if @use_cache
|
11
|
+
@template_cache = options[:cache]
|
17
12
|
|
18
13
|
@logger = options[:logger] || NullLogger.instance
|
19
14
|
@strict = options[:strict] || (%w{development test}.include?(ENV['RACK_ENV']))
|
20
15
|
end
|
21
16
|
|
22
17
|
def template(template_name)
|
23
|
-
|
24
|
-
template_cache.fetch(template_name) do
|
25
|
-
load_template(template_name)
|
26
|
-
end
|
27
|
-
else
|
18
|
+
template_cache.fetch(template_name) do
|
28
19
|
load_template(template_name)
|
29
20
|
end
|
30
21
|
end
|
data/lib/slimmer/version.rb
CHANGED
data/test/cache_test.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require_relative "test_helper"
|
2
|
+
|
3
|
+
describe Slimmer::Cache do
|
4
|
+
describe "a cache" do
|
5
|
+
before do
|
6
|
+
@cache = Slimmer::Cache.send(:new)
|
7
|
+
@cache.use_cache = false
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should not save item in cache by default" do
|
11
|
+
@cache.fetch('not-cached') { "value1" }
|
12
|
+
assert_equal 'new-value', @cache.fetch('not-cached') { "new-value" }
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should return passed argument if cache is empty" do
|
16
|
+
@cache.use_cache = true
|
17
|
+
|
18
|
+
assert_equal 'new-value', @cache.fetch('uncached-key') { "new-value" }
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should return cached argument if cache is enabled and warm" do
|
22
|
+
@cache.use_cache = true
|
23
|
+
|
24
|
+
@cache.fetch('cached-key') { "value1" }
|
25
|
+
assert_equal 'value1', @cache.fetch('cached-key') { "new-value" }
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should only cache the template for 5 mins by default" do
|
29
|
+
@cache.use_cache = true
|
30
|
+
|
31
|
+
@cache.fetch('timed-cached-key') { "value1" }
|
32
|
+
Timecop.travel( 5 * 60 - 30) do # now + 4 mins 30 secs
|
33
|
+
assert_equal "value1", @cache.fetch('timed-cached-key') { "value2" }
|
34
|
+
end
|
35
|
+
Timecop.travel( 5 * 60 + 30) do # now + 5 mins 30 secs
|
36
|
+
assert_equal "value3", @cache.fetch('timed-cached-key') { "value3" }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should allow overriding the cache ttl" do
|
41
|
+
@cache.use_cache = true
|
42
|
+
@cache.cache_ttl = 10 * 60
|
43
|
+
|
44
|
+
@cache.fetch('ttl-timed-cached-key') { "value1" }
|
45
|
+
Timecop.travel( 10 * 60 - 30) do # now + 9 mins 30 secs
|
46
|
+
assert_equal "value1", @cache.fetch('ttl-timed-cached-key') { "value2" }
|
47
|
+
end
|
48
|
+
Timecop.travel( 10 * 60 + 30) do # now + 10 mins 30 secs
|
49
|
+
assert_equal "value3", @cache.fetch('ttl-timed-cached-key') { "value3" }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/test/headers_test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require "test_helper"
|
2
2
|
|
3
|
-
class HeaderContextInserterTest < MiniTest::
|
3
|
+
class HeaderContextInserterTest < MiniTest::Test
|
4
4
|
def test_should_replace_contents_of_header_context_in_template
|
5
5
|
template = as_nokogiri %{
|
6
6
|
<html><body><div><div class="header-context"></div></div></body></html>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require_relative "../test_helper"
|
2
2
|
require 'gds_api/test_helpers/content_api'
|
3
3
|
|
4
|
-
class SectionInserterTest < MiniTest::
|
4
|
+
class SectionInserterTest < MiniTest::Test
|
5
5
|
include GdsApi::TestHelpers::ContentApi
|
6
6
|
|
7
7
|
def create_artefact(slug, attributes = {})
|
data/test/skin_test.rb
CHANGED
@@ -4,7 +4,8 @@ describe Slimmer::Skin do
|
|
4
4
|
|
5
5
|
describe "loading templates" do
|
6
6
|
it "should be able to load the template" do
|
7
|
-
skin = Slimmer::Skin.new asset_host: "http://example.local/"
|
7
|
+
skin = Slimmer::Skin.new asset_host: "http://example.local/", cache: Slimmer::Cache.instance
|
8
|
+
|
8
9
|
expected_url = "http://example.local/templates/example.html.erb"
|
9
10
|
stub_request(:get, expected_url).to_return :body => "<foo />"
|
10
11
|
|
@@ -16,7 +17,8 @@ describe Slimmer::Skin do
|
|
16
17
|
|
17
18
|
describe "should pass the GOVUK-Request-Id header when requesting the template" do
|
18
19
|
before do
|
19
|
-
@skin = Slimmer::Skin.new asset_host: "http://example.local/"
|
20
|
+
@skin = Slimmer::Skin.new asset_host: "http://example.local/", cache: Slimmer::Cache.instance
|
21
|
+
|
20
22
|
@expected_url = "http://example.local/templates/example.html.erb"
|
21
23
|
stub_request(:get, @expected_url).to_return :body => "<foo />"
|
22
24
|
end
|
@@ -42,81 +44,17 @@ describe Slimmer::Skin do
|
|
42
44
|
end
|
43
45
|
end
|
44
46
|
|
45
|
-
|
46
|
-
|
47
|
-
skin = Slimmer::Skin.new asset_host: "http://example.local/"
|
48
|
-
expected_url = "http://example.local/templates/example.html.erb"
|
49
|
-
stub_request(:get, expected_url).to_return :body => "<foo />"
|
50
|
-
|
51
|
-
first_access = skin.template 'example'
|
52
|
-
second_access = skin.template 'example'
|
53
|
-
|
54
|
-
assert_requested :get, "http://example.local/templates/example.html.erb", times: 2
|
55
|
-
end
|
56
|
-
|
57
|
-
it "should cache the template when requested" do
|
58
|
-
skin = Slimmer::Skin.new asset_host: "http://example.local/", use_cache: true
|
59
|
-
expected_url = "http://example.local/templates/example.html.erb"
|
60
|
-
stub_request(:get, expected_url).to_return :body => "<foo />"
|
61
|
-
|
62
|
-
first_access = skin.template 'example'
|
63
|
-
second_access = skin.template 'example'
|
64
|
-
|
65
|
-
assert_requested :get, "http://example.local/templates/example.html.erb", times: 1
|
66
|
-
assert_same first_access, second_access
|
67
|
-
end
|
68
|
-
|
69
|
-
it "should only cache the template for 15 mins by default" do
|
70
|
-
skin = Slimmer::Skin.new asset_host: "http://example.local/", use_cache: true
|
71
|
-
expected_url = "http://example.local/templates/example.html.erb"
|
72
|
-
stub_request(:get, expected_url).to_return :body => "<foo />"
|
73
|
-
|
74
|
-
first_access = skin.template 'example'
|
75
|
-
second_access = skin.template 'example'
|
76
|
-
|
77
|
-
assert_requested :get, "http://example.local/templates/example.html.erb", times: 1
|
78
|
-
assert_same first_access, second_access
|
79
|
-
|
80
|
-
Timecop.travel( 15 * 60 - 30) do # now + 14 mins 30 secs
|
81
|
-
third_access = skin.template 'example'
|
82
|
-
assert_requested :get, "http://example.local/templates/example.html.erb", times: 1
|
83
|
-
assert_same first_access, third_access
|
84
|
-
end
|
47
|
+
it "should try and load templates from the cache" do
|
48
|
+
skin = Slimmer::Skin.new asset_host: "http://example.local/", cache: Slimmer::Cache.instance
|
85
49
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
assert_equal first_access, fourth_access
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
it "should allow overriding the cache ttl" do
|
94
|
-
skin = Slimmer::Skin.new asset_host: "http://example.local/", use_cache: true, cache_ttl: 5 * 60
|
95
|
-
expected_url = "http://example.local/templates/example.html.erb"
|
96
|
-
stub_request(:get, expected_url).to_return :body => "<foo />"
|
97
|
-
|
98
|
-
first_access = skin.template 'example'
|
99
|
-
second_access = skin.template 'example'
|
100
|
-
|
101
|
-
assert_requested :get, "http://example.local/templates/example.html.erb", times: 1
|
102
|
-
assert_same first_access, second_access
|
103
|
-
|
104
|
-
Timecop.travel( 5 * 60 - 30) do # now + 4 mins 30 secs
|
105
|
-
third_access = skin.template 'example'
|
106
|
-
assert_requested :get, "http://example.local/templates/example.html.erb", times: 1
|
107
|
-
assert_same first_access, third_access
|
108
|
-
end
|
109
|
-
|
110
|
-
Timecop.travel( 5 * 60 + 30) do # now + 5 mins 30 secs
|
111
|
-
fourth_access = skin.template 'example'
|
112
|
-
assert_requested :get, "http://example.local/templates/example.html.erb", times: 2
|
113
|
-
assert_equal first_access, fourth_access
|
114
|
-
end
|
115
|
-
end
|
50
|
+
Slimmer::Cache.instance.expects(:fetch).with('example-template').returns('cache data')
|
51
|
+
template = skin.template 'example-template'
|
52
|
+
assert_equal 'cache data', template
|
116
53
|
end
|
117
54
|
|
118
55
|
it "should raise appropriate exception when template not found" do
|
119
|
-
skin = Slimmer::Skin.new asset_host: "http://example.local/"
|
56
|
+
skin = Slimmer::Skin.new asset_host: "http://example.local/", cache: Slimmer::Cache.instance
|
57
|
+
|
120
58
|
expected_url = "http://example.local/templates/example.html.erb"
|
121
59
|
stub_request(:get, expected_url).to_return(:status => '404')
|
122
60
|
|
@@ -126,7 +64,8 @@ describe Slimmer::Skin do
|
|
126
64
|
end
|
127
65
|
|
128
66
|
it "should raise appropriate exception when cant reach template host" do
|
129
|
-
skin = Slimmer::Skin.new asset_host: "http://example.local/"
|
67
|
+
skin = Slimmer::Skin.new asset_host: "http://example.local/", cache: Slimmer::Cache.instance
|
68
|
+
|
130
69
|
expected_url = "http://example.local/templates/example.html.erb"
|
131
70
|
stub_request(:get, expected_url).to_raise(Errno::ECONNREFUSED)
|
132
71
|
|
@@ -136,7 +75,8 @@ describe Slimmer::Skin do
|
|
136
75
|
end
|
137
76
|
|
138
77
|
it "should raise appropriate exception when hostname cannot be resolved" do
|
139
|
-
skin = Slimmer::Skin.new asset_host: "http://non-existent.domain/"
|
78
|
+
skin = Slimmer::Skin.new asset_host: "http://non-existent.domain/", cache: Slimmer::Cache.instance
|
79
|
+
|
140
80
|
expected_url = "http://non-existent.domain/templates/example.html.erb"
|
141
81
|
stub_request(:get, expected_url).to_raise(SocketError)
|
142
82
|
|
@@ -148,7 +88,7 @@ describe Slimmer::Skin do
|
|
148
88
|
|
149
89
|
describe "parsing artefact from header" do
|
150
90
|
before do
|
151
|
-
@skin = Slimmer::Skin.new
|
91
|
+
@skin = Slimmer::Skin.new cache: Slimmer::Cache.instance
|
152
92
|
@headers = {}
|
153
93
|
@response = stub("Response", :headers => @headers)
|
154
94
|
end
|
data/test/test_helper.rb
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
require_relative '../lib/slimmer'
|
2
2
|
require 'minitest/autorun'
|
3
|
-
require 'minitest/unit'
|
4
3
|
require 'rack/test'
|
5
4
|
require 'json'
|
6
5
|
require 'logger'
|
7
|
-
require 'mocha'
|
6
|
+
require 'mocha/setup'
|
8
7
|
require 'timecop'
|
9
8
|
require 'gds_api/test_helpers/content_api'
|
10
9
|
|
11
|
-
|
10
|
+
MiniTest::Test.class_eval do
|
12
11
|
def as_nokogiri(html_string)
|
13
12
|
Nokogiri::HTML.parse(html_string.strip)
|
14
13
|
end
|
@@ -59,7 +58,7 @@ module ActionView
|
|
59
58
|
end
|
60
59
|
end
|
61
60
|
|
62
|
-
class SlimmerIntegrationTest < MiniTest::
|
61
|
+
class SlimmerIntegrationTest < MiniTest::Test
|
63
62
|
include Rack::Test::Methods
|
64
63
|
include GdsApi::TestHelpers::ContentApi
|
65
64
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require "test_helper"
|
2
2
|
|
3
|
-
class TestTemplateDependencyOnStaticTest < MiniTest::
|
3
|
+
class TestTemplateDependencyOnStaticTest < MiniTest::Test
|
4
4
|
def test_scripts_on_static_referenced_in_test_templates_exist
|
5
5
|
template_path = File.dirname(__FILE__).gsub('/test', '/lib/slimmer/test_templates')
|
6
6
|
Dir.foreach(template_path) do | template_file_name |
|
data/test/typical_usage_test.rb
CHANGED
@@ -153,7 +153,7 @@ module TypicalUsage
|
|
153
153
|
}
|
154
154
|
def test_should_find_conditional_comments_copied_into_the_head
|
155
155
|
element = Nokogiri::HTML.parse(last_response.body).at_xpath('//comment()')
|
156
|
-
assert_match
|
156
|
+
assert_match /app-ie\.css/, element.to_s, 'Not found conditional comment in output'
|
157
157
|
end
|
158
158
|
end
|
159
159
|
|
@@ -168,7 +168,7 @@ module TypicalUsage
|
|
168
168
|
def test_should_find_stylesheet_wrapped_with_conditional_comments
|
169
169
|
assert_rendered_in_template "head link[href='app.css']"
|
170
170
|
element = Nokogiri::HTML.parse(last_response.body).at_xpath('/html/head')
|
171
|
-
assert_match
|
171
|
+
assert_match /<!--\[if gt IE 8\]><!-->.*app\.css.*<!--<!\[endif\]-->/m, element.to_s, 'Not found conditional comment in output'
|
172
172
|
end
|
173
173
|
end
|
174
174
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slimmer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.2.
|
4
|
+
version: 4.2.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2014-08-
|
13
|
+
date: 2014-08-21 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: nokogiri
|
17
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirement: &7368960 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
@@ -22,15 +22,10 @@ dependencies:
|
|
22
22
|
version: 1.5.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements:
|
26
|
-
none: false
|
27
|
-
requirements:
|
28
|
-
- - ~>
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
version: 1.5.0
|
25
|
+
version_requirements: *7368960
|
31
26
|
- !ruby/object:Gem::Dependency
|
32
27
|
name: rack
|
33
|
-
requirement: !ruby/object:Gem::Requirement
|
28
|
+
requirement: &7367000 !ruby/object:Gem::Requirement
|
34
29
|
none: false
|
35
30
|
requirements:
|
36
31
|
- - ! '>='
|
@@ -38,15 +33,10 @@ dependencies:
|
|
38
33
|
version: 1.3.5
|
39
34
|
type: :runtime
|
40
35
|
prerelease: false
|
41
|
-
version_requirements:
|
42
|
-
none: false
|
43
|
-
requirements:
|
44
|
-
- - ! '>='
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: 1.3.5
|
36
|
+
version_requirements: *7367000
|
47
37
|
- !ruby/object:Gem::Dependency
|
48
38
|
name: plek
|
49
|
-
requirement: !ruby/object:Gem::Requirement
|
39
|
+
requirement: &7326660 !ruby/object:Gem::Requirement
|
50
40
|
none: false
|
51
41
|
requirements:
|
52
42
|
- - ! '>='
|
@@ -54,15 +44,10 @@ dependencies:
|
|
54
44
|
version: 0.1.8
|
55
45
|
type: :runtime
|
56
46
|
prerelease: false
|
57
|
-
version_requirements:
|
58
|
-
none: false
|
59
|
-
requirements:
|
60
|
-
- - ! '>='
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: 0.1.8
|
47
|
+
version_requirements: *7326660
|
63
48
|
- !ruby/object:Gem::Dependency
|
64
49
|
name: json
|
65
|
-
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirement: &7325300 !ruby/object:Gem::Requirement
|
66
51
|
none: false
|
67
52
|
requirements:
|
68
53
|
- - ! '>='
|
@@ -70,15 +55,10 @@ dependencies:
|
|
70
55
|
version: '0'
|
71
56
|
type: :runtime
|
72
57
|
prerelease: false
|
73
|
-
version_requirements:
|
74
|
-
none: false
|
75
|
-
requirements:
|
76
|
-
- - ! '>='
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
version: '0'
|
58
|
+
version_requirements: *7325300
|
79
59
|
- !ruby/object:Gem::Dependency
|
80
60
|
name: null_logger
|
81
|
-
requirement: !ruby/object:Gem::Requirement
|
61
|
+
requirement: &7711280 !ruby/object:Gem::Requirement
|
82
62
|
none: false
|
83
63
|
requirements:
|
84
64
|
- - ! '>='
|
@@ -86,31 +66,21 @@ dependencies:
|
|
86
66
|
version: '0'
|
87
67
|
type: :runtime
|
88
68
|
prerelease: false
|
89
|
-
version_requirements:
|
69
|
+
version_requirements: *7711280
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: rest-client
|
72
|
+
requirement: &7708660 !ruby/object:Gem::Requirement
|
90
73
|
none: false
|
91
74
|
requirements:
|
92
75
|
- - ! '>='
|
93
76
|
- !ruby/object:Gem::Version
|
94
77
|
version: '0'
|
95
|
-
- !ruby/object:Gem::Dependency
|
96
|
-
name: lrucache
|
97
|
-
requirement: !ruby/object:Gem::Requirement
|
98
|
-
none: false
|
99
|
-
requirements:
|
100
|
-
- - ~>
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
version: 0.1.3
|
103
78
|
type: :runtime
|
104
79
|
prerelease: false
|
105
|
-
version_requirements:
|
106
|
-
none: false
|
107
|
-
requirements:
|
108
|
-
- - ~>
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: 0.1.3
|
80
|
+
version_requirements: *7708660
|
111
81
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
82
|
+
name: activesupport
|
83
|
+
requirement: &7794880 !ruby/object:Gem::Requirement
|
114
84
|
none: false
|
115
85
|
requirements:
|
116
86
|
- - ! '>='
|
@@ -118,31 +88,32 @@ dependencies:
|
|
118
88
|
version: '0'
|
119
89
|
type: :runtime
|
120
90
|
prerelease: false
|
121
|
-
version_requirements:
|
122
|
-
none: false
|
123
|
-
requirements:
|
124
|
-
- - ! '>='
|
125
|
-
- !ruby/object:Gem::Version
|
126
|
-
version: '0'
|
91
|
+
version_requirements: *7794880
|
127
92
|
- !ruby/object:Gem::Dependency
|
128
|
-
name:
|
129
|
-
requirement: !ruby/object:Gem::Requirement
|
93
|
+
name: minitest
|
94
|
+
requirement: &7876860 !ruby/object:Gem::Requirement
|
130
95
|
none: false
|
131
96
|
requirements:
|
132
97
|
- - ~>
|
133
98
|
- !ruby/object:Gem::Version
|
134
|
-
version:
|
99
|
+
version: '5.4'
|
135
100
|
type: :development
|
136
101
|
prerelease: false
|
137
|
-
version_requirements:
|
102
|
+
version_requirements: *7876860
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: rake
|
105
|
+
requirement: &7876240 !ruby/object:Gem::Requirement
|
138
106
|
none: false
|
139
107
|
requirements:
|
140
108
|
- - ~>
|
141
109
|
- !ruby/object:Gem::Version
|
142
110
|
version: 0.9.2.2
|
111
|
+
type: :development
|
112
|
+
prerelease: false
|
113
|
+
version_requirements: *7876240
|
143
114
|
- !ruby/object:Gem::Dependency
|
144
115
|
name: rack-test
|
145
|
-
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirement: &7875600 !ruby/object:Gem::Requirement
|
146
117
|
none: false
|
147
118
|
requirements:
|
148
119
|
- - ~>
|
@@ -150,47 +121,32 @@ dependencies:
|
|
150
121
|
version: 0.6.1
|
151
122
|
type: :development
|
152
123
|
prerelease: false
|
153
|
-
version_requirements:
|
154
|
-
none: false
|
155
|
-
requirements:
|
156
|
-
- - ~>
|
157
|
-
- !ruby/object:Gem::Version
|
158
|
-
version: 0.6.1
|
124
|
+
version_requirements: *7875600
|
159
125
|
- !ruby/object:Gem::Dependency
|
160
126
|
name: mocha
|
161
|
-
requirement: !ruby/object:Gem::Requirement
|
127
|
+
requirement: &7874720 !ruby/object:Gem::Requirement
|
162
128
|
none: false
|
163
129
|
requirements:
|
164
130
|
- - ~>
|
165
131
|
- !ruby/object:Gem::Version
|
166
|
-
version:
|
132
|
+
version: '1.1'
|
167
133
|
type: :development
|
168
134
|
prerelease: false
|
169
|
-
version_requirements:
|
170
|
-
none: false
|
171
|
-
requirements:
|
172
|
-
- - ~>
|
173
|
-
- !ruby/object:Gem::Version
|
174
|
-
version: 0.12.4
|
135
|
+
version_requirements: *7874720
|
175
136
|
- !ruby/object:Gem::Dependency
|
176
137
|
name: webmock
|
177
|
-
requirement: !ruby/object:Gem::Requirement
|
138
|
+
requirement: &7871200 !ruby/object:Gem::Requirement
|
178
139
|
none: false
|
179
140
|
requirements:
|
180
|
-
- -
|
141
|
+
- - =
|
181
142
|
- !ruby/object:Gem::Version
|
182
|
-
version: 1.
|
143
|
+
version: 1.18.0
|
183
144
|
type: :development
|
184
145
|
prerelease: false
|
185
|
-
version_requirements:
|
186
|
-
none: false
|
187
|
-
requirements:
|
188
|
-
- - '='
|
189
|
-
- !ruby/object:Gem::Version
|
190
|
-
version: 1.11.0
|
146
|
+
version_requirements: *7871200
|
191
147
|
- !ruby/object:Gem::Dependency
|
192
148
|
name: therubyracer
|
193
|
-
requirement: !ruby/object:Gem::Requirement
|
149
|
+
requirement: &7939300 !ruby/object:Gem::Requirement
|
194
150
|
none: false
|
195
151
|
requirements:
|
196
152
|
- - ~>
|
@@ -198,15 +154,10 @@ dependencies:
|
|
198
154
|
version: 0.10.2
|
199
155
|
type: :development
|
200
156
|
prerelease: false
|
201
|
-
version_requirements:
|
202
|
-
none: false
|
203
|
-
requirements:
|
204
|
-
- - ~>
|
205
|
-
- !ruby/object:Gem::Version
|
206
|
-
version: 0.10.2
|
157
|
+
version_requirements: *7939300
|
207
158
|
- !ruby/object:Gem::Dependency
|
208
159
|
name: gem_publisher
|
209
|
-
requirement: !ruby/object:Gem::Requirement
|
160
|
+
requirement: &7991860 !ruby/object:Gem::Requirement
|
210
161
|
none: false
|
211
162
|
requirements:
|
212
163
|
- - ~>
|
@@ -214,31 +165,21 @@ dependencies:
|
|
214
165
|
version: 1.1.1
|
215
166
|
type: :development
|
216
167
|
prerelease: false
|
217
|
-
version_requirements:
|
218
|
-
none: false
|
219
|
-
requirements:
|
220
|
-
- - ~>
|
221
|
-
- !ruby/object:Gem::Version
|
222
|
-
version: 1.1.1
|
168
|
+
version_requirements: *7991860
|
223
169
|
- !ruby/object:Gem::Dependency
|
224
170
|
name: gds-api-adapters
|
225
|
-
requirement: !ruby/object:Gem::Requirement
|
171
|
+
requirement: &7990140 !ruby/object:Gem::Requirement
|
226
172
|
none: false
|
227
173
|
requirements:
|
228
|
-
- -
|
174
|
+
- - =
|
229
175
|
- !ruby/object:Gem::Version
|
230
176
|
version: 2.7.1
|
231
177
|
type: :development
|
232
178
|
prerelease: false
|
233
|
-
version_requirements:
|
234
|
-
none: false
|
235
|
-
requirements:
|
236
|
-
- - '='
|
237
|
-
- !ruby/object:Gem::Version
|
238
|
-
version: 2.7.1
|
179
|
+
version_requirements: *7990140
|
239
180
|
- !ruby/object:Gem::Dependency
|
240
181
|
name: timecop
|
241
|
-
requirement: !ruby/object:Gem::Requirement
|
182
|
+
requirement: &7989560 !ruby/object:Gem::Requirement
|
242
183
|
none: false
|
243
184
|
requirements:
|
244
185
|
- - ~>
|
@@ -246,28 +187,7 @@ dependencies:
|
|
246
187
|
version: 0.5.1
|
247
188
|
type: :development
|
248
189
|
prerelease: false
|
249
|
-
version_requirements:
|
250
|
-
none: false
|
251
|
-
requirements:
|
252
|
-
- - ~>
|
253
|
-
- !ruby/object:Gem::Version
|
254
|
-
version: 0.5.1
|
255
|
-
- !ruby/object:Gem::Dependency
|
256
|
-
name: activesupport
|
257
|
-
requirement: !ruby/object:Gem::Requirement
|
258
|
-
none: false
|
259
|
-
requirements:
|
260
|
-
- - '='
|
261
|
-
- !ruby/object:Gem::Version
|
262
|
-
version: 3.2.13
|
263
|
-
type: :development
|
264
|
-
prerelease: false
|
265
|
-
version_requirements: !ruby/object:Gem::Requirement
|
266
|
-
none: false
|
267
|
-
requirements:
|
268
|
-
- - '='
|
269
|
-
- !ruby/object:Gem::Version
|
270
|
-
version: 3.2.13
|
190
|
+
version_requirements: *7989560
|
271
191
|
description: Rack middleware for skinning pages using a specific template
|
272
192
|
email:
|
273
193
|
- bengriffiths@gmail.com
|
@@ -296,6 +216,7 @@ files:
|
|
296
216
|
- lib/slimmer/govuk_request_id.rb
|
297
217
|
- lib/slimmer/template.rb
|
298
218
|
- lib/slimmer/component_resolver.rb
|
219
|
+
- lib/slimmer/cache.rb
|
299
220
|
- lib/slimmer/processors/header_context_inserter.rb
|
300
221
|
- lib/slimmer/processors/navigation_mover.rb
|
301
222
|
- lib/slimmer/processors/google_analytics_configurator.rb
|
@@ -334,6 +255,7 @@ files:
|
|
334
255
|
- test/fixtures/beta_notice.html.erb
|
335
256
|
- test/headers_test.rb
|
336
257
|
- test/test_template_dependency_on_static_test.rb
|
258
|
+
- test/cache_test.rb
|
337
259
|
- test/test_helper.rb
|
338
260
|
- test/processors/header_context_inserter_test.rb
|
339
261
|
- test/processors/body_inserter_test.rb
|
@@ -363,7 +285,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
363
285
|
version: '0'
|
364
286
|
segments:
|
365
287
|
- 0
|
366
|
-
hash:
|
288
|
+
hash: -2123745403723788320
|
367
289
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
368
290
|
none: false
|
369
291
|
requirements:
|
@@ -372,10 +294,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
372
294
|
version: '0'
|
373
295
|
segments:
|
374
296
|
- 0
|
375
|
-
hash:
|
297
|
+
hash: -2123745403723788320
|
376
298
|
requirements: []
|
377
299
|
rubyforge_project: slimmer
|
378
|
-
rubygems_version: 1.8.
|
300
|
+
rubygems_version: 1.8.11
|
379
301
|
signing_key:
|
380
302
|
specification_version: 3
|
381
303
|
summary: Thinner than the skinner
|
@@ -397,6 +319,7 @@ test_files:
|
|
397
319
|
- test/fixtures/beta_notice.html.erb
|
398
320
|
- test/headers_test.rb
|
399
321
|
- test/test_template_dependency_on_static_test.rb
|
322
|
+
- test/cache_test.rb
|
400
323
|
- test/test_helper.rb
|
401
324
|
- test/processors/header_context_inserter_test.rb
|
402
325
|
- test/processors/body_inserter_test.rb
|