weak_xml 0.2.0 → 0.3.1
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/lib/weak_xml.rb +32 -4
- data/lib/weak_xml/version.rb +1 -1
- metadata +3 -5
- data/lib/weak_xml/fragment.rb +0 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b63a7bfb1c0581a34ec1d3ea98c8b04d6ebac39f
|
4
|
+
data.tar.gz: 66661f43b772b611cc6c7a4ce81024cba1520207
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f151bb121175bc18223945e8fdb2ae96371ed1809aed14637101f1eca1ac7e1433639326682cff978d354d2936902b90e52a0268e5691584210fbfac41c723a
|
7
|
+
data.tar.gz: debfabacf78ae899d20e793894c1e2198547d406722b5eaa9615dda62b4a3889f15b53a9b453388869d74a4560ba3a783cc451a1ec8cff82440b2106c0ab7be3
|
data/lib/weak_xml.rb
CHANGED
@@ -1,20 +1,26 @@
|
|
1
1
|
require "weak_xml/version"
|
2
2
|
|
3
3
|
class WeakXml
|
4
|
-
|
4
|
+
# Compiling regular expressions is expensive, specially if one uses variable
|
5
|
+
# parts. So, in order to achive the best performance, these should be compiled
|
6
|
+
# upfront without any "runtime dependencies".
|
7
|
+
ATTRIBUTES_REGEXP = Regexp.compile(/\A<[^>\s]+\s+([^>]+)/m)
|
8
|
+
CONTENT_REGEXP = Regexp.compile(/.*?>(.*?)<[^>]+>\Z/m)
|
5
9
|
|
6
10
|
def self.find(tag, xml, options = {})
|
7
11
|
if matched_string = xml[regex_factory(tag, options)]
|
8
|
-
|
12
|
+
self.new(matched_string, tag: tag)
|
9
13
|
end
|
10
14
|
end
|
11
15
|
|
12
16
|
def self.find_all(tag, xml, options = {})
|
13
|
-
xml.scan(regex_factory(tag, options)).map! do |
|
14
|
-
|
17
|
+
xml.scan(regex_factory(tag, options)).map! do |matched_string|
|
18
|
+
self.new(matched_string, tag: tag)
|
15
19
|
end
|
16
20
|
end
|
17
21
|
|
22
|
+
private
|
23
|
+
|
18
24
|
def self.regex_factory(tag, options = {})
|
19
25
|
options[:multiline] = options[:multiline].nil? ? true : !!options[:multiline]
|
20
26
|
|
@@ -28,11 +34,29 @@ class WeakXml
|
|
28
34
|
Regexp.new(regexp_base, (options[:multiline] ? Regexp::MULTILINE : 0))
|
29
35
|
end
|
30
36
|
|
37
|
+
public
|
38
|
+
|
31
39
|
def initialize(xml, options = {})
|
32
40
|
@options = options
|
41
|
+
@tag = options.delete(:tag)
|
33
42
|
@xml = xml
|
34
43
|
end
|
35
44
|
|
45
|
+
def attr(key)
|
46
|
+
if match_data = @xml.match(ATTRIBUTES_REGEXP)
|
47
|
+
if value_match_data = match_data.captures.first.match(/#{key}="(.+?)"/)
|
48
|
+
value_match_data.captures.first
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def content
|
54
|
+
@content ||=
|
55
|
+
if match_data = @xml.match(CONTENT_REGEXP)
|
56
|
+
match_data.captures.first.tap(&:strip!)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
36
60
|
def find(tag, options = nil)
|
37
61
|
self.class.find(tag, @xml, (options || @options))
|
38
62
|
end
|
@@ -40,4 +64,8 @@ class WeakXml
|
|
40
64
|
def find_all(tag, options = nil)
|
41
65
|
self.class.find_all(tag, @xml, (options || @options))
|
42
66
|
end
|
67
|
+
|
68
|
+
def to_s
|
69
|
+
@xml
|
70
|
+
end
|
43
71
|
end
|
data/lib/weak_xml/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: weak_xml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Sievers
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-09-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -92,7 +92,6 @@ files:
|
|
92
92
|
- bin/console
|
93
93
|
- bin/setup
|
94
94
|
- lib/weak_xml.rb
|
95
|
-
- lib/weak_xml/fragment.rb
|
96
95
|
- lib/weak_xml/version.rb
|
97
96
|
- weak_xml.gemspec
|
98
97
|
homepage: https://github.com/msievers/weak_xml
|
@@ -114,9 +113,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
113
|
version: '0'
|
115
114
|
requirements: []
|
116
115
|
rubyforge_project:
|
117
|
-
rubygems_version: 2.4.
|
116
|
+
rubygems_version: 2.4.8
|
118
117
|
signing_key:
|
119
118
|
specification_version: 4
|
120
119
|
summary: A none parsing xml library
|
121
120
|
test_files: []
|
122
|
-
has_rdoc:
|
data/lib/weak_xml/fragment.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
require_relative "../weak_xml"
|
2
|
-
|
3
|
-
class WeakXml::Fragment
|
4
|
-
# Compiling regular expressions is expensive, specially if one uses variable
|
5
|
-
# parts. So, in order to achive the best performance, these should be compiled
|
6
|
-
# upfront without any "runtime dependencies".
|
7
|
-
ATTRIBUTES_REGEXP = Regexp.compile(/\A<\w+\s+([^>]+)/m)
|
8
|
-
CONTENT_REGEXP = Regexp.compile(/.*?>(.*?)<[^>]+>\Z/m)
|
9
|
-
|
10
|
-
def initialize(tag, xml)
|
11
|
-
@tag = tag
|
12
|
-
@xml = xml
|
13
|
-
end
|
14
|
-
|
15
|
-
def attr(key)
|
16
|
-
if match_data = @xml.match(ATTRIBUTES_REGEXP)
|
17
|
-
if value_match_data = match_data.captures.first.match(/#{key}="(.+?)"/)
|
18
|
-
value_match_data.captures.first
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def content
|
24
|
-
if match_data = @xml.match(CONTENT_REGEXP)
|
25
|
-
match_data.captures.first.tap(&:strip!)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|