ginjo-rfm 2.1.0 → 2.1.1
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/rfm/VERSION +1 -1
- data/lib/rfm/base.rb +1 -1
- data/lib/rfm/layout.rb +1 -1
- data/lib/rfm/utilities/sax_parser.rb +298 -0
- metadata +172 -177
data/lib/rfm/VERSION
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
2.1.
|
1
|
+
2.1.1
|
2
2
|
|
data/lib/rfm/base.rb
CHANGED
@@ -254,7 +254,7 @@ module Rfm
|
|
254
254
|
|
255
255
|
# Just like Layout#find, but searching by record_id will return a record, not a resultset.
|
256
256
|
def find(find_criteria, options={})
|
257
|
-
#puts "base.find-#{layout}"
|
257
|
+
#puts "base.find-#{layout.object_id}"
|
258
258
|
r = layout.find(find_criteria, options)
|
259
259
|
if ![Hash,Array].include?(find_criteria.class) and r.size == 1
|
260
260
|
r[0]
|
data/lib/rfm/layout.rb
CHANGED
@@ -209,7 +209,7 @@ module Rfm
|
|
209
209
|
# myLayout.find 54321
|
210
210
|
#
|
211
211
|
def find(find_criteria, options = {})
|
212
|
-
#puts "layout.find-#{self}"
|
212
|
+
#puts "layout.find-#{self.object_id}"
|
213
213
|
options.merge!({:field_mapping => field_mapping}) if field_mapping
|
214
214
|
get_records(*Rfm::CompoundQuery.new(find_criteria, options))
|
215
215
|
end
|
@@ -0,0 +1,298 @@
|
|
1
|
+
# From https://github.com/ohler55/ox
|
2
|
+
#gem 'ox', '1.8.5'
|
3
|
+
require 'stringio'
|
4
|
+
require 'ox'
|
5
|
+
require 'delegate'
|
6
|
+
require 'yaml'
|
7
|
+
require 'rfm'
|
8
|
+
|
9
|
+
|
10
|
+
##### CORE PATCHES #####
|
11
|
+
|
12
|
+
module Saxable
|
13
|
+
|
14
|
+
# Default callbacks for Saxable objects.
|
15
|
+
def parent; @parent || self end
|
16
|
+
def start_el(name, attributes); self end
|
17
|
+
def attribute(name,value); (self[name]=value) rescue nil end
|
18
|
+
def end_el(value); true end
|
19
|
+
|
20
|
+
def self.included(base)
|
21
|
+
attr_accessor :parent, :_new_element, :_new_element_name, :_new_element_attributes
|
22
|
+
|
23
|
+
class << base
|
24
|
+
|
25
|
+
attr_reader :_start_el_lambdas
|
26
|
+
# This is a class method that allows shortcut config, kinda like 'before_filter'.
|
27
|
+
# Helper shortcut method to be used in Saxable method at class level.
|
28
|
+
# When this loads, it will define a more elaborate hidden start_el operation.
|
29
|
+
# Lambdas needed to allow multiple start_el calls at Saxable object class level.
|
30
|
+
def start_el(el, kls)
|
31
|
+
@_start_el_lambdas ||= []
|
32
|
+
|
33
|
+
# Disable this to use the non-lambda version.
|
34
|
+
@_start_el_lambdas << lambda do |slf|
|
35
|
+
name = slf._new_element_name
|
36
|
+
if (name.match(el) if el.is_a? Regexp) || name == el
|
37
|
+
sub = Object.const_get(kls.to_s).new rescue kls.new
|
38
|
+
sub.parent = slf
|
39
|
+
sub.merge!(slf._new_element_attributes) rescue nil
|
40
|
+
slf._new_element = sub
|
41
|
+
yield(slf) if block_given?
|
42
|
+
return slf._new_element
|
43
|
+
else
|
44
|
+
#return slf
|
45
|
+
return nil
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# This is the actual instance-level start_el method.
|
50
|
+
# The lambda version will call multiple lambdas,
|
51
|
+
# whereas the single version will only call once.
|
52
|
+
define_method :start_el do |name, attributes|
|
53
|
+
# This is for the lambda version.
|
54
|
+
self._new_element_name = name
|
55
|
+
self._new_element_attributes = attributes
|
56
|
+
#
|
57
|
+
# This is the non-lambda one-shot only version.
|
58
|
+
#
|
59
|
+
# if (name.match(el) if el.is_a? Regexp) || name == el
|
60
|
+
# self._new_element = Object.const_get(kls.to_s).new
|
61
|
+
# self._new_element.parent = self
|
62
|
+
# self._new_element_name = name
|
63
|
+
# yield(self) if block_given?
|
64
|
+
# return self._new_element
|
65
|
+
# else
|
66
|
+
# return self
|
67
|
+
# #return nil
|
68
|
+
# end
|
69
|
+
#
|
70
|
+
# This is the lambda version
|
71
|
+
#
|
72
|
+
begin
|
73
|
+
result = (self.class.instance_variable_get(:@_start_el_lambdas).compact.each{|e| @sub = e.call(self); break if @sub}; @sub || self)
|
74
|
+
#self.class.instance_variable_get(:@_start_el).last.call(self, parent, name) rescue nil || self
|
75
|
+
#puts "Successfully processed lambdas"
|
76
|
+
result
|
77
|
+
rescue
|
78
|
+
#puts "Errors processing lambdas: #{$!}"
|
79
|
+
self
|
80
|
+
end
|
81
|
+
#
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def end_el(el)
|
86
|
+
define_method :end_el do |name|
|
87
|
+
if (name.match(el) if el.is_a? Regexp) || name == el
|
88
|
+
self._new_element_name = name
|
89
|
+
yield(self) if block_given?
|
90
|
+
return true
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def element(*args)
|
96
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
97
|
+
start_el args[0].to_s, options[:class] do |slf|
|
98
|
+
slf.is_a? Hash
|
99
|
+
slf[slf._new_element_name] = slf._new_element
|
100
|
+
elsif slf.is_a? Array
|
101
|
+
slf << slf._new_element
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
end # Saxable
|
110
|
+
|
111
|
+
class Hash
|
112
|
+
include Saxable
|
113
|
+
end
|
114
|
+
class Array
|
115
|
+
include Saxable
|
116
|
+
end
|
117
|
+
|
118
|
+
|
119
|
+
module SaxHandler
|
120
|
+
|
121
|
+
def self.included(base)
|
122
|
+
def base.build(io, initial_object)
|
123
|
+
handler = new(initial_object)
|
124
|
+
handler.run_parser(io)
|
125
|
+
handler.cursor
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def initialize(initial_object)
|
130
|
+
init_element_buffer
|
131
|
+
initial_object.parent = set_cursor initial_object
|
132
|
+
end
|
133
|
+
|
134
|
+
def cursor
|
135
|
+
@cursor
|
136
|
+
end
|
137
|
+
|
138
|
+
def set_cursor(obj)
|
139
|
+
@cursor = obj
|
140
|
+
end
|
141
|
+
|
142
|
+
def init_element_buffer
|
143
|
+
@element_buffer = {:name=>nil, :attr=>{}}
|
144
|
+
end
|
145
|
+
|
146
|
+
def send_element_buffer
|
147
|
+
if element_buffer?
|
148
|
+
set_cursor cursor.start_el(@element_buffer[:name], @element_buffer[:attr])
|
149
|
+
init_element_buffer
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def element_buffer?
|
154
|
+
@element_buffer[:name] && !@element_buffer[:name].empty?
|
155
|
+
end
|
156
|
+
|
157
|
+
# Add a node to an existing element.
|
158
|
+
def _start_element(name, attributes=nil)
|
159
|
+
send_element_buffer
|
160
|
+
if attributes.nil?
|
161
|
+
@element_buffer = {:name=>name, :attr=>{}}
|
162
|
+
else
|
163
|
+
set_cursor cursor.start_el(name, attributes)
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
# Add attribute to existing element.
|
168
|
+
def _attribute(name, value)
|
169
|
+
@element_buffer[:attr].merge!({name=>value})
|
170
|
+
#cursor.attribute(name,value)
|
171
|
+
end
|
172
|
+
|
173
|
+
# Add 'content' attribute to existing element.
|
174
|
+
def _text(value)
|
175
|
+
if !element_buffer?
|
176
|
+
cursor.attribute('content', value)
|
177
|
+
else
|
178
|
+
@element_buffer[:attr].merge!({'content'=>value})
|
179
|
+
send_element_buffer
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
# Close out an existing element.
|
184
|
+
def _end_element(value)
|
185
|
+
send_element_buffer
|
186
|
+
cursor.end_el(value) and set_cursor cursor.parent
|
187
|
+
end
|
188
|
+
|
189
|
+
end # SaxHandler
|
190
|
+
|
191
|
+
|
192
|
+
|
193
|
+
##### XML PARSERS - SAX HANDLERS #####
|
194
|
+
|
195
|
+
class OxFmpSax < ::Ox::Sax
|
196
|
+
|
197
|
+
include SaxHandler
|
198
|
+
|
199
|
+
def run_parser(io)
|
200
|
+
#Ox.sax_parse(self, io)
|
201
|
+
File.open(io){|f| Ox.sax_parse self, f}
|
202
|
+
end
|
203
|
+
|
204
|
+
def start_element(name); _start_element(name.to_s.downcase); end
|
205
|
+
def end_element(name); _end_element(name.to_s.downcase); end
|
206
|
+
def attr(name, value); _attribute(name.to_s.downcase, value); end
|
207
|
+
def text(value); _text(value); end
|
208
|
+
|
209
|
+
end # OxFmpSax
|
210
|
+
|
211
|
+
|
212
|
+
class FmResultset < Hash
|
213
|
+
start_el 'datasource', :Datasource do |slf|
|
214
|
+
slf[slf._new_element_name] = slf._new_element
|
215
|
+
end
|
216
|
+
start_el 'resultset', :Resultset do |slf|
|
217
|
+
slf[slf._new_element_name] = slf._new_element
|
218
|
+
end
|
219
|
+
start_el 'metadata', :Metadata do |slf|
|
220
|
+
slf[slf._new_element_name] = slf._new_element
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
class Datasource < Hash
|
225
|
+
start_el /.*/i, :Hash
|
226
|
+
end
|
227
|
+
|
228
|
+
class Metadata < Array
|
229
|
+
start_el 'field-definition', :Hash do |slf|
|
230
|
+
slf << slf._new_element
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
234
|
+
class Resultset < Array
|
235
|
+
start_el 'record', :Record do |slf|
|
236
|
+
slf << slf._new_element
|
237
|
+
end
|
238
|
+
# Enable this to kill attribute parsing for this object.
|
239
|
+
#def attribute(*args); end
|
240
|
+
end
|
241
|
+
|
242
|
+
class Record < Hash
|
243
|
+
start_el 'field', :Field
|
244
|
+
end
|
245
|
+
|
246
|
+
class Field < Hash
|
247
|
+
end_el 'field' do |slf|
|
248
|
+
slf.parent[slf['name']] = slf['content']
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
# This gives a generic tree structure.
|
253
|
+
class Hash
|
254
|
+
start_el /.*/i, :Hash do |slf|
|
255
|
+
name, sub = slf._new_element_name, slf._new_element
|
256
|
+
|
257
|
+
if slf[name].is_a? Array
|
258
|
+
slf[name] << sub
|
259
|
+
elsif slf.has_key? name
|
260
|
+
tmp = slf[name]
|
261
|
+
slf[name] = [tmp]
|
262
|
+
slf[name] << sub
|
263
|
+
else
|
264
|
+
slf[name] = sub
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
end_el /.*/i do |slf|
|
269
|
+
parent, name = slf.parent, slf._new_element_name
|
270
|
+
#parent[name]=nil if slf.empty? # Use nil for empty nodes.
|
271
|
+
#parent.delete(name) if slf.empty? # Delete empty nodes.
|
272
|
+
parent[name] = slf.values[0] unless slf.size > 1 or parent.size > 2 # Reduce unnecessary nodes.
|
273
|
+
end
|
274
|
+
|
275
|
+
end
|
276
|
+
|
277
|
+
|
278
|
+
##### DATA #####
|
279
|
+
|
280
|
+
FM = 'local_testing/resultset.xml'
|
281
|
+
FMP = 'local_testing/resultset_with_portals.xml'
|
282
|
+
XML = 'local_testing/data_fmpxmlresult.xml'
|
283
|
+
XMP = 'local_testing/data_with_portals_fmpxmlresult.xml'
|
284
|
+
LAY = 'local_testing/layout.xml'
|
285
|
+
XMD = 'local_testing/db_fmpxmlresult.xml'
|
286
|
+
FMB = 'local_testing/resultset_with_bad_data.xml'
|
287
|
+
SP = 'local_testing/SplashLayout.xml'
|
288
|
+
|
289
|
+
S = StringIO.new(%{
|
290
|
+
<top name="top01">
|
291
|
+
<middle name="middle01" />
|
292
|
+
<middle name="middle02">
|
293
|
+
<bottom name="bottom01">bottom-text</bottom>
|
294
|
+
</middle>
|
295
|
+
<middle name="middle03">middle03-text</middle>
|
296
|
+
</top>
|
297
|
+
})
|
298
|
+
|
metadata
CHANGED
@@ -1,10 +1,15 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: ginjo-rfm
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 9
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 2
|
8
|
+
- 1
|
9
|
+
- 1
|
10
|
+
version: 2.1.1
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Geoff Coffey
|
9
14
|
- Mufaddal Khumri
|
10
15
|
- Atsushi Matsuo
|
@@ -13,212 +18,193 @@ authors:
|
|
13
18
|
autorequire:
|
14
19
|
bindir: bin
|
15
20
|
cert_chain: []
|
16
|
-
|
17
|
-
|
18
|
-
|
21
|
+
|
22
|
+
date: 2013-03-21 00:00:00 Z
|
23
|
+
dependencies:
|
24
|
+
- !ruby/object:Gem::Dependency
|
19
25
|
name: activesupport
|
20
|
-
requirement: !ruby/object:Gem::Requirement
|
21
|
-
none: false
|
22
|
-
requirements:
|
23
|
-
- - ! '>='
|
24
|
-
- !ruby/object:Gem::Version
|
25
|
-
version: 2.3.5
|
26
|
-
type: :runtime
|
27
26
|
prerelease: false
|
28
|
-
|
27
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
29
28
|
none: false
|
30
|
-
requirements:
|
31
|
-
- -
|
32
|
-
- !ruby/object:Gem::Version
|
29
|
+
requirements:
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
hash: 9
|
33
|
+
segments:
|
34
|
+
- 2
|
35
|
+
- 3
|
36
|
+
- 5
|
33
37
|
version: 2.3.5
|
34
|
-
|
38
|
+
type: :runtime
|
39
|
+
version_requirements: *id001
|
40
|
+
- !ruby/object:Gem::Dependency
|
35
41
|
name: activemodel
|
36
|
-
requirement: !ruby/object:Gem::Requirement
|
37
|
-
none: false
|
38
|
-
requirements:
|
39
|
-
- - ! '>='
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version: '0'
|
42
|
-
type: :development
|
43
42
|
prerelease: false
|
44
|
-
|
45
|
-
none: false
|
46
|
-
requirements:
|
47
|
-
- - ! '>='
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: '0'
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
|
-
name: rake
|
52
|
-
requirement: !ruby/object:Gem::Requirement
|
43
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
53
44
|
none: false
|
54
|
-
requirements:
|
55
|
-
- -
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
hash: 3
|
49
|
+
segments:
|
50
|
+
- 0
|
51
|
+
version: "0"
|
58
52
|
type: :development
|
53
|
+
version_requirements: *id002
|
54
|
+
- !ruby/object:Gem::Dependency
|
55
|
+
name: rake
|
59
56
|
prerelease: false
|
60
|
-
|
61
|
-
none: false
|
62
|
-
requirements:
|
63
|
-
- - ! '>='
|
64
|
-
- !ruby/object:Gem::Version
|
65
|
-
version: '0'
|
66
|
-
- !ruby/object:Gem::Dependency
|
67
|
-
name: rdoc
|
68
|
-
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
69
58
|
none: false
|
70
|
-
requirements:
|
71
|
-
- -
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
hash: 3
|
63
|
+
segments:
|
64
|
+
- 0
|
65
|
+
version: "0"
|
74
66
|
type: :development
|
67
|
+
version_requirements: *id003
|
68
|
+
- !ruby/object:Gem::Dependency
|
69
|
+
name: rdoc
|
75
70
|
prerelease: false
|
76
|
-
|
71
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
77
72
|
none: false
|
78
|
-
requirements:
|
79
|
-
- -
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
none: false
|
86
|
-
requirements:
|
87
|
-
- - ~>
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: 1.3.0
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
hash: 3
|
77
|
+
segments:
|
78
|
+
- 0
|
79
|
+
version: "0"
|
90
80
|
type: :development
|
81
|
+
version_requirements: *id004
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: rspec
|
91
84
|
prerelease: false
|
92
|
-
|
85
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
93
86
|
none: false
|
94
|
-
requirements:
|
87
|
+
requirements:
|
95
88
|
- - ~>
|
96
|
-
- !ruby/object:Gem::Version
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
hash: 27
|
91
|
+
segments:
|
92
|
+
- 1
|
93
|
+
- 3
|
94
|
+
- 0
|
97
95
|
version: 1.3.0
|
98
|
-
- !ruby/object:Gem::Dependency
|
99
|
-
name: diff-lcs
|
100
|
-
requirement: !ruby/object:Gem::Requirement
|
101
|
-
none: false
|
102
|
-
requirements:
|
103
|
-
- - ! '>='
|
104
|
-
- !ruby/object:Gem::Version
|
105
|
-
version: '0'
|
106
96
|
type: :development
|
97
|
+
version_requirements: *id005
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: diff-lcs
|
107
100
|
prerelease: false
|
108
|
-
|
101
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
109
102
|
none: false
|
110
|
-
requirements:
|
111
|
-
- -
|
112
|
-
- !ruby/object:Gem::Version
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
none: false
|
118
|
-
requirements:
|
119
|
-
- - ! '>='
|
120
|
-
- !ruby/object:Gem::Version
|
121
|
-
version: '0'
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
hash: 3
|
107
|
+
segments:
|
108
|
+
- 0
|
109
|
+
version: "0"
|
122
110
|
type: :development
|
111
|
+
version_requirements: *id006
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: yard
|
123
114
|
prerelease: false
|
124
|
-
|
125
|
-
none: false
|
126
|
-
requirements:
|
127
|
-
- - ! '>='
|
128
|
-
- !ruby/object:Gem::Version
|
129
|
-
version: '0'
|
130
|
-
- !ruby/object:Gem::Dependency
|
131
|
-
name: redcarpet
|
132
|
-
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
133
116
|
none: false
|
134
|
-
requirements:
|
135
|
-
- -
|
136
|
-
- !ruby/object:Gem::Version
|
137
|
-
|
117
|
+
requirements:
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
hash: 3
|
121
|
+
segments:
|
122
|
+
- 0
|
123
|
+
version: "0"
|
138
124
|
type: :development
|
125
|
+
version_requirements: *id007
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: redcarpet
|
139
128
|
prerelease: false
|
140
|
-
|
141
|
-
none: false
|
142
|
-
requirements:
|
143
|
-
- - ! '>='
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '0'
|
146
|
-
- !ruby/object:Gem::Dependency
|
147
|
-
name: libxml-ruby
|
148
|
-
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
149
130
|
none: false
|
150
|
-
requirements:
|
151
|
-
- -
|
152
|
-
- !ruby/object:Gem::Version
|
153
|
-
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
hash: 3
|
135
|
+
segments:
|
136
|
+
- 0
|
137
|
+
version: "0"
|
154
138
|
type: :development
|
139
|
+
version_requirements: *id008
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
name: libxml-ruby
|
155
142
|
prerelease: false
|
156
|
-
|
143
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
157
144
|
none: false
|
158
|
-
requirements:
|
159
|
-
- -
|
160
|
-
- !ruby/object:Gem::Version
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
none: false
|
166
|
-
requirements:
|
167
|
-
- - ! '>='
|
168
|
-
- !ruby/object:Gem::Version
|
169
|
-
version: '0'
|
145
|
+
requirements:
|
146
|
+
- - ">="
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
hash: 3
|
149
|
+
segments:
|
150
|
+
- 0
|
151
|
+
version: "0"
|
170
152
|
type: :development
|
153
|
+
version_requirements: *id009
|
154
|
+
- !ruby/object:Gem::Dependency
|
155
|
+
name: nokogiri
|
171
156
|
prerelease: false
|
172
|
-
|
157
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
173
158
|
none: false
|
174
|
-
requirements:
|
175
|
-
- -
|
176
|
-
- !ruby/object:Gem::Version
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
none: false
|
182
|
-
requirements:
|
183
|
-
- - ! '>='
|
184
|
-
- !ruby/object:Gem::Version
|
185
|
-
version: '0'
|
159
|
+
requirements:
|
160
|
+
- - ">="
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
hash: 3
|
163
|
+
segments:
|
164
|
+
- 0
|
165
|
+
version: "0"
|
186
166
|
type: :development
|
167
|
+
version_requirements: *id010
|
168
|
+
- !ruby/object:Gem::Dependency
|
169
|
+
name: hpricot
|
187
170
|
prerelease: false
|
188
|
-
|
171
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
189
172
|
none: false
|
190
|
-
requirements:
|
191
|
-
- -
|
192
|
-
- !ruby/object:Gem::Version
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
none: false
|
198
|
-
requirements:
|
199
|
-
- - ! '>='
|
200
|
-
- !ruby/object:Gem::Version
|
201
|
-
version: '0'
|
173
|
+
requirements:
|
174
|
+
- - ">="
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
hash: 3
|
177
|
+
segments:
|
178
|
+
- 0
|
179
|
+
version: "0"
|
202
180
|
type: :development
|
181
|
+
version_requirements: *id011
|
182
|
+
- !ruby/object:Gem::Dependency
|
183
|
+
name: ox
|
203
184
|
prerelease: false
|
204
|
-
|
185
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
205
186
|
none: false
|
206
|
-
requirements:
|
207
|
-
- -
|
208
|
-
- !ruby/object:Gem::Version
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
187
|
+
requirements:
|
188
|
+
- - ">="
|
189
|
+
- !ruby/object:Gem::Version
|
190
|
+
hash: 3
|
191
|
+
segments:
|
192
|
+
- 0
|
193
|
+
version: "0"
|
194
|
+
type: :development
|
195
|
+
version_requirements: *id012
|
196
|
+
description: Rfm lets your Ruby scripts and Rails applications talk directly to your Filemaker server. Ginjo-rfm includes ActiveModel compatibility, multiple XML parsers, compound Filemaker find requests, and a configuration API.
|
213
197
|
email: http://groups.google.com/group/rfmcommunity
|
214
198
|
executables: []
|
199
|
+
|
215
200
|
extensions: []
|
216
|
-
|
201
|
+
|
202
|
+
extra_rdoc_files:
|
217
203
|
- LICENSE
|
218
204
|
- README.md
|
219
205
|
- CHANGELOG.md
|
220
206
|
- lib/rfm/VERSION
|
221
|
-
files:
|
207
|
+
files:
|
222
208
|
- lib/rfm/base.rb
|
223
209
|
- lib/rfm/database.rb
|
224
210
|
- lib/rfm/error.rb
|
@@ -237,6 +223,7 @@ files:
|
|
237
223
|
- lib/rfm/utilities/factory.rb
|
238
224
|
- lib/rfm/utilities/fmpxmlresult.rb
|
239
225
|
- lib/rfm/utilities/fmresultset.rb
|
226
|
+
- lib/rfm/utilities/sax_parser.rb
|
240
227
|
- lib/rfm/utilities/xml_parser.rb
|
241
228
|
- lib/rfm/version.rb
|
242
229
|
- lib/rfm/xml_mini/hpricot.rb
|
@@ -250,33 +237,41 @@ files:
|
|
250
237
|
- CHANGELOG.md
|
251
238
|
homepage: https://rubygems.org/gems/ginjo-rfm
|
252
239
|
licenses: []
|
240
|
+
|
253
241
|
post_install_message:
|
254
|
-
rdoc_options:
|
242
|
+
rdoc_options:
|
255
243
|
- --line-numbers
|
256
244
|
- --main
|
257
245
|
- README.md
|
258
|
-
require_paths:
|
246
|
+
require_paths:
|
259
247
|
- lib
|
260
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
248
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
261
249
|
none: false
|
262
|
-
requirements:
|
263
|
-
- -
|
264
|
-
- !ruby/object:Gem::Version
|
265
|
-
|
266
|
-
segments:
|
250
|
+
requirements:
|
251
|
+
- - ">="
|
252
|
+
- !ruby/object:Gem::Version
|
253
|
+
hash: 3
|
254
|
+
segments:
|
267
255
|
- 0
|
268
|
-
|
269
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
256
|
+
version: "0"
|
257
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
270
258
|
none: false
|
271
|
-
requirements:
|
272
|
-
- -
|
273
|
-
- !ruby/object:Gem::Version
|
259
|
+
requirements:
|
260
|
+
- - ">"
|
261
|
+
- !ruby/object:Gem::Version
|
262
|
+
hash: 25
|
263
|
+
segments:
|
264
|
+
- 1
|
265
|
+
- 3
|
266
|
+
- 1
|
274
267
|
version: 1.3.1
|
275
268
|
requirements: []
|
269
|
+
|
276
270
|
rubyforge_project:
|
277
271
|
rubygems_version: 1.8.25
|
278
272
|
signing_key:
|
279
273
|
specification_version: 3
|
280
274
|
summary: Ruby to Filemaker adapter
|
281
275
|
test_files: []
|
276
|
+
|
282
277
|
has_rdoc:
|