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