dynarex 1.0.28 → 1.1.0
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.
- data/lib/dynarex.rb +44 -33
- metadata +13 -2
data/lib/dynarex.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
|
-
#!/usr/bin/ruby
|
1
|
+
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
# file: dynarex.rb
|
4
4
|
|
5
|
-
require 'nokogiri'
|
6
5
|
require 'open-uri'
|
7
6
|
require 'ostruct'
|
8
7
|
require 'dynarex-import'
|
@@ -106,9 +105,9 @@ EOF
|
|
106
105
|
xslt_format = format_mask.to_s.gsub(/\s(?=\[!\w+\])/,'<xsl:text> </xsl:text>').gsub(/\[!(\w+)\]/, '<xsl:value-of select="\1"/>')
|
107
106
|
xsl_buffer.sub!(/\[!regex_values\]/, xslt_format)
|
108
107
|
|
109
|
-
|
110
|
-
|
111
|
-
|
108
|
+
# jr 211111 the following statement has not yet been tested.
|
109
|
+
Rexslt.new(xsl_buffer, @doc.to_s).to_s
|
110
|
+
""
|
112
111
|
|
113
112
|
end
|
114
113
|
|
@@ -194,8 +193,8 @@ EOF
|
|
194
193
|
|
195
194
|
def element(x)
|
196
195
|
@doc.element x
|
197
|
-
end
|
198
|
-
|
196
|
+
end
|
197
|
+
|
199
198
|
def sort_by!(&element_blk)
|
200
199
|
refresh_doc
|
201
200
|
a = @doc.xpath('records/*').sort_by &element_blk
|
@@ -207,7 +206,7 @@ EOF
|
|
207
206
|
|
208
207
|
load_records
|
209
208
|
self
|
210
|
-
end
|
209
|
+
end
|
211
210
|
|
212
211
|
def record(id)
|
213
212
|
recordx_to_record @doc.element("records/*[@id='#{id}']")
|
@@ -250,6 +249,7 @@ EOF
|
|
250
249
|
params = Hash[raw_params.keys.map(&:to_sym).zip(raw_params.values)]
|
251
250
|
|
252
251
|
fields = capture_fields(params)
|
252
|
+
|
253
253
|
record = Rexle::Element.new @record_name
|
254
254
|
fields.each do |k,v|
|
255
255
|
element = Rexle::Element.new(k.to_s)
|
@@ -257,7 +257,6 @@ EOF
|
|
257
257
|
record.add element
|
258
258
|
end
|
259
259
|
|
260
|
-
|
261
260
|
id = (@doc.xpath('max(records/*/attribute::id)') || '0').succ unless id
|
262
261
|
|
263
262
|
attributes = {id: id, created: Time.now.to_s, last_modified: nil}
|
@@ -274,9 +273,9 @@ EOF
|
|
274
273
|
end
|
275
274
|
|
276
275
|
|
277
|
-
def display_xml
|
276
|
+
def display_xml(opt={})
|
278
277
|
rebuild_doc()
|
279
|
-
@doc.xml #jr230711 pretty: true
|
278
|
+
@doc.xml(opt) #jr230711 pretty: true
|
280
279
|
end
|
281
280
|
|
282
281
|
def rebuild_doc
|
@@ -290,7 +289,7 @@ EOF
|
|
290
289
|
xml.records do
|
291
290
|
|
292
291
|
@records.each do |k, item|
|
293
|
-
p 'foo ' + item.inspect
|
292
|
+
#p 'foo ' + item.inspect
|
294
293
|
xml.send(@record_name, {id: item[:id], created: item[:created], \
|
295
294
|
last_modified: item[:last_modified]}, '') do
|
296
295
|
item[:body].each{|name,value| xml.send name, value}
|
@@ -298,6 +297,8 @@ EOF
|
|
298
297
|
end
|
299
298
|
|
300
299
|
end
|
300
|
+
else
|
301
|
+
xml.records
|
301
302
|
end # end of if @records
|
302
303
|
end
|
303
304
|
|
@@ -369,26 +370,33 @@ EOF
|
|
369
370
|
def dynarex_new(s)
|
370
371
|
@schema = s
|
371
372
|
ptrn = %r((\w+)\[?([^\]]+)?\]?\/(\w+)\(([^\)]+)\))
|
372
|
-
root_name, raw_summary, record_name, raw_fields = s.match(ptrn).captures
|
373
|
-
summary, fields = [raw_summary || '',raw_fields].map {|x| x.split(/,/).map &:strip}
|
374
|
-
create_find fields
|
375
|
-
|
376
|
-
reserved = %w(require parent)
|
377
|
-
raise 'reserved keyword' if (fields & reserved).any?
|
378
|
-
|
379
|
-
lines =<<LINES
|
380
|
-
#{root_name}
|
381
|
-
summary#{"\n" + ' ' * 4 + summary.join("\n" + ' ' * 4) unless summary.empty?}
|
382
|
-
recordx_type dynarex
|
383
|
-
format_mask #{fields.map {|x| "[!%s]" % x}.join(' ')}
|
384
|
-
schema #{s}
|
385
|
-
records
|
386
|
-
LINES
|
387
373
|
|
374
|
+
if s.match(ptrn) then
|
375
|
+
@root_name, raw_summary, record_name, raw_fields = s.match(ptrn).captures
|
376
|
+
summary, fields = [raw_summary || '',raw_fields].map {|x| x.split(/,/).map &:strip}
|
377
|
+
create_find fields
|
378
|
+
|
379
|
+
reserved = %w(require parent)
|
380
|
+
raise 'reserved keyword' if (fields & reserved).any?
|
381
|
+
|
382
|
+
else
|
383
|
+
ptrn = %r((\w+)\[?([^\]]+)?\]?)
|
384
|
+
@root_name, raw_summary = s.match(ptrn).captures
|
385
|
+
summary = raw_summary.split(/,/).map &:strip
|
386
|
+
|
387
|
+
end
|
388
|
+
|
389
|
+
|
390
|
+
format_mask = fields ? fields.map {|x| "[!%s]" % x}.join(' ') : ''
|
391
|
+
|
392
|
+
@summary = Hash[summary.zip([''] * summary.length).flatten.each_slice(2)\
|
393
|
+
.map{|x1,x2| [x1.to_sym,x2]}]
|
394
|
+
@summary.merge!({recordx_type: 'dynarex', format_mask: format_mask, schema: s})
|
388
395
|
@records = {}
|
389
396
|
@flat_records = {}
|
390
397
|
|
391
|
-
|
398
|
+
rebuild_doc
|
399
|
+
|
392
400
|
end
|
393
401
|
|
394
402
|
def attach_record_methods()
|
@@ -399,8 +407,8 @@ LINES
|
|
399
407
|
|
400
408
|
if s[/</] then # xml
|
401
409
|
buffer = s
|
402
|
-
elsif s[
|
403
|
-
|
410
|
+
elsif s[/[\[\(]/] # schema
|
411
|
+
dynarex_new(s)
|
404
412
|
elsif s[/^https?:\/\//] then # url
|
405
413
|
buffer = Kernel.open(s, 'UserAgent' => 'Dynarex-Reader').read
|
406
414
|
else # local file
|
@@ -408,18 +416,21 @@ LINES
|
|
408
416
|
buffer = File.open(s,'r').read
|
409
417
|
end
|
410
418
|
|
411
|
-
|
419
|
+
|
420
|
+
@doc = Rexle.new(buffer) unless @doc
|
421
|
+
|
412
422
|
@schema = @doc.root.text('summary/schema')
|
413
423
|
@root_name = @doc.root.name
|
424
|
+
|
414
425
|
@summary = summary_to_h
|
415
426
|
@default_key = @doc.element('summary/default_key/text()')
|
416
427
|
@format_mask = @doc.element('summary/format_mask/text()')
|
417
428
|
|
418
429
|
@fields = @format_mask.to_s.scan(/\[!(\w+)\]/).flatten.map(&:to_sym) if @format_mask
|
419
430
|
|
420
|
-
if @schema then
|
431
|
+
if @schema and @schema.match(/(\w+)\(([^\)]+)/) then
|
421
432
|
@record_name, raw_fields = @schema.match(/(\w+)\(([^\)]+)/).captures
|
422
|
-
@fields = raw_fields.split(',').map{|x| x.strip.to_sym} unless @fields
|
433
|
+
@fields = raw_fields.split(',').map{|x| x.strip.to_sym} unless @fields
|
423
434
|
end
|
424
435
|
|
425
436
|
if @fields then
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: dynarex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.0
|
5
|
+
version: 1.1.0
|
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: 2011-
|
13
|
+
date: 2011-11-21 00:00:00 +00:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -57,6 +57,17 @@ dependencies:
|
|
57
57
|
version: "0"
|
58
58
|
type: :runtime
|
59
59
|
version_requirements: *id004
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: rexslt
|
62
|
+
prerelease: false
|
63
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: "0"
|
69
|
+
type: :runtime
|
70
|
+
version_requirements: *id005
|
60
71
|
description:
|
61
72
|
email:
|
62
73
|
executables: []
|