dynarex 1.1.34 → 1.1.35

Sign up to get free protection for your applications and to get access to all the features.
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