polyrex 0.7.4 → 0.7.5
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/polyrex.rb +23 -25
- metadata +2 -2
data/lib/polyrex.rb
CHANGED
@@ -6,12 +6,11 @@ require 'polyrex-schema'
|
|
6
6
|
require 'line-tree'
|
7
7
|
require 'polyrex-objects'
|
8
8
|
require 'polyrex-createobject'
|
9
|
-
require 'rexml/document'
|
10
9
|
require 'ostruct'
|
11
10
|
require 'polyrex-object-methods'
|
11
|
+
require 'rexle'
|
12
12
|
|
13
13
|
class Polyrex
|
14
|
-
include REXML
|
15
14
|
|
16
15
|
def initialize(location)
|
17
16
|
@id = '0'
|
@@ -26,8 +25,7 @@ class Polyrex
|
|
26
25
|
end
|
27
26
|
|
28
27
|
def delete(id=nil)
|
29
|
-
|
30
|
-
@parent_node.parent.delete @parent_node
|
28
|
+
@doc.delete("//[@id='#{id}'")
|
31
29
|
end
|
32
30
|
|
33
31
|
def record()
|
@@ -45,7 +43,7 @@ class Polyrex
|
|
45
43
|
# -- start of crud methods --
|
46
44
|
|
47
45
|
def find_by_id(id)
|
48
|
-
@parent_node =
|
46
|
+
@parent_node = @doc.element("//[@id='#{id}']")
|
49
47
|
self
|
50
48
|
end
|
51
49
|
|
@@ -63,25 +61,25 @@ class Polyrex
|
|
63
61
|
end
|
64
62
|
|
65
63
|
def xpath(s)
|
66
|
-
|
64
|
+
@doc.element s
|
67
65
|
end
|
68
66
|
|
69
67
|
def records
|
70
|
-
|
68
|
+
@doc.xpath("records/*").map do |record|
|
71
69
|
@objects_a[0].new(record, @id)
|
72
70
|
end
|
73
71
|
end
|
74
72
|
|
75
73
|
def summary
|
76
|
-
OpenStruct.new Hash[
|
74
|
+
OpenStruct.new Hash[*@doc.xpath("summary/*").map {|x| [x.name, x.text]}.flatten]
|
77
75
|
end
|
78
76
|
|
79
77
|
private
|
80
78
|
|
81
79
|
def polyrex_new(schema)
|
82
80
|
# -- required for the parsing feature
|
83
|
-
doc =
|
84
|
-
@format_masks =
|
81
|
+
doc = Rexle.new(PolyrexSchema.new(schema).to_s)
|
82
|
+
@format_masks = doc.xpath('//format_mask/text()')
|
85
83
|
schema_rpath = schema.gsub(/\[[^\]]+\]/,'')
|
86
84
|
@recordx = schema_rpath.split('/')
|
87
85
|
|
@@ -127,21 +125,22 @@ class Polyrex
|
|
127
125
|
pattern = patterns.detect {|x| line.match(/#{x.join}/)}.join
|
128
126
|
field_values = line.match(/#{pattern}/).captures
|
129
127
|
field_values += [''] * (@field_names.length - field_values.length)
|
130
|
-
#field_values = line.match(/#{t}/).captures
|
131
128
|
|
132
129
|
@id.succ!
|
133
|
-
|
134
|
-
record.
|
135
|
-
|
130
|
+
|
131
|
+
record = Rexle::Element.new(tag_name)
|
132
|
+
record.add_attribute('id' => @id.clone)
|
133
|
+
summary = Rexle::Element.new('summary')
|
136
134
|
|
137
135
|
@field_names.zip(field_values).each do |name, value|
|
138
|
-
field = Element.new(name.to_s)
|
136
|
+
field = Rexle::Element.new(name.to_s)
|
139
137
|
field.text = value
|
140
138
|
summary.add field
|
141
139
|
end
|
142
|
-
|
140
|
+
|
141
|
+
summary.add Rexle::Element.new('format_mask').add_text(@format_masks[i])
|
143
142
|
|
144
|
-
new_records = Element.new('records')
|
143
|
+
new_records = Rexle::Element.new('records')
|
145
144
|
|
146
145
|
record.add summary
|
147
146
|
record.add new_records
|
@@ -189,23 +188,22 @@ class Polyrex
|
|
189
188
|
buffer = File.open(s,'r').read
|
190
189
|
end
|
191
190
|
|
192
|
-
@doc =
|
191
|
+
@doc = Rexle.new buffer
|
193
192
|
schema = @doc.root.text('summary/schema')
|
194
193
|
|
195
194
|
unless @format_masks
|
196
|
-
@format_masks = XPath.match(@doc.root, '//format_mask/text()').map &:to_s
|
197
195
|
schema_rpath = schema.gsub(/\[[^\]]+\]/,'')
|
198
196
|
@recordx = schema_rpath.split('/')
|
199
197
|
@recordx.shift
|
200
198
|
end
|
201
199
|
|
202
|
-
|
203
|
-
@id =
|
200
|
+
id = @doc.xpath('max(//@id)')
|
201
|
+
@id = id.to_s.succ if id
|
204
202
|
|
205
|
-
#puts 'schema : ' + schema
|
206
203
|
load_handlers(schema)
|
207
204
|
load_find_by(schema)
|
208
|
-
|
205
|
+
|
206
|
+
@parent_node = @doc.element('records')
|
209
207
|
|
210
208
|
end
|
211
209
|
|
@@ -219,7 +217,7 @@ class Polyrex
|
|
219
217
|
methodx = a.map do |class_name, methods|
|
220
218
|
class_name.downcase!
|
221
219
|
methods.map do |method_name|
|
222
|
-
xpath = %Q(
|
220
|
+
xpath = %Q(@doc.xpath("//%s[summary/%s='\#\{val\}']")) % [class_name, method_name]
|
223
221
|
"def find_by_%s_%s(val) @parent_node = %s; self.%s end" % [class_name, method_name, xpath, class_name]
|
224
222
|
end
|
225
223
|
end
|
@@ -227,4 +225,4 @@ class Polyrex
|
|
227
225
|
self.instance_eval methodx.join("\n")
|
228
226
|
end
|
229
227
|
|
230
|
-
end
|
228
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: polyrex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.5
|
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: 2010-
|
12
|
+
date: 2010-12-01 00:00:00 +00:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|