dynarex 1.1.34 → 1.1.35
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/dynarex.rb +38 -9
- metadata +2 -2
data/lib/dynarex.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
418
|
-
|
419
|
-
|
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
|
-
|
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.
|
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-
|
13
|
+
date: 2012-07-27 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rexle
|