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