html_aide 0.1.0 → 0.2.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 +15 -2
- data/html_aide.gemspec +1 -1
- data/lib/html_aide.rb +2 -0
- data/lib/html_aide/markup_parser.rb +15 -0
- data/lib/html_aide/snippet_validator.rb +2 -2
- data/lib/html_aide/tag.rb +38 -0
- data/lib/html_aide/version.rb +1 -1
- data/spec/tag_spec.rb +25 -0
- data/spec/validator_spec.rb +36 -2
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 84a4214a1dd1e8ca6c2cd56a857f5b05258e2749
|
4
|
+
data.tar.gz: f1b8d75bdbbc117dcc8ad0789298caa02e0cfdb8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed7d0580d08699bebe5ba7c8c8d2a689e56ca7805b3db0ea44d5beeb646277070ef19998d5f72e4681ec3abca53c2fc2701b07cea4f395a9bfafb15bf13539e9
|
7
|
+
data.tar.gz: 35096bd9be92d694f7ab1106a9b59100d46afd5067a108a414c992f2d9e8e6a6f9f93d889447684d3503d1ea9ebbf581a68fe0d1762a47542a33aa159318e472
|
data/README.md
CHANGED
@@ -21,6 +21,8 @@ Or install it yourself as:
|
|
21
21
|
|
22
22
|
## Usage
|
23
23
|
|
24
|
+
_With valid markup_
|
25
|
+
|
24
26
|
```ruby
|
25
27
|
snippet = '<div id="taco"><strong>Taco</strong> Meat</div>'
|
26
28
|
validator = HtmlAide::Validator.validate(snippet)
|
@@ -37,6 +39,8 @@ tag.children.first.to_s #=> '<strong>Taco</strong>'
|
|
37
39
|
tag.to_s #=> '<div id="taco"><strong>Taco</strong> Meat</div>'
|
38
40
|
```
|
39
41
|
|
42
|
+
_With invalid markup_
|
43
|
+
|
40
44
|
```ruby
|
41
45
|
snippet = '<div>Messed up </div'
|
42
46
|
validator = HtmlAide::Validator.validate(snippet)
|
@@ -44,11 +48,20 @@ validator.valid? #=> false
|
|
44
48
|
validator.class #=> HtmlAide::SnippetValidator
|
45
49
|
validator.errors #=> [<#HtmlAide::InvalidElementError>]
|
46
50
|
error = validator.errors.first #=> HtmlAide::InvalidElementError
|
47
|
-
error.message #=> '
|
51
|
+
error.message #=> 'invalid format, document not terminated at line 1, column 21'
|
48
52
|
validator.element #=> HtmlAide::NullElement
|
49
53
|
```
|
50
54
|
|
51
|
-
|
55
|
+
_Also validates invalid HTML 5 tags_
|
56
|
+
|
57
|
+
```ruby
|
58
|
+
snippet = '<taco>Chicken Soft</taco>'
|
59
|
+
validator = HtmlAide::Validator.validate(snippet)
|
60
|
+
validator.valid? #=> false
|
61
|
+
validator.errors.first.message #=> 'taco is not a valid HTML tag'
|
62
|
+
```
|
63
|
+
|
64
|
+
## Future implementations
|
52
65
|
|
53
66
|
```ruby
|
54
67
|
snippet = '<div id="taco"><strong>Taco</strong> Meat</div>'
|
data/html_aide.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["jeremywoertink@gmail.com"]
|
11
11
|
spec.summary = %q{Validate HTML snippets and markup.}
|
12
12
|
spec.description = %q{Validate HTML snippets and markup.}
|
13
|
-
spec.homepage = ""
|
13
|
+
spec.homepage = "https://github.com/devpointlabs/html_aide"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
data/lib/html_aide.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
module HtmlAide
|
2
|
+
class MarkupParser
|
3
|
+
|
4
|
+
def self.parse(markup)
|
5
|
+
node = Ox.parse(markup)
|
6
|
+
node = Tag.parse(node)
|
7
|
+
rescue Ox::ParseError => e
|
8
|
+
raise ParseError, e.to_s
|
9
|
+
rescue Tag::ParseError => e
|
10
|
+
raise ParseError, e.to_s
|
11
|
+
end
|
12
|
+
|
13
|
+
class ParseError < StandardError; end
|
14
|
+
end
|
15
|
+
end
|
@@ -25,10 +25,10 @@ module HtmlAide
|
|
25
25
|
|
26
26
|
def create_node_and_set_element
|
27
27
|
begin
|
28
|
-
node =
|
28
|
+
node = MarkupParser.parse(@markup)
|
29
29
|
@element = Element.new(node)
|
30
30
|
@valid = true
|
31
|
-
rescue
|
31
|
+
rescue MarkupParser::ParseError => e
|
32
32
|
@element = NullElement.new
|
33
33
|
@errors << InvalidElementError.new(e)
|
34
34
|
@valid = false
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module HtmlAide
|
2
|
+
class Tag
|
3
|
+
VALID_TAGS = %w(
|
4
|
+
a abbr address area article aside audio
|
5
|
+
b base bdi bdo blockquote body br button
|
6
|
+
canvas caption cite code col colgroup
|
7
|
+
datalist dd del details dfn div dl dt
|
8
|
+
em embed
|
9
|
+
fieldset figcaption figure footer form
|
10
|
+
h1 h2 h3 h4 h5 h6 head header hgroup hr html
|
11
|
+
i iframe img input ins
|
12
|
+
kbd keygen
|
13
|
+
label legend li link
|
14
|
+
map mark menu menuitem meta meter
|
15
|
+
nav noscript
|
16
|
+
object ol optgroup option output
|
17
|
+
p param pre progress
|
18
|
+
q
|
19
|
+
rp rt ruby
|
20
|
+
s samp script section select small source span strong summary sup
|
21
|
+
table tbody td textarea tfoot th thead time title tr track
|
22
|
+
ul
|
23
|
+
var video
|
24
|
+
wbr
|
25
|
+
).freeze
|
26
|
+
|
27
|
+
def self.parse(ox_node)
|
28
|
+
raise ParseError, "#{ox_node.name} is not a valid HTML tag." unless valid_tag?(ox_node.name)
|
29
|
+
ox_node
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.valid_tag?(tag_name)
|
33
|
+
VALID_TAGS.include?(tag_name)
|
34
|
+
end
|
35
|
+
|
36
|
+
class ParseError < StandardError; end
|
37
|
+
end
|
38
|
+
end
|
data/lib/html_aide/version.rb
CHANGED
data/spec/tag_spec.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe HtmlAide::Tag do
|
4
|
+
|
5
|
+
describe '.parse' do
|
6
|
+
let(:bad_node) { Ox.parse('<taco></taco>') }
|
7
|
+
let(:good_node) { Ox.parse('<p></p>') }
|
8
|
+
it 'takes an ox node and raises an error for an invalid tag' do
|
9
|
+
expect { HtmlAide::Tag.parse(bad_node) }.to raise_error 'taco is not a valid HTML tag.'
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'returns the original node when all is good' do
|
13
|
+
expect(HtmlAide::Tag.parse(good_node)).to eq good_node
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '.valid_tag?' do
|
18
|
+
it 'takes the tag name section and returns true' do
|
19
|
+
expect(HtmlAide::Tag.valid_tag?('section')).to eq true
|
20
|
+
end
|
21
|
+
it 'takes the tag name blink and returns false' do
|
22
|
+
expect(HtmlAide::Tag.valid_tag?('blink')).to eq false
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/spec/validator_spec.rb
CHANGED
@@ -2,10 +2,44 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe HtmlAide::Validator do
|
4
4
|
|
5
|
-
describe '
|
5
|
+
describe '.validate' do
|
6
6
|
it 'returns a SnippetValidator' do
|
7
|
-
v = HtmlAide::Validator.validate('')
|
7
|
+
v = HtmlAide::Validator.validate('<a></a>')
|
8
8
|
expect(v).to be_kind_of HtmlAide::SnippetValidator
|
9
9
|
end
|
10
10
|
end
|
11
|
+
|
12
|
+
describe '#valid?' do
|
13
|
+
context 'when the markup is valid' do
|
14
|
+
it 'returns true for a normal snippet' do
|
15
|
+
validator = HtmlAide::Validator.validate('<div id="taco">Taco</div>')
|
16
|
+
expect(validator).to be_valid
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'returns true for a nested snippet' do
|
20
|
+
validator = HtmlAide::Validator.validate('<div id="taco">Taco <strong>Meat</strong></div>')
|
21
|
+
expect(validator).to be_valid
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'returns true for valid html tags' do
|
25
|
+
validator = HtmlAide::Validator.validate('<input />')
|
26
|
+
expect(validator).to be_valid
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'when the markup is not valid' do
|
31
|
+
it 'returns false for a broken tag' do
|
32
|
+
validator = HtmlAide::Validator.validate('<div id="taco">Taco</div')
|
33
|
+
expect(validator).to_not be_valid
|
34
|
+
end
|
35
|
+
it 'returns false for a nested broken tag' do
|
36
|
+
validator = HtmlAide::Validator.validate('<div id="taco">Taco <strong>Meat</strong</div>')
|
37
|
+
expect(validator).to_not be_valid
|
38
|
+
end
|
39
|
+
it 'returns false for invalid tags' do
|
40
|
+
validator = HtmlAide::Validator.validate('<taco>Meat</taco>')
|
41
|
+
expect(validator).to_not be_valid
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
11
45
|
end
|
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.2.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-06-
|
11
|
+
date: 2014-06-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -112,16 +112,19 @@ files:
|
|
112
112
|
- lib/html_aide.rb
|
113
113
|
- lib/html_aide/element.rb
|
114
114
|
- lib/html_aide/invalid_element_error.rb
|
115
|
+
- lib/html_aide/markup_parser.rb
|
115
116
|
- lib/html_aide/null_element.rb
|
116
117
|
- lib/html_aide/snippet_validator.rb
|
118
|
+
- lib/html_aide/tag.rb
|
117
119
|
- lib/html_aide/validator.rb
|
118
120
|
- lib/html_aide/version.rb
|
119
121
|
- spec/element_spec.rb
|
120
122
|
- spec/invalid_element_error_spec.rb
|
121
123
|
- spec/snippet_validator_spec.rb
|
122
124
|
- spec/spec_helper.rb
|
125
|
+
- spec/tag_spec.rb
|
123
126
|
- spec/validator_spec.rb
|
124
|
-
homepage:
|
127
|
+
homepage: https://github.com/devpointlabs/html_aide
|
125
128
|
licenses:
|
126
129
|
- MIT
|
127
130
|
metadata: {}
|
@@ -150,4 +153,5 @@ test_files:
|
|
150
153
|
- spec/invalid_element_error_spec.rb
|
151
154
|
- spec/snippet_validator_spec.rb
|
152
155
|
- spec/spec_helper.rb
|
156
|
+
- spec/tag_spec.rb
|
153
157
|
- spec/validator_spec.rb
|