bypass 0.0.4 → 0.0.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.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- Y2ZhMzg2MTM3ZjEwMDkzM2RmZDhmMDdjYTdhNWUyNTgzM2E0ZDljYQ==
5
- data.tar.gz: !binary |-
6
- NDg3NGIwZGM4MzZjMDJiMjJhNmU0MGYzMWVhNmJmYmJlNWVjY2EyZA==
2
+ SHA1:
3
+ metadata.gz: 718e8ae5c353526d782ccaa70459e5f5dc70b84f
4
+ data.tar.gz: 870eadce1dfe1ba0fe41625d12527fe3fa09c03b
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- ZGFkODc2NDNjODQzN2IzNTM4MDM0ZmY1NzM5OGQyODc3NDA3M2UzZTU1NjQw
10
- ZTNiMmYwOTE2MDY3NTg3MGRiMmUxYTgxNDFhMjVkNjQ4ZTllMGYyZTI2NGQ5
11
- YmU5ODQ2YzNjMzBmZjUxMTMwMzUxM2QyNWQ4MjY3ZDEwYzIxMzk=
12
- data.tar.gz: !binary |-
13
- ODYyMDZiODQ3ZjZhOGQxNmIyZGJkNGVmMzBjNWE1NDdhZTU2N2FjODAxODI2
14
- ZjE1MTI2NGY0ODc2ZmM1NTc1NmQ2NTk3NDhjMDU3NDE0ZThlOTlkMjMwNjU2
15
- YTM1MjNjM2I5NzFiYjgxZWJjZjUzNjA3YmUzNWEyNTMzMGNkNmU=
6
+ metadata.gz: 6a11749670fe237ebe686e126a9620ed2463c9855284290850c9ca81cf85d14f7c5e679b70543006986ec668d18538ced58ec7e21b889dad8ec79bf43aa02a55
7
+ data.tar.gz: a2d4dfcd1fc1ff96b30452dc251bfff9a1826fd6de7e860016a2ff00cc1584ba43d6ad33232b23d867f4850fd6b9f2eef6200bae7b6d16af3ddfdadfef42f66e
data/.travis.yml CHANGED
@@ -2,6 +2,4 @@ language: ruby
2
2
  rvm:
3
3
  - 2.0.0
4
4
  - 1.9.2
5
- - jruby-19mode
6
5
  - ruby-head
7
- - jruby-head
data/README.md CHANGED
@@ -38,6 +38,7 @@ filter = Bypass::TextFilter.new(text)
38
38
 
39
39
  filter.replace do |url|
40
40
  url.append_to_query_values(:id => 123)
41
+ url
41
42
  end
42
43
 
43
44
  filter.content
@@ -54,6 +55,7 @@ filter = Bypass::HTMLFilter.new(text)
54
55
 
55
56
  filter.replace do |url|
56
57
  url.append_to_query_values(:id => 123)
58
+ url
57
59
  end
58
60
 
59
61
  filter.content
data/bypass.gemspec CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |gem|
8
8
  gem.version = Bypass::VERSION
9
9
  gem.authors = ["Derrick Reimer"]
10
10
  gem.email = ["derrickreimer@gmail.com"]
11
- gem.description = %q{Mutate URLs and hyperlinks in HTML and plain text documents with ease}
12
- gem.summary = %q{Mutate URLs and hyperlinks in HTML and plain text documents with ease}
11
+ gem.description = "Mutate URLs and hyperlinks in HTML and plain text documents"
12
+ gem.summary = "Mutate URLs and hyperlinks in HTML and plain text documents with ease"
13
13
  gem.homepage = "https://github.com/djreimer/bypass"
14
14
 
15
15
  gem.files = `git ls-files`.split($/)
@@ -19,6 +19,7 @@ Gem::Specification.new do |gem|
19
19
 
20
20
  gem.add_dependency "nokogiri", "~> 1.5"
21
21
  gem.add_dependency "addressable", "~> 2.0"
22
- gem.add_development_dependency "shoulda-context", "~> 1.0"
22
+ gem.add_development_dependency "minitest", "~> 5.0"
23
+ gem.add_development_dependency "shoulda-context", "~> 1.2"
23
24
  gem.add_development_dependency "mocha"
24
25
  end
data/lib/bypass/filter.rb CHANGED
@@ -1,13 +1,14 @@
1
1
  module Bypass
2
2
  class Filter
3
- attr_reader :content
3
+ attr_reader :content, :fragment
4
4
 
5
5
  URL_PATTERN = /\bhttps?:\/\/
6
6
  [a-zA-Z0-9\-\._~:\/\?#\[\]@!$&'\(\)\*\+,;=%]+
7
7
  [a-zA-Z0-9\-_~:\/\?#\[\]@!$&\*\+;=%]/x
8
8
 
9
- def initialize(content)
10
- @content = content.to_s
9
+ def initialize(content, options = {})
10
+ @content = content.to_s.encode("UTF-8")
11
+ @fragment = options.fetch(:fragment, true)
11
12
  end
12
13
 
13
14
  def replace
@@ -46,11 +46,21 @@ module Bypass
46
46
  end
47
47
 
48
48
  def parsed_content
49
- @parsed_content ||= parse_html_fragment(@content)
49
+ @parsed_content ||= begin
50
+ if fragment
51
+ parse_html_fragment(@content)
52
+ else
53
+ parse_html_document(@content)
54
+ end
55
+ end
50
56
  end
51
57
 
52
58
  def parse_html_fragment(html)
53
59
  Nokogiri::HTML::DocumentFragment.parse(html)
54
60
  end
61
+
62
+ def parse_html_document(html)
63
+ Nokogiri::HTML::Document.parse(html)
64
+ end
55
65
  end
56
66
  end
@@ -1,3 +1,3 @@
1
1
  module Bypass
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
@@ -1,7 +1,7 @@
1
1
  require 'addressable/uri'
2
2
  require File.dirname(__FILE__) + '/../test_helper.rb'
3
3
 
4
- class Bypass::FilterTest < Test::Unit::TestCase
4
+ class Bypass::FilterTest < MiniTest::Test
5
5
  context "#to_s" do
6
6
  should "return content" do
7
7
  filter = Bypass::Filter.new("foo")
@@ -1,7 +1,7 @@
1
1
  require 'addressable/uri'
2
2
  require File.dirname(__FILE__) + '/../test_helper.rb'
3
3
 
4
- class Bypass::HTMLFilterTest < Test::Unit::TestCase
4
+ class Bypass::HTMLFilterTest < MiniTest::Test
5
5
  context "#replace" do
6
6
  should "replace hrefs" do
7
7
  text = "<a href=\"http://yahoo.com\">Yahoo</a>"
@@ -72,5 +72,36 @@ class Bypass::HTMLFilterTest < Test::Unit::TestCase
72
72
  filter.expects(:parsed_content).returns(stub(:to_s => "bar"))
73
73
  assert_equal "bar", filter.content
74
74
  end
75
+
76
+ should "handle document fragments" do
77
+ filter = Bypass::HTMLFilter.new("<div>text</div>")
78
+ assert_equal "<div>text</div>", filter.content
79
+ end
80
+
81
+ should "handle whole documents" do
82
+ lines = []
83
+
84
+ lines << "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">"
85
+ lines << "<html>"
86
+ lines << " <head></head>"
87
+ lines << " <body>"
88
+ lines << " <div>Content</div>"
89
+ lines << " </body>"
90
+ lines << "</html>"
91
+
92
+ document = lines.join("\n")
93
+ expected = document.sub("<head></head>", "<head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"></head>")
94
+
95
+ filter = Bypass::HTMLFilter.new(document, :fragment => false)
96
+ assert_normalized_equal expected, filter.content
97
+ end
98
+ end
99
+
100
+ def assert_normalized_equal(expected, actual)
101
+ assert_equal normalize_output(expected), normalize_output(actual)
102
+ end
103
+
104
+ def normalize_output(html)
105
+ html.lines.map(&:strip).join("")
75
106
  end
76
107
  end
@@ -1,7 +1,7 @@
1
1
  require 'addressable/uri'
2
2
  require File.dirname(__FILE__) + '/../test_helper.rb'
3
3
 
4
- class Bypass::TextFilterTest < Test::Unit::TestCase
4
+ class Bypass::TextFilterTest < MiniTest::Test
5
5
  context "#replace" do
6
6
  should "replace URLs" do
7
7
  text = "http://yahoo.com"
@@ -1,6 +1,6 @@
1
1
  require File.dirname(__FILE__) + '/../test_helper.rb'
2
2
 
3
- class Bypass::URITest < Test::Unit::TestCase
3
+ class Bypass::URITest < MiniTest::Test
4
4
  context "#append_to_query_values" do
5
5
  should "add values to the query string if it starts empty" do
6
6
  uri = Bypass::URI.parse("http://www.getdrip.com")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bypass
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Derrick Reimer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-19 00:00:00.000000000 Z
11
+ date: 2014-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -38,35 +38,49 @@ dependencies:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '5.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '5.0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: shoulda-context
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - ~>
46
60
  - !ruby/object:Gem::Version
47
- version: '1.0'
61
+ version: '1.2'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - ~>
53
67
  - !ruby/object:Gem::Version
54
- version: '1.0'
68
+ version: '1.2'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: mocha
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - ! '>='
73
+ - - '>='
60
74
  - !ruby/object:Gem::Version
61
75
  version: '0'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - ! '>='
80
+ - - '>='
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
69
- description: Mutate URLs and hyperlinks in HTML and plain text documents with ease
83
+ description: Mutate URLs and hyperlinks in HTML and plain text documents
70
84
  email:
71
85
  - derrickreimer@gmail.com
72
86
  executables: []
@@ -100,17 +114,17 @@ require_paths:
100
114
  - lib
101
115
  required_ruby_version: !ruby/object:Gem::Requirement
102
116
  requirements:
103
- - - ! '>='
117
+ - - '>='
104
118
  - !ruby/object:Gem::Version
105
119
  version: '0'
106
120
  required_rubygems_version: !ruby/object:Gem::Requirement
107
121
  requirements:
108
- - - ! '>='
122
+ - - '>='
109
123
  - !ruby/object:Gem::Version
110
124
  version: '0'
111
125
  requirements: []
112
126
  rubyforge_project:
113
- rubygems_version: 2.1.10
127
+ rubygems_version: 2.3.0
114
128
  signing_key:
115
129
  specification_version: 4
116
130
  summary: Mutate URLs and hyperlinks in HTML and plain text documents with ease