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 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 should you want to use one
11
- of the supplied templates. If you want to use your own set of templates you will need
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
- YourApp::Application.configure do
15
- config.slimmer.template_path = '/place/on/file/system'
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.template_host = 'http://your.server.somewhere'
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 or in that folder
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, :template_path => "/path/to/my/templates"
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.
@@ -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
+
@@ -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'
@@ -1,3 +1,3 @@
1
1
  module Slimmer
2
- VERSION = '1.1.4beta7'
2
+ VERSION = '1.1.5'
3
3
  end
@@ -12,5 +12,9 @@
12
12
  <div id="wrapper" class="group">
13
13
  </div>
14
14
  </div>
15
+
16
+ <script id="ga-params" type="text/javascript">
17
+ var _gaq = _gaq || [];
18
+ </script>
15
19
  </body>
16
20
  </html>
@@ -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
@@ -1,6 +1,6 @@
1
1
  require "test_helper"
2
2
 
3
- class TestSlimmer < MiniTest::Unit::TestCase
3
+ class SkinTest < MiniTest::Unit::TestCase
4
4
  def test_template_can_be_loaded
5
5
  skin = Slimmer::Skin.new "http://example.local/"
6
6
  expected_url = "http://example.local/templates/example.html.erb"
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.4beta7
5
- prerelease: 5
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-11-29 00:00:00.000000000Z
13
+ date: 2011-12-14 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: nokogiri
17
- requirement: &70214553530820 !ruby/object:Gem::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: *70214553530820
25
+ version_requirements: *70317042052480
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rack
28
- requirement: &70214553528460 !ruby/object:Gem::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: *70214553528460
36
+ version_requirements: *70317042051600
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: plek
39
- requirement: &70214553516400 !ruby/object:Gem::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: *70214553516400
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: &70214553504100 !ruby/object:Gem::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: *70214553504100
69
+ version_requirements: *70317042047100
59
70
  - !ruby/object:Gem::Dependency
60
71
  name: rack-test
61
- requirement: &70214553496520 !ruby/object:Gem::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: *70214553496520
80
+ version_requirements: *70317042039160
70
81
  - !ruby/object:Gem::Dependency
71
82
  name: mocha
72
- requirement: &70214553492360 !ruby/object:Gem::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: *70214553492360
91
+ version_requirements: *70317042038140
81
92
  - !ruby/object:Gem::Dependency
82
93
  name: webmock
83
- requirement: &70214553484460 !ruby/object:Gem::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: *70214553484460
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/slimmer_test.rb
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: 1.3.1
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/slimmer_test.rb
183
+ - test/skin_test.rb
159
184
  - test/test_helper.rb
160
185
  - test/typical_usage_test.rb