bbc_standards 0.1.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.
- data/README +16 -0
- data/lib/bbc_standards.rb +9 -0
- data/lib/bbc_standards/rspec.rb +17 -0
- data/lib/bbc_standards/validator.rb +75 -0
- metadata +68 -0
data/README
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
= bbc_standards
|
2
|
+
|
3
|
+
* http://github.com/metade/bbc_standards
|
4
|
+
|
5
|
+
== DESCRIPTION:
|
6
|
+
|
7
|
+
BBCStandards provides rspec helpers for checking whether documents conform to the BBC FM&T Guidelines and Standards.
|
8
|
+
|
9
|
+
See http://www.bbc.co.uk/guidelines/futuremedia/technical/ for more details.
|
10
|
+
|
11
|
+
== SYNOPSIS:
|
12
|
+
|
13
|
+
== REQUIREMENTS:
|
14
|
+
|
15
|
+
* depends on markup_validity and raakt
|
16
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Spec
|
2
|
+
module Matchers
|
3
|
+
def obey_bbc_standards
|
4
|
+
Matcher.new :obey_bbc_standards do
|
5
|
+
validator = nil
|
6
|
+
match do |xhtml|
|
7
|
+
validator = BBCStandards::Validator.new xhtml
|
8
|
+
validator.valid?
|
9
|
+
end
|
10
|
+
|
11
|
+
failure_message_for_should do |actual|
|
12
|
+
validator.inspect
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module BBCStandards
|
2
|
+
class Validator
|
3
|
+
include Spec::Matchers
|
4
|
+
|
5
|
+
attr_reader :errors
|
6
|
+
|
7
|
+
def initialize(xml)
|
8
|
+
@xml = xml
|
9
|
+
@doc = Nokogiri::HTML(xml)
|
10
|
+
@errors = []
|
11
|
+
validate
|
12
|
+
end
|
13
|
+
|
14
|
+
def valid?
|
15
|
+
@errors.empty?
|
16
|
+
end
|
17
|
+
|
18
|
+
def inspect
|
19
|
+
lines = @xml.split("\n")
|
20
|
+
strings = []
|
21
|
+
errors.each do |error|
|
22
|
+
if error.line
|
23
|
+
start = error.line - [2, error.line].min
|
24
|
+
error_line = error.line == 0 ? 1 : error.line
|
25
|
+
strings << "Error on line: #{error_line}:"
|
26
|
+
strings << error.message.gsub(/\{[^\}]*\}/, '')
|
27
|
+
Range.new(start, error.line + 2).each { |number|
|
28
|
+
strings << "#{number + 1}: #{lines[number]}"
|
29
|
+
}
|
30
|
+
strings << ""
|
31
|
+
else
|
32
|
+
strings << error.message
|
33
|
+
end
|
34
|
+
end
|
35
|
+
strings.join("\n")
|
36
|
+
end
|
37
|
+
|
38
|
+
protected
|
39
|
+
|
40
|
+
def validate
|
41
|
+
test_validation
|
42
|
+
test_accessibility
|
43
|
+
test_bbc_standards
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_validation
|
47
|
+
validator = MarkupValidity::Validator.new(@xml, MarkupValidity::Validator::XHTML1_STRICT)
|
48
|
+
@errors += validator.errors
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_accessibility
|
52
|
+
rt = Raakt::Test.new(@xml)
|
53
|
+
@errors += rt.all.map { |e| Error.new(e.text) }
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_bbc_standards
|
57
|
+
@errors << Error.new("Title is not valid") unless @xml =~ /<title>\w+( - )?([^<-]+)?( - )?([^<-]+)?<\/title>/
|
58
|
+
@errors << Error.new("Page doesn't have 1 <h1> tag") unless @doc.xpath('//h1').size == 1
|
59
|
+
@errors << Error.new("Page doesn't have any <h2> tags") unless @doc.xpath('//h2').size > 0
|
60
|
+
@errors << Error.new("Page is using <br> for whitespace") if @xml =~ /<br\/>\s*<br\/>/
|
61
|
+
%w(b i font marquee).each do |tag|
|
62
|
+
@errors << Error.new("Page is using <#{tag}>") if @doc.xpath("//#{tag}").any?
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
class Error
|
68
|
+
attr_accessor :message, :line
|
69
|
+
|
70
|
+
def initialize(message, line=nil)
|
71
|
+
@message = message
|
72
|
+
@line = line
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
metadata
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: bbc_standards
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Patrick Sinclair
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-12-23 00:00:00 +00:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rspec
|
17
|
+
type: :development
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
description:
|
26
|
+
email: metade@gmail.com
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files:
|
32
|
+
- README
|
33
|
+
files:
|
34
|
+
- README
|
35
|
+
- lib/bbc_standards/rspec.rb
|
36
|
+
- lib/bbc_standards/validator.rb
|
37
|
+
- lib/bbc_standards.rb
|
38
|
+
has_rdoc: true
|
39
|
+
homepage: http://github.com/metade/bbc_standards
|
40
|
+
licenses: []
|
41
|
+
|
42
|
+
post_install_message:
|
43
|
+
rdoc_options:
|
44
|
+
- --main
|
45
|
+
- README
|
46
|
+
require_paths:
|
47
|
+
- lib
|
48
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: "0"
|
53
|
+
version:
|
54
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: "0"
|
59
|
+
version:
|
60
|
+
requirements: []
|
61
|
+
|
62
|
+
rubyforge_project:
|
63
|
+
rubygems_version: 1.3.5
|
64
|
+
signing_key:
|
65
|
+
specification_version: 3
|
66
|
+
summary: What this thing does
|
67
|
+
test_files: []
|
68
|
+
|