html_aide 0.2.0 → 0.3.0
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 +4 -4
- data/README.md +21 -4
- data/html_aide.gemspec +2 -0
- data/lib/html_aide.rb +7 -0
- data/lib/html_aide/markup_parser.rb +24 -4
- data/lib/html_aide/page_validator.rb +30 -0
- data/lib/html_aide/string.rb +14 -0
- data/lib/html_aide/tag.rb +4 -1
- data/lib/html_aide/version.rb +1 -1
- data/spec/string_spec.rb +36 -0
- data/spec/validator_spec.rb +6 -0
- metadata +34 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e1a1f5377d543d9e34982c7f3789b75666f94675
|
4
|
+
data.tar.gz: 59d8f79763036abdd59eadda864d806ea51e7a71
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e6c817643a102d433d144dbb879aae3641ebb420835cdea13efe4d62fa6eb4f777cd074a18a01bd456d1decbd6fa2add444edc9a6fc48a36e384a5a63801101
|
7
|
+
data.tar.gz: 13bb561966785842dcee474e4e3278a9c273dc24a4ca4e613bb1ac022721e298e9ae1e7c6118beb3e007bebc7425286fa86f6534779fdfaeb6542e01a80bb540
|
data/README.md
CHANGED
@@ -61,12 +61,29 @@ validator.valid? #=> false
|
|
61
61
|
validator.errors.first.message #=> 'taco is not a valid HTML tag'
|
62
62
|
```
|
63
63
|
|
64
|
-
|
64
|
+
_Extend your object with HtmlAide_
|
65
65
|
|
66
66
|
```ruby
|
67
|
-
|
68
|
-
|
69
|
-
|
67
|
+
class MySpecialObject
|
68
|
+
using HtmlAide
|
69
|
+
attr_accessor :markup
|
70
|
+
|
71
|
+
def initialize(some_markup)
|
72
|
+
@markup = some_markup
|
73
|
+
end
|
74
|
+
|
75
|
+
def is_html?
|
76
|
+
@markup.html?
|
77
|
+
end
|
78
|
+
|
79
|
+
def to_element
|
80
|
+
@markup.to_html
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
obj = MySpecialObject.new('<div>Taco Meat</div>')
|
85
|
+
obj.is_html? #=> true
|
86
|
+
obj.to_element #=> <#HtmlAide::Element>
|
70
87
|
```
|
71
88
|
|
72
89
|
## Contributing
|
data/html_aide.gemspec
CHANGED
data/lib/html_aide.rb
CHANGED
@@ -1,5 +1,11 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler.require(:default, :development)
|
1
3
|
require 'ox'
|
2
4
|
require 'nokogiri'
|
5
|
+
require 'oj'
|
6
|
+
require 'rest-client'
|
7
|
+
|
8
|
+
require 'html_aide/string'
|
3
9
|
require 'html_aide/tag'
|
4
10
|
require 'html_aide/markup_parser'
|
5
11
|
require 'html_aide/validator'
|
@@ -8,6 +14,7 @@ require 'html_aide/invalid_element_error'
|
|
8
14
|
require 'html_aide/element'
|
9
15
|
require 'html_aide/null_element'
|
10
16
|
require 'html_aide/snippet_validator'
|
17
|
+
require 'html_aide/page_validator'
|
11
18
|
|
12
19
|
module HtmlAide
|
13
20
|
end
|
@@ -1,15 +1,35 @@
|
|
1
1
|
module HtmlAide
|
2
2
|
class MarkupParser
|
3
|
+
class ParseError < StandardError; end
|
3
4
|
|
4
|
-
def self.parse(markup)
|
5
|
-
|
6
|
-
|
5
|
+
def self.parse(markup, mode = :weak)
|
6
|
+
parser = new
|
7
|
+
parser.send("#{mode}_parse", markup)
|
7
8
|
rescue Ox::ParseError => e
|
8
9
|
raise ParseError, e.to_s
|
9
10
|
rescue Tag::ParseError => e
|
10
11
|
raise ParseError, e.to_s
|
11
12
|
end
|
12
13
|
|
13
|
-
|
14
|
+
private
|
15
|
+
|
16
|
+
# Weak mode is for parsing snippets of markup
|
17
|
+
def weak_parse(markup)
|
18
|
+
node = Ox.parse(markup)
|
19
|
+
node = Tag.parse(node)
|
20
|
+
end
|
21
|
+
|
22
|
+
# Strict mode is for parsing an entire document
|
23
|
+
def strict_parse(markup)
|
24
|
+
response = RestClient.post(
|
25
|
+
"http://validator.nu/?out=json",
|
26
|
+
markup,
|
27
|
+
{ 'Content-Type' => 'text/html; charset=utf-8', 'Content-Encoding' => 'UTF-8' }
|
28
|
+
)
|
29
|
+
@json = Oj.load(response.body)
|
30
|
+
errors = @json['messages'].select { |mssg| mssg['type'] == 'error' }
|
31
|
+
raise ParseError, errors.to_json if errors.any?
|
32
|
+
@json
|
33
|
+
end
|
14
34
|
end
|
15
35
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module HtmlAide
|
2
|
+
class PageValidator
|
3
|
+
|
4
|
+
def initialize(markup = '')
|
5
|
+
@markup = markup
|
6
|
+
@errors = []
|
7
|
+
parse_markup_for_errors
|
8
|
+
end
|
9
|
+
|
10
|
+
def valid?
|
11
|
+
@valid
|
12
|
+
end
|
13
|
+
|
14
|
+
def errors
|
15
|
+
@errors
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def parse_markup_for_errors
|
21
|
+
begin
|
22
|
+
node = MarkupParser.parse(@markup, :strict)
|
23
|
+
@valid = true
|
24
|
+
rescue MarkupParser::ParseError => e
|
25
|
+
@errors += Oj.dump(e)
|
26
|
+
@valid = false
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/html_aide/tag.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
|
+
require 'pry'
|
1
2
|
module HtmlAide
|
2
3
|
class Tag
|
3
4
|
VALID_TAGS = %w(
|
4
5
|
a abbr address area article aside audio
|
5
6
|
b base bdi bdo blockquote body br button
|
6
7
|
canvas caption cite code col colgroup
|
7
|
-
datalist dd del details dfn div dl dt
|
8
|
+
datalist dd del details dfn div dl dt doctype
|
8
9
|
em embed
|
9
10
|
fieldset figcaption figure footer form
|
10
11
|
h1 h2 h3 h4 h5 h6 head header hgroup hr html
|
@@ -24,6 +25,8 @@ module HtmlAide
|
|
24
25
|
wbr
|
25
26
|
).freeze
|
26
27
|
|
28
|
+
DOCTYPE_REGEXP = /<\!doctype\shtml>/i
|
29
|
+
|
27
30
|
def self.parse(ox_node)
|
28
31
|
raise ParseError, "#{ox_node.name} is not a valid HTML tag." unless valid_tag?(ox_node.name)
|
29
32
|
ox_node
|
data/lib/html_aide/version.rb
CHANGED
data/spec/string_spec.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class AFakeClass
|
4
|
+
using HtmlAide
|
5
|
+
|
6
|
+
def markup
|
7
|
+
"<div>Yup</div>"
|
8
|
+
end
|
9
|
+
|
10
|
+
def html?
|
11
|
+
markup.html?
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_html
|
15
|
+
markup.to_html
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe AFakeClass do
|
20
|
+
|
21
|
+
describe '#html?' do
|
22
|
+
it 'validates the string as html' do
|
23
|
+
tester = AFakeClass.new
|
24
|
+
expect(tester).to be_html
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '#to_html' do
|
29
|
+
it 'turns the markup into an HtmlAide::Element object' do
|
30
|
+
tester = AFakeClass.new
|
31
|
+
expect(tester.to_html.name).to eq 'div'
|
32
|
+
expect(tester.to_html.class).to eq HtmlAide::Element
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
data/spec/validator_spec.rb
CHANGED
@@ -25,6 +25,12 @@ describe HtmlAide::Validator do
|
|
25
25
|
validator = HtmlAide::Validator.validate('<input />')
|
26
26
|
expect(validator).to be_valid
|
27
27
|
end
|
28
|
+
|
29
|
+
it 'returns true for a full page markup' do
|
30
|
+
full_page = '<!DOCTYPE html><html><head><title>Test</title></head></html>'
|
31
|
+
validator = HtmlAide::Validator.validate(full_page, :page)
|
32
|
+
expect(validator).to be_valid
|
33
|
+
end
|
28
34
|
end
|
29
35
|
|
30
36
|
context 'when the markup is not valid' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: html_aide
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Woertink
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-07-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -94,6 +94,34 @@ dependencies:
|
|
94
94
|
- - ">="
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rest-client
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: oj
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
97
125
|
description: Validate HTML snippets and markup.
|
98
126
|
email:
|
99
127
|
- jeremywoertink@gmail.com
|
@@ -114,7 +142,9 @@ files:
|
|
114
142
|
- lib/html_aide/invalid_element_error.rb
|
115
143
|
- lib/html_aide/markup_parser.rb
|
116
144
|
- lib/html_aide/null_element.rb
|
145
|
+
- lib/html_aide/page_validator.rb
|
117
146
|
- lib/html_aide/snippet_validator.rb
|
147
|
+
- lib/html_aide/string.rb
|
118
148
|
- lib/html_aide/tag.rb
|
119
149
|
- lib/html_aide/validator.rb
|
120
150
|
- lib/html_aide/version.rb
|
@@ -122,6 +152,7 @@ files:
|
|
122
152
|
- spec/invalid_element_error_spec.rb
|
123
153
|
- spec/snippet_validator_spec.rb
|
124
154
|
- spec/spec_helper.rb
|
155
|
+
- spec/string_spec.rb
|
125
156
|
- spec/tag_spec.rb
|
126
157
|
- spec/validator_spec.rb
|
127
158
|
homepage: https://github.com/devpointlabs/html_aide
|
@@ -153,5 +184,6 @@ test_files:
|
|
153
184
|
- spec/invalid_element_error_spec.rb
|
154
185
|
- spec/snippet_validator_spec.rb
|
155
186
|
- spec/spec_helper.rb
|
187
|
+
- spec/string_spec.rb
|
156
188
|
- spec/tag_spec.rb
|
157
189
|
- spec/validator_spec.rb
|