superfeedr-sax-machine 0.0.22.2 → 0.0.23
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/lib/sax-machine.rb +3 -0
- data/lib/sax-machine/ns_stack.rb +6 -3
- data/lib/sax-machine/sax_collection_config.rb +4 -4
- data/lib/sax-machine/sax_config.rb +10 -6
- data/lib/sax-machine/sax_element_config.rb +9 -1
- data/lib/sax-machine/sax_event_recorder.rb +3 -3
- data/lib/sax-machine/sax_handler.rb +9 -5
- metadata +9 -8
data/lib/sax-machine.rb
CHANGED
data/lib/sax-machine/ns_stack.rb
CHANGED
@@ -1,16 +1,19 @@
|
|
1
1
|
module SAXMachine
|
2
2
|
class NSStack < Hash
|
3
|
-
|
3
|
+
XMLNS = 'xmlns'
|
4
|
+
|
5
|
+
def initialize(parent=nil, attrs=nil)
|
4
6
|
# Initialize
|
5
7
|
super()
|
6
8
|
@parent = parent
|
7
9
|
|
10
|
+
return self unless attrs
|
8
11
|
# Parse attributes
|
9
12
|
attrs.each do |attr|
|
10
13
|
if attr.kind_of?(Array)
|
11
14
|
k, v = attr
|
12
15
|
case k
|
13
|
-
when
|
16
|
+
when XMLNS then self[EMPTY_STRING] = v
|
14
17
|
when /^xmlns:(.+)/ then self[$1] = v
|
15
18
|
end
|
16
19
|
end
|
@@ -27,7 +30,7 @@ module SAXMachine
|
|
27
30
|
@parent[name]
|
28
31
|
else
|
29
32
|
# Undefined, empty namespace
|
30
|
-
|
33
|
+
EMPTY_STRING
|
31
34
|
end
|
32
35
|
end
|
33
36
|
|
@@ -15,16 +15,16 @@ module SAXMachine
|
|
15
15
|
else nil
|
16
16
|
end
|
17
17
|
@default_xmlns = options[:default_xmlns]
|
18
|
-
if @default_xmlns && @xmlns && !@xmlns.include?(
|
19
|
-
@xmlns <<
|
18
|
+
if @default_xmlns && @xmlns && !@xmlns.include?(EMPTY_STRING)
|
19
|
+
@xmlns << EMPTY_STRING
|
20
20
|
end
|
21
21
|
@record_events = options[:events]
|
22
22
|
end
|
23
23
|
|
24
24
|
def handler(nsstack)
|
25
|
-
if @default_xmlns && (nsstack.nil? || nsstack[
|
25
|
+
if @default_xmlns && (nsstack.nil? || nsstack[EMPTY_STRING] == EMPTY_STRING)
|
26
26
|
nsstack = NSStack.new(nsstack, nsstack)
|
27
|
-
nsstack[
|
27
|
+
nsstack[EMPTY_STRING] = @default_xmlns
|
28
28
|
end
|
29
29
|
unless @record_events
|
30
30
|
SAXHandler.new(@class.new, nsstack)
|
@@ -21,29 +21,33 @@ module SAXMachine
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def collection_config(name, nsstack)
|
24
|
-
prefix, name = name.split(
|
24
|
+
prefix, name = name.split(COLON, 2)
|
25
25
|
prefix, name = nil, prefix unless name # No prefix
|
26
26
|
namespace = nsstack[prefix]
|
27
27
|
|
28
|
-
(@collection_elements[name.to_s]
|
28
|
+
return nil unless (a = @collection_elements[name.to_s])
|
29
|
+
a.detect { |ce|
|
29
30
|
ce.name.to_s == name.to_s &&
|
30
31
|
ce.xmlns_match?(namespace)
|
31
32
|
}
|
32
33
|
end
|
33
34
|
|
34
35
|
def element_configs_for_attribute(name, attrs)
|
35
|
-
name = name.split(
|
36
|
-
|
36
|
+
name = name.split(COLON, 2).last
|
37
|
+
|
38
|
+
return [] unless (a = @top_level_elements[name.to_s])
|
39
|
+
a.select do |element_config|
|
37
40
|
element_config.has_value_and_attrs_match?(attrs)
|
38
41
|
end
|
39
42
|
end
|
40
43
|
|
41
44
|
def element_config_for_tag(name, attrs, nsstack)
|
42
|
-
prefix, name = name.split(
|
45
|
+
prefix, name = name.split(COLON, 2)
|
43
46
|
prefix, name = nil, prefix unless name # No prefix
|
44
47
|
namespace = nsstack[prefix]
|
45
48
|
|
46
|
-
(@top_level_elements[name.to_s]
|
49
|
+
return nil unless (a = @top_level_elements[name.to_s])
|
50
|
+
a.detect do |element_config|
|
47
51
|
element_config.xmlns_match?(namespace) &&
|
48
52
|
element_config.attrs_match?(attrs)
|
49
53
|
end
|
@@ -10,15 +10,15 @@ module SAXMachine
|
|
10
10
|
@events[1..-2]
|
11
11
|
end
|
12
12
|
|
13
|
-
def start_element(name, attrs =
|
13
|
+
def start_element(name, attrs = nil)
|
14
14
|
@nsstack = NSStack.new(@nsstack, attrs)
|
15
|
-
prefix, name = name.split(
|
15
|
+
prefix, name = name.split(COLON, 2)
|
16
16
|
prefix, name = nil, prefix unless name
|
17
17
|
@events << [:start_element, @nsstack[prefix], name, attrs]
|
18
18
|
end
|
19
19
|
|
20
20
|
def end_element(name)
|
21
|
-
prefix, name = name.split(
|
21
|
+
prefix, name = name.split(COLON, 2)
|
22
22
|
prefix, name = nil, prefix unless name
|
23
23
|
@events << [:end_element, @nsstack[prefix], name]
|
24
24
|
@nsstack = @nsstack.pop
|
@@ -14,7 +14,11 @@ module SAXMachine
|
|
14
14
|
if parsing_collection?
|
15
15
|
@collection_handler.characters(string)
|
16
16
|
elsif @element_config
|
17
|
-
@value
|
17
|
+
if !@value || @value == EMPTY_STRING
|
18
|
+
@value = string
|
19
|
+
else
|
20
|
+
@value << string
|
21
|
+
end
|
18
22
|
end
|
19
23
|
end
|
20
24
|
|
@@ -22,10 +26,10 @@ module SAXMachine
|
|
22
26
|
characters(string)
|
23
27
|
end
|
24
28
|
|
25
|
-
def start_element(name, attrs =
|
29
|
+
def start_element(name, attrs = nil)
|
26
30
|
|
27
31
|
@name = name
|
28
|
-
@attrs = attrs.map { |a| SAXHandler.decode_xml(a) }
|
32
|
+
@attrs = attrs ? attrs.map { |a| SAXHandler.decode_xml(a) } : nil
|
29
33
|
@nsstack = NSStack.new(@nsstack, @attrs)
|
30
34
|
|
31
35
|
if parsing_collection?
|
@@ -46,7 +50,7 @@ module SAXMachine
|
|
46
50
|
end
|
47
51
|
|
48
52
|
def end_element(name)
|
49
|
-
if parsing_collection? && @collection_config.name == name.split(
|
53
|
+
if parsing_collection? && @collection_config.name == name.split(COLON).last
|
50
54
|
@collection_handler.end_element(name)
|
51
55
|
@object.send(@collection_config.accessor) << @collection_handler.object
|
52
56
|
reset_current_collection
|
@@ -85,7 +89,7 @@ module SAXMachine
|
|
85
89
|
end
|
86
90
|
|
87
91
|
def set_element_config_for_element_value
|
88
|
-
@value =
|
92
|
+
@value = EMPTY_STRING
|
89
93
|
@element_config = sax_config.element_config_for_tag(@name, @attrs, @nsstack)
|
90
94
|
end
|
91
95
|
|
metadata
CHANGED
@@ -1,32 +1,33 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: superfeedr-sax-machine
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.23
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul Dix
|
8
|
-
-
|
8
|
+
- astro
|
9
9
|
- julien51
|
10
10
|
- superfeedr
|
11
|
+
- yakischloba
|
11
12
|
autorequire:
|
12
13
|
bindir: bin
|
13
14
|
cert_chain: []
|
14
15
|
|
15
|
-
date: 2009-
|
16
|
+
date: 2009-01-27 00:00:00 +01:00
|
16
17
|
default_executable:
|
17
18
|
dependencies:
|
18
19
|
- !ruby/object:Gem::Dependency
|
19
|
-
name:
|
20
|
+
name: nokogiri
|
20
21
|
type: :runtime
|
21
22
|
version_requirement:
|
22
23
|
version_requirements: !ruby/object:Gem::Requirement
|
23
24
|
requirements:
|
24
|
-
- - "
|
25
|
+
- - ">"
|
25
26
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
27
|
+
version: 0.0.0
|
27
28
|
version:
|
28
29
|
description:
|
29
|
-
email:
|
30
|
+
email:
|
30
31
|
executables: []
|
31
32
|
|
32
33
|
extensions: []
|
@@ -48,7 +49,7 @@ files:
|
|
48
49
|
- spec/spec_helper.rb
|
49
50
|
- spec/sax-machine/sax_document_spec.rb
|
50
51
|
has_rdoc: true
|
51
|
-
homepage: http://github.com/
|
52
|
+
homepage: http://github.com/julien51/sax-machine
|
52
53
|
licenses: []
|
53
54
|
|
54
55
|
post_install_message:
|