dynarex 1.0.18 → 1.0.19

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/dynarex.rb +29 -12
  2. metadata +2 -2
@@ -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
- h = Hash[*@doc.xpath("records/*[@id='#{id}']/*").map {|x| [x.name, x.text]}.flatten]
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' unless fields.grep(/^(#{reserved.join('|')})$/).empty?
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.each do |field|
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.18
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-25 00:00:00 +00:00
12
+ date: 2011-02-27 00:00:00 +00:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency