slimmer 1.1.4beta7 → 1.1.5

Sign up to get free protection for your applications and to get access to all the features.
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