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.
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