dynarex 1.1.34 → 1.1.35

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.
Files changed (2) hide show
  1. data/lib/dynarex.rb +38 -9
  2. metadata +2 -2
@@ -11,6 +11,7 @@ require 'rexslt'
11
11
  require 'dynarex-xslt'
12
12
  require 'recordx'
13
13
  require 'rxraw-lineparser'
14
+ require 'yaml'
14
15
 
15
16
  class Dynarex
16
17
 
@@ -26,9 +27,11 @@ class Dynarex
26
27
  # Dynarex.new '<contacts><summary><schema>contacts/contact(name,age,dob)</schema></summary><records/></contacts>'
27
28
 
28
29
  def initialize(location=nil)
30
+
29
31
  @delimiter = ' '
30
32
  open(location) if location
31
33
  @dirty_flag = false
34
+ @logger = Logger.new('/tmp/dynarex.log','daily')
32
35
  end
33
36
 
34
37
  def add(x)
@@ -252,7 +255,7 @@ EOF
252
255
  item[:body].each do |name,value|
253
256
  #name = name.to_s.prepend('._').to_sym if reserved_keywords.include? name
254
257
  name = ('._' + name.to_s).to_sym if reserved_keywords.include? name
255
- xml.send name, value
258
+ xml.send name, value.to_s
256
259
  end
257
260
  end
258
261
  end
@@ -262,7 +265,7 @@ EOF
262
265
  xml.records
263
266
  end # end of if @records
264
267
  end
265
- #puts 'a : ' + a.inspect
268
+
266
269
  @doc = Rexle.new a
267
270
  end
268
271
 
@@ -276,7 +279,9 @@ EOF
276
279
 
277
280
  def to_xslt(opt={})
278
281
  h = {limit: -1}.merge(opt)
282
+ @logger.debug "@schema: %s; @xslt_schema: %s" % [@schema, @xslt_schema]
279
283
  xslt = DynarexXSLT.new(schema: @schema, xslt_schema: @xslt_schema).to_xslt
284
+ @logger.debug 'xslt : ' + xslt.inspect
280
285
  return xslt
281
286
  end
282
287
 
@@ -309,7 +314,7 @@ EOF
309
314
  doc.root.xpath('records/*').each do |x|
310
315
  raw_dt = DateTime.parse x.attributes[:created]
311
316
  dt = raw_dt.strftime("%a, %d %b %Y %H:%M:%S %z")
312
- x.add Rexle::Element.new('pubDate').add_text dt
317
+ x.add Rexle::Element.new('pubDate').add_text dt.to_s
313
318
  end
314
319
 
315
320
  xml = Rexslt.new(xslt, doc.xml).to_s
@@ -414,15 +419,37 @@ EOF
414
419
  @summary[:schema] = @schema
415
420
  @summary[:format_mask] = @format_mask
416
421
 
417
- lines = raw_lines.map do |x|
418
- field_names, field_values = RXRawLineParser.new(@format_mask).parse(x)
419
- field_values
422
+ if raw_lines.first == '---' then
423
+
424
+ yaml = YAML.load raw_lines.join("\n")
425
+
426
+ yamlize = lambda {|x| (x.is_a? Array) ? '--- ' + x.to_s : x}
427
+
428
+ yprocs = {
429
+ Hash: lambda {|y|
430
+ y.map do |k,v|
431
+ procs = {Hash: proc {|x| x.values}, Array: proc {v}}
432
+ values = procs[v.class.to_s.to_sym].call(v).map(&yamlize)
433
+ [k, *values]
434
+ end
435
+ },
436
+ Array: lambda {|y| y.map {|x2| x2.map(&yamlize)} }
437
+ }
438
+
439
+ lines = yprocs[yaml.class.to_s.to_sym].call yaml
440
+ else
441
+
442
+ lines = raw_lines.map do |x|
443
+ field_names, field_values = RXRawLineParser.new(@format_mask).parse(x)
444
+ field_values
445
+ end
446
+
420
447
  end
421
448
 
422
449
  a = lines.map do|x|
423
450
  created = Time.now.to_s
424
451
 
425
- h = Hash[@fields.zip(x)]
452
+ h = Hash[@fields.zip(x.map{|t| t.to_s[/^--- /] ? YAML.load(t) : t})]
426
453
  [h[@default_key], {id: '', created: created, last_modified: '', body: h}]
427
454
  end
428
455
 
@@ -532,6 +559,7 @@ EOF
532
559
  end
533
560
 
534
561
  def load_records
562
+
535
563
  @records = records_to_h
536
564
  @records.instance_eval do
537
565
  def delete_item(i)
@@ -556,7 +584,7 @@ EOF
556
584
 
557
585
  created = Time.now.to_s
558
586
  last_modified = ''
559
-
587
+
560
588
  if row.attributes[:id] then
561
589
  id = row.attributes[:id]
562
590
  else
@@ -566,7 +594,8 @@ EOF
566
594
  created = row.attributes[:created] if row.attributes[:created]
567
595
  last_modified = row.attributes[:last_modified] if row.attributes[:last_modified]
568
596
  body = row.xpath('*').inject({}) do |r,node|
569
- r.merge node.name.to_sym => node.text.unescape
597
+ text = node.text.unescape
598
+ r.merge node.name.to_sym => (text[/^--- /] ? YAML.load(text) : text)
570
599
  end
571
600
 
572
601
  result.merge body[@default_key.to_sym] => {id: id, created: created, last_modified: last_modified, body: body}
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: dynarex
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.1.34
5
+ version: 1.1.35
6
6
  platform: ruby
7
7
  authors:
8
8
  - James Robertson
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2012-07-23 00:00:00 Z
13
+ date: 2012-07-27 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rexle