dynarex 1.0.18 → 1.0.19
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 +29 -12
- metadata +2 -2
data/lib/dynarex.rb
CHANGED
@@ -261,8 +261,8 @@ EOF
|
|
261
261
|
|
262
262
|
def element(x)
|
263
263
|
@doc.element x
|
264
|
-
end
|
265
|
-
|
264
|
+
end
|
265
|
+
|
266
266
|
def sort_by!(&element_blk)
|
267
267
|
refresh_doc
|
268
268
|
a = @doc.xpath('records/*').sort_by &element_blk
|
@@ -277,8 +277,7 @@ EOF
|
|
277
277
|
end
|
278
278
|
|
279
279
|
def record(id)
|
280
|
-
|
281
|
-
OpenStruct.new h
|
280
|
+
recordx_to_record @doc.element("records/*[@id='#{id}']")
|
282
281
|
end
|
283
282
|
|
284
283
|
def record_exists?(id)
|
@@ -290,7 +289,29 @@ EOF
|
|
290
289
|
end
|
291
290
|
|
292
291
|
private
|
293
|
-
|
292
|
+
|
293
|
+
|
294
|
+
def create_find(fields)
|
295
|
+
methods = fields.map do |field|
|
296
|
+
"def find_by_#{field}(value) findx_by('#{field}', value) end\n" + \
|
297
|
+
"def find_all_by_#{field}(value) findx_all_by('#{field}', value) end"
|
298
|
+
end
|
299
|
+
self.instance_eval(methods.join("\n"))
|
300
|
+
end
|
301
|
+
|
302
|
+
def findx_by(field, value)
|
303
|
+
r = @doc.element("records/*[#{field}='#{value}']")
|
304
|
+
r ? recordx_to_record(r) : nil
|
305
|
+
end
|
306
|
+
|
307
|
+
def findx_all_by(field, value)
|
308
|
+
@doc.xpath("records/*[#{field}='#{value}']").map {|x| recordx_to_record x}
|
309
|
+
end
|
310
|
+
|
311
|
+
def recordx_to_record(recordx)
|
312
|
+
OpenStruct.new(Hash[*@fields.zip(recordx.xpath("*/text()")).flatten])
|
313
|
+
end
|
314
|
+
|
294
315
|
def hash_create(params={}, id=nil)
|
295
316
|
|
296
317
|
fields = capture_fields(params)
|
@@ -355,9 +376,10 @@ EOF
|
|
355
376
|
ptrn = %r((\w+)\[?([^\]]+)?\]?\/(\w+)\(([^\)]+)\))
|
356
377
|
root_name, raw_summary, record_name, raw_fields = s.match(ptrn).captures
|
357
378
|
summary, fields = [raw_summary || '',raw_fields].map {|x| x.split(/,/).map &:strip}
|
379
|
+
create_find fields
|
358
380
|
|
359
381
|
reserved = %w(require parent)
|
360
|
-
raise 'reserved keyword'
|
382
|
+
raise 'reserved keyword' if (fields & reserved).any?
|
361
383
|
|
362
384
|
lines =<<LINES
|
363
385
|
#{root_name}
|
@@ -375,12 +397,7 @@ LINES
|
|
375
397
|
end
|
376
398
|
|
377
399
|
def attach_record_methods()
|
378
|
-
@fields
|
379
|
-
self.instance_eval(
|
380
|
-
%Q(def find_by_#{field}(s)
|
381
|
-
Hash[@fields.zip(@doc.xpath("records/*[#{field}='\#{s}']/*/text()"))]
|
382
|
-
end))
|
383
|
-
end
|
400
|
+
create_find @fields
|
384
401
|
end
|
385
402
|
|
386
403
|
def open(s)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dynarex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.19
|
5
5
|
platform: ruby
|
6
6
|
authors: []
|
7
7
|
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2011-02-
|
12
|
+
date: 2011-02-27 00:00:00 +00:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|