weak_xml 0.1.0 → 0.2.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 +4 -4
- data/README.md +4 -2
- data/benchmark/weak_xml/weak_xml_versus_others.rb +5 -5
- data/lib/weak_xml/fragment.rb +3 -1
- data/lib/weak_xml/version.rb +1 -1
- data/lib/weak_xml.rb +4 -10
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 28f1fcd1035b0186e9ebbfd78ad831a1d1598f29
|
4
|
+
data.tar.gz: ddb2a863e7dacf566f175300f440c036289c84c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c39a32813a211c8b67ac6766841587066c7279c58f1d4614bbf2b5947d53927cc45c67c7ff0427b49cee1e6d58fbba47ebf63cd643e9ac183eff0a23cbe392e9
|
7
|
+
data.tar.gz: 964bd144d6f0e55c0a9fb1b98ede708ade79e9d48c5bb3486c246e535f7ea8ea4a642799c2828dc1456ec69707dd855e91ac07f0f084dd3b978df2afd8c4c00e
|
data/README.md
CHANGED
@@ -10,6 +10,8 @@
|
|
10
10
|
## Usage
|
11
11
|
|
12
12
|
```ruby
|
13
|
+
require "weak_xml"
|
14
|
+
|
13
15
|
xml = <<-EOXML
|
14
16
|
<xml>
|
15
17
|
<foo>
|
@@ -24,7 +26,7 @@ xml = <<-EOXML
|
|
24
26
|
EOXML
|
25
27
|
|
26
28
|
# .find gets the first node with the given tag or nil
|
27
|
-
some_node = WeakXml.find("bar", xml) # => #<Fragment ...
|
29
|
+
some_node = WeakXml.find("bar", xml) # => #<WeakXml::Fragment ...
|
28
30
|
WeakXml.find("nope", xml) # => nil
|
29
31
|
|
30
32
|
# you can get the content
|
@@ -42,7 +44,7 @@ WeakXml.find_all("nope", xml) # => []
|
|
42
44
|
some_nodes.map(&:content) # => ["content1", "content2", "content3"]
|
43
45
|
|
44
46
|
# xml/options can be stored within an instance of WeakXml
|
45
|
-
doc = WeakXml.new(xml,
|
47
|
+
doc = WeakXml.new(xml, multiline: false)
|
46
48
|
doc.find("bar").content # => "content1"
|
47
49
|
```
|
48
50
|
|
@@ -39,11 +39,11 @@ class Benchmark::WeakXml::WeakXmlVersusOthers
|
|
39
39
|
end
|
40
40
|
|
41
41
|
x.report("WeakXml (-ML)") do
|
42
|
-
WeakXml.find("z303-id", ALEPH_BOR_INFO_XML,
|
42
|
+
WeakXml.find("z303-id", ALEPH_BOR_INFO_XML, multiline: false).content
|
43
43
|
end
|
44
44
|
|
45
45
|
x.report("WeakXml (+hint, -ML)") do
|
46
|
-
WeakXml.find("<z303-id>", ALEPH_BOR_INFO_XML,
|
46
|
+
WeakXml.find("<z303-id>", ALEPH_BOR_INFO_XML, multiline: false).content
|
47
47
|
end
|
48
48
|
|
49
49
|
x.report("Plain regex") do
|
@@ -81,11 +81,11 @@ class Benchmark::WeakXml::WeakXmlVersusOthers
|
|
81
81
|
end
|
82
82
|
|
83
83
|
x.report("WeakXml (-ML)") do
|
84
|
-
WeakXml.find("z303-id", ALEPH_BOR_INFO_XML,
|
84
|
+
WeakXml.find("z303-id", ALEPH_BOR_INFO_XML, multiline: false).content
|
85
85
|
end
|
86
86
|
|
87
87
|
x.report("WeakXml (+hint, -ML)") do
|
88
|
-
WeakXml.find("<z303-id>", ALEPH_BOR_INFO_XML,
|
88
|
+
WeakXml.find("<z303-id>", ALEPH_BOR_INFO_XML, multiline: false)#.content
|
89
89
|
end
|
90
90
|
|
91
91
|
x.compare!
|
@@ -115,7 +115,7 @@ class Benchmark::WeakXml::WeakXmlVersusOthers
|
|
115
115
|
end
|
116
116
|
|
117
117
|
x.report("WeakXml (-ML)") do
|
118
|
-
WeakXml.find_all("fee", ALMA_FEES_XML,
|
118
|
+
WeakXml.find_all("fee", ALMA_FEES_XML, multiline: false).map { |_fee| _fee.attr("link") }
|
119
119
|
end
|
120
120
|
|
121
121
|
x.compare!
|
data/lib/weak_xml/fragment.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
require_relative "../weak_xml"
|
2
|
+
|
3
|
+
class WeakXml::Fragment
|
2
4
|
# Compiling regular expressions is expensive, specially if one uses variable
|
3
5
|
# parts. So, in order to achive the best performance, these should be compiled
|
4
6
|
# upfront without any "runtime dependencies".
|
data/lib/weak_xml/version.rb
CHANGED
data/lib/weak_xml.rb
CHANGED
@@ -3,9 +3,6 @@ require "weak_xml/version"
|
|
3
3
|
class WeakXml
|
4
4
|
require_relative "./weak_xml/fragment"
|
5
5
|
|
6
|
-
#
|
7
|
-
# class methods
|
8
|
-
#
|
9
6
|
def self.find(tag, xml, options = {})
|
10
7
|
if matched_string = xml[regex_factory(tag, options)]
|
11
8
|
Fragment.new(tag, matched_string)
|
@@ -13,13 +10,13 @@ class WeakXml
|
|
13
10
|
end
|
14
11
|
|
15
12
|
def self.find_all(tag, xml, options = {})
|
16
|
-
xml.scan(regex_factory(tag, options)).map! do |
|
17
|
-
Fragment.new(tag,
|
13
|
+
xml.scan(regex_factory(tag, options)).map! do |match|
|
14
|
+
Fragment.new(tag, match)
|
18
15
|
end
|
19
16
|
end
|
20
17
|
|
21
18
|
def self.regex_factory(tag, options = {})
|
22
|
-
|
19
|
+
options[:multiline] = options[:multiline].nil? ? true : !!options[:multiline]
|
23
20
|
|
24
21
|
regexp_base =
|
25
22
|
if tag.start_with?("<") && tag.end_with?(">")
|
@@ -28,12 +25,9 @@ class WeakXml
|
|
28
25
|
"<#{tag}[>\s].*?<\/#{tag}>"
|
29
26
|
end
|
30
27
|
|
31
|
-
Regexp.new(regexp_base, (
|
28
|
+
Regexp.new(regexp_base, (options[:multiline] ? Regexp::MULTILINE : 0))
|
32
29
|
end
|
33
30
|
|
34
|
-
#
|
35
|
-
# instance methods
|
36
|
-
#
|
37
31
|
def initialize(xml, options = {})
|
38
32
|
@options = options
|
39
33
|
@xml = xml
|