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 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