ginjo-rfm 2.1.0.pre02 → 2.1.0
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/CHANGELOG.md +21 -0
- data/README.md +22 -0
- data/lib/rfm/VERSION +2 -1
- data/lib/rfm/base.rb +16 -4
- data/lib/rfm/layout.rb +29 -6
- data/lib/rfm/metadata/field.rb +3 -3
- data/lib/rfm/record.rb +2 -2
- data/lib/rfm/resultset.rb +2 -1
- data/lib/rfm/server.rb +3 -0
- data/lib/rfm/utilities/compound_query.rb +3 -2
- data/lib/rfm/utilities/config.rb +1 -0
- data/lib/rfm/utilities/core_ext.rb +9 -2
- metadata +174 -156
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,26 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## Ginjo-Rfm 2.1.0
|
4
|
+
|
5
|
+
* Removed `:include_portals` query option in favor of `:ignore_portals`.
|
6
|
+
|
7
|
+
* Added `:max_portal_rows` query option.
|
8
|
+
|
9
|
+
* Added field-remapping framework to allow model fields with different names than Filemaker fields.
|
10
|
+
|
11
|
+
* Fix date/time/timestamp translations when writing data to Filemaker.
|
12
|
+
|
13
|
+
* Detached new Server objects from Factory.servers hash, so wont reuse or stack-up servers.
|
14
|
+
|
15
|
+
* Added grammar translation layer between xml parser and Rfm, allowing all supported xml grammars to be used with Rfm.
|
16
|
+
This will also streamline changes/additions to Filemaker's xml grammar(s).
|
17
|
+
|
18
|
+
* Added ability to manually import fmprestulset and fmpxmlresult data (from file, variable, etc.).
|
19
|
+
|
20
|
+
* Fixed case statement for ruby 1.9
|
21
|
+
|
22
|
+
* Configuration `:use` option is now works for all Rfm objects that respond to `config`.
|
23
|
+
|
3
24
|
## Ginjo-Rfm 2.0.2
|
4
25
|
|
5
26
|
* Added configuration parameter ignore_bad_data to silence data mismatch errors when loading resultset into records.
|
data/README.md
CHANGED
@@ -13,6 +13,28 @@ Rfm is a Ruby-Filemaker adapter, a Ruby gem that allows scripts and applications
|
|
13
13
|
* Lardawge at github <https://github.com/lardawge/rfm>
|
14
14
|
|
15
15
|
|
16
|
+
## New in version 2.1
|
17
|
+
|
18
|
+
ginjo-rfm 2.1 is a combination of new features, bug fixes, and a lot of code refactoring.
|
19
|
+
Most api calls remain the same, but a good deal of underlying code has been transformed
|
20
|
+
to support, and take advantage of, the progress of technologies surrounding Ruby.
|
21
|
+
|
22
|
+
* Portals are now included by default.
|
23
|
+
Removed `:include_portals` query option in favor of `:ignore_portals`.
|
24
|
+
Added `:max_portal_rows` query option.
|
25
|
+
* Added field-remapping framework to allow model fields with different names than Filemaker fields.
|
26
|
+
* Fixed date/time/timestamp translations when writing data to Filemaker.
|
27
|
+
* Detached new Server objects from Factory.servers hash, so wont reuse or stack-up servers.
|
28
|
+
* Added grammar translation layer between xml parser and Rfm, allowing all supported xml grammars to be used with Rfm.
|
29
|
+
This will also streamline changes/additions to Filemaker's xml grammar(s).
|
30
|
+
* Added ability to manually import fmpresultset and fmpxmlresult data (from file, variable, etc.).
|
31
|
+
* Compatibility fixes for ruby 1.9.
|
32
|
+
* Configuration `:use` option now works for all Rfm objects that respond to `config`.
|
33
|
+
|
34
|
+
Some issues still to be addressed (some longstanding and some more recent) are repeating field writes, some of the
|
35
|
+
object management & introspection calls, pull requests, more coverage of Filemaker's query syntax, more error classes, more specs, and more documentation.
|
36
|
+
|
37
|
+
|
16
38
|
## New in version 2.0
|
17
39
|
|
18
40
|
Ginjo-rfm 2.0 brings new features to Rfm, making it easier than ever to work with Filemaker data from your Ruby scripts.
|
data/lib/rfm/VERSION
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
2.1.0
|
1
|
+
2.1.0
|
2
|
+
|
data/lib/rfm/base.rb
CHANGED
@@ -36,9 +36,7 @@ module Rfm
|
|
36
36
|
require 'rfm/layout'
|
37
37
|
require 'rfm/record'
|
38
38
|
require 'rfm/utilities/factory'
|
39
|
-
require 'delegate'
|
40
|
-
|
41
|
-
|
39
|
+
require 'delegate'
|
42
40
|
|
43
41
|
class Layout
|
44
42
|
|
@@ -196,6 +194,19 @@ module Rfm
|
|
196
194
|
end
|
197
195
|
end
|
198
196
|
|
197
|
+
def to_partial_path(object = self) #@object)
|
198
|
+
return 'some/partial/path'
|
199
|
+
##### DISABLED HERE - ActiveModel Lint only needs a string #####
|
200
|
+
##### TODO: implement to_partial_path to return meaningful string.
|
201
|
+
@partial_names[object.class.name] ||= begin
|
202
|
+
object = object.to_model if object.respond_to?(:to_model)
|
203
|
+
|
204
|
+
object.class.model_name.partial_path.dup.tap do |partial|
|
205
|
+
path = @view.controller_path
|
206
|
+
partial.insert(0, "#{File.dirname(path)}/") if partial.include?(?/) && path.include?(?/)
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
199
210
|
|
200
211
|
class << self
|
201
212
|
|
@@ -225,7 +236,7 @@ module Rfm
|
|
225
236
|
def layout
|
226
237
|
return @layout if @layout
|
227
238
|
cnf = get_config
|
228
|
-
return unless cnf[:layout]
|
239
|
+
raise "Could not get :layout from get_config in Base.layout method" unless cnf[:layout] #return unless cnf[:layout]
|
229
240
|
@layout = Rfm::Factory.layout(cnf).sublayout
|
230
241
|
|
231
242
|
# Added by wbr to give config heirarchy: layout -> model -> sublayout
|
@@ -243,6 +254,7 @@ module Rfm
|
|
243
254
|
|
244
255
|
# Just like Layout#find, but searching by record_id will return a record, not a resultset.
|
245
256
|
def find(find_criteria, options={})
|
257
|
+
#puts "base.find-#{layout}"
|
246
258
|
r = layout.find(find_criteria, options)
|
247
259
|
if ![Hash,Array].include?(find_criteria.class) and r.size == 1
|
248
260
|
r[0]
|
data/lib/rfm/layout.rb
CHANGED
@@ -154,7 +154,7 @@ module Rfm
|
|
154
154
|
end
|
155
155
|
|
156
156
|
meta_attr_reader :db
|
157
|
-
|
157
|
+
attr_reader :field_mapping
|
158
158
|
attr_writer :field_names, :portal_meta, :table
|
159
159
|
def_delegator :db, :server
|
160
160
|
alias_method :database, :db
|
@@ -209,6 +209,8 @@ module Rfm
|
|
209
209
|
# myLayout.find 54321
|
210
210
|
#
|
211
211
|
def find(find_criteria, options = {})
|
212
|
+
#puts "layout.find-#{self}"
|
213
|
+
options.merge!({:field_mapping => field_mapping}) if field_mapping
|
212
214
|
get_records(*Rfm::CompoundQuery.new(find_criteria, options))
|
213
215
|
end
|
214
216
|
|
@@ -264,12 +266,21 @@ module Rfm
|
|
264
266
|
end
|
265
267
|
|
266
268
|
def get_records(action, extra_params = {}, options = {})
|
267
|
-
# The grammar stuff here won't work properly until you handle config between
|
269
|
+
# TODO: The grammar stuff here won't work properly until you handle config between
|
270
|
+
# models/sublayouts/layout/server (Is this done now?).
|
268
271
|
grammar_option = state(options)[:grammar]
|
269
272
|
options.merge!(:grammar=>grammar_option) if grammar_option
|
270
|
-
include_portals = options[:include_portals] ? options.delete(:include_portals) : nil
|
271
|
-
|
272
|
-
|
273
|
+
#include_portals = options[:include_portals] ? options.delete(:include_portals) : nil
|
274
|
+
include_portals = !options[:ignore_portals]
|
275
|
+
|
276
|
+
# Apply mapping from :field_mapping, to send correct params in URL.
|
277
|
+
prms = params.merge(extra_params)
|
278
|
+
map = field_mapping.invert
|
279
|
+
# TODO: Make this part handle string AND symbol keys.
|
280
|
+
#map.each{|k,v| prms[k]=prms.delete(v) if prms[v]}
|
281
|
+
prms.dup.each_key{|k| prms[map[k.to_s]]=prms.delete(k) if map[k.to_s]}
|
282
|
+
|
283
|
+
xml_response = server.connect(state[:account_name], state[:password], action, prms, options).body
|
273
284
|
Rfm::Resultset.new(xml_response, self, include_portals)
|
274
285
|
end
|
275
286
|
|
@@ -399,7 +410,7 @@ module Rfm
|
|
399
410
|
|
400
411
|
# process field controls
|
401
412
|
doc['FMPXMLLAYOUT']['LAYOUT']['FIELD'].each {|field|
|
402
|
-
name = field['NAME']
|
413
|
+
name = field_mapping[field['NAME']] || field['NAME']
|
403
414
|
style = field['STYLE']
|
404
415
|
type = style['TYPE']
|
405
416
|
value_list_name = style['VALUELIST']
|
@@ -420,6 +431,18 @@ module Rfm
|
|
420
431
|
@field_controls.freeze
|
421
432
|
end
|
422
433
|
|
434
|
+
def field_mapping
|
435
|
+
@field_mapping ||= load_field_mapping(get_config[:field_mapping])
|
436
|
+
end
|
437
|
+
|
438
|
+
def load_field_mapping(mapping={})
|
439
|
+
mapping = (mapping || {}).to_cih
|
440
|
+
def mapping.invert
|
441
|
+
super.to_cih
|
442
|
+
end
|
443
|
+
mapping
|
444
|
+
end
|
445
|
+
|
423
446
|
private :load, :get_records, :params
|
424
447
|
|
425
448
|
|
data/lib/rfm/metadata/field.rb
CHANGED
@@ -63,8 +63,8 @@ module Rfm
|
|
63
63
|
|
64
64
|
# Initializes a field object. You'll never need to do this. Instead, get your Field objects from
|
65
65
|
# ResultSet::fields
|
66
|
-
def initialize(field)
|
67
|
-
@name = field.name #['name']
|
66
|
+
def initialize(field, options={})
|
67
|
+
@name = options[:field_mapping][field.name] || field.name rescue field.name #['name']
|
68
68
|
@result = field.result #['result']
|
69
69
|
@type = field.type #['type']
|
70
70
|
@max_repeats = field.max_repeats #['max-repeats']
|
@@ -78,7 +78,7 @@ module Rfm
|
|
78
78
|
return nil if (value.nil? or value.empty?)
|
79
79
|
case self.result.downcase
|
80
80
|
when "text" then value
|
81
|
-
when "number" then BigDecimal.new(value)
|
81
|
+
when "number" then BigDecimal.new(value.to_s)
|
82
82
|
when "date" then Date.strptime(value, resultset.date_format)
|
83
83
|
when "time" then DateTime.strptime("1/1/-4712 #{value}", "%m/%d/%Y #{resultset.time_format}")
|
84
84
|
when "timestamp" then DateTime.strptime(value, resultset.timestamp_format)
|
data/lib/rfm/record.rb
CHANGED
@@ -126,7 +126,7 @@ module Rfm
|
|
126
126
|
|
127
127
|
record.columns.each do |field|
|
128
128
|
next unless field
|
129
|
-
field_name = field.name
|
129
|
+
field_name = @layout.field_mapping[field.name] || field.name rescue field.name
|
130
130
|
field_name.gsub!(Regexp.new(portal + '::'), '') if portal
|
131
131
|
datum = []
|
132
132
|
data = field.data #['data']; data = data.is_a?(Hash) ? [data] : data
|
@@ -225,7 +225,7 @@ module Rfm
|
|
225
225
|
def []=(key, value)
|
226
226
|
key_string = key.to_s.downcase
|
227
227
|
return super unless @loaded # is this needed?
|
228
|
-
raise Rfm::ParameterError, "You attempted to modify a field that does not exist in the current Filemaker layout." unless self.key?(key_string)
|
228
|
+
raise Rfm::ParameterError, "You attempted to modify a field (#{key_string}) that does not exist in the current Filemaker layout." unless self.key?(key_string)
|
229
229
|
# @mods[key_string] = value
|
230
230
|
# TODO: This needs cleaning up.
|
231
231
|
# TODO: can we get field_type from record instead?
|
data/lib/rfm/resultset.rb
CHANGED
@@ -155,7 +155,8 @@ module Rfm
|
|
155
155
|
return if doc.fields.blank?
|
156
156
|
|
157
157
|
doc.fields.each do |field|
|
158
|
-
|
158
|
+
name = layout.field_mapping[field.name] || field.name rescue field.name
|
159
|
+
@field_meta[name] = Rfm::Metadata::Field.new(field)
|
159
160
|
end
|
160
161
|
(layout.field_names = field_names) if layout and layout.field_names_no_load.blank?
|
161
162
|
end
|
data/lib/rfm/server.rb
CHANGED
@@ -368,6 +368,9 @@ module Rfm
|
|
368
368
|
result = {}
|
369
369
|
options.each do |key,value|
|
370
370
|
case key
|
371
|
+
when :max_portal_rows
|
372
|
+
result['-relatedsets.max'] = value
|
373
|
+
result['-relatedsets.filter'] = 'layout'
|
371
374
|
when :max_records
|
372
375
|
result['-max'] = value
|
373
376
|
when :skip_records
|
@@ -8,7 +8,7 @@ module Rfm
|
|
8
8
|
# Also allow find requests to be :omit.
|
9
9
|
class CompoundQuery < Array
|
10
10
|
|
11
|
-
attr_accessor :original_input, :query_type, :key_values, :key_arrays, :key_map, :key_map_string, :key_counter
|
11
|
+
attr_accessor :original_input, :query_type, :key_values, :key_arrays, :key_map, :key_map_string, :key_counter, :field_mapping
|
12
12
|
|
13
13
|
def self.build_test
|
14
14
|
new([{:field1=>['val1a','val1b','val1c'], :field2=>'val2'},{:omit=>true, :field3=>'val3', :field4=>'val4'}, {:omit=>true, :field5=>['val5a','val5b'], :field6=>['val6a','val6b']}], {})
|
@@ -22,6 +22,7 @@ module Rfm
|
|
22
22
|
# Returns self as ['-fmpaction', {:hash=>'of', :key=>'values'}, {:options=>'hash'}]
|
23
23
|
def initialize(query, options={})
|
24
24
|
@options = options
|
25
|
+
@field_mapping = options.delete(:field_mapping)
|
25
26
|
@original_input = query
|
26
27
|
@key_values = {}
|
27
28
|
@key_arrays = []
|
@@ -76,7 +77,7 @@ module Rfm
|
|
76
77
|
query_tag = []
|
77
78
|
val = val.rfm_force_array
|
78
79
|
val.each do |v|
|
79
|
-
@key_values["-q#{key_counter}"] = key
|
80
|
+
@key_values["-q#{key_counter}"] = field_mapping.invert[key] || key
|
80
81
|
@key_values["-q#{key_counter}.value"] = v
|
81
82
|
query_tag << "q#{key_counter}"
|
82
83
|
@key_counter += 1
|
data/lib/rfm/utilities/config.rb
CHANGED
@@ -118,16 +118,23 @@ end # Array
|
|
118
118
|
class Hash
|
119
119
|
# TODO: Possibly deprecated, delete if not used.
|
120
120
|
def rfm_only(*keepers)
|
121
|
-
self.each_key {|k| self.delete(k) if !keepers.include?(k)}
|
121
|
+
self.dup.each_key {|k| self.delete(k) if !keepers.include?(k)}
|
122
122
|
end
|
123
123
|
|
124
124
|
def rfm_filter(*args)
|
125
125
|
options = args.rfm_extract_options!
|
126
126
|
delete = options[:delete]
|
127
|
-
self.each_key do |k|
|
127
|
+
self.dup.each_key do |k|
|
128
128
|
self.delete(k) if (delete ? args.include?(k) : !args.include?(k))
|
129
129
|
end
|
130
130
|
end
|
131
|
+
|
132
|
+
# Convert hash to Rfm::CaseInsensitiveHash
|
133
|
+
def to_cih
|
134
|
+
new = Rfm::CaseInsensitiveHash.new
|
135
|
+
self.each{|k,v| new[k] = v}
|
136
|
+
new
|
137
|
+
end
|
131
138
|
end # Hash
|
132
139
|
|
133
140
|
# Allows access to superclass object
|
metadata
CHANGED
@@ -1,17 +1,10 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: ginjo-rfm
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 2
|
8
|
-
- 1
|
9
|
-
- 0
|
10
|
-
- pre
|
11
|
-
- 2
|
12
|
-
version: 2.1.0.pre02
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2.1.0
|
5
|
+
prerelease:
|
13
6
|
platform: ruby
|
14
|
-
authors:
|
7
|
+
authors:
|
15
8
|
- Geoff Coffey
|
16
9
|
- Mufaddal Khumri
|
17
10
|
- Atsushi Matsuo
|
@@ -20,179 +13,212 @@ authors:
|
|
20
13
|
autorequire:
|
21
14
|
bindir: bin
|
22
15
|
cert_chain: []
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
version_requirements: &id001 !ruby/object:Gem::Requirement
|
16
|
+
date: 2013-03-06 00:00:00.000000000 Z
|
17
|
+
dependencies:
|
18
|
+
- !ruby/object:Gem::Dependency
|
19
|
+
name: activesupport
|
20
|
+
requirement: !ruby/object:Gem::Requirement
|
29
21
|
none: false
|
30
|
-
requirements:
|
31
|
-
- -
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
hash: 9
|
34
|
-
segments:
|
35
|
-
- 2
|
36
|
-
- 3
|
37
|
-
- 5
|
22
|
+
requirements:
|
23
|
+
- - ! '>='
|
24
|
+
- !ruby/object:Gem::Version
|
38
25
|
version: 2.3.5
|
39
|
-
requirement: *id001
|
40
|
-
name: activesupport
|
41
26
|
type: :runtime
|
42
|
-
- !ruby/object:Gem::Dependency
|
43
27
|
prerelease: false
|
44
|
-
version_requirements:
|
28
|
+
version_requirements: !ruby/object:Gem::Requirement
|
45
29
|
none: false
|
46
|
-
requirements:
|
47
|
-
- -
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
|
50
|
-
|
51
|
-
- 0
|
52
|
-
version: "0"
|
53
|
-
requirement: *id002
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.3.5
|
34
|
+
- !ruby/object:Gem::Dependency
|
54
35
|
name: activemodel
|
36
|
+
requirement: !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
38
|
+
requirements:
|
39
|
+
- - ! '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
55
42
|
type: :development
|
56
|
-
- !ruby/object:Gem::Dependency
|
57
43
|
prerelease: false
|
58
|
-
version_requirements:
|
44
|
+
version_requirements: !ruby/object:Gem::Requirement
|
59
45
|
none: false
|
60
|
-
requirements:
|
61
|
-
- -
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
|
64
|
-
|
65
|
-
- 0
|
66
|
-
version: "0"
|
67
|
-
requirement: *id003
|
46
|
+
requirements:
|
47
|
+
- - ! '>='
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
- !ruby/object:Gem::Dependency
|
68
51
|
name: rake
|
52
|
+
requirement: !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ! '>='
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '0'
|
69
58
|
type: :development
|
70
|
-
- !ruby/object:Gem::Dependency
|
71
59
|
prerelease: false
|
72
|
-
version_requirements:
|
60
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
61
|
none: false
|
74
|
-
requirements:
|
75
|
-
- -
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
|
78
|
-
|
79
|
-
- 0
|
80
|
-
version: "0"
|
81
|
-
requirement: *id004
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
- !ruby/object:Gem::Dependency
|
82
67
|
name: rdoc
|
68
|
+
requirement: !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ! '>='
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
83
74
|
type: :development
|
84
|
-
- !ruby/object:Gem::Dependency
|
85
75
|
prerelease: false
|
86
|
-
version_requirements:
|
76
|
+
version_requirements: !ruby/object:Gem::Requirement
|
77
|
+
none: false
|
78
|
+
requirements:
|
79
|
+
- - ! '>='
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: rspec
|
84
|
+
requirement: !ruby/object:Gem::Requirement
|
87
85
|
none: false
|
88
|
-
requirements:
|
86
|
+
requirements:
|
89
87
|
- - ~>
|
90
|
-
- !ruby/object:Gem::Version
|
91
|
-
hash: 27
|
92
|
-
segments:
|
93
|
-
- 1
|
94
|
-
- 3
|
95
|
-
- 0
|
88
|
+
- !ruby/object:Gem::Version
|
96
89
|
version: 1.3.0
|
97
|
-
requirement: *id005
|
98
|
-
name: rspec
|
99
90
|
type: :development
|
100
|
-
- !ruby/object:Gem::Dependency
|
101
91
|
prerelease: false
|
102
|
-
version_requirements:
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
103
93
|
none: false
|
104
|
-
requirements:
|
105
|
-
- -
|
106
|
-
- !ruby/object:Gem::Version
|
107
|
-
|
108
|
-
|
109
|
-
- 0
|
110
|
-
version: "0"
|
111
|
-
requirement: *id006
|
94
|
+
requirements:
|
95
|
+
- - ~>
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: 1.3.0
|
98
|
+
- !ruby/object:Gem::Dependency
|
112
99
|
name: diff-lcs
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
none: false
|
102
|
+
requirements:
|
103
|
+
- - ! '>='
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0'
|
113
106
|
type: :development
|
114
|
-
- !ruby/object:Gem::Dependency
|
115
107
|
prerelease: false
|
116
|
-
version_requirements:
|
108
|
+
version_requirements: !ruby/object:Gem::Requirement
|
117
109
|
none: false
|
118
|
-
requirements:
|
119
|
-
- -
|
120
|
-
- !ruby/object:Gem::Version
|
121
|
-
|
122
|
-
|
123
|
-
- 0
|
124
|
-
version: "0"
|
125
|
-
requirement: *id007
|
110
|
+
requirements:
|
111
|
+
- - ! '>='
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '0'
|
114
|
+
- !ruby/object:Gem::Dependency
|
126
115
|
name: yard
|
116
|
+
requirement: !ruby/object:Gem::Requirement
|
117
|
+
none: false
|
118
|
+
requirements:
|
119
|
+
- - ! '>='
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '0'
|
122
|
+
type: :development
|
123
|
+
prerelease: false
|
124
|
+
version_requirements: !ruby/object:Gem::Requirement
|
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
|
133
|
+
none: false
|
134
|
+
requirements:
|
135
|
+
- - ! '>='
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '0'
|
127
138
|
type: :development
|
128
|
-
- !ruby/object:Gem::Dependency
|
129
139
|
prerelease: false
|
130
|
-
version_requirements:
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
131
141
|
none: false
|
132
|
-
requirements:
|
133
|
-
- -
|
134
|
-
- !ruby/object:Gem::Version
|
135
|
-
|
136
|
-
|
137
|
-
- 0
|
138
|
-
version: "0"
|
139
|
-
requirement: *id008
|
142
|
+
requirements:
|
143
|
+
- - ! '>='
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
- !ruby/object:Gem::Dependency
|
140
147
|
name: libxml-ruby
|
148
|
+
requirement: !ruby/object:Gem::Requirement
|
149
|
+
none: false
|
150
|
+
requirements:
|
151
|
+
- - ! '>='
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
141
154
|
type: :development
|
142
|
-
- !ruby/object:Gem::Dependency
|
143
155
|
prerelease: false
|
144
|
-
version_requirements:
|
156
|
+
version_requirements: !ruby/object:Gem::Requirement
|
145
157
|
none: false
|
146
|
-
requirements:
|
147
|
-
- -
|
148
|
-
- !ruby/object:Gem::Version
|
149
|
-
|
150
|
-
|
151
|
-
- 0
|
152
|
-
version: "0"
|
153
|
-
requirement: *id009
|
158
|
+
requirements:
|
159
|
+
- - ! '>='
|
160
|
+
- !ruby/object:Gem::Version
|
161
|
+
version: '0'
|
162
|
+
- !ruby/object:Gem::Dependency
|
154
163
|
name: nokogiri
|
164
|
+
requirement: !ruby/object:Gem::Requirement
|
165
|
+
none: false
|
166
|
+
requirements:
|
167
|
+
- - ! '>='
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
version: '0'
|
155
170
|
type: :development
|
156
|
-
- !ruby/object:Gem::Dependency
|
157
171
|
prerelease: false
|
158
|
-
version_requirements:
|
172
|
+
version_requirements: !ruby/object:Gem::Requirement
|
159
173
|
none: false
|
160
|
-
requirements:
|
161
|
-
- -
|
162
|
-
- !ruby/object:Gem::Version
|
163
|
-
|
164
|
-
|
165
|
-
- 0
|
166
|
-
version: "0"
|
167
|
-
requirement: *id010
|
174
|
+
requirements:
|
175
|
+
- - ! '>='
|
176
|
+
- !ruby/object:Gem::Version
|
177
|
+
version: '0'
|
178
|
+
- !ruby/object:Gem::Dependency
|
168
179
|
name: hpricot
|
180
|
+
requirement: !ruby/object:Gem::Requirement
|
181
|
+
none: false
|
182
|
+
requirements:
|
183
|
+
- - ! '>='
|
184
|
+
- !ruby/object:Gem::Version
|
185
|
+
version: '0'
|
169
186
|
type: :development
|
170
|
-
- !ruby/object:Gem::Dependency
|
171
187
|
prerelease: false
|
172
|
-
version_requirements:
|
188
|
+
version_requirements: !ruby/object:Gem::Requirement
|
173
189
|
none: false
|
174
|
-
requirements:
|
175
|
-
- -
|
176
|
-
- !ruby/object:Gem::Version
|
177
|
-
|
178
|
-
|
179
|
-
- 0
|
180
|
-
version: "0"
|
181
|
-
requirement: *id011
|
190
|
+
requirements:
|
191
|
+
- - ! '>='
|
192
|
+
- !ruby/object:Gem::Version
|
193
|
+
version: '0'
|
194
|
+
- !ruby/object:Gem::Dependency
|
182
195
|
name: ox
|
196
|
+
requirement: !ruby/object:Gem::Requirement
|
197
|
+
none: false
|
198
|
+
requirements:
|
199
|
+
- - ! '>='
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '0'
|
183
202
|
type: :development
|
184
|
-
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
none: false
|
206
|
+
requirements:
|
207
|
+
- - ! '>='
|
208
|
+
- !ruby/object:Gem::Version
|
209
|
+
version: '0'
|
210
|
+
description: Rfm lets your Ruby scripts and Rails applications talk directly to your
|
211
|
+
Filemaker server. Ginjo-rfm includes ActiveModel compatibility, multiple XML parsers,
|
212
|
+
compound Filemaker find requests, and a configuration API.
|
185
213
|
email: http://groups.google.com/group/rfmcommunity
|
186
214
|
executables: []
|
187
|
-
|
188
215
|
extensions: []
|
189
|
-
|
190
|
-
extra_rdoc_files:
|
216
|
+
extra_rdoc_files:
|
191
217
|
- LICENSE
|
192
218
|
- README.md
|
193
219
|
- CHANGELOG.md
|
194
220
|
- lib/rfm/VERSION
|
195
|
-
files:
|
221
|
+
files:
|
196
222
|
- lib/rfm/base.rb
|
197
223
|
- lib/rfm/database.rb
|
198
224
|
- lib/rfm/error.rb
|
@@ -224,41 +250,33 @@ files:
|
|
224
250
|
- CHANGELOG.md
|
225
251
|
homepage: https://rubygems.org/gems/ginjo-rfm
|
226
252
|
licenses: []
|
227
|
-
|
228
253
|
post_install_message:
|
229
|
-
rdoc_options:
|
254
|
+
rdoc_options:
|
230
255
|
- --line-numbers
|
231
256
|
- --main
|
232
257
|
- README.md
|
233
|
-
require_paths:
|
258
|
+
require_paths:
|
234
259
|
- lib
|
235
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
260
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
236
261
|
none: false
|
237
|
-
requirements:
|
238
|
-
- -
|
239
|
-
- !ruby/object:Gem::Version
|
240
|
-
|
241
|
-
segments:
|
262
|
+
requirements:
|
263
|
+
- - ! '>='
|
264
|
+
- !ruby/object:Gem::Version
|
265
|
+
version: '0'
|
266
|
+
segments:
|
242
267
|
- 0
|
243
|
-
|
244
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
268
|
+
hash: 1763595399021498150
|
269
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
245
270
|
none: false
|
246
|
-
requirements:
|
247
|
-
- -
|
248
|
-
- !ruby/object:Gem::Version
|
249
|
-
hash: 25
|
250
|
-
segments:
|
251
|
-
- 1
|
252
|
-
- 3
|
253
|
-
- 1
|
271
|
+
requirements:
|
272
|
+
- - ! '>'
|
273
|
+
- !ruby/object:Gem::Version
|
254
274
|
version: 1.3.1
|
255
275
|
requirements: []
|
256
|
-
|
257
276
|
rubyforge_project:
|
258
|
-
rubygems_version: 1.8.
|
277
|
+
rubygems_version: 1.8.25
|
259
278
|
signing_key:
|
260
279
|
specification_version: 3
|
261
280
|
summary: Ruby to Filemaker adapter
|
262
281
|
test_files: []
|
263
|
-
|
264
282
|
has_rdoc:
|