slimmer 1.1.40 → 1.1.41

Sign up to get free protection for your applications and to get access to all the features.
data/lib/slimmer/app.rb CHANGED
@@ -20,7 +20,7 @@ module Slimmer
20
20
  options[:asset_host] = Plek.current.find("assets")
21
21
  end
22
22
 
23
- @skin = Skin.new options[:asset_host], options[:cache_templates], options[:prefix], :logger => logger
23
+ @skin = Skin.new options.merge(logger: logger)
24
24
  end
25
25
 
26
26
  def call(env)
@@ -1,12 +1,13 @@
1
1
  module Slimmer
2
2
  class BodyInserter
3
- def initialize(path='#wrapper')
4
- @path = path
3
+ def initialize(source_id='wrapper', destination_id='wrapper')
4
+ @source_selector = '#' + source_id
5
+ @destination_selector = '#' + destination_id
5
6
  end
6
7
 
7
8
  def filter(src,dest)
8
- body = Nokogiri::HTML.fragment(src.at_css(@path).to_html)
9
- dest.at_css(@path).replace(body)
9
+ body = Nokogiri::HTML.fragment(src.at_css(@source_selector).to_html)
10
+ dest.at_css(@destination_selector).replace(body)
10
11
  end
11
12
  end
12
13
  end
data/lib/slimmer/skin.rb CHANGED
@@ -18,13 +18,17 @@ module Slimmer
18
18
  attr_accessor :strict
19
19
  private :strict=, :strict
20
20
 
21
+ attr_accessor :options
22
+ private :options=, :options
23
+
21
24
  # TODO: Extract the cache to something we can pass in instead of using
22
25
  # true/false and an in-memory cache.
23
- def initialize asset_host, use_cache = false, prefix = nil, options = {}
24
- self.asset_host = asset_host
26
+ def initialize options = {}
27
+ self.options = options
28
+ self.asset_host = options[:asset_host]
25
29
  self.templated_cache = {}
26
- self.prefix = prefix
27
- self.use_cache = use_cache
30
+ self.prefix = options[:prefix]
31
+ self.use_cache = options[:use_cache] || false
28
32
  self.logger = options[:logger] || NullLogger.instance
29
33
  self.strict = options[:strict] || (%w{development test}.include?(ENV['RACK_ENV']))
30
34
  end
@@ -168,7 +172,7 @@ module Slimmer
168
172
  processors = [
169
173
  TitleInserter.new(),
170
174
  TagMover.new(),
171
- BodyInserter.new(),
175
+ BodyInserter.new(options[:wrapper_id] || 'wrapper'),
172
176
  BodyClassCopier.new,
173
177
  HeaderContextInserter.new(),
174
178
  SectionInserter.new(),
@@ -1,3 +1,3 @@
1
1
  module Slimmer
2
- VERSION = '1.1.40'
2
+ VERSION = '1.1.41'
3
3
  end
@@ -26,18 +26,18 @@ class BodyInserterTest < MiniTest::Unit::TestCase
26
26
  assert_equal unicode_endash, template.at_css("#wrapper p").inner_text
27
27
  end
28
28
 
29
- def test_should_allow_replacement_of_arbitrary_wrappers
29
+ def test_should_allow_replacement_of_arbitrary_segments_into_wrapper
30
30
  template = as_nokogiri %{
31
31
  <html><body><div>
32
32
  <div id="wrapper">don't touch this</div>
33
- <div id="some_other_id"></div></div></body></html>
33
+ </body></html>
34
34
  }
35
35
  source = as_nokogiri %{
36
36
  <html><body><div id="some_other_id"><p>this should be moved</p></div></body></html>
37
37
  }
38
38
 
39
- Slimmer::BodyInserter.new("#some_other_id").filter(source, template)
40
- assert_in template, "#wrapper", %{don't touch this}
39
+ Slimmer::BodyInserter.new("some_other_id").filter(source, template)
40
+ assert_not_in template, "#wrapper"
41
41
  assert_in template, "#some_other_id", %{<p>this should be moved</p>}
42
42
  end
43
43
  end
data/test/skin_test.rb CHANGED
@@ -2,7 +2,7 @@ require "test_helper"
2
2
 
3
3
  class SkinTest < MiniTest::Unit::TestCase
4
4
  def test_template_can_be_loaded
5
- skin = Slimmer::Skin.new "http://example.local/"
5
+ skin = Slimmer::Skin.new asset_host: "http://example.local/"
6
6
  expected_url = "http://example.local/templates/example.html.erb"
7
7
  stub_request(:get, expected_url).to_return :body => "<foo />"
8
8
 
@@ -13,7 +13,7 @@ class SkinTest < MiniTest::Unit::TestCase
13
13
  end
14
14
 
15
15
  def test_should_interpolate_values_for_prefix
16
- skin = Slimmer::Skin.new "http://example.local/", false, "this-is-the-prefix"
16
+ skin = Slimmer::Skin.new asset_host: "http://example.local/", use_cache: false, prefix: "this-is-the-prefix"
17
17
  expected_url = "http://example.local/templates/example.html.erb"
18
18
  stub_request(:get, expected_url).to_return :body => "<p><%= prefix %></p>"
19
19
 
@@ -22,7 +22,7 @@ class SkinTest < MiniTest::Unit::TestCase
22
22
  end
23
23
 
24
24
  def test_should_raise_appropriate_exception_when_template_not_found
25
- skin = Slimmer::Skin.new "http://example.local/"
25
+ skin = Slimmer::Skin.new asset_host: "http://example.local/"
26
26
  expected_url = "http://example.local/templates/example.html.erb"
27
27
  stub_request(:get, expected_url).to_return(:status => '404')
28
28
 
@@ -32,7 +32,7 @@ class SkinTest < MiniTest::Unit::TestCase
32
32
  end
33
33
 
34
34
  def test_should_raise_appropriate_exception_when_cant_reach_template_host
35
- skin = Slimmer::Skin.new "http://example.local/"
35
+ skin = Slimmer::Skin.new asset_host: "http://example.local/"
36
36
  expected_url = "http://example.local/templates/example.html.erb"
37
37
  stub_request(:get, expected_url).to_raise(Errno::ECONNREFUSED)
38
38
 
data/test/test_helper.rb CHANGED
@@ -27,12 +27,12 @@ end
27
27
  class SlimmerIntegrationTest < MiniTest::Unit::TestCase
28
28
  include Rack::Test::Methods
29
29
 
30
- def self.given_response(code, body, headers={})
30
+ def self.given_response(code, body, headers={}, app_options={})
31
31
  define_method(:app) do
32
32
  inner_app = proc { |env|
33
33
  [code, headers.merge("Content-Type" => "text/html"), body]
34
34
  }
35
- Slimmer::App.new inner_app, :asset_host => "http://template.local"
35
+ Slimmer::App.new inner_app, {asset_host: "http://template.local"}.merge(app_options)
36
36
  end
37
37
 
38
38
  define_method :teardown do
@@ -91,4 +91,9 @@ class SlimmerIntegrationTest < MiniTest::Unit::TestCase
91
91
  end
92
92
  end
93
93
  end
94
+
95
+ def assert_no_selector(selector, message=nil)
96
+ message ||= "Expected not to find #{selector.inspect}, but did"
97
+ assert_nil Nokogiri::HTML.parse(last_response.body).at_css(selector), message
98
+ end
94
99
  end
@@ -308,6 +308,21 @@ module TypicalUsage
308
308
  def test_should_return_503_if_an_API_call_times_out
309
309
  assert_equal 503, last_response.status
310
310
  end
311
+ end
312
+
313
+ class ArbitraryWrapperIdTest < SlimmerIntegrationTest
314
+
315
+ given_response 200, %{
316
+ <html>
317
+ <body>
318
+ <div id="custom_wrapper">The body of the page</div>
319
+ </body>
320
+ </html>
321
+ }, {}, {wrapper_id: "custom_wrapper"}
311
322
 
323
+ def test_should_replace_wrapper_with_custom_wrapper
324
+ assert_rendered_in_template "body .content #custom_wrapper", "The body of the page"
325
+ assert_no_selector "#wrapper"
326
+ end
312
327
  end
313
328
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: slimmer
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.1.40
5
+ version: 1.1.41
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-05-11 00:00:00 Z
14
+ date: 2012-05-29 00:00:00 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: nokogiri
@@ -204,7 +204,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
204
204
  requirements:
205
205
  - - ">="
206
206
  - !ruby/object:Gem::Version
207
- hash: 1272022387051838496
207
+ hash: -3341972131141185344
208
208
  segments:
209
209
  - 0
210
210
  version: "0"
@@ -213,7 +213,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
213
213
  requirements:
214
214
  - - ">="
215
215
  - !ruby/object:Gem::Version
216
- hash: 1272022387051838496
216
+ hash: -3341972131141185344
217
217
  segments:
218
218
  - 0
219
219
  version: "0"