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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 84a4214a1dd1e8ca6c2cd56a857f5b05258e2749
4
- data.tar.gz: f1b8d75bdbbc117dcc8ad0789298caa02e0cfdb8
3
+ metadata.gz: e1a1f5377d543d9e34982c7f3789b75666f94675
4
+ data.tar.gz: 59d8f79763036abdd59eadda864d806ea51e7a71
5
5
  SHA512:
6
- metadata.gz: ed7d0580d08699bebe5ba7c8c8d2a689e56ca7805b3db0ea44d5beeb646277070ef19998d5f72e4681ec3abca53c2fc2701b07cea4f395a9bfafb15bf13539e9
7
- data.tar.gz: 35096bd9be92d694f7ab1106a9b59100d46afd5067a108a414c992f2d9e8e6a6f9f93d889447684d3503d1ea9ebbf581a68fe0d1762a47542a33aa159318e472
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
- ## Future implementations
64
+ _Extend your object with HtmlAide_
65
65
 
66
66
  ```ruby
67
- snippet = '<div id="taco"><strong>Taco</strong> Meat</div>'
68
- snippet.html? #=> true
69
- validator = snippet.validate_html!
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
@@ -24,4 +24,6 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "pry"
25
25
  spec.add_dependency "ox"
26
26
  spec.add_dependency "nokogiri"
27
+ spec.add_dependency "rest-client"
28
+ spec.add_dependency "oj"
27
29
  end
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
- node = Ox.parse(markup)
6
- node = Tag.parse(node)
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
- class ParseError < StandardError; end
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
@@ -0,0 +1,14 @@
1
+ module HtmlAide
2
+ refine String do
3
+
4
+ def html?
5
+ HtmlAide::Validator.validate(self).valid?
6
+ end
7
+
8
+ def to_html
9
+ node = HtmlAide::MarkupParser.parse(self)
10
+ Element.new(node)
11
+ end
12
+
13
+ end
14
+ 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
@@ -1,3 +1,3 @@
1
1
  module HtmlAide
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -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
@@ -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.2.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-06-27 00:00:00.000000000 Z
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