mixml 0.0.3 → 0.9
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 +8 -8
- data/.yardopts +11 -0
- data/LICENSE.txt +661 -0
- data/README.md +169 -0
- data/demo/applique/test.rb +84 -0
- data/demo/tool.md +334 -0
- data/lib/mixml.rb +4 -0
- data/lib/mixml/selection.rb +29 -13
- data/lib/mixml/template/xml.rb +8 -1
- data/lib/mixml/tool.rb +47 -17
- data/lib/mixml/version.rb +1 -1
- metadata +29 -10
data/lib/mixml.rb
CHANGED
data/lib/mixml/selection.rb
CHANGED
@@ -5,26 +5,28 @@ module Mixml
|
|
5
5
|
# Selection of XML nodes
|
6
6
|
class Selection
|
7
7
|
# @return [Nokogiri::XML::NodeSet] Selected nodes
|
8
|
-
attr_reader :
|
8
|
+
attr_reader :nodesets
|
9
9
|
|
10
|
-
# @param
|
11
|
-
def initialize(
|
12
|
-
@
|
10
|
+
# @param nodesets [Array<Nokogiri::XML::NodeSet>] Selected nodes
|
11
|
+
def initialize(nodesets)
|
12
|
+
@nodesets = nodesets
|
13
13
|
end
|
14
14
|
|
15
15
|
# Remove selected nodes from the document
|
16
16
|
def remove
|
17
|
-
|
17
|
+
each_node do |nodeset|
|
18
|
+
nodeset.remove
|
19
|
+
end
|
18
20
|
end
|
19
21
|
|
20
22
|
# Replace selected nodes with a template
|
21
23
|
#
|
22
24
|
# @param template [Template::Base] Template to replace nodes with
|
23
|
-
def replace(template
|
25
|
+
def replace(template)
|
24
26
|
template = template.to_mixml_template
|
25
27
|
|
26
|
-
|
27
|
-
value = template.evaluate(node
|
28
|
+
each_node do |node|
|
29
|
+
value = template.evaluate(node)
|
28
30
|
node.replace(value)
|
29
31
|
end
|
30
32
|
end
|
@@ -32,11 +34,11 @@ module Mixml
|
|
32
34
|
# Append children to node
|
33
35
|
#
|
34
36
|
# @param template [Template::Base] Template to replace nodes with
|
35
|
-
def append(template
|
37
|
+
def append(template)
|
36
38
|
template = template.to_mixml_template
|
37
39
|
|
38
|
-
|
39
|
-
value = template.evaluate(node
|
40
|
+
each_node do |node|
|
41
|
+
value = template.evaluate(node)
|
40
42
|
node << value
|
41
43
|
end
|
42
44
|
end
|
@@ -47,7 +49,7 @@ module Mixml
|
|
47
49
|
def value(template)
|
48
50
|
template = template.to_mixml_template
|
49
51
|
|
50
|
-
|
52
|
+
each_node do |node|
|
51
53
|
value = template.evaluate(node)
|
52
54
|
node.value = value
|
53
55
|
end
|
@@ -59,10 +61,24 @@ module Mixml
|
|
59
61
|
def rename(template)
|
60
62
|
template = template.to_mixml_template
|
61
63
|
|
62
|
-
|
64
|
+
each_node do |node|
|
63
65
|
value = template.evaluate(node)
|
64
66
|
node.name = value
|
65
67
|
end
|
66
68
|
end
|
69
|
+
|
70
|
+
protected
|
71
|
+
|
72
|
+
# Execute a block for each node
|
73
|
+
#
|
74
|
+
# @yield Block to execute for each node
|
75
|
+
# @yieldparam node [Nokogiri::XML::Node] Current node
|
76
|
+
def each_node
|
77
|
+
@nodesets.each do |nodeset|
|
78
|
+
nodeset.each do |node|
|
79
|
+
yield node
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
67
83
|
end
|
68
84
|
end
|
data/lib/mixml/template/xml.rb
CHANGED
@@ -6,13 +6,20 @@ module Mixml
|
|
6
6
|
module Template
|
7
7
|
# XML builder based template
|
8
8
|
class Xml < Base
|
9
|
+
# Initialize new XML template
|
10
|
+
#
|
11
|
+
# @param proc [lambda] Proc to create xml
|
12
|
+
def initialize(proc)
|
13
|
+
@proc = proc
|
14
|
+
end
|
15
|
+
|
9
16
|
# Evaluate the template
|
10
17
|
#
|
11
18
|
# @param [Nokogiri::XML::Node] node Current node
|
12
19
|
# @return [String] Template result
|
13
20
|
def evaluate(node)
|
14
21
|
builder = Nokogiri::XML::Builder.new do |xml|
|
15
|
-
|
22
|
+
@proc.call(node, xml)
|
16
23
|
end
|
17
24
|
builder.to_xml
|
18
25
|
end
|
data/lib/mixml/tool.rb
CHANGED
@@ -162,36 +162,40 @@ module Mixml
|
|
162
162
|
|
163
163
|
# Select nodes using an XPath expression and execute DSL commands for these nodes
|
164
164
|
#
|
165
|
-
# @param
|
165
|
+
# @param paths [Array<String>] XPath expression
|
166
166
|
# @yield Block to execute for each nodeset
|
167
|
-
# @yieldparam nodes {Nokogiri::XML::NodeSet} XML nodes to process
|
168
167
|
# @return [void]
|
169
|
-
def xpath(
|
168
|
+
def xpath(*paths, &block)
|
169
|
+
nodesets = []
|
170
170
|
process do |xml|
|
171
|
-
|
172
|
-
|
171
|
+
nodesets << xml.xpath(*paths)
|
172
|
+
end
|
173
|
+
selection = Selection.new(nodesets)
|
173
174
|
|
174
|
-
|
175
|
-
|
176
|
-
end
|
175
|
+
if block_given? then
|
176
|
+
Docile.dsl_eval(selection, &block)
|
177
177
|
end
|
178
|
+
|
179
|
+
selection
|
178
180
|
end
|
179
181
|
|
180
182
|
# Select nodes using CSS selectors and execute DSL commands for these nodes
|
181
183
|
#
|
182
|
-
# @param selectors [String] CSS selectors
|
184
|
+
# @param selectors [Array<String>] CSS selectors
|
183
185
|
# @yield Block to execute for each nodeset
|
184
|
-
# @yieldparam nodes {Nokogiri::XML::NodeSet} XML nodes to process
|
185
186
|
# @return [void]
|
186
187
|
def css(*selectors, &block)
|
188
|
+
nodesets = []
|
187
189
|
process do |xml|
|
188
|
-
|
189
|
-
|
190
|
+
nodesets << xml.css(*selectors)
|
191
|
+
end
|
192
|
+
selection = Selection.new(nodesets)
|
190
193
|
|
191
|
-
|
192
|
-
|
193
|
-
end
|
194
|
+
if block_given? then
|
195
|
+
Docile.dsl_eval(selection, &block)
|
194
196
|
end
|
197
|
+
|
198
|
+
selection
|
195
199
|
end
|
196
200
|
|
197
201
|
# Create a DSL replacement template
|
@@ -205,8 +209,9 @@ module Mixml
|
|
205
209
|
# Create a XML replacement template
|
206
210
|
#
|
207
211
|
# @return [Template] Replacement template
|
208
|
-
|
209
|
-
|
212
|
+
# @param proc [Proc] Lambda to create XML
|
213
|
+
def xml(proc)
|
214
|
+
Template::Xml.new(proc)
|
210
215
|
end
|
211
216
|
|
212
217
|
# Execute a script or a block
|
@@ -223,5 +228,30 @@ module Mixml
|
|
223
228
|
Docile.dsl_eval(self, &block)
|
224
229
|
end
|
225
230
|
end
|
231
|
+
|
232
|
+
# Execute block for each node
|
233
|
+
#
|
234
|
+
# @param selection [Selection] Selected nodes
|
235
|
+
# @yield Block to execute for each node
|
236
|
+
# @yieldparam node [Nokogiri::XML::Node] Current node
|
237
|
+
def node(selection)
|
238
|
+
selection.nodesets.each do |nodeset|
|
239
|
+
nodeset.each do |node|
|
240
|
+
yield node
|
241
|
+
end
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
# Execute block for each node set
|
246
|
+
#
|
247
|
+
# @param selection [Selection] Selected nodes
|
248
|
+
# @yield Block to execute for each node set
|
249
|
+
# @yieldparam node [Nokogiri::XML::NodeSet] Current node set
|
250
|
+
def nodes(selection, &block)
|
251
|
+
selection.nodesets.each do |nodeset|
|
252
|
+
yield nodeset
|
253
|
+
end
|
254
|
+
end
|
255
|
+
|
226
256
|
end
|
227
257
|
end
|
data/lib/mixml/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mixml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.9'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jochen Seeber
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: commander
|
@@ -84,16 +84,16 @@ dependencies:
|
|
84
84
|
name: rake
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ~>
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '10.3'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ~>
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
96
|
+
version: '10.3'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: qed
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,6 +136,20 @@ dependencies:
|
|
136
136
|
- - ~>
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '1.0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: equivalent-xml
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ~>
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0.5'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ~>
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0.5'
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: yard
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -151,20 +165,20 @@ dependencies:
|
|
151
165
|
- !ruby/object:Gem::Version
|
152
166
|
version: '0.8'
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
168
|
+
name: coveralls
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
156
170
|
requirements:
|
157
171
|
- - ~>
|
158
172
|
- !ruby/object:Gem::Version
|
159
|
-
version: '0.
|
173
|
+
version: '0.7'
|
160
174
|
type: :development
|
161
175
|
prerelease: false
|
162
176
|
version_requirements: !ruby/object:Gem::Requirement
|
163
177
|
requirements:
|
164
178
|
- - ~>
|
165
179
|
- !ruby/object:Gem::Version
|
166
|
-
version: '0.
|
167
|
-
description:
|
180
|
+
version: '0.7'
|
181
|
+
description: Never use XSLT again...
|
168
182
|
email:
|
169
183
|
- jochen@seeber.me
|
170
184
|
executables:
|
@@ -172,7 +186,12 @@ executables:
|
|
172
186
|
extensions: []
|
173
187
|
extra_rdoc_files: []
|
174
188
|
files:
|
189
|
+
- .yardopts
|
190
|
+
- LICENSE.txt
|
191
|
+
- README.md
|
175
192
|
- bin/mixml
|
193
|
+
- demo/applique/test.rb
|
194
|
+
- demo/tool.md
|
176
195
|
- lib/mixml.rb
|
177
196
|
- lib/mixml/document.rb
|
178
197
|
- lib/mixml/selection.rb
|