ginjo-rfm 2.0.2 → 2.1.0.pre02

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.
@@ -0,0 +1,167 @@
1
+ module Rfm
2
+
3
+ # Methods to help translate xml_mini document into Rfm/Filemaker objects.
4
+ module Fmpxmlresult
5
+ def self.extended(obj)
6
+ obj.instance_variable_set :@root, obj
7
+ obj.extend Resultset
8
+ end
9
+
10
+ module Resultset
11
+
12
+ def error
13
+ self['FMPXMLRESULT']['ERRORCODE']['__content__'].to_i
14
+ end
15
+
16
+ def datasource
17
+ self['FMPXMLRESULT']['DATABASE']
18
+ end
19
+
20
+ def meta
21
+ self['FMPXMLRESULT']['METADATA']
22
+ end
23
+
24
+ def resultset
25
+ self['FMPXMLRESULT']['RESULTSET']
26
+ end
27
+
28
+ def date_format
29
+ Rfm.convert_date_time_format(datasource['DATEFORMAT'].to_s)
30
+ end
31
+
32
+ def time_format
33
+ Rfm.convert_date_time_format(datasource['TIMEFORMAT'].to_s)
34
+ end
35
+
36
+ def timestamp_format
37
+ #Rfm.convert_date_time_format(datasource['timestamp-format'].to_s)
38
+ "#{date_format} #{time_format}"
39
+ end
40
+
41
+ def foundset_count
42
+ resultset['FOUND'].to_s.to_i
43
+ end
44
+
45
+ def total_count
46
+ datasource['RECORDS'].to_s.to_i
47
+ end
48
+
49
+ def table
50
+ #datasource['table'].to_s
51
+ 'not-defined'
52
+ end
53
+
54
+ def records
55
+ resultset['ROW'].rfm_force_array.rfm_extend_members(Record, self)
56
+ end
57
+
58
+
59
+ def fields
60
+ meta['FIELD'].rfm_force_array.rfm_extend_members(Field, self)
61
+ end
62
+
63
+ def portals
64
+ #meta['relatedset-definition'].rfm_force_array.rfm_extend_members(RelatedsetDefinition)
65
+ [].rfm_extend_members(RelatedsetDefinition)
66
+ end
67
+
68
+ end
69
+
70
+ module Field
71
+ def name
72
+ self['NAME']
73
+ end
74
+
75
+ def result
76
+ self['TYPE']
77
+ end
78
+
79
+ def type
80
+ #self['type']
81
+ 'not-defined'
82
+ end
83
+
84
+ def max_repeats
85
+ self['MAXREPEAT']
86
+ end
87
+
88
+ def global
89
+ #self['global']
90
+ 'not-defined'
91
+ end
92
+ end
93
+
94
+ module RelatedsetDefinition
95
+ def table
96
+ #self['table']
97
+ 'not-defined'
98
+ end
99
+
100
+ def fields
101
+ #self['field-definition'].rfm_force_array.rfm_extend_members(Field)
102
+ [].rfm_extend_members(Field)
103
+ end
104
+ end
105
+
106
+ # May need to add @parent to each level of heirarchy in #rfm_extend_member,
107
+ # so we can get the container and it's parent from records, columns, data, etc..
108
+ module Record
109
+ def columns
110
+ self['COL'].rfm_force_array.rfm_extend_members(Column, self)
111
+ end
112
+
113
+ def record_id
114
+ self['RECORDID']
115
+ end
116
+
117
+ def mod_id
118
+ self['MODID']
119
+ end
120
+
121
+ def portals
122
+ #self['relatedset'].rfm_force_array.rfm_extend_members(Relatedset)
123
+ [].rfm_extend_members(Relatedset)
124
+ end
125
+ end
126
+
127
+ module Column
128
+ def name
129
+ #n = parent.index {|i| i === self}
130
+ root.fields[get_index].name
131
+ end
132
+
133
+ def data
134
+ self['DATA'].rfm_force_array.collect{|d| d['__content__']}
135
+ end
136
+ end
137
+
138
+ module Relatedset
139
+ def table
140
+ #self['table']
141
+ 'not-defined'
142
+ end
143
+
144
+ def count
145
+ #self['count']
146
+ 0
147
+ end
148
+
149
+ def records
150
+ #self['record'].rfm_force_array.rfm_extend_members(Record)
151
+ [].rfm_extend_members(Record)
152
+ end
153
+ end
154
+
155
+ end
156
+
157
+ def convert_date_time_format(fm_format)
158
+ fm_format.gsub!('MM', '%m')
159
+ fm_format.gsub!('dd', '%d')
160
+ fm_format.gsub!('yyyy', '%Y')
161
+ fm_format.gsub!('HH', '%H')
162
+ fm_format.gsub!('mm', '%M')
163
+ fm_format.gsub!('ss', '%S')
164
+ fm_format
165
+ end
166
+
167
+ end
@@ -0,0 +1,153 @@
1
+ module Rfm
2
+
3
+ # Methods to help translate xml_mini document into Rfm/Filemaker objects.
4
+ module Fmresultset
5
+ def self.extended(obj)
6
+ obj.instance_variable_set :@root, obj
7
+ obj.extend Resultset
8
+ end
9
+
10
+ module Resultset
11
+
12
+ def error
13
+ self['fmresultset']['error']['code'].to_i
14
+ end
15
+
16
+ def datasource
17
+ self['fmresultset']['datasource']
18
+ end
19
+
20
+ def meta
21
+ self['fmresultset']['metadata']
22
+ end
23
+
24
+ def resultset
25
+ self['fmresultset']['resultset']
26
+ end
27
+
28
+ def date_format
29
+ Rfm.convert_date_time_format(datasource['date-format'].to_s)
30
+ end
31
+
32
+ def time_format
33
+ Rfm.convert_date_time_format(datasource['time-format'].to_s)
34
+ end
35
+
36
+ def timestamp_format
37
+ Rfm.convert_date_time_format(datasource['timestamp-format'].to_s)
38
+ end
39
+
40
+ def foundset_count
41
+ resultset['count'].to_s.to_i
42
+ end
43
+
44
+ def total_count
45
+ datasource['total-count'].to_s.to_i
46
+ end
47
+
48
+ def table
49
+ datasource['table']
50
+ end
51
+
52
+ def records
53
+ resultset['record'].rfm_force_array.rfm_extend_members(Record)
54
+ end
55
+
56
+
57
+ def fields
58
+ meta['field-definition'].rfm_force_array.rfm_extend_members(Field)
59
+ end
60
+
61
+ def portals
62
+ meta['relatedset-definition'].rfm_force_array.rfm_extend_members(RelatedsetDefinition)
63
+ end
64
+
65
+ end
66
+
67
+ module Field
68
+ def name
69
+ self['name']
70
+ end
71
+
72
+ def result
73
+ self['result']
74
+ end
75
+
76
+ def type
77
+ self['type']
78
+ end
79
+
80
+ def max_repeats
81
+ self['max-repeats']
82
+ end
83
+
84
+ def global
85
+ self['global']
86
+ end
87
+ end
88
+
89
+ module RelatedsetDefinition
90
+ def table
91
+ self['table']
92
+ end
93
+
94
+ def fields
95
+ self['field-definition'].rfm_force_array.rfm_extend_members(Field)
96
+ end
97
+ end
98
+
99
+ module Record
100
+ def columns
101
+ self['field'].rfm_force_array.rfm_extend_members(Column)
102
+ end
103
+
104
+ def record_id
105
+ self['record-id']
106
+ end
107
+
108
+ def mod_id
109
+ self['mod-id']
110
+ end
111
+
112
+ def portals
113
+ self['relatedset'].rfm_force_array.rfm_extend_members(Relatedset)
114
+ end
115
+ end
116
+
117
+ module Column
118
+ def name
119
+ self['name']
120
+ end
121
+
122
+ def data
123
+ self['data'].rfm_force_array.collect{|d| d['__content__']}
124
+ end
125
+ end
126
+
127
+ module Relatedset
128
+ def table
129
+ self['table']
130
+ end
131
+
132
+ def count
133
+ self['count']
134
+ end
135
+
136
+ def records
137
+ self['record'].rfm_force_array.rfm_extend_members(Record)
138
+ end
139
+ end
140
+
141
+ end
142
+
143
+ def convert_date_time_format(fm_format)
144
+ fm_format.gsub!('MM', '%m')
145
+ fm_format.gsub!('dd', '%d')
146
+ fm_format.gsub!('yyyy', '%Y')
147
+ fm_format.gsub!('HH', '%H')
148
+ fm_format.gsub!('mm', '%M')
149
+ fm_format.gsub!('ss', '%S')
150
+ fm_format
151
+ end
152
+
153
+ end
@@ -55,6 +55,18 @@ module Rfm
55
55
  ActiveSupport::XmlMini.with_backend(get_backend_from_hash(opts[:parser])) {ActiveSupport::XmlMini.parse(string_or_file)}
56
56
  end
57
57
  end
58
+
59
+ # Creates new hash with #new, plus extends the hash with result-dependent translation class.
60
+ def parse(string_or_file, opts={})
61
+ doc = new(string_or_file, opts)
62
+ case true
63
+ when doc.has_key?('fmresultset') ; doc.extend(Fmresultset)
64
+ when doc.has_key?('FMPXMLRESULT') ; doc.extend(Fmpxmlresult)
65
+ when doc.has_key?('FMPDSORESULT') ; doc.extend(Fmpdsoresult)
66
+ when doc.has_key?('FMPXMLLAYOUT') ; doc.extend(Fmpxmllayout)
67
+ else doc
68
+ end
69
+ end
58
70
 
59
71
  # Shortcut to XmlMini config getter.
60
72
  # If a parameter is passed, it will be used to get the local backend description
metadata CHANGED
@@ -1,13 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ginjo-rfm
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
5
- prerelease:
4
+ hash: 1923832061
5
+ prerelease: 6
6
6
  segments:
7
7
  - 2
8
+ - 1
8
9
  - 0
10
+ - pre
9
11
  - 2
10
- version: 2.0.2
12
+ version: 2.1.0.pre02
11
13
  platform: ruby
12
14
  authors:
13
15
  - Geoff Coffey
@@ -19,12 +21,11 @@ autorequire:
19
21
  bindir: bin
20
22
  cert_chain: []
21
23
 
22
- date: 2012-04-24 00:00:00 Z
24
+ date: 2013-02-16 00:00:00 Z
23
25
  dependencies:
24
26
  - !ruby/object:Gem::Dependency
25
- name: activesupport
26
27
  prerelease: false
27
- requirement: &id001 !ruby/object:Gem::Requirement
28
+ version_requirements: &id001 !ruby/object:Gem::Requirement
28
29
  none: false
29
30
  requirements:
30
31
  - - ">="
@@ -35,12 +36,12 @@ dependencies:
35
36
  - 3
36
37
  - 5
37
38
  version: 2.3.5
39
+ requirement: *id001
40
+ name: activesupport
38
41
  type: :runtime
39
- version_requirements: *id001
40
42
  - !ruby/object:Gem::Dependency
41
- name: activemodel
42
43
  prerelease: false
43
- requirement: &id002 !ruby/object:Gem::Requirement
44
+ version_requirements: &id002 !ruby/object:Gem::Requirement
44
45
  none: false
45
46
  requirements:
46
47
  - - ">="
@@ -49,12 +50,12 @@ dependencies:
49
50
  segments:
50
51
  - 0
51
52
  version: "0"
53
+ requirement: *id002
54
+ name: activemodel
52
55
  type: :development
53
- version_requirements: *id002
54
56
  - !ruby/object:Gem::Dependency
55
- name: rake
56
57
  prerelease: false
57
- requirement: &id003 !ruby/object:Gem::Requirement
58
+ version_requirements: &id003 !ruby/object:Gem::Requirement
58
59
  none: false
59
60
  requirements:
60
61
  - - ">="
@@ -63,12 +64,12 @@ dependencies:
63
64
  segments:
64
65
  - 0
65
66
  version: "0"
67
+ requirement: *id003
68
+ name: rake
66
69
  type: :development
67
- version_requirements: *id003
68
70
  - !ruby/object:Gem::Dependency
69
- name: rdoc
70
71
  prerelease: false
71
- requirement: &id004 !ruby/object:Gem::Requirement
72
+ version_requirements: &id004 !ruby/object:Gem::Requirement
72
73
  none: false
73
74
  requirements:
74
75
  - - ">="
@@ -77,12 +78,12 @@ dependencies:
77
78
  segments:
78
79
  - 0
79
80
  version: "0"
81
+ requirement: *id004
82
+ name: rdoc
80
83
  type: :development
81
- version_requirements: *id004
82
84
  - !ruby/object:Gem::Dependency
83
- name: rspec
84
85
  prerelease: false
85
- requirement: &id005 !ruby/object:Gem::Requirement
86
+ version_requirements: &id005 !ruby/object:Gem::Requirement
86
87
  none: false
87
88
  requirements:
88
89
  - - ~>
@@ -93,12 +94,12 @@ dependencies:
93
94
  - 3
94
95
  - 0
95
96
  version: 1.3.0
97
+ requirement: *id005
98
+ name: rspec
96
99
  type: :development
97
- version_requirements: *id005
98
100
  - !ruby/object:Gem::Dependency
99
- name: diff-lcs
100
101
  prerelease: false
101
- requirement: &id006 !ruby/object:Gem::Requirement
102
+ version_requirements: &id006 !ruby/object:Gem::Requirement
102
103
  none: false
103
104
  requirements:
104
105
  - - ">="
@@ -107,12 +108,12 @@ dependencies:
107
108
  segments:
108
109
  - 0
109
110
  version: "0"
111
+ requirement: *id006
112
+ name: diff-lcs
110
113
  type: :development
111
- version_requirements: *id006
112
114
  - !ruby/object:Gem::Dependency
113
- name: yard
114
115
  prerelease: false
115
- requirement: &id007 !ruby/object:Gem::Requirement
116
+ version_requirements: &id007 !ruby/object:Gem::Requirement
116
117
  none: false
117
118
  requirements:
118
119
  - - ">="
@@ -121,12 +122,12 @@ dependencies:
121
122
  segments:
122
123
  - 0
123
124
  version: "0"
125
+ requirement: *id007
126
+ name: yard
124
127
  type: :development
125
- version_requirements: *id007
126
128
  - !ruby/object:Gem::Dependency
127
- name: libxml-ruby
128
129
  prerelease: false
129
- requirement: &id008 !ruby/object:Gem::Requirement
130
+ version_requirements: &id008 !ruby/object:Gem::Requirement
130
131
  none: false
131
132
  requirements:
132
133
  - - ">="
@@ -135,12 +136,12 @@ dependencies:
135
136
  segments:
136
137
  - 0
137
138
  version: "0"
139
+ requirement: *id008
140
+ name: libxml-ruby
138
141
  type: :development
139
- version_requirements: *id008
140
142
  - !ruby/object:Gem::Dependency
141
- name: nokogiri
142
143
  prerelease: false
143
- requirement: &id009 !ruby/object:Gem::Requirement
144
+ version_requirements: &id009 !ruby/object:Gem::Requirement
144
145
  none: false
145
146
  requirements:
146
147
  - - ">="
@@ -149,12 +150,12 @@ dependencies:
149
150
  segments:
150
151
  - 0
151
152
  version: "0"
153
+ requirement: *id009
154
+ name: nokogiri
152
155
  type: :development
153
- version_requirements: *id009
154
156
  - !ruby/object:Gem::Dependency
155
- name: hpricot
156
157
  prerelease: false
157
- requirement: &id010 !ruby/object:Gem::Requirement
158
+ version_requirements: &id010 !ruby/object:Gem::Requirement
158
159
  none: false
159
160
  requirements:
160
161
  - - ">="
@@ -163,12 +164,12 @@ dependencies:
163
164
  segments:
164
165
  - 0
165
166
  version: "0"
167
+ requirement: *id010
168
+ name: hpricot
166
169
  type: :development
167
- version_requirements: *id010
168
170
  - !ruby/object:Gem::Dependency
169
- name: ox
170
171
  prerelease: false
171
- requirement: &id011 !ruby/object:Gem::Requirement
172
+ version_requirements: &id011 !ruby/object:Gem::Requirement
172
173
  none: false
173
174
  requirements:
174
175
  - - ">="
@@ -177,8 +178,9 @@ dependencies:
177
178
  segments:
178
179
  - 0
179
180
  version: "0"
181
+ requirement: *id011
182
+ name: ox
180
183
  type: :development
181
- version_requirements: *id011
182
184
  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.
183
185
  email: http://groups.google.com/group/rfmcommunity
184
186
  executables: []
@@ -207,6 +209,8 @@ files:
207
209
  - lib/rfm/utilities/config.rb
208
210
  - lib/rfm/utilities/core_ext.rb
209
211
  - lib/rfm/utilities/factory.rb
212
+ - lib/rfm/utilities/fmpxmlresult.rb
213
+ - lib/rfm/utilities/fmresultset.rb
210
214
  - lib/rfm/utilities/xml_parser.rb
211
215
  - lib/rfm/version.rb
212
216
  - lib/rfm/xml_mini/hpricot.rb