ruby_rnv 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/rnv/error.rb +70 -7
- data/lib/rnv/validator.rb +6 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f815e167e18653e6820b447245834127448b9ac2b72c2f0228baefb40226007d
|
4
|
+
data.tar.gz: d192a9e1faa7e62c25caf68fca1beaeb7a77f706a85ecf50175f70c5e4dd45f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d53f3238103630b7617fe91850bd4ad930781981cc3d67cd8a5f1d9cfb4ff90d9de6463483e2ee054bce3cbeb19f6407edeb5dd91008b222a464a6bd7ab07d0
|
7
|
+
data.tar.gz: 3613bb75f3ef998a5a90af133fcbcc40b51a7bb983149bbcb8bae67e800a72c5a61978f26fb96aed8ec707d2ecbac2a4356fbe457382dbf85277be6638257074
|
data/lib/rnv/error.rb
CHANGED
@@ -1,26 +1,57 @@
|
|
1
1
|
module RNV
|
2
2
|
class Error
|
3
|
+
attr_reader :original_message, :original_expected
|
4
|
+
attr_reader :ns_uri, :element, :attr, :value, :required, :allowed
|
5
|
+
|
6
|
+
# @return [String]
|
3
7
|
def message
|
4
8
|
@original_message
|
5
9
|
end
|
6
10
|
|
11
|
+
# @return [String]
|
7
12
|
def expected
|
8
13
|
@original_expected
|
9
14
|
end
|
10
15
|
|
16
|
+
# @return [String]
|
17
|
+
def compact_message
|
18
|
+
case @code
|
19
|
+
when :rnv_er_elem
|
20
|
+
"element <#{@element}> is not allowed"
|
21
|
+
when :rnv_er_ufin
|
22
|
+
"element <#{@element}> is incomplete"
|
23
|
+
when :rnv_er_akey
|
24
|
+
"attribute #{@attr} is not allowed"
|
25
|
+
when :rnv_er_aval
|
26
|
+
"attribute #{@attr} has invalid value '#{@value}'"
|
27
|
+
when :rnv_er_amis
|
28
|
+
"element <#{@element}> attribute missing"
|
29
|
+
else
|
30
|
+
@original_message
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# @return [String]
|
35
|
+
def compact_expected
|
36
|
+
[(compact_required_set.length > 0 ? compact_expected_phrase(compact_required_set) +" required" : nil),
|
37
|
+
(compact_allowed_set.length > 0 ? compact_expected_phrase(compact_allowed_set) + " allowed" : nil)].join("; ")
|
38
|
+
end
|
39
|
+
|
11
40
|
# @param [String] data original content
|
12
41
|
# @return [String] context
|
13
42
|
def contextualize(data, max_len = 60)
|
14
43
|
out = ""
|
15
44
|
if data and @line
|
16
45
|
err_data = data.split("\n")[@line - 1]
|
17
|
-
err_data
|
46
|
+
if err_data
|
47
|
+
err_data.insert(@col - 1, "🢑")
|
18
48
|
|
19
|
-
|
20
|
-
|
21
|
-
|
49
|
+
start = 0
|
50
|
+
if @col > max_len
|
51
|
+
start = @col - max_len
|
52
|
+
end
|
53
|
+
out += (start > 0 ? "…" : "") + err_data[start..(@col + max_len)].strip + (@col + max_len < err_data.length ? "…" : "")
|
22
54
|
end
|
23
|
-
out += (start > 0 ? "…" : "") + err_data[start..(@col + max_len)].strip + (@col + max_len < err_data.length ? "…" : "")
|
24
55
|
end
|
25
56
|
out
|
26
57
|
end
|
@@ -32,8 +63,40 @@ module RNV
|
|
32
63
|
|
33
64
|
# @return [String]
|
34
65
|
def inspect
|
35
|
-
#"#<RNV::Error code: :#{@code}, message: '#{@message}', expected: '#{@expected}, line: #{@line}, column: #{@col}>"
|
36
66
|
"#<RNV::Error code: :#{@code}, message: '#{self.message}', expected: '#{self.expected}, line: #{@line}, column: #{@col}>"
|
37
67
|
end
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
def compact_expected_to_s(e, with_ns = false)
|
72
|
+
case e.first
|
73
|
+
when :rn_p_attribute
|
74
|
+
compact_expected_to_s(e.last, with_ns)
|
75
|
+
when :rn_p_element
|
76
|
+
"<"+compact_expected_to_s(e.last, with_ns)+">"
|
77
|
+
when :rn_p_data
|
78
|
+
compact_expected_to_s(e.last, with_ns)
|
79
|
+
when :rn_nc_datatype
|
80
|
+
"datatype #{e[-2]}:#{e.last}"
|
81
|
+
when :rn_nc_qname
|
82
|
+
with_ns ? "#{e.first}:#{e.last}" : e.last
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def compact_required_set
|
87
|
+
@compact_required_set ||= @required.map{|r| compact_expected_to_s(r)}.compact.uniq
|
88
|
+
end
|
89
|
+
|
90
|
+
def compact_allowed_set
|
91
|
+
@compact_allowed_set ||= @allowed.map{|r| compact_expected_to_s(r)}.compact.uniq
|
92
|
+
end
|
93
|
+
|
94
|
+
def compact_expected_phrase(set)
|
95
|
+
if set.length > 1
|
96
|
+
set[0..-2].join(", ") + " or "+set.last
|
97
|
+
else
|
98
|
+
set.last
|
99
|
+
end
|
100
|
+
end
|
38
101
|
end
|
39
|
-
end
|
102
|
+
end
|
data/lib/rnv/validator.rb
CHANGED
@@ -3,6 +3,8 @@ require 'rnv/rnv'
|
|
3
3
|
require 'rnv/pre_processor'
|
4
4
|
|
5
5
|
module RNV
|
6
|
+
class DocumentEmpty < StandardError; end
|
7
|
+
|
6
8
|
# @!visibility private
|
7
9
|
class NokogiriSaxDocument < Nokogiri::XML::SAX::Document
|
8
10
|
# @return [Nokogiri::XML::SAX::ParserContext]
|
@@ -78,6 +80,8 @@ module RNV
|
|
78
80
|
rnv_doc = NokogiriSaxDocument.new(@document)
|
79
81
|
rnv_doc.pre_processor = pre_processor
|
80
82
|
|
83
|
+
raise RNV::DocumentEmpty if str.nil? or str.empty?
|
84
|
+
|
81
85
|
parser = Nokogiri::XML::SAX::Parser.new(rnv_doc)
|
82
86
|
parser.parse_memory(str) do |ctx|
|
83
87
|
ctx.replace_entities = true
|
@@ -98,6 +102,8 @@ module RNV
|
|
98
102
|
|
99
103
|
file = xml.is_a?(File) ? xml : File.open(xml)
|
100
104
|
|
105
|
+
raise RNV::DocumentEmpty if file.size == 0
|
106
|
+
|
101
107
|
parser = Nokogiri::XML::SAX::Parser.new(rnv_doc)
|
102
108
|
parser.parse(file) do |ctx|
|
103
109
|
ctx.replace_entities = true
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_rnv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Julien Boulnois
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-04-
|
11
|
+
date: 2021-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|