ginjo-rfm 2.1.7 → 3.0.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.
- checksums.yaml +15 -0
- data/CHANGELOG.md +45 -16
- data/README.md +251 -274
- data/lib/rfm.rb +42 -20
- data/lib/rfm/VERSION +1 -1
- data/lib/rfm/base.rb +63 -196
- data/lib/rfm/database.rb +15 -16
- data/lib/rfm/layout.rb +244 -271
- data/lib/rfm/metadata/datum.rb +45 -0
- data/lib/rfm/metadata/field.rb +33 -13
- data/lib/rfm/metadata/field_control.rb +57 -25
- data/lib/rfm/metadata/layout_meta.rb +38 -0
- data/lib/rfm/metadata/resultset_meta.rb +66 -0
- data/lib/rfm/metadata/value_list_item.rb +7 -6
- data/lib/rfm/record.rb +54 -74
- data/lib/rfm/resultset.rb +63 -112
- data/lib/rfm/server.rb +6 -172
- data/lib/rfm/utilities/config.rb +100 -55
- data/lib/rfm/utilities/connection.rb +209 -0
- data/lib/rfm/utilities/core_ext.rb +14 -1
- data/lib/rfm/utilities/factory.rb +68 -65
- data/lib/rfm/utilities/sax_parser.rb +1039 -0
- metadata +154 -206
- data/lib/rfm/utilities/fmpxmlresult.rb +0 -167
- data/lib/rfm/utilities/fmresultset.rb +0 -153
- data/lib/rfm/utilities/xml_parser.rb +0 -124
- data/lib/rfm/xml_mini/hpricot.rb +0 -133
- data/lib/rfm/xml_mini/ox_sax.rb +0 -91
- data/lib/rfm/xml_mini/rexml_sax.rb +0 -81
metadata
CHANGED
@@ -1,15 +1,9 @@
|
|
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
|
-
- 7
|
10
|
-
version: 2.1.7
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 3.0.0
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Geoff Coffey
|
14
8
|
- Mufaddal Khumri
|
15
9
|
- Atsushi Matsuo
|
@@ -18,199 +12,175 @@ authors:
|
|
18
12
|
autorequire:
|
19
13
|
bindir: bin
|
20
14
|
cert_chain: []
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
- !ruby/object:Gem::Dependency
|
25
|
-
name: activesupport
|
26
|
-
prerelease: false
|
27
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
28
|
-
none: false
|
29
|
-
requirements:
|
30
|
-
- - ">="
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
hash: 9
|
33
|
-
segments:
|
34
|
-
- 2
|
35
|
-
- 3
|
36
|
-
- 5
|
37
|
-
version: 2.3.5
|
38
|
-
type: :runtime
|
39
|
-
version_requirements: *id001
|
40
|
-
- !ruby/object:Gem::Dependency
|
15
|
+
date: 2014-07-07 00:00:00.000000000 Z
|
16
|
+
dependencies:
|
17
|
+
- !ruby/object:Gem::Dependency
|
41
18
|
name: activemodel
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
hash: 3
|
49
|
-
segments:
|
50
|
-
- 0
|
51
|
-
version: "0"
|
19
|
+
requirement: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ! '>='
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '0'
|
52
24
|
type: :development
|
53
|
-
version_requirements: *id002
|
54
|
-
- !ruby/object:Gem::Dependency
|
55
|
-
name: rake
|
56
25
|
prerelease: false
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
26
|
+
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
requirements:
|
28
|
+
- - ! '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '0'
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: rake
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
66
38
|
type: :development
|
67
|
-
version_requirements: *id003
|
68
|
-
- !ruby/object:Gem::Dependency
|
69
|
-
name: rdoc
|
70
39
|
prerelease: false
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
- !ruby/object:Gem::Dependency
|
46
|
+
name: rdoc
|
47
|
+
requirement: !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ! '>='
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0'
|
80
52
|
type: :development
|
81
|
-
version_requirements: *id004
|
82
|
-
- !ruby/object:Gem::Dependency
|
83
|
-
name: rspec
|
84
53
|
prerelease: false
|
85
|
-
|
86
|
-
|
87
|
-
|
54
|
+
version_requirements: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - ! '>='
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '0'
|
59
|
+
- !ruby/object:Gem::Dependency
|
60
|
+
name: rspec
|
61
|
+
requirement: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
88
63
|
- - ~>
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
|
91
|
-
segments:
|
92
|
-
- 1
|
93
|
-
- 3
|
94
|
-
- 0
|
95
|
-
version: 1.3.0
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '2'
|
96
66
|
type: :development
|
97
|
-
version_requirements: *id005
|
98
|
-
- !ruby/object:Gem::Dependency
|
99
|
-
name: diff-lcs
|
100
67
|
prerelease: false
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
68
|
+
version_requirements: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - ~>
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '2'
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: diff-lcs
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ! '>='
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
110
80
|
type: :development
|
111
|
-
version_requirements: *id006
|
112
|
-
- !ruby/object:Gem::Dependency
|
113
|
-
name: yard
|
114
81
|
prerelease: false
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
82
|
+
version_requirements: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ! '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
- !ruby/object:Gem::Dependency
|
88
|
+
name: yard
|
89
|
+
requirement: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
124
94
|
type: :development
|
125
|
-
version_requirements: *id007
|
126
|
-
- !ruby/object:Gem::Dependency
|
127
|
-
name: redcarpet
|
128
95
|
prerelease: false
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
96
|
+
version_requirements: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - ! '>='
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '0'
|
101
|
+
- !ruby/object:Gem::Dependency
|
102
|
+
name: redcarpet
|
103
|
+
requirement: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - ! '>='
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0'
|
138
108
|
type: :development
|
139
|
-
version_requirements: *id008
|
140
|
-
- !ruby/object:Gem::Dependency
|
141
|
-
name: libxml-ruby
|
142
109
|
prerelease: false
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
110
|
+
version_requirements: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - ! '>='
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0'
|
115
|
+
- !ruby/object:Gem::Dependency
|
116
|
+
name: libxml-ruby
|
117
|
+
requirement: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - ! '>='
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '0'
|
152
122
|
type: :development
|
153
|
-
version_requirements: *id009
|
154
|
-
- !ruby/object:Gem::Dependency
|
155
|
-
name: nokogiri
|
156
123
|
prerelease: false
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
124
|
+
version_requirements: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - ! '>='
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: '0'
|
129
|
+
- !ruby/object:Gem::Dependency
|
130
|
+
name: nokogiri
|
131
|
+
requirement: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - ! '>='
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '0'
|
166
136
|
type: :development
|
167
|
-
version_requirements: *id010
|
168
|
-
- !ruby/object:Gem::Dependency
|
169
|
-
name: hpricot
|
170
137
|
prerelease: false
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
segments:
|
178
|
-
- 0
|
179
|
-
version: "0"
|
180
|
-
type: :development
|
181
|
-
version_requirements: *id011
|
182
|
-
- !ruby/object:Gem::Dependency
|
138
|
+
version_requirements: !ruby/object:Gem::Requirement
|
139
|
+
requirements:
|
140
|
+
- - ! '>='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0'
|
143
|
+
- !ruby/object:Gem::Dependency
|
183
144
|
name: ox
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
- !ruby/object:Gem::Version
|
190
|
-
hash: 3
|
191
|
-
segments:
|
192
|
-
- 0
|
193
|
-
version: "0"
|
145
|
+
requirement: !ruby/object:Gem::Requirement
|
146
|
+
requirements:
|
147
|
+
- - ! '>='
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
version: '0'
|
194
150
|
type: :development
|
195
|
-
|
196
|
-
|
151
|
+
prerelease: false
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
requirements:
|
154
|
+
- - ! '>='
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
version: '0'
|
157
|
+
description: Rfm lets your Ruby scripts and Rails applications talk directly to your
|
158
|
+
Filemaker server. Ginjo-rfm includes ActiveModel compatibility, multiple XML parsers,
|
159
|
+
compound Filemaker find requests, and a configuration API.
|
197
160
|
email: http://groups.google.com/group/rfmcommunity
|
198
161
|
executables: []
|
199
|
-
|
200
162
|
extensions: []
|
201
|
-
|
202
|
-
extra_rdoc_files:
|
163
|
+
extra_rdoc_files:
|
203
164
|
- LICENSE
|
204
165
|
- README.md
|
205
166
|
- CHANGELOG.md
|
206
167
|
- lib/rfm/VERSION
|
207
|
-
files:
|
168
|
+
files:
|
169
|
+
- .yardopts
|
170
|
+
- CHANGELOG.md
|
171
|
+
- LICENSE
|
172
|
+
- README.md
|
173
|
+
- lib/rfm.rb
|
174
|
+
- lib/rfm/VERSION
|
208
175
|
- lib/rfm/base.rb
|
209
176
|
- lib/rfm/database.rb
|
210
177
|
- lib/rfm/error.rb
|
211
178
|
- lib/rfm/layout.rb
|
179
|
+
- lib/rfm/metadata/datum.rb
|
212
180
|
- lib/rfm/metadata/field.rb
|
213
181
|
- lib/rfm/metadata/field_control.rb
|
182
|
+
- lib/rfm/metadata/layout_meta.rb
|
183
|
+
- lib/rfm/metadata/resultset_meta.rb
|
214
184
|
- lib/rfm/metadata/script.rb
|
215
185
|
- lib/rfm/metadata/value_list_item.rb
|
216
186
|
- lib/rfm/record.rb
|
@@ -219,58 +189,36 @@ files:
|
|
219
189
|
- lib/rfm/utilities/case_insensitive_hash.rb
|
220
190
|
- lib/rfm/utilities/compound_query.rb
|
221
191
|
- lib/rfm/utilities/config.rb
|
192
|
+
- lib/rfm/utilities/connection.rb
|
222
193
|
- lib/rfm/utilities/core_ext.rb
|
223
194
|
- lib/rfm/utilities/factory.rb
|
224
|
-
- lib/rfm/utilities/
|
225
|
-
- lib/rfm/utilities/fmresultset.rb
|
226
|
-
- lib/rfm/utilities/xml_parser.rb
|
195
|
+
- lib/rfm/utilities/sax_parser.rb
|
227
196
|
- lib/rfm/version.rb
|
228
|
-
- lib/rfm/xml_mini/hpricot.rb
|
229
|
-
- lib/rfm/xml_mini/ox_sax.rb
|
230
|
-
- lib/rfm/xml_mini/rexml_sax.rb
|
231
|
-
- lib/rfm.rb
|
232
|
-
- lib/rfm/VERSION
|
233
|
-
- .yardopts
|
234
|
-
- LICENSE
|
235
|
-
- README.md
|
236
|
-
- CHANGELOG.md
|
237
197
|
homepage: https://rubygems.org/gems/ginjo-rfm
|
238
198
|
licenses: []
|
239
|
-
|
199
|
+
metadata: {}
|
240
200
|
post_install_message:
|
241
|
-
rdoc_options:
|
201
|
+
rdoc_options:
|
242
202
|
- --line-numbers
|
243
203
|
- --main
|
244
204
|
- README.md
|
245
|
-
require_paths:
|
205
|
+
require_paths:
|
246
206
|
- lib
|
247
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
257
|
-
none: false
|
258
|
-
requirements:
|
259
|
-
- - ">"
|
260
|
-
- !ruby/object:Gem::Version
|
261
|
-
hash: 25
|
262
|
-
segments:
|
263
|
-
- 1
|
264
|
-
- 3
|
265
|
-
- 1
|
207
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
208
|
+
requirements:
|
209
|
+
- - ! '>='
|
210
|
+
- !ruby/object:Gem::Version
|
211
|
+
version: '0'
|
212
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
213
|
+
requirements:
|
214
|
+
- - ! '>'
|
215
|
+
- !ruby/object:Gem::Version
|
266
216
|
version: 1.3.1
|
267
217
|
requirements: []
|
268
|
-
|
269
218
|
rubyforge_project:
|
270
|
-
rubygems_version:
|
219
|
+
rubygems_version: 2.2.2
|
271
220
|
signing_key:
|
272
|
-
specification_version:
|
221
|
+
specification_version: 4
|
273
222
|
summary: Ruby to Filemaker adapter
|
274
223
|
test_files: []
|
275
|
-
|
276
224
|
has_rdoc:
|
@@ -1,167 +0,0 @@
|
|
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
|