xml-mixup 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +5 -5
- data/lib/xml/mixup/version.rb +1 -1
- data/lib/xml/mixup.rb +8 -8
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d4939bcfe6e304b5b71251451f59982f747f43b6e31cdd5337d95ed30dfa37d3
|
4
|
+
data.tar.gz: e97756ea84870da09ac8fbc82d35b74d0a856eb74ed0fe826d4153d520f16398
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bed9c8b8a0f064d533192bee3f883f9b19c00e45dfb4e569c0b34fbfa7622124087a8fb39c5a36aefdbafab2e5c3d412af0d8911262111f89893c110354cd737
|
7
|
+
data.tar.gz: 870ebed923f4b9a6fb5c83924115ad598a4b1293ed03a481ef9cd5a3409e53bca68609e61baa23f4549f92f5f7d4a7551dc375b27d769007d2f59df9c48e64e9
|
data/README.md
CHANGED
@@ -44,20 +44,20 @@ Ruby, and found a lot of the same things:
|
|
44
44
|
|
45
45
|
Granted it's a lot nicer to do this sort of thing in Ruby, but at the
|
46
46
|
end of the day, the thing generating the XML is a nested list of
|
47
|
-
method calls
|
47
|
+
method calls — _not_ a declarative data structure.
|
48
48
|
|
49
49
|
### Document has to be generated all in one shot
|
50
50
|
|
51
51
|
It's not super-easy to generate a piece of the target document and
|
52
52
|
then go back and generate some more (although
|
53
|
-
|
53
|
+
`Nokogiri::XML::Builder.with` is a nice start). This plus the last
|
54
54
|
point leads to all sorts of cockamamy constructs which are almost as
|
55
55
|
life-sucking as writing raw DOM routines.
|
56
56
|
|
57
57
|
### Hard to do surgery on existing documents
|
58
58
|
|
59
59
|
This comes up a lot: you have an existing document and you want to add
|
60
|
-
even just a single node to it
|
60
|
+
even just a single node to it — say, in between two nodes just for
|
61
61
|
fun. Good luck with that.
|
62
62
|
|
63
63
|
### Enter `XML::Mixup`
|
@@ -77,7 +77,7 @@ among other things, takes a `:spec`. The spec can be any composite
|
|
77
77
|
|
78
78
|
### Hashes
|
79
79
|
|
80
|
-
The principal construct in `XML::Mixup` is the
|
80
|
+
The principal construct in `XML::Mixup` is the `Hash`. You can
|
81
81
|
generate pretty much any node with it:
|
82
82
|
|
83
83
|
#### Elements
|
@@ -115,7 +115,7 @@ Attributes are sorted lexically. Composite attribute values get
|
|
115
115
|
flattened like this:
|
116
116
|
|
117
117
|
```ruby
|
118
|
-
{ nil => :foo, array: [:a :b], hash: { e: :f, c: :d } }
|
118
|
+
{ nil => :foo, array: [:a, :b], hash: { e: :f, c: :d } }
|
119
119
|
# => <foo array="a b" hash="c: d e: f"/>
|
120
120
|
```
|
121
121
|
|
data/lib/xml/mixup/version.rb
CHANGED
data/lib/xml/mixup.rb
CHANGED
@@ -112,10 +112,10 @@ module XML::Mixup
|
|
112
112
|
ADJACENT.keys do |k|
|
113
113
|
if nodes[k]
|
114
114
|
if adj
|
115
|
-
raise
|
115
|
+
raise "Cannot bind to #{k}: #{adj} is already present"
|
116
116
|
end
|
117
117
|
unless nodes[k].is_a? Nokogiri::XML::Node
|
118
|
-
raise
|
118
|
+
raise "#{k} must be an XML node"
|
119
119
|
end
|
120
120
|
adj = k
|
121
121
|
end
|
@@ -126,7 +126,7 @@ module XML::Mixup
|
|
126
126
|
doc ||= nodes[adj].document
|
127
127
|
unless adj == 'parent'
|
128
128
|
unless (nodes[:parent] = nodes[adj].parent)
|
129
|
-
raise
|
129
|
+
raise "#{adj} node must have a parent node!"
|
130
130
|
end
|
131
131
|
end
|
132
132
|
else
|
@@ -222,7 +222,7 @@ module XML::Mixup
|
|
222
222
|
elsif name == '#pi' or name == '#processing-instruction'
|
223
223
|
# now processing instructions
|
224
224
|
if children.empty?
|
225
|
-
raise
|
225
|
+
raise "Processing instruction must have at least a target"
|
226
226
|
end
|
227
227
|
target = children[0]
|
228
228
|
content = ''
|
@@ -245,7 +245,7 @@ module XML::Mixup
|
|
245
245
|
elsif name == '#dtd' or name == '#doctype'
|
246
246
|
# now doctype declarations
|
247
247
|
if children.empty?
|
248
|
-
raise
|
248
|
+
raise "DTD node must have a root element declaration"
|
249
249
|
end
|
250
250
|
|
251
251
|
# assign as if these are args
|
@@ -255,7 +255,7 @@ module XML::Mixup
|
|
255
255
|
sys ||= attr[:system] if attr[:system]
|
256
256
|
|
257
257
|
# XXX for some reason this is an *internal* subset?
|
258
|
-
node = doc.create_internal_subset(root, pub, sys)
|
258
|
+
node = doc.create_internal_subset(root, pub.to_s, sys.to_s)
|
259
259
|
|
260
260
|
# at any rate it doesn't have to be explicitly attached
|
261
261
|
|
@@ -319,7 +319,7 @@ module XML::Mixup
|
|
319
319
|
|
320
320
|
# there should be no nil namespace declarations now
|
321
321
|
if ns.has_value? nil
|
322
|
-
raise
|
322
|
+
raise 'INTERNAL ERROR: nil namespace declaration'
|
323
323
|
end
|
324
324
|
|
325
325
|
# generate the node
|
@@ -466,7 +466,7 @@ module XML::Mixup
|
|
466
466
|
private
|
467
467
|
|
468
468
|
def element tag, doc: nil, ns: {}, attr: {}, args: []
|
469
|
-
raise unless doc
|
469
|
+
raise 'Document node must be present' unless doc
|
470
470
|
prefix = local = nil
|
471
471
|
if tag.respond_to? :to_a
|
472
472
|
prefix, local = tag
|