slimmer 1.1.4beta7 → 1.1.5
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/README.md +7 -13
- data/lib/slimmer.rb +1 -0
- data/lib/slimmer/google_analytics_configurator.rb +36 -0
- data/lib/slimmer/skin.rb +3 -2
- data/lib/slimmer/version.rb +1 -1
- data/test/fixtures/wrapper.html.erb +4 -0
- data/test/google_analytics_test.rb +88 -0
- data/test/{slimmer_test.rb → skin_test.rb} +1 -1
- metadata +46 -21
data/README.md
CHANGED
@@ -7,19 +7,17 @@ various other details, such as meta, script, and style tags.
|
|
7
7
|
|
8
8
|
## Use in a Rails app
|
9
9
|
|
10
|
-
Slimmer provides a Railtie so no configuration is necessary
|
11
|
-
|
12
|
-
to specify the appropriate path or host (slimmer can load templates over http) eg.
|
10
|
+
Slimmer provides a Railtie so no configuration is necessary. By default it will use the
|
11
|
+
Plek gem to look for the 'assets' host for the current environment.
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
end
|
13
|
+
If you want to use your own set of templates you will need to specify the appropriate host
|
14
|
+
eg.
|
17
15
|
|
18
16
|
YourApp::Application.configure do
|
19
|
-
config.slimmer.
|
17
|
+
config.slimmer.asset_host = 'http://your.server.somewhere'
|
20
18
|
end
|
21
19
|
|
22
|
-
it expects to find templates in a folder called 'templates' on that host
|
20
|
+
it expects to find templates in a folder called 'templates' on that host.
|
23
21
|
|
24
22
|
## Use elsewhere
|
25
23
|
|
@@ -29,7 +27,7 @@ Slimmer will work as standard rack middleware:
|
|
29
27
|
|
30
28
|
or
|
31
29
|
|
32
|
-
use Slimmer::App, :
|
30
|
+
use Slimmer::App, :asset_host => "http://my.alternative.host"
|
33
31
|
|
34
32
|
## Specifying a template
|
35
33
|
|
@@ -60,7 +58,3 @@ To get this, include Slimmer::Template in your controller:
|
|
60
58
|
Slimmer was extracted from a much larger project called 'skinner'. 'slimmer' referred to the size
|
61
59
|
of its code compared to skinner (which also acted as an HTTP proxy and mixed in a few other
|
62
60
|
concerns). Over time the codebase has grown a little, but the name stuck.
|
63
|
-
|
64
|
-
## Python
|
65
|
-
|
66
|
-
The repository also includes a python version but this is not currently maintained.
|
data/lib/slimmer.rb
CHANGED
@@ -22,4 +22,5 @@ module Slimmer
|
|
22
22
|
autoload :BodyClassCopier, 'slimmer/body_class_copier'
|
23
23
|
autoload :UrlRewriter, 'slimmer/url_rewriter'
|
24
24
|
autoload :HeaderContextInserter, 'slimmer/header_context_inserter'
|
25
|
+
autoload :GoogleAnalyticsConfigurator, 'slimmer/google_analytics_configurator'
|
25
26
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require "json"
|
2
|
+
|
3
|
+
module Slimmer
|
4
|
+
class GoogleAnalyticsConfigurator
|
5
|
+
|
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
|
+
}
|
12
|
+
|
13
|
+
def initialize(headers)
|
14
|
+
@headers = normalise_headers(headers)
|
15
|
+
end
|
16
|
+
|
17
|
+
def filter(src, dest)
|
18
|
+
custom_vars = HEADER_MAPPING.map.with_index(1) { |(name, key), slot|
|
19
|
+
set_custom_var(slot, name, @headers[key])
|
20
|
+
}.compact.join("\n");
|
21
|
+
|
22
|
+
dest.at_css("#ga-params").content += custom_vars
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
def normalise_headers(headers)
|
27
|
+
Hash[headers.map { |k, v| [k.upcase, v] }]
|
28
|
+
end
|
29
|
+
|
30
|
+
def set_custom_var(slot, name, value)
|
31
|
+
return nil unless value
|
32
|
+
"_gaq.push(#{JSON.dump([ "_setCustomVar", slot, name, value, 3])});"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
data/lib/slimmer/skin.rb
CHANGED
@@ -79,7 +79,7 @@ module Slimmer
|
|
79
79
|
AdminTitleInserter.new,
|
80
80
|
FooterRemover.new,
|
81
81
|
BodyInserter.new(),
|
82
|
-
BodyClassCopier.new
|
82
|
+
BodyClassCopier.new,
|
83
83
|
]
|
84
84
|
process(processors,body,template('admin'))
|
85
85
|
end
|
@@ -91,7 +91,8 @@ module Slimmer
|
|
91
91
|
BodyInserter.new(),
|
92
92
|
BodyClassCopier.new,
|
93
93
|
HeaderContextInserter.new(),
|
94
|
-
SectionInserter.new()
|
94
|
+
SectionInserter.new(),
|
95
|
+
GoogleAnalyticsConfigurator.new(request.env),
|
95
96
|
]
|
96
97
|
|
97
98
|
template_name = request.env.has_key?(TEMPLATE_HEADER) ? request.env[TEMPLATE_HEADER] : 'wrapper'
|
data/lib/slimmer/version.rb
CHANGED
@@ -0,0 +1,88 @@
|
|
1
|
+
require "test_helper"
|
2
|
+
require "v8"
|
3
|
+
|
4
|
+
module GoogleAnalyticsTest
|
5
|
+
|
6
|
+
GENERIC_DOCUMENT = <<-END
|
7
|
+
<html>
|
8
|
+
<head>
|
9
|
+
<title>The title of the page</title>
|
10
|
+
</head>
|
11
|
+
<body class="body_class">
|
12
|
+
<div id="wrapper">The body of the page</div>
|
13
|
+
</body>
|
14
|
+
</html>
|
15
|
+
END
|
16
|
+
|
17
|
+
module JavaScriptAssertions
|
18
|
+
def gaq
|
19
|
+
js = Nokogiri::HTML(last_response.body).at_css("#ga-params").text
|
20
|
+
context = V8::Context.new
|
21
|
+
context.eval(js)
|
22
|
+
context.eval("_gaq");
|
23
|
+
end
|
24
|
+
|
25
|
+
def assert_custom_var(slot, name, value, page_level)
|
26
|
+
# Ruby Racer JS arrays don't accept range indexing, so we must
|
27
|
+
# use a slightly longer workaround
|
28
|
+
vars = gaq.select { |a| a[0] == "_setCustomVar" }.
|
29
|
+
map { |a| (1..4).map { |i| a[i] } }
|
30
|
+
assert_includes vars, [slot, name, value, page_level]
|
31
|
+
end
|
32
|
+
|
33
|
+
def refute_custom_var(name)
|
34
|
+
vars = gaq.select { |a| a[0] == "_setCustomVar" }.map { |a| a[2] }
|
35
|
+
refute_includes vars, name
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class WithHeadersTest < SlimmerIntegrationTest
|
40
|
+
include JavaScriptAssertions
|
41
|
+
|
42
|
+
headers = {
|
43
|
+
"X-Slimmer-Section" => "rhubarb",
|
44
|
+
"X-Slimmer-Format" => "custard",
|
45
|
+
"X-Slimmer-Need-ID" => "42",
|
46
|
+
"X-Slimmer-Proposition" => "trifle"
|
47
|
+
}
|
48
|
+
given_response 200, GENERIC_DOCUMENT, headers
|
49
|
+
|
50
|
+
def test_should_pass_section_to_GA
|
51
|
+
assert_custom_var 1, "Section", "rhubarb", 3
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_should_pass_internal_format_name_to_GA
|
55
|
+
assert_custom_var 2, "Format", "custard", 3
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_should_pass_need_ID_to_GA
|
59
|
+
assert_custom_var 3, "NeedID", "42", 3
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_should_pass_proposition_to_GA
|
63
|
+
assert_custom_var 4, "Proposition", "trifle", 3
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
class WithoutHeadersTest < SlimmerIntegrationTest
|
68
|
+
include JavaScriptAssertions
|
69
|
+
|
70
|
+
given_response 200, GENERIC_DOCUMENT, {}
|
71
|
+
|
72
|
+
def test_should_omit_section
|
73
|
+
refute_custom_var "Section"
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_should_omit_internal_format_name
|
77
|
+
refute_custom_var "Format"
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_should_omit_need_ID
|
81
|
+
refute_custom_var "NeedID"
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_should_omit_proposition
|
85
|
+
refute_custom_var "Proposition"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slimmer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
5
|
-
prerelease:
|
4
|
+
version: 1.1.5
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Ben Griffiths
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-12-14 00:00:00.000000000Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: nokogiri
|
17
|
-
requirement: &
|
17
|
+
requirement: &70317042052480 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: 1.5.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70317042052480
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: rack
|
28
|
-
requirement: &
|
28
|
+
requirement: &70317042051600 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ~>
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: 1.3.5
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *70317042051600
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: plek
|
39
|
-
requirement: &
|
39
|
+
requirement: &70317042050180 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,21 @@ dependencies:
|
|
44
44
|
version: 0.1.8
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *70317042050180
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: json
|
50
|
+
requirement: &70317042048980 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
type: :runtime
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *70317042048980
|
48
59
|
- !ruby/object:Gem::Dependency
|
49
60
|
name: rake
|
50
|
-
requirement: &
|
61
|
+
requirement: &70317042047100 !ruby/object:Gem::Requirement
|
51
62
|
none: false
|
52
63
|
requirements:
|
53
64
|
- - ~>
|
@@ -55,10 +66,10 @@ dependencies:
|
|
55
66
|
version: 0.9.2.2
|
56
67
|
type: :development
|
57
68
|
prerelease: false
|
58
|
-
version_requirements: *
|
69
|
+
version_requirements: *70317042047100
|
59
70
|
- !ruby/object:Gem::Dependency
|
60
71
|
name: rack-test
|
61
|
-
requirement: &
|
72
|
+
requirement: &70317042039160 !ruby/object:Gem::Requirement
|
62
73
|
none: false
|
63
74
|
requirements:
|
64
75
|
- - ~>
|
@@ -66,10 +77,10 @@ dependencies:
|
|
66
77
|
version: 0.6.1
|
67
78
|
type: :development
|
68
79
|
prerelease: false
|
69
|
-
version_requirements: *
|
80
|
+
version_requirements: *70317042039160
|
70
81
|
- !ruby/object:Gem::Dependency
|
71
82
|
name: mocha
|
72
|
-
requirement: &
|
83
|
+
requirement: &70317042038140 !ruby/object:Gem::Requirement
|
73
84
|
none: false
|
74
85
|
requirements:
|
75
86
|
- - ~>
|
@@ -77,10 +88,10 @@ dependencies:
|
|
77
88
|
version: 0.9.12
|
78
89
|
type: :development
|
79
90
|
prerelease: false
|
80
|
-
version_requirements: *
|
91
|
+
version_requirements: *70317042038140
|
81
92
|
- !ruby/object:Gem::Dependency
|
82
93
|
name: webmock
|
83
|
-
requirement: &
|
94
|
+
requirement: &70317042037200 !ruby/object:Gem::Requirement
|
84
95
|
none: false
|
85
96
|
requirements:
|
86
97
|
- - ~>
|
@@ -88,7 +99,18 @@ dependencies:
|
|
88
99
|
version: '1.7'
|
89
100
|
type: :development
|
90
101
|
prerelease: false
|
91
|
-
version_requirements: *
|
102
|
+
version_requirements: *70317042037200
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: therubyracer
|
105
|
+
requirement: &70317042036560 !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
type: :development
|
112
|
+
prerelease: false
|
113
|
+
version_requirements: *70317042036560
|
92
114
|
description: Rack middleware for skinning pages using a specific template
|
93
115
|
email:
|
94
116
|
- bengriffiths@gmail.com
|
@@ -104,6 +126,7 @@ files:
|
|
104
126
|
- lib/slimmer/body_class_copier.rb
|
105
127
|
- lib/slimmer/body_inserter.rb
|
106
128
|
- lib/slimmer/footer_remover.rb
|
129
|
+
- lib/slimmer/google_analytics_configurator.rb
|
107
130
|
- lib/slimmer/header_context_inserter.rb
|
108
131
|
- lib/slimmer/railtie.rb
|
109
132
|
- lib/slimmer/section_inserter.rb
|
@@ -120,9 +143,10 @@ files:
|
|
120
143
|
- test/fixtures/404.html.erb
|
121
144
|
- test/fixtures/500.html.erb
|
122
145
|
- test/fixtures/wrapper.html.erb
|
146
|
+
- test/google_analytics_test.rb
|
123
147
|
- test/processors/body_inserter_test.rb
|
124
148
|
- test/processors/header_context_inserter_test.rb
|
125
|
-
- test/
|
149
|
+
- test/skin_test.rb
|
126
150
|
- test/test_helper.rb
|
127
151
|
- test/typical_usage_test.rb
|
128
152
|
homepage: http://github.com/alphagov/slimmer
|
@@ -140,9 +164,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
140
164
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
141
165
|
none: false
|
142
166
|
requirements:
|
143
|
-
- - ! '
|
167
|
+
- - ! '>='
|
144
168
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
169
|
+
version: '0'
|
146
170
|
requirements: []
|
147
171
|
rubyforge_project: slimmer
|
148
172
|
rubygems_version: 1.8.10
|
@@ -153,8 +177,9 @@ test_files:
|
|
153
177
|
- test/fixtures/404.html.erb
|
154
178
|
- test/fixtures/500.html.erb
|
155
179
|
- test/fixtures/wrapper.html.erb
|
180
|
+
- test/google_analytics_test.rb
|
156
181
|
- test/processors/body_inserter_test.rb
|
157
182
|
- test/processors/header_context_inserter_test.rb
|
158
|
-
- test/
|
183
|
+
- test/skin_test.rb
|
159
184
|
- test/test_helper.rb
|
160
185
|
- test/typical_usage_test.rb
|