dynarex 1.0.19 → 1.0.20
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 +69 -65
- metadata +1 -1
data/lib/dynarex.rb
CHANGED
@@ -133,71 +133,9 @@ EOF
|
|
133
133
|
|
134
134
|
#Parses 1 or more lines of text to create or update existing records.
|
135
135
|
|
136
|
-
def parse(buffer)
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
if raw_header then
|
141
|
-
header = raw_header[/<?dynarex (.*)?>/,1]
|
142
|
-
header.scan(/\w+\="[^"]+\"/).map{|x| r = x.split(/=/); [(r[0] + "=").to_sym, r[1][/^"(.*)"$/,1]] }.each {|name, value| self.method(name).call(value)}
|
143
|
-
end
|
144
|
-
|
145
|
-
# if records already exist find the max id
|
146
|
-
i = @doc.xpath('max(records/*/attribute::id)').to_i
|
147
|
-
|
148
|
-
|
149
|
-
# 'a' and 'a_split' just used for validation
|
150
|
-
a = @format_mask.scan(/\[!\w+\]/)
|
151
|
-
a_split = @format_mask.split(/\[!\w+\]/)
|
152
|
-
|
153
|
-
if a.length == 2 and a_split[1].length == 1 then
|
154
|
-
a2 = []
|
155
|
-
|
156
|
-
# 1st
|
157
|
-
a2 << "([^#{a_split[1]}]+)" << a_split[1]
|
158
|
-
|
159
|
-
# last
|
160
|
-
a2 << "(.*)"
|
161
|
-
t = a2.join
|
162
|
-
else
|
163
|
-
# convert the format mask into a friendly reg exp string
|
164
|
-
t = @format_mask.to_s.gsub(/\[!(\w+)\]/, '(.*)').sub(/\[/,'\[').sub(/\]/,'\]')
|
165
|
-
end
|
166
|
-
|
167
|
-
lines = buffer.strip.split(/\r?\n|\r(?!\n)/).map {|x|x.match(/#{t}/).captures}
|
168
|
-
|
169
|
-
a = lines.map do|x|
|
170
|
-
created = Time.now.to_s
|
171
|
-
|
172
|
-
h = Hash[@fields.zip(x)]
|
173
|
-
[h[@default_key], {id: '', created: created, last_modified: '', body: h}]
|
174
|
-
end
|
175
|
-
|
176
|
-
h2 = Hash[a]
|
177
|
-
|
178
|
-
#replace the existing records hash
|
179
|
-
h = @records
|
180
|
-
h2.each do |key,item|
|
181
|
-
if h.has_key? key then
|
182
|
-
|
183
|
-
# overwrite the previous item and change the timestamps
|
184
|
-
h[key][:last_modified] = item[:created]
|
185
|
-
item[:body].each do |k,v|
|
186
|
-
h[key][:body][k.to_sym] = v
|
187
|
-
end
|
188
|
-
else
|
189
|
-
i += 1
|
190
|
-
item[:id] = i.to_s
|
191
|
-
h[key] = item.clone
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
h.each {|key, item| h.delete(key) if not h2.has_key? key}
|
196
|
-
#refresh_doc
|
197
|
-
#load_records
|
198
|
-
@flat_records = @records.values.map{|x| x[:body]}
|
199
|
-
rebuild_doc
|
200
|
-
self
|
136
|
+
def parse(buffer='')
|
137
|
+
buffer = yield if block_given?
|
138
|
+
string_parse buffer
|
201
139
|
end
|
202
140
|
|
203
141
|
#Create a record from a hash containing the field name, and the field value.
|
@@ -371,6 +309,72 @@ EOF
|
|
371
309
|
|
372
310
|
alias refresh_doc display_xml
|
373
311
|
|
312
|
+
def string_parse(buffer)
|
313
|
+
raw_header = buffer.slice!(/<\?dynarex[^>]+>/)
|
314
|
+
|
315
|
+
if raw_header then
|
316
|
+
header = raw_header[/<?dynarex (.*)?>/,1]
|
317
|
+
header.scan(/\w+\="[^"]+\"/).map{|x| r = x.split(/=/); [(r[0] + "=").to_sym, r[1][/^"(.*)"$/,1]] }.each {|name, value| self.method(name).call(value)}
|
318
|
+
end
|
319
|
+
|
320
|
+
# if records already exist find the max id
|
321
|
+
i = @doc.xpath('max(records/*/attribute::id)').to_i
|
322
|
+
|
323
|
+
|
324
|
+
# 'a' and 'a_split' just used for validation
|
325
|
+
a = @format_mask.scan(/\[!\w+\]/)
|
326
|
+
a_split = @format_mask.split(/\[!\w+\]/)
|
327
|
+
|
328
|
+
if a.length == 2 and a_split[1].length == 1 then
|
329
|
+
a2 = []
|
330
|
+
|
331
|
+
# 1st
|
332
|
+
a2 << "([^#{a_split[1]}]+)" << a_split[1]
|
333
|
+
|
334
|
+
# last
|
335
|
+
a2 << "(.*)"
|
336
|
+
t = a2.join
|
337
|
+
else
|
338
|
+
# convert the format mask into a friendly reg exp string
|
339
|
+
t = @format_mask.to_s.gsub(/\[!(\w+)\]/, '(.*)').sub(/\[/,'\[').sub(/\]/,'\]')
|
340
|
+
end
|
341
|
+
|
342
|
+
lines = buffer.strip.split(/\r?\n|\r(?!\n)/).map {|x|x.match(/#{t}/).captures}
|
343
|
+
|
344
|
+
a = lines.map do|x|
|
345
|
+
created = Time.now.to_s
|
346
|
+
|
347
|
+
h = Hash[@fields.zip(x)]
|
348
|
+
[h[@default_key], {id: '', created: created, last_modified: '', body: h}]
|
349
|
+
end
|
350
|
+
|
351
|
+
h2 = Hash[a]
|
352
|
+
|
353
|
+
#replace the existing records hash
|
354
|
+
h = @records
|
355
|
+
h2.each do |key,item|
|
356
|
+
if h.has_key? key then
|
357
|
+
|
358
|
+
# overwrite the previous item and change the timestamps
|
359
|
+
h[key][:last_modified] = item[:created]
|
360
|
+
item[:body].each do |k,v|
|
361
|
+
h[key][:body][k.to_sym] = v
|
362
|
+
end
|
363
|
+
else
|
364
|
+
i += 1
|
365
|
+
item[:id] = i.to_s
|
366
|
+
h[key] = item.clone
|
367
|
+
end
|
368
|
+
end
|
369
|
+
|
370
|
+
h.each {|key, item| h.delete(key) if not h2.has_key? key}
|
371
|
+
#refresh_doc
|
372
|
+
#load_records
|
373
|
+
@flat_records = @records.values.map{|x| x[:body]}
|
374
|
+
rebuild_doc
|
375
|
+
self
|
376
|
+
end
|
377
|
+
|
374
378
|
def dynarex_new(s)
|
375
379
|
@schema = s
|
376
380
|
ptrn = %r((\w+)\[?([^\]]+)?\]?\/(\w+)\(([^\)]+)\))
|