xml-mixup 0.1.9 → 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 48a86946adc9a44a1bc9d986416ef411991303edb21e9504c65298780133b57d
4
- data.tar.gz: da5b71064ada3a7d49ce014c30432aed83a0d04543ef581b2952279522bda033
3
+ metadata.gz: 74f33a7307a517d3447e6cc3e41b79a964d7002dcd41118f20f77854ad20c7c9
4
+ data.tar.gz: c0fe7162ce9a6b6d0b27880b6127e783bbe2f340358be29e2cc9386345ef6cff
5
5
  SHA512:
6
- metadata.gz: 4b841ff188b208a3986ccc97b8a44df1c29b0371bef01d113cf03358c8757ed728e906e8585ec1233acccdf16d2676a78052fbeb50eb75e972d073785b28ad1f
7
- data.tar.gz: 6c83a42f76ba918526bf2bc192de5e101fea497593983e8c5d8415a66eefabe5c786302f58bbb488f01954ba6a45dbdab133f6598c8d129794f4fb34a73d05d5
6
+ metadata.gz: c50bb0074170d8b936bf83084d5d471ab3f6f70703ec87e4c7e1b3f8d02bff4bb557986367f648bfec14f62cdb0a6b7b0ddaa7b88cdc3308e6922eb377b8619d
7
+ data.tar.gz: 86e2f6b2ba2f89808215e1176031bc2079ff254f425d5c3a8e2d6f9a8f81506e9bc921b9605d531b3708fca92cf3dc18cb3f8ceca6dd8615b76b2eeed1f7deee
data/README.md CHANGED
@@ -148,6 +148,21 @@ flattened like this:
148
148
  # => <foo array="a b" hash="c: d e: f"/>
149
149
  ```
150
150
 
151
+ Note that attribute values can also be a `Proc`, which are fed
152
+ arbitrary arguments from the `markup` method. The `Proc` is expected
153
+ to return something which can subsequently flattened. If an attribute
154
+ value is `nil` or ultimately resolves to `nil`, or an empty `Array` or
155
+ `Hash`, that attribute will be omitted. `nil` values in arrays or
156
+ hashes will also be skipped, as will empty-string values in
157
+ arrays. This is different behaviour from versions prior to 0.1.10,
158
+ where `nil` (or, e.g., `[]`) would produce an attribute containing the
159
+ empty string.
160
+
161
+ This change was made to eliminate a lot of clunky logic in application
162
+ code to determine whether or not to include a given attribute. If you
163
+ need to render attributes explicitly with empty strings, then
164
+ explicitly pass in the empty string.
165
+
151
166
  #### Processing instructions
152
167
 
153
168
  ```ruby
data/lib/xml/mixup.rb CHANGED
@@ -216,7 +216,7 @@ module XML::Mixup
216
216
  # now we dispatch based on the name
217
217
  if name == '#comment'
218
218
  # first up, comments
219
- node = doc.create_comment flatten(children, args)
219
+ node = doc.create_comment flatten(children, args).to_s
220
220
 
221
221
  # attach it
222
222
  ADJACENT[adj].call node, nodes[adj]
@@ -230,11 +230,12 @@ module XML::Mixup
230
230
  content = ''
231
231
  if (c = children[1..children.length]) and c.length > 0
232
232
  #warn c.inspect
233
- content = flatten(c, args)
233
+ content = flatten(c, args).to_s
234
234
  else
235
235
  content = attr.sort.map { |pair|
236
- "#{pair[0].to_s}=\"#{flatten(pair[1], args)}\""
237
- }.join(' ')
236
+ v = flatten(pair[1], args) or next
237
+ "#{pair[0].to_s}=\"#{v}\""
238
+ }.compact.join(' ')
238
239
  end
239
240
 
240
241
  node = Nokogiri::XML::ProcessingInstruction.new(doc, target, content)
@@ -292,11 +293,12 @@ module XML::Mixup
292
293
  ns = {}
293
294
  at = {}
294
295
  attr.each do |k, v|
295
- v = flatten(v, args)
296
- if (md = /^xmlns(?::(.*))?$/i.match(k.to_s))
296
+ k = k.to_s
297
+ v = flatten(v, args) or next
298
+ if (md = /^xmlns(?::(.*))?$/i.match(k))
297
299
  ns[md[1]] = v
298
300
  else
299
- at[k.to_s] = v
301
+ at[k] = v
300
302
  end
301
303
  end
302
304
 
@@ -545,26 +547,33 @@ module XML::Mixup
545
547
  elem.add_namespace((p.nil? ? p : p.to_s), ns[p].to_s)
546
548
  end
547
549
  attr.sort.each do |k, v|
548
- elem[k.to_s] = flatten(v, args)
550
+ v = flatten(v, args) or next
551
+ elem[k.to_s] = v
549
552
  end
550
553
 
551
554
  elem
552
555
  end
553
556
 
554
- ATOMS = [String, Symbol, Numeric, NilClass, FalseClass, TrueClass].freeze
557
+ ATOMS = [String, Symbol, Numeric, FalseClass, TrueClass].freeze
555
558
 
556
559
  # yo dawg
557
560
 
558
561
  def flatten obj, args
562
+ return if obj.nil?
559
563
  # early bailout for most likely condition
560
564
  if ATOMS.any? { |x| obj.is_a? x }
561
565
  obj.to_s
562
566
  elsif obj.is_a? Hash
563
- obj.sort.map { |kv| "#{kv[0].to_s}: #{flatten(kv[1], args)}" }.join(' ')
567
+ tmp = obj.sort.map do |kv|
568
+ v = flatten(kv[1], args)
569
+ v.nil? ? nil : "#{kv[0].to_s}: #{v}"
570
+ end.compact
571
+ tmp.empty? ? nil : tmp.join(' ')
564
572
  elsif obj.respond_to? :call
565
- obj.call(*args)
573
+ flatten(obj.call(*args), args)
566
574
  elsif obj.respond_to? :map
567
- obj.map { |x| flatten(x, args) }.join(' ')
575
+ tmp = obj.map { |x| flatten(x, args) }.reject { |x| x.nil? || x == '' }
576
+ tmp.empty? ? nil : tmp.join(' ')
568
577
  else
569
578
  obj.to_s
570
579
  end
@@ -1,5 +1,5 @@
1
1
  module XML
2
2
  module Mixup
3
- VERSION = "0.1.9"
3
+ VERSION = "0.1.10"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xml-mixup
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dorian Taylor
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-06-25 00:00:00.000000000 Z
11
+ date: 2019-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -105,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
105
  version: '0'
106
106
  requirements: []
107
107
  rubyforge_project:
108
- rubygems_version: 2.7.6.2
108
+ rubygems_version: 2.7.6
109
109
  signing_key:
110
110
  specification_version: 4
111
111
  summary: A mixin for (XML) markup