fmrest-core 0.13.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f3df4def4688541f93d0c0ab3cdf2ec4aa61424cf5304d668190e270b5d8a98e
4
+ data.tar.gz: e1e7935827cb2720ea008b6f563ee24881c12d9d437f81163101796a7bc4d781
5
+ SHA512:
6
+ metadata.gz: 3cf8c4fb66bb25d6a78e794572b243b2afaad2fabed94f73fb499776d4227b0a90b0fa9bf7068dce0f8cdac9d13c70302aed142e73d62c818ae6ad4c28f23600
7
+ data.tar.gz: c58374f6976087b957c6dd1689b1db447e99490c6f141effc2a2f14540f81bac1c7bf79dc4beec62d437dce4385d704f53bffc919a26d5ad38a660bb763f6fe2
data/.yardopts ADDED
@@ -0,0 +1,4 @@
1
+ --markup markdown
2
+ --plugin activesupport-concern
3
+ -
4
+ docs/*
data/CHANGELOG.md ADDED
@@ -0,0 +1,127 @@
1
+ ## Changelog
2
+
3
+ ### 0.13.0
4
+
5
+ * Split `fmrest` gem into `fmrest-core` and `fmrest-spyke`. `fmrest` becomes a
6
+ wrapper for the two new gems.
7
+ * Fix bug preventing connection databases with spaces in their names.
8
+ * Improved portal support with ability to delete portal records, and better
9
+ refreshing of portal records after saving the parent.
10
+ * `FmRest::Spyke::Base#__record_id` and `FmRest::Spyke::Base#__mod_id` now
11
+ always return integers if set.
12
+
13
+ ### 0.12.0
14
+
15
+ * Rename `FmRest::Spyke::Base#id=` to `FmRest::Spyke::Base#__record_id=` to
16
+ prevent clobbering of FileMaker layout-defined fields
17
+ * Removed previously deprecated `FmRest::Spyke::Base(config)` syntax
18
+ * Better yard documentation
19
+
20
+ ### 0.11.1
21
+
22
+ * Fix a couple crashes due to missing constants
23
+
24
+ ### 0.11.0
25
+
26
+ * Added custom class for connection settings, providing indifferent access
27
+ (i.e. keys can be strings or symbols), and centralized default values and
28
+ validations
29
+ * Added `:autologin`, `:token` and `:token_store` connection settings
30
+ * Added `FmRest::Base.fmrest_config_overlay=` and related methods
31
+ * Added `FmRest::V1.request_auth_token` and
32
+ `FmRest::Spyke::Base.request_auth_token` (as well as `!`-suffixed versions
33
+ which raise exceptions on failure)
34
+
35
+ ### 0.10.1
36
+
37
+ * Fix `URI.escape` obsolete warning messages in Ruby 2.7 by replacing it with
38
+ `URI.encode_www_form_component`
39
+ ([PR#40](https://github.com/beezwax/fmrest-ruby/pull/40))
40
+
41
+ ### 0.10.0
42
+
43
+ * Added `FmRest::StringDateAwareness` module to correct some issues when using
44
+ `FmRest::StringDate`
45
+ * Added basic timezones support
46
+ * Deprecated `class < FmRest::Spyke::Base(config_hash)` syntax in favor of
47
+ using `self.fmrest_config=`
48
+
49
+ ### 0.9.0
50
+
51
+ * Added `FmRest::Spyke::Base.set_globals`
52
+
53
+ ### 0.8.0
54
+
55
+ * Improved metadata when using `FmRest::Spyke::Model`. Metadata now uses
56
+ Struct/OpenStruct, so properties are accessible through `.property`, as well
57
+ as `[:property]`
58
+ * Added batch-finders `.find_in_batches` and `.find_each` for
59
+ * `FmRest::Spyke::Base`
60
+
61
+ ### 0.7.1
62
+
63
+ * Made sure `Model.find_one` and `Model.find_some` work without needing to call
64
+ `Model.all` in between
65
+
66
+ ### 0.7.0
67
+
68
+ * Added date coercion feature
69
+
70
+ ### 0.6.0
71
+
72
+ * Implemented session logout
73
+ ([#16](https://github.com/beezwax/fmrest-ruby/issues/16))
74
+
75
+ ### 0.5.2
76
+
77
+ * Improved support for legacy ActiveModel 4.x
78
+
79
+ ### 0.5.1
80
+
81
+ * Alias `:username` option as `:account_name` for ginjo-rfm gem
82
+ cross-compatibility
83
+
84
+ ### 0.5.0
85
+
86
+ * Much improved script execution support
87
+ ([#20](https://github.com/beezwax/fmrest-ruby/issues/20))
88
+ * Fixed bug when setting `default_limi` and trying to find a record
89
+ ([35](https://github.com/beezwax/fmrest-ruby/issues/35))
90
+
91
+ ### 0.4.1
92
+
93
+ * Prevent raising an exception when a /\_find request yields no results
94
+ ([#33](https://github.com/beezwax/fmrest-ruby/issues/33) and
95
+ [#34](https://github.com/beezwax/fmrest-ruby/issues/34))
96
+
97
+ ### 0.4.0
98
+
99
+ * Implement ability to set limit and offset for portals
100
+ * Implement disabling and requesting all portals
101
+
102
+ ### 0.3.3
103
+
104
+ * Fix encoding of paths for layouts with brackets in them (e.g. `"\[Very Ugly\]
105
+ Layout"`)
106
+ * Raise an error if `"id"` is assigned as an attribute on a model, as it's
107
+ currently a reserved method name by Spyke
108
+
109
+ ### 0.3.2
110
+
111
+ * Fix support for ActiveSupport < 5.2
112
+ ([#27](https://github.com/beezwax/fmrest-ruby/issues/27))
113
+
114
+ ### 0.3.0
115
+
116
+ * Add Moneta token store
117
+
118
+ ### 0.2.5
119
+
120
+ * Fix crash in `fetch_container_data` when no proxy options were set
121
+
122
+ ### 0.2.4
123
+
124
+ * Use `String#=~` instead of `String#match?` for Ruby <2.4 compatibility (Fixes
125
+ [#26](https://github.com/beezwax/fmrest-ruby/issues/26))
126
+ * Deprecate `FmRest.config` in favor of `FmRest.default_connection_settings`
127
+ * Honor Faraday SSL and proxy settings when fetching container files
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2018 Pedro Carbajal and Beezwax Datatools, Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,523 @@
1
+ # fmrest-ruby
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/fmrest.svg?style=flat)](https://rubygems.org/gems/fmrest)
4
+ ![CI](https://github.com/beezwax/fmrest-ruby/workflows/CI/badge.svg)
5
+
6
+ A Ruby client for
7
+ [FileMaker 18 and 19's Data API](https://help.claris.com/en/data-api-guide)
8
+ using
9
+ [Faraday](https://github.com/lostisland/faraday) and with optional
10
+ ActiveRecord-ish ORM features through [Spyke](https://github.com/balvig/spyke).
11
+
12
+ fmrest-ruby only partially implements FileMaker 18's Data API.
13
+ See the [implementation completeness table](#api-implementation-completeness-table)
14
+ to see if a feature you need is natively supported by the gem.
15
+
16
+ ## Gems
17
+
18
+ The `fmrest` gem is a wrapper for two other gems:
19
+
20
+ * `fmrest-core`, which provides the core Faraday connection builder, session
21
+ management, and other core utilities.
22
+ * `fmrest-spyke`, which provides an ActiveRecord-like ORM library built on top
23
+ of `fmrest-core` and Spyke.
24
+
25
+ ## Installation
26
+
27
+ Add this to your Gemfile:
28
+
29
+ ```ruby
30
+ gem 'fmrest'
31
+ ```
32
+
33
+ Or if you just want to use the Faraday connection without the ORM features, do:
34
+
35
+ ```ruby
36
+ gem 'fmrest-core'
37
+ ```
38
+
39
+ ## Simple examples
40
+
41
+ ### ORM example
42
+
43
+ Most people would want to use the ORM features provided by `fmrest-spyke`:
44
+
45
+ ```ruby
46
+ class Honeybee < FmRest::Spyke::Base
47
+ # Connection settings
48
+ self.fmrest_config = {
49
+ host: "…",
50
+ database: "…",
51
+ username: "…",
52
+ password: "…"
53
+ }
54
+
55
+ # Mapped attributes
56
+ attributes name: "Bee Name", age: "Bee Age"
57
+
58
+ # Portals
59
+ has_portal :flowers
60
+
61
+ # File container
62
+ container :photo, field_name: "Bee Photo"
63
+ end
64
+
65
+ # Find a record by id
66
+ bee = Honeybee.find(9)
67
+
68
+ bee.name = "Hutch"
69
+
70
+ # Add a new record to portal
71
+ bee.flowers.build(name: "Daisy")
72
+
73
+ bee.save
74
+ ```
75
+
76
+ ### Barebones connection example (without ORM)
77
+
78
+ In case you don't need the advanced ORM features (e.g. if you only need minimal
79
+ Data API interaction and just want a lightweight solution) you can simply use
80
+ the Faraday connection provided by `fmrest-core`:
81
+
82
+ ```ruby
83
+ connection = FmRest::V1.build_connection(
84
+ host: "…",
85
+ database: "…",
86
+ username: "…",
87
+ password: "…"
88
+ )
89
+
90
+ # Get all records (as parsed JSON)
91
+ connection.get("layouts/MyFancyLayout/records")
92
+
93
+ # Create new record
94
+ connection.post do |req|
95
+ req.url "layouts/MyFancyLayout/records"
96
+
97
+ # You can just pass a hash for the JSON body
98
+ req.body = { … }
99
+ end
100
+ ```
101
+
102
+ See the [main document on using the base
103
+ connection](docs/BaseConnectionUsage.md) for more.
104
+
105
+ ## Connection settings
106
+
107
+ The minimum required connection settings are `:host`, `:database`, `:username`
108
+ and `:password`, but fmrest-ruby has many other options you can pass when
109
+ setting up a connection (see [full list](#full-list-of-available-options) below).
110
+
111
+ `:ssl` and `:proxy` are forwarded to the underlying
112
+ [Faraday](https://github.com/lostisland/faraday) connection. You can use this
113
+ to, for instance, disable SSL verification:
114
+
115
+ ```ruby
116
+ {
117
+ host: "…",
118
+
119
+ ssl: { verify: false }
120
+ }
121
+ ```
122
+
123
+ You can also pass a `:log` option for basic request logging, see the section on
124
+ [Logging](#Logging) below.
125
+
126
+ ### Full list of available options
127
+
128
+ Option | Description | Format | Default
129
+ --------------------|--------------------------------------------|-----------------------------|--------
130
+ `:host` | Hostname with optional port, e.g. `"example.com:9000"` | String | None
131
+ `:database` | | String | None
132
+ `:username` | | String | None
133
+ `:password` | | String | None
134
+ `:account_name` | Alias of `:username` | String | None
135
+ `:ssl` | SSL options to be forwarded to Faraday | Faraday SSL options | None
136
+ `:proxy` | Proxy options to be forwarded to Faraday | Faraday proxy options | None
137
+ `:log` | Log JSON responses to STDOUT | Boolean | `false`
138
+ `:coerce_dates` | See section on [date fields](#date-fields-and-timezones) | Boolean \| `:hybrid` \| `:full` | `false`
139
+ `:date_format` | Date parsing format | String (FM date format) | `"MM/dd/yyyy"`
140
+ `:timestamp_format` | Timestmap parsing format | String (FM date format) | `"MM/dd/yyyy HH:mm:ss"`
141
+ `:time_format` | Time parsing format | String (FM date format) | `"HH:mm:ss"`
142
+ `:timezone` | The timezone for the FM server | `:local` \| `:utc` \| `nil` | `nil`
143
+ `:autologin` | Whether to automatically start Data API sessions | Boolean | `true`
144
+ `:token` | Used to manually provide a session token (e.g. if `:autologin` is `false`) | String | None
145
+
146
+ ### Default connection settings
147
+
148
+ If you're only connecting to a single FM database you can configure it globally
149
+ through `FmRest.default_connection_settings=`. E.g.:
150
+
151
+ ```ruby
152
+ FmRest.default_connection_settings = {
153
+ host: "…",
154
+ database: "…",
155
+ username: "…",
156
+ password: "…"
157
+ }
158
+ ```
159
+
160
+ These settings will be used by default by `FmRest::Spyke::Base` models whenever
161
+ you don't set `fmrest_config=` explicitly, as well as by
162
+ `FmRest::V1.build_connection` in case you're setting up your Faraday connection
163
+ manually.
164
+
165
+ ## Session token store
166
+
167
+ fmrest-ruby includes a number of options for storing session tokens:
168
+
169
+ * Memory
170
+ * ActiveRecord
171
+ * Redis
172
+ * Moneta
173
+
174
+ See the [main document on token stores](docs/TokenStore.md) for detailed info
175
+ on how to set up each store.
176
+
177
+ ## Date fields and timezones
178
+
179
+ fmrest-ruby has automatic detection and coercion of date fields to and from
180
+ Ruby date/time objects. Basic timezone support is also provided.
181
+
182
+ See the [main document on date fields](docs/DateFields.md) for more info.
183
+
184
+ ## ActiveRecord-like ORM (fmrest-spyke)
185
+
186
+ [Spyke](https://github.com/balvig/spyke) is an ActiveRecord-like gem for
187
+ building REST ORM models. fmrest-ruby builds its ORM features atop Spyke,
188
+ bundled in the `fmrest-spyke` gem (already included if you're using the
189
+ `fmrest` gem).
190
+
191
+ To create a model you can inherit directly from `FmRest::Spyke::Base`, which is
192
+ itself a subclass of `Spyke::Base`.
193
+
194
+ ```ruby
195
+ class Honeybee < FmRest::Spyke::Base
196
+ end
197
+ ```
198
+
199
+ All of Spyke's basic ORM operations work as expected:
200
+
201
+ ```ruby
202
+ bee = Honeybee.new
203
+
204
+ bee.name = "Hutch"
205
+ bee.save # POST request (creates new record)
206
+
207
+ bee.name = "ハッチ"
208
+ bee.save # PATCH request (updates existing record)
209
+
210
+ bee.reload # GET request
211
+
212
+ bee.destroy # DELETE request
213
+
214
+ bee = Honeybee.find(9) # GET request
215
+ ```
216
+
217
+ It's recommended that you read Spyke's documentation for more information on
218
+ these basic features. If you've used ActiveRecord or similar ORM libraries
219
+ however you'll find it quite familiar.
220
+
221
+ In addition, `FmRest::Spyke::Base` extends `Spyke::Base` with the following
222
+ features:
223
+
224
+ ### Model.fmrest_config=
225
+
226
+ This allows you to set your Data API connection settings on your model:
227
+
228
+ ```ruby
229
+ class Honeybee < FmRest::Spyke::Base
230
+ self.fmrest_config = {
231
+ host: "…",
232
+ database: "…",
233
+ username: "…",
234
+ password: "…"
235
+ }
236
+ end
237
+ ```
238
+
239
+ This will automatically create a proper Faraday connection using those
240
+ connection settings, so you don't have to worry about setting that up.
241
+
242
+ Note that these settings are inheritable, so you could create a base class that
243
+ does the initial connection setup and then inherit from it in models using that
244
+ same connection. E.g.:
245
+
246
+ ```ruby
247
+ class BeeBase < FmRest::Spyke::Base
248
+ self.fmrest_config = { host: "…", … }
249
+ }
250
+ end
251
+
252
+ class Honeybee < BeeBase
253
+ # This model will use the same connection as BeeBase
254
+ end
255
+ ```
256
+
257
+ #### Connection settings overlays
258
+
259
+ There may be cases where you want to use a different set of connection settings
260
+ depending on context. For example, if you want to use username and password
261
+ provided by the user in a web application. Since `Model.fmrest_config` is set
262
+ at the class level, changing the username/password for the model in one context
263
+ would also change it in all other contexts, leading to security issues.
264
+
265
+ To solve this scenario, fmrest-ruby provides a way of defining thread-local and
266
+ reversible connection settings overlays through `Model.fmrest_config_overlay=`.
267
+
268
+ See the [main document on connection setting overlays](docs/ConfigOverlays.md)
269
+ for details on how it works.
270
+
271
+ ### Model.layout
272
+
273
+ Use `Model.layout` to define the layout for your model.
274
+
275
+ ```ruby
276
+ class Honeybee < FmRest::Spyke::Base
277
+ layout "Honeybees Web"
278
+ end
279
+ ```
280
+
281
+ Note that you only need to set this if the name of the model and the name of
282
+ the layout differ, otherwise the default will just work.
283
+
284
+ ### Model.request_auth_token
285
+
286
+ Requests a Data API session token using the connection settings in
287
+ `fmrest_config` and returns it if successful, otherwise returns `false`.
288
+
289
+ You normally don't need to use this method as fmrest-ruby will automatically
290
+ request and store session tokens for you (provided that `:autologin` is
291
+ `true`).
292
+
293
+ ### Model.logout
294
+
295
+ Use `Model.logout` to log out from the database session (you may call it on any
296
+ model that uses the database session you want to log out from).
297
+
298
+ ```ruby
299
+ Honeybee.logout
300
+ ```
301
+
302
+ ### Mapped Model.attributes
303
+
304
+ Spyke allows you to define your model's attributes using `attributes`, however
305
+ sometimes FileMaker's field names aren't very Ruby-ORM-friendly, especially
306
+ since they may sometimes contain spaces and other special characters, so
307
+ fmrest-ruby extends `attributes`' functionality to allow you to map
308
+ Ruby-friendly attribute names to FileMaker field names. E.g.:
309
+
310
+ ```ruby
311
+ class Honeybee < FmRest::Spyke::Base
312
+ attributes first_name: "First Name", last_name: "Last Name"
313
+ end
314
+ ```
315
+
316
+ You can then simply use the pretty attribute names whenever working with your
317
+ model and they will get mapped to their FileMaker fields:
318
+
319
+ ```ruby
320
+ bee = Honeybee.find(1)
321
+
322
+ bee.first_name # => "Princess"
323
+ bee.last_name # => "Buzz"
324
+
325
+ bee.first_name = "Queen"
326
+
327
+ bee.attributes # => { "First Name": "Queen", "Last Name": "Buzz" }
328
+ ```
329
+
330
+ ### Model.has_portal
331
+
332
+ You can define portal associations on your model wth `has_portal`, as such:
333
+
334
+ ```ruby
335
+ class Honeybee < FmRest::Spyke::Base
336
+ has_portal :flowers
337
+ end
338
+
339
+ class Flower < FmRest::Spyke::Base
340
+ attributes :color, :species
341
+ end
342
+ ```
343
+
344
+ See the [main document on portal associations](docs/Portals.md) for details.
345
+
346
+ ### Dirty attributes
347
+
348
+ fmrest-ruby includes support for ActiveModel's Dirty mixin out of the box,
349
+ providing methods like:
350
+
351
+ ```ruby
352
+ bee = Honeybee.new
353
+
354
+ bee.changed? # => false
355
+
356
+ bee.name = "Maya"
357
+
358
+ bee.changed? # => true
359
+
360
+ bee.name_changed? # => true
361
+ ```
362
+
363
+ fmrest-ruby uses the Dirty functionality to only send changed attributes back
364
+ to the server on save.
365
+
366
+ You can read more about [ActiveModel's Dirty in Rails
367
+ Guides](https://guides.rubyonrails.org/active_model_basics.html#dirty).
368
+
369
+ ### Query API
370
+
371
+ Since Spyke is API-agnostic it only provides a wide-purpose `.where` method for
372
+ passing arbitrary parameters to the REST backend. fmrest-ruby however is well
373
+ aware of its backend API, so it extends Spkye models with a bunch of useful
374
+ querying methods: `.query`, `.limit`, `.offset`, `.sort`, `.portal`, `.script`,
375
+ etc.
376
+
377
+ See the [main document on querying](docs/Querying.md) for detailed information
378
+ on the query API methods.
379
+
380
+ ### Finding records in batches
381
+
382
+ Sometimes you want to iterate over a very large number of records to do some
383
+ processing, but requesting them all at once would result in one huge request to
384
+ the Data API, and loading too many records in memory all at once.
385
+
386
+ To mitigate this problem you can use `.find_in_batches` and `.find_each`.
387
+
388
+ See the [main document on finding in batches](docs/FindInBatches.md) for
389
+ detailed information on how those work.
390
+
391
+ ### Container fields
392
+
393
+ You can define container fields on your model class with `container`:
394
+
395
+ ```ruby
396
+ class Honeybee < FmRest::Spyke::Base
397
+ container :photo, field_name: "Beehive Photo ID"
398
+ end
399
+ ```
400
+
401
+ See the [main document on container fields](docs/ContainerFields.md) for
402
+ details on how to use it.
403
+
404
+ ### Script execution
405
+
406
+ The FM Data API allows running scripts as part of many types of requests, and
407
+ `fmrest-spyke` provides mechanisms for all of them.
408
+
409
+ See the [main document on script execution](docs/ScriptExecution.md) for
410
+ details.
411
+
412
+ ### Setting global field values
413
+
414
+ You can call `.set_globals` on any `FmRest::Spyke::Base` model to set global
415
+ field values on the database that model is configured for.
416
+
417
+ See the [main document on setting global field values](docs/GlobalFields.md)
418
+ for details.
419
+
420
+ ## Logging
421
+
422
+ If using `fmrest-spyke` with Rails then pretty log output will be set up for
423
+ you automatically by Spyke (see [their
424
+ README](https://github.com/balvig/spyke#log-output)).
425
+
426
+ You can also enable simple Faraday STDOUT logging of raw requests (useful for
427
+ debugging) by passing `log: true` in the options hash for either
428
+ `FmRest.default_connection_settings=` or your models' `fmrest_config=`, e.g.:
429
+
430
+ ```ruby
431
+ FmRest.default_connection_settings = {
432
+ host: "…",
433
+
434
+ log: true
435
+ }
436
+
437
+ # Or in your model
438
+ class LoggyBee < FmRest::Spyke::Base
439
+ self.fmrest_config = {
440
+ host: "…",
441
+
442
+ log: true
443
+ }
444
+ end
445
+ ```
446
+
447
+ If you need to set up more complex logging for your models can use the
448
+ `faraday` block inside your class to inject your own logger middleware into the
449
+ Faraday connection, e.g.:
450
+
451
+ ```ruby
452
+ class LoggyBee < FmRest::Spyke::Base
453
+ faraday do |conn|
454
+ conn.response :logger, MyApp.logger, bodies: true
455
+ end
456
+ end
457
+ ```
458
+
459
+ ## API implementation completeness table
460
+
461
+ FM Data API reference: https://fmhelp.filemaker.com/docs/18/en/dataapi/
462
+
463
+ | FM 18 Data API feature | Supported by basic connection | Supported by FmRest::Spyke::Base |
464
+ |-------------------------------------|-------------------------------|----------------------------------|
465
+ | Log in using HTTP Basic Auth | Yes | Yes |
466
+ | Log in using OAuth | No | No |
467
+ | Log in to an external data source | No | No |
468
+ | Log in using a FileMaker ID account | No | No |
469
+ | Log out | Yes | Yes |
470
+ | Get product information | Manual* | No |
471
+ | Get database names | Manual* | No |
472
+ | Get script names | Manual* | No |
473
+ | Get layout names | Manual* | No |
474
+ | Get layout metadata | Manual* | No |
475
+ | Create a record | Manual* | Yes |
476
+ | Edit a record | Manual* | Yes |
477
+ | Duplicate a record | Manual* | No |
478
+ | Delete a record | Manual* | Yes |
479
+ | Edit portal records | Manual* | Yes |
480
+ | Get a single record | Manual* | Yes |
481
+ | Get a range of records | Manual* | Yes |
482
+ | Get container data | Manual* | Yes |
483
+ | Upload container data | Manual* | Yes |
484
+ | Perform a find request | Manual* | Yes |
485
+ | Set global field values | Manual* | Yes |
486
+ | Run a script | Manual* | Yes |
487
+ | Run a script with another request | Manual* | Yes |
488
+
489
+ \* You can manually supply the URL and JSON to a `FmRest` connection.
490
+
491
+ ## Supported Ruby versions
492
+
493
+ fmrest-ruby aims to support and is [tested against](https://github.com/beezwax/fmrest-ruby/actions?query=workflow%3ACI)
494
+ the following Ruby implementations:
495
+
496
+ * Ruby 2.5
497
+ * Ruby 2.6
498
+ * Ruby 2.7
499
+
500
+ ## Gem development
501
+
502
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run
503
+ `rake spec` to run the tests. You can also run `bin/console` for an interactive
504
+ prompt that will allow you to experiment (it will auto-load all fixtures in
505
+ spec/fixtures).
506
+
507
+ To install all gems onto your local machine, run
508
+ `bundle exec rake all:install`. To release a new version, update the version
509
+ number in `lib/fmrest/version.rb`, and then run `bundle exec rake all:release`,
510
+ which will create a git tag for the version, push git commits and tags, and
511
+ push the `.gem` files to [rubygems.org](https://rubygems.org).
512
+
513
+ ## License
514
+
515
+ The gem is available as open source under the terms of the
516
+ [MIT License](https://opensource.org/licenses/MIT).
517
+ See [LICENSE.txt](LICENSE.txt).
518
+
519
+ ## Disclaimer
520
+
521
+ This project is not sponsored by or otherwise affiliated with FileMaker, Inc,
522
+ an Apple subsidiary. FileMaker is a trademark of FileMaker, Inc., registered in
523
+ the U.S. and other countries.