rack-pjax 0.5.9 → 0.6.0.beta

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
@@ -62,7 +62,7 @@ IV. Fire up your [pushState-enabled browser](http://caniuse.com/#search=pushstat
62
62
  Requirements
63
63
  ------------
64
64
 
65
- - Hpricot
65
+ - Nokogiri
66
66
 
67
67
 
68
68
  Contributors
@@ -1,5 +1,5 @@
1
1
  module Rack
2
2
  class Pjax
3
- VERSION = "0.5.9"
3
+ VERSION = "0.6.0.beta"
4
4
  end
5
5
  end
data/lib/rack/pjax.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'hpricot'
1
+ require 'nokogiri'
2
2
 
3
3
  module Rack
4
4
  class Pjax
@@ -10,31 +10,34 @@ module Rack
10
10
 
11
11
  def call(env)
12
12
  status, headers, body = @app.call(env)
13
+ return [status, headers, body] unless pjax?(env)
14
+
13
15
  headers = HeaderHash.new(headers)
14
16
 
15
- if pjax?(env)
16
- new_body = ""
17
- body.each do |b|
18
- parsed_body = Hpricot.XML(b)
19
- container = parsed_body.at("[@data-pjax-container]")
17
+ new_body = ""
18
+ body.each do |b|
19
+ b.force_encoding('UTF-8') if RUBY_VERSION > '1.9.0'
20
+
21
+ parsed_body = Nokogiri::HTML(b)
22
+ container = parsed_body.at("[@data-pjax-container]")
23
+
24
+ new_body << begin
20
25
  if container
21
- children = container.children
22
26
  title = parsed_body.at("title")
23
27
 
24
- new_body << title.to_s if title
25
- new_body << container.inner_html
28
+ "%s%s" % [title, container.inner_html]
26
29
  else
27
- new_body << b
30
+ b
28
31
  end
29
32
  end
33
+ end
30
34
 
31
- body.close if body.respond_to?(:close)
32
- body = [new_body]
35
+ body.close if body.respond_to?(:close)
33
36
 
34
- headers['Content-Length'] &&= bytesize(new_body).to_s
35
- headers['X-PJAX-URL'] = env['REQUEST_URI'] if env['REQUEST_URI']
36
- end
37
- [status, headers, body]
37
+ headers['Content-Length'] &&= bytesize(new_body).to_s
38
+ headers['X-PJAX-URL'] = Rack::Request.new(env).fullpath
39
+
40
+ [status, headers, [new_body]]
38
41
  end
39
42
 
40
43
  protected
data/rack-pjax.gemspec CHANGED
@@ -19,5 +19,5 @@ Gem::Specification.new do |s|
19
19
  s.require_paths = ["lib"]
20
20
 
21
21
  s.add_dependency('rack', '~>1.3')
22
- s.add_dependency('hpricot', '~>0.8.6')
22
+ s.add_dependency('nokogiri', '~>1.5')
23
23
  end
@@ -41,7 +41,7 @@ describe Rack::Pjax do
41
41
 
42
42
  get "/", {}, {"HTTP_X_PJAX" => "true"}
43
43
 
44
- body.should == '<article>World!<img src="test.jpg" /></article>'
44
+ body.should == '<article>World!<img src="test.jpg"></article>'
45
45
  end
46
46
 
47
47
  it "should handle nesting of elements inside anchor tags" do
@@ -52,6 +52,14 @@ describe Rack::Pjax do
52
52
  body.should == '<a href="#"><h1>World!</h1></a>'
53
53
  end
54
54
 
55
+ it "should handle html5 br tags correctly" do
56
+ self.class.app = generate_app(:body => '<html><body><div data-pjax-container><p>foo<br>bar</p></div></body></html>')
57
+
58
+ get "/", {}, {"HTTP_X_PJAX" => "true"}
59
+
60
+ body.should == '<p>foo<br>bar</p>'
61
+ end
62
+
55
63
  it "should return the correct Content Length" do
56
64
  get "/", {}, {"HTTP_X_PJAX" => "true"}
57
65
  headers['Content-Length'].should == Rack::Utils.bytesize(body).to_s
metadata CHANGED
@@ -1,19 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-pjax
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.9
5
- prerelease:
4
+ version: 0.6.0.beta
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Gert Goet
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-13 00:00:00.000000000Z
12
+ date: 2012-08-28 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
16
- requirement: &70234297805660 !ruby/object:Gem::Requirement
16
+ requirement: &70109943306240 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,18 +21,18 @@ dependencies:
21
21
  version: '1.3'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70234297805660
24
+ version_requirements: *70109943306240
25
25
  - !ruby/object:Gem::Dependency
26
- name: hpricot
27
- requirement: &70234297803300 !ruby/object:Gem::Requirement
26
+ name: nokogiri
27
+ requirement: &70109943305480 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
31
31
  - !ruby/object:Gem::Version
32
- version: 0.8.6
32
+ version: '1.5'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70234297803300
35
+ version_requirements: *70109943305480
36
36
  description: Serve pjax responses through rack middleware
37
37
  email:
38
38
  - gert@thinkcreate.nl
@@ -67,16 +67,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
67
67
  version: '0'
68
68
  segments:
69
69
  - 0
70
- hash: -4041926408283273529
70
+ hash: -1905601241101123919
71
71
  required_rubygems_version: !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
- - - ! '>='
74
+ - - ! '>'
75
75
  - !ruby/object:Gem::Version
76
- version: '0'
77
- segments:
78
- - 0
79
- hash: -4041926408283273529
76
+ version: 1.3.1
80
77
  requirements: []
81
78
  rubyforge_project: rack-pjax
82
79
  rubygems_version: 1.8.10