fmrest-core 0.18.0 → 0.20.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/README.md +65 -91
- data/lib/fmrest/connection_settings.rb +6 -1
- data/lib/fmrest/token_store/memory.rb +4 -4
- data/lib/fmrest/token_store/null.rb +4 -13
- data/lib/fmrest/token_store/short_memory.rb +29 -0
- data/lib/fmrest/token_store.rb +24 -0
- data/lib/fmrest/v1/connection.rb +20 -1
- data/lib/fmrest/v1/token_session.rb +2 -18
- data/lib/fmrest/version.rb +1 -1
- data/lib/fmrest.rb +7 -0
- metadata +5 -5
- data/lib/fmrest-spyke.rb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 45fc41042ceaacc56c0d27b9d705a635ddad09f34d7e9dbdd33b0965a61a59b3
|
4
|
+
data.tar.gz: 37d8f75cb978808a08745efa558aa58c4369a43b023336c1b67f3921c6031cba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7cf50096d31b71e98238a2a4cde059ff771c32929298c277aa9972fb2ec6ddb4a5ebaeef227e6bb63dba2ccc8e8240afb500db4b88669b67b66a5e9887cbd8cf
|
7
|
+
data.tar.gz: 2b706a20520719bb1311a7b72c5be838168cb88701904da2ffcd5fcdb973015f825447d5367104819387e1d391af26f289105ac1ae7ccf03ea74f6801f097d68
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
## Changelog
|
2
2
|
|
3
|
+
### 0.20.0
|
4
|
+
|
5
|
+
* Forward proxy options to AWS Client when using `fmrest-cloud` gem
|
6
|
+
|
7
|
+
### 0.19.0
|
8
|
+
|
9
|
+
* Added native support for FileMaker Cloud through the `fmrest-cloud` gem
|
10
|
+
|
3
11
|
### 0.18.0
|
4
12
|
|
5
13
|
* Better support for portals with mismatching field qualifiers
|
data/README.md
CHANGED
@@ -5,14 +5,30 @@
|
|
5
5
|
[![Yard Docs](http://img.shields.io/badge/yard-docs-blue.svg)](https://rubydoc.info/github/beezwax/fmrest-ruby)
|
6
6
|
|
7
7
|
A Ruby client for
|
8
|
-
[FileMaker
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
[FileMaker's Data API](https://help.claris.com/en/data-api-guide)
|
9
|
+
with ActiveRecord-ish ORM features.
|
10
|
+
|
11
|
+
While pretty feature-rich, fmrest-ruby doesn't yet support 100% of FileMaker
|
12
|
+
19's Data API features. See the [implementation completeness
|
13
|
+
table](#api-implementation-completeness-table) to check if a feature you need
|
14
|
+
is natively supported by the gem.
|
15
|
+
|
16
|
+
Need Ruby or FileMaker consulting? Contact us at
|
17
|
+
[Beezwax.net](https://beezwax.net/)
|
18
|
+
|
19
|
+
## Contents
|
20
|
+
|
21
|
+
* [Gems](#gems)
|
22
|
+
* [Installation](#installation)
|
23
|
+
* [Simple example](#simple-example)
|
24
|
+
* [Connection settings](#connection-settings)
|
25
|
+
* [Session token store](#session-token-store)
|
26
|
+
* [Date fields and timezones](#date-fields-and-timezones)
|
27
|
+
* [ActiveRecord-like ORM (fmrest-spyke)](#activerecord-like-orm-fmrest-spyke)
|
28
|
+
* [Logging](#logging)
|
29
|
+
* [Gotchas](#gotchas)
|
30
|
+
* [API implementation completeness table](#api-implementation-completeness-table)
|
31
|
+
* [Supported Ruby versions](#supported-ruby-versions)
|
16
32
|
|
17
33
|
## Gems
|
18
34
|
|
@@ -20,28 +36,26 @@ The `fmrest` gem is a wrapper for two other gems:
|
|
20
36
|
|
21
37
|
* `fmrest-spyke`, providing an ActiveRecord-like ORM library built on top
|
22
38
|
of `fmrest-core` and [Spyke](https://github.com/balvig/spyke).
|
23
|
-
* `fmrest-core`, providing the core
|
39
|
+
* `fmrest-core`, providing the core
|
40
|
+
[Faraday](https://github.com/lostisland/faraday) connection builder, session
|
24
41
|
management, and other core utilities.
|
25
42
|
|
43
|
+
In addition, the optional `fmrest-cloud` gem adds support for FileMaker Cloud.
|
44
|
+
See the [main document on connecting to FileMaker
|
45
|
+
Cloud](docs/FileMakerCloud.md).
|
46
|
+
|
26
47
|
## Installation
|
27
48
|
|
28
|
-
|
49
|
+
In your Gemfile:
|
29
50
|
|
30
51
|
```ruby
|
31
52
|
gem 'fmrest'
|
32
|
-
```
|
33
|
-
|
34
|
-
Or if you just want to use the Faraday connection without the ORM features:
|
35
53
|
|
36
|
-
|
37
|
-
gem 'fmrest-
|
54
|
+
# Optional: if your files are hosted on FileMaker Cloud
|
55
|
+
gem 'fmrest-cloud'
|
38
56
|
```
|
39
57
|
|
40
|
-
## Simple
|
41
|
-
|
42
|
-
### ORM example
|
43
|
-
|
44
|
-
Most people would want to use the ORM features:
|
58
|
+
## Simple example
|
45
59
|
|
46
60
|
```ruby
|
47
61
|
# A Layout model connecting to the "Honeybees Web" FileMaker layout
|
@@ -90,32 +104,9 @@ bee.tasks.build(urgency: "Today")
|
|
90
104
|
bee.save
|
91
105
|
```
|
92
106
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
Data API interaction and just want a lightweight solution) you can simply use
|
97
|
-
the Faraday connection provided by `fmrest-core`:
|
98
|
-
|
99
|
-
```ruby
|
100
|
-
connection = FmRest::V1.build_connection(
|
101
|
-
host: "…",
|
102
|
-
database: "…",
|
103
|
-
username: "…",
|
104
|
-
password: "…"
|
105
|
-
)
|
106
|
-
|
107
|
-
# Get all records (as parsed JSON)
|
108
|
-
connection.get("layouts/FancyLayout/records")
|
109
|
-
|
110
|
-
# Create new record
|
111
|
-
connection.post do |req|
|
112
|
-
req.url "layouts/FancyLayout/records"
|
113
|
-
|
114
|
-
# You can just pass a hash for the JSON body
|
115
|
-
req.body = { … }
|
116
|
-
end
|
117
|
-
```
|
118
|
-
|
107
|
+
In case you don't want the ORM features (i.e. you only need authentication and
|
108
|
+
JSON parsing, and are comfortable writing the API requests manually without the
|
109
|
+
ORM overhead) you can use the Faraday connection provided by `fmrest-core`.
|
119
110
|
See the [main document on using the base
|
120
111
|
connection](docs/BaseConnectionUsage.md) for more.
|
121
112
|
|
@@ -125,10 +116,6 @@ The minimum required connection settings are `:host`, `:database`, `:username`
|
|
125
116
|
and `:password`, but fmrest-ruby has many other options you can pass when
|
126
117
|
setting up a connection (see [full list](#full-list-of-available-options) below).
|
127
118
|
|
128
|
-
If you're using FileMaker Cloud you may need to pass `:fmid_token` instead
|
129
|
-
of the regular `:username` and `:password`. See the [main document on
|
130
|
-
connecting to FileMaker Cloud](docs/FileMakerCloud.md) for more info.
|
131
|
-
|
132
119
|
`:ssl` and `:proxy` are forwarded to the underlying
|
133
120
|
[Faraday](https://github.com/lostisland/faraday) connection. You can use this
|
134
121
|
to, for instance, disable SSL verification:
|
@@ -153,9 +140,8 @@ Option | Description | Format
|
|
153
140
|
`:username` | A Data API-ready account | String | None
|
154
141
|
`:password` | Your password | String | None
|
155
142
|
`:account_name` | Alias of `:username` | String | None
|
156
|
-
`:fmid_token` | Claris ID token (only needed for FileMaker Cloud) | String | None
|
157
143
|
`:ssl` | SSL options to be forwarded to Faraday | Faraday SSL options | None
|
158
|
-
`:proxy` | Proxy
|
144
|
+
`:proxy` | Proxy URI e.g. `http://username:password@proxy.host:5000` | String / URI | None
|
159
145
|
`:log` | Log JSON responses to STDOUT | Boolean | `false`
|
160
146
|
`:log_level` | Which log level to log into | Values accepted by `Logger#level=` | `:debug`
|
161
147
|
`:coerce_dates` | See section on [date fields](#date-fields-and-timezones) | Boolean \| `:hybrid` \| `:full` | `false`
|
@@ -165,6 +151,11 @@ Option | Description | Format
|
|
165
151
|
`:timezone` | The timezone for the FM server | `:local` \| `:utc` \| `nil` | `nil`
|
166
152
|
`:autologin` | Whether to automatically start Data API sessions | Boolean | `true`
|
167
153
|
`:token` | Used to manually provide a session token (e.g. if `:autologin` is `false`) | String | None
|
154
|
+
`:fmid_token` | Claris ID token (only needed if manually obtaining the token) | String | None
|
155
|
+
`:cloud` | Specifies whether the host is using FileMaker Cloud | `:auto` \| Boolean | `:auto`
|
156
|
+
`:cognito_client_id`| Overwrites the hardcoded FileMaker Cloud Cognito Client ID | String | None
|
157
|
+
`:cognito_pool_id` | Overwrites the hardcoded FileMaker Cloud Cognito Pool ID | String | None
|
158
|
+
`:aws_region` | Overwrites the hardcoded FileMaker Cloud AWS Region | String | None
|
168
159
|
|
169
160
|
### Default connection settings
|
170
161
|
|
@@ -207,7 +198,7 @@ See the [main document on date fields](docs/DateFields.md) for more info.
|
|
207
198
|
## ActiveRecord-like ORM (fmrest-spyke)
|
208
199
|
|
209
200
|
[Spyke](https://github.com/balvig/spyke) is an ActiveRecord-like gem for
|
210
|
-
building REST ORM models. fmrest-ruby
|
201
|
+
building REST ORM models. fmrest-ruby uses it to build its ORM features,
|
211
202
|
bundled in the `fmrest-spyke` gem (already included if you're using the
|
212
203
|
`fmrest` gem).
|
213
204
|
|
@@ -265,39 +256,33 @@ class Honeybee < FmRest::Layout
|
|
265
256
|
end
|
266
257
|
```
|
267
258
|
|
268
|
-
|
269
|
-
connection settings, so you don't have to worry about setting that up.
|
270
|
-
|
271
|
-
Note that these settings are inheritable, so you could create a base class that
|
259
|
+
These settings are class-inheritable, so you could create a base class that
|
272
260
|
does the initial connection setup and then inherit from it in models using that
|
273
261
|
same connection. E.g.:
|
274
262
|
|
275
263
|
```ruby
|
276
|
-
class
|
264
|
+
class ApplicationFmLayout < FmRest::Layout
|
277
265
|
self.fmrest_config = { host: "…", database: "…", … }
|
278
266
|
end
|
279
267
|
|
280
|
-
class Honeybee <
|
281
|
-
# This model will use the same connection as
|
268
|
+
class Honeybee < ApplicationFmLayout
|
269
|
+
# This model will use the same connection as ApplicationFmLayout
|
282
270
|
end
|
283
271
|
```
|
284
272
|
|
285
|
-
|
273
|
+
If `fmrest_config` is not set, your model will try to use
|
286
274
|
`FmRest.default_connection_settings` instead.
|
287
275
|
|
288
276
|
#### Connection settings overlays
|
289
277
|
|
290
278
|
There may be cases where you want to use a different set of connection settings
|
291
|
-
depending on context,
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
the model in one context would also change it in all other contexts, leading to
|
296
|
-
security issues.
|
279
|
+
depending on context. For example, if you want to use username and password
|
280
|
+
provided by the user in a web application. Since `.fmrest_config` is set at the
|
281
|
+
class level, changing the username/password for the model in one context would
|
282
|
+
also change it in all other contexts, leading to security issues.
|
297
283
|
|
298
|
-
To solve this scenario, fmrest-ruby provides a way of defining thread-local
|
299
|
-
reversible connection settings overlays through
|
300
|
-
`.fmrest_config_overlay=`.
|
284
|
+
To solve this scenario, fmrest-ruby provides a way of defining thread-local,
|
285
|
+
reversible connection settings overlays through `.fmrest_config_overlay=`.
|
301
286
|
|
302
287
|
See the [main document on connection setting overlays](docs/ConfigOverlays.md)
|
303
288
|
for details on how it works.
|
@@ -461,12 +446,10 @@ for details.
|
|
461
446
|
|
462
447
|
### Rescuable mixin
|
463
448
|
|
464
|
-
Sometimes you may want to handle Data API errors at the model level. For
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
`Rescuable` that provides convenience macros for that. If you've used Ruby on
|
469
|
-
Rails you may be familiar with its syntax from controllers. E.g.
|
449
|
+
Sometimes you may want to handle Data API errors at the model level. For such
|
450
|
+
cases fmrest-ruby provides an off-by-default mixin called `Rescuable` that
|
451
|
+
provides convenience macros for that. If you've used Ruby on Rails you may be
|
452
|
+
familiar with its syntax from controllers. E.g.
|
470
453
|
|
471
454
|
```ruby
|
472
455
|
class BeeBase < FmRest::Layout
|
@@ -474,9 +457,6 @@ class BeeBase < FmRest::Layout
|
|
474
457
|
|
475
458
|
rescue_from FmRest::APIError::SystemError, with: :notify_admin_of_system_error
|
476
459
|
|
477
|
-
# Shorthand for rescue_with FmRest::APIError::AccountError, ...
|
478
|
-
rescue_account_error { ClarisIDTokenManager.expire_token }
|
479
|
-
|
480
460
|
def self.notify_admin_of_system_error(e)
|
481
461
|
# Shoot an email to the FM admin...
|
482
462
|
end
|
@@ -549,14 +529,14 @@ Read about unexpected scenarios in the [gotchas doc](docs/Gotchas.md).
|
|
549
529
|
|
550
530
|
## API implementation completeness table
|
551
531
|
|
552
|
-
FM Data API reference: https://
|
532
|
+
FM Data API reference: https://help.claris.com/en/data-api-guide/
|
553
533
|
|
554
|
-
| FM
|
534
|
+
| FM 19 Data API feature | Supported by basic connection | Supported by FmRest::Layout |
|
555
535
|
|-------------------------------------|-------------------------------|-----------------------------|
|
556
536
|
| Log in using HTTP Basic Auth | Yes | Yes |
|
557
537
|
| Log in using OAuth | No | No |
|
558
538
|
| Log in to an external data source | No | No |
|
559
|
-
| Log in using Claris ID account
|
539
|
+
| Log in using Claris ID account (FileMaker Cloud) | Yes | Yes |
|
560
540
|
| Log out | Yes | Yes |
|
561
541
|
| Get product information | Manual* | No |
|
562
542
|
| Get database names | Manual* | No |
|
@@ -592,9 +572,9 @@ the following Ruby implementations:
|
|
592
572
|
## Gem development
|
593
573
|
|
594
574
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
595
|
-
`
|
596
|
-
prompt that will allow you to experiment (it will auto-load all
|
597
|
-
spec/fixtures).
|
575
|
+
`bundle exec rspec` to run the specs. You can also run `bin/console` for an
|
576
|
+
interactive prompt that will allow you to experiment (it will auto-load all
|
577
|
+
fixtures in spec/fixtures).
|
598
578
|
|
599
579
|
To install all gems onto your local machine, run
|
600
580
|
`bundle exec rake all:install`. To release a new version, update the version
|
@@ -602,12 +582,6 @@ number in `lib/fmrest/version.rb`, and then run `bundle exec rake all:release`,
|
|
602
582
|
which will create a git tag for the version, push git commits and tags, and
|
603
583
|
push the `.gem` files to [rubygems.org](https://rubygems.org).
|
604
584
|
|
605
|
-
## License
|
606
|
-
|
607
|
-
The gem is available as open source under the terms of the
|
608
|
-
[MIT License](https://opensource.org/licenses/MIT).
|
609
|
-
See [LICENSE.txt](LICENSE.txt).
|
610
|
-
|
611
585
|
## Disclaimer
|
612
586
|
|
613
587
|
This project is not sponsored by or otherwise affiliated with Claris
|
@@ -31,6 +31,10 @@ module FmRest
|
|
31
31
|
timestamp_format
|
32
32
|
time_format
|
33
33
|
timezone
|
34
|
+
cognito_client_id
|
35
|
+
cognito_pool_id
|
36
|
+
aws_region
|
37
|
+
cloud
|
34
38
|
).freeze
|
35
39
|
|
36
40
|
# NOTE: password intentionally left non-required since it's only really
|
@@ -51,7 +55,8 @@ module FmRest
|
|
51
55
|
date_format: DEFAULT_DATE_FORMAT,
|
52
56
|
time_format: DEFAULT_TIME_FORMAT,
|
53
57
|
timestamp_format: DEFAULT_TIMESTAMP_FORMAT,
|
54
|
-
coerce_dates: false
|
58
|
+
coerce_dates: false,
|
59
|
+
cloud: :auto,
|
55
60
|
}.freeze
|
56
61
|
|
57
62
|
def self.wrap(settings, skip_validation: false)
|
@@ -7,19 +7,19 @@ module FmRest
|
|
7
7
|
class Memory < Base
|
8
8
|
def initialize(*args)
|
9
9
|
super
|
10
|
-
|
10
|
+
@@tokens ||= {}
|
11
11
|
end
|
12
12
|
|
13
13
|
def delete(key)
|
14
|
-
|
14
|
+
@@tokens.delete(key)
|
15
15
|
end
|
16
16
|
|
17
17
|
def load(key)
|
18
|
-
|
18
|
+
@@tokens[key]
|
19
19
|
end
|
20
20
|
|
21
21
|
def store(key, value)
|
22
|
-
|
22
|
+
@@tokens[key] = value
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
@@ -1,20 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "singleton"
|
4
|
-
|
5
3
|
module FmRest
|
6
4
|
module TokenStore
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
def
|
11
|
-
end
|
12
|
-
|
13
|
-
def load(key)
|
14
|
-
end
|
15
|
-
|
16
|
-
def store(key, value)
|
17
|
-
end
|
5
|
+
class Null < Base
|
6
|
+
def delete(key); end
|
7
|
+
def load(key); end
|
8
|
+
def store(key, value); end
|
18
9
|
end
|
19
10
|
end
|
20
11
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "fmrest/token_store/base"
|
4
|
+
|
5
|
+
module FmRest
|
6
|
+
module TokenStore
|
7
|
+
# Similar to Memory token store, but using instance vars instead of class
|
8
|
+
# vars. Mainly useful for specs, where we want to scope token persistance
|
9
|
+
# to a spec's context only
|
10
|
+
class ShortMemory < Base
|
11
|
+
def initialize(*args)
|
12
|
+
super
|
13
|
+
@tokens ||= {}
|
14
|
+
end
|
15
|
+
|
16
|
+
def delete(key)
|
17
|
+
@tokens.delete(key)
|
18
|
+
end
|
19
|
+
|
20
|
+
def load(key)
|
21
|
+
@tokens[key]
|
22
|
+
end
|
23
|
+
|
24
|
+
def store(key, value)
|
25
|
+
@tokens[key] = value
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/fmrest/token_store.rb
CHANGED
@@ -8,5 +8,29 @@ module FmRest
|
|
8
8
|
autoload :ActiveRecord, "fmrest/token_store/active_record"
|
9
9
|
autoload :Moneta, "fmrest/token_store/moneta"
|
10
10
|
autoload :Redis, "fmrest/token_store/redis"
|
11
|
+
autoload :ShortMemory, "fmrest/token_store/short_memory"
|
12
|
+
|
13
|
+
TOKEN_STORE_INTERFACE = [:load, :store, :delete].freeze
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def token_store
|
18
|
+
@token_store ||=
|
19
|
+
if TOKEN_STORE_INTERFACE.all? { |method| token_store_option.respond_to?(method) }
|
20
|
+
token_store_option
|
21
|
+
elsif token_store_option.kind_of?(Class)
|
22
|
+
if token_store_option.respond_to?(:instance)
|
23
|
+
token_store_option.instance
|
24
|
+
else
|
25
|
+
token_store_option.new
|
26
|
+
end
|
27
|
+
else
|
28
|
+
FmRest::TokenStore::Memory.new
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def token_store_option
|
33
|
+
raise NotImplementedError
|
34
|
+
end
|
11
35
|
end
|
12
36
|
end
|
data/lib/fmrest/v1/connection.rb
CHANGED
@@ -12,6 +12,8 @@ module FmRest
|
|
12
12
|
AUTH_CONNECTION_HEADERS = DEFAULT_HEADERS.merge("Content-Type" => "application/json").freeze
|
13
13
|
CLARIS_ID_HTTP_AUTH_TYPE = "FMID"
|
14
14
|
|
15
|
+
FILEMAKER_CLOUD_HOST_MATCHER = /\.filemaker-cloud\.com\Z/.freeze
|
16
|
+
|
15
17
|
# Builds a complete DAPI Faraday connection with middleware already
|
16
18
|
# configured to handle authentication, JSON parsing, logging and DAPI
|
17
19
|
# error handling. A block can be optionally given for additional
|
@@ -57,11 +59,18 @@ module FmRest
|
|
57
59
|
def auth_connection(settings = FmRest.default_connection_settings)
|
58
60
|
settings = ConnectionSettings.wrap(settings)
|
59
61
|
|
62
|
+
if is_cloud_host = cloud_host?(settings)
|
63
|
+
FmRest.require_cloud_support
|
64
|
+
end
|
65
|
+
|
60
66
|
base_connection(settings, headers: AUTH_CONNECTION_HEADERS) do |conn|
|
67
|
+
conn.use Cloud::AuthErrorHandler, settings if is_cloud_host
|
61
68
|
conn.use RaiseErrors
|
62
69
|
|
63
70
|
if settings.fmid_token?
|
64
|
-
conn.request :authorization, CLARIS_ID_HTTP_AUTH_TYPE, settings.fmid_token
|
71
|
+
conn.request :authorization, CLARIS_ID_HTTP_AUTH_TYPE, -> { settings.fmid_token }
|
72
|
+
elsif is_cloud_host
|
73
|
+
conn.request :authorization, CLARIS_ID_HTTP_AUTH_TYPE, -> { Cloud::ClarisIdTokenManager.new(settings).fetch_token }
|
65
74
|
else
|
66
75
|
conn.request :basic_auth, settings.username!, settings.password!
|
67
76
|
end
|
@@ -117,6 +126,16 @@ module FmRest
|
|
117
126
|
&block
|
118
127
|
)
|
119
128
|
end
|
129
|
+
|
130
|
+
private
|
131
|
+
|
132
|
+
def cloud_host?(settings)
|
133
|
+
if settings.cloud == :auto
|
134
|
+
return FILEMAKER_CLOUD_HOST_MATCHER =~ settings.host
|
135
|
+
end
|
136
|
+
|
137
|
+
settings.cloud
|
138
|
+
end
|
120
139
|
end
|
121
140
|
end
|
122
141
|
end
|
@@ -7,10 +7,11 @@ module FmRest
|
|
7
7
|
# FM Data API authentication middleware using the credentials strategy
|
8
8
|
#
|
9
9
|
class TokenSession < Faraday::Middleware
|
10
|
+
include TokenStore
|
11
|
+
|
10
12
|
class NoSessionTokenSet < FmRest::Error; end
|
11
13
|
|
12
14
|
HEADER_KEY = "Authorization"
|
13
|
-
TOKEN_STORE_INTERFACE = [:load, :store, :delete].freeze
|
14
15
|
LOGOUT_PATH_MATCHER = %r{\A(#{FmRest::V1::Connection::DATABASES_PATH}/[^/]+/sessions/)[^/]+\Z}.freeze
|
15
16
|
|
16
17
|
# @param app [#call]
|
@@ -110,23 +111,6 @@ module FmRest
|
|
110
111
|
end
|
111
112
|
end
|
112
113
|
|
113
|
-
def token_store
|
114
|
-
@token_store ||=
|
115
|
-
begin
|
116
|
-
if TOKEN_STORE_INTERFACE.all? { |method| token_store_option.respond_to?(method) }
|
117
|
-
token_store_option
|
118
|
-
elsif token_store_option.kind_of?(Class)
|
119
|
-
if token_store_option.respond_to?(:instance)
|
120
|
-
token_store_option.instance
|
121
|
-
else
|
122
|
-
token_store_option.new
|
123
|
-
end
|
124
|
-
else
|
125
|
-
FmRest::TokenStore::Memory.new
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
114
|
def token_store_option
|
131
115
|
@settings.token_store || FmRest.token_store
|
132
116
|
end
|
data/lib/fmrest/version.rb
CHANGED
data/lib/fmrest.rb
CHANGED
@@ -59,5 +59,12 @@ module FmRest
|
|
59
59
|
require "fmrest/spyke"
|
60
60
|
self.Layout(*_)
|
61
61
|
end
|
62
|
+
|
63
|
+
def require_cloud_support
|
64
|
+
require "fmrest/cloud"
|
65
|
+
rescue LoadError => e
|
66
|
+
e.message << " (Did you include fmrest-cloud in your Gemfile?)" unless e.message.frozen?
|
67
|
+
raise e
|
68
|
+
end
|
62
69
|
end
|
63
70
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fmrest-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.20.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pedro Carbajal
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-10-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -16,7 +16,7 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.8.0
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: '2.0'
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: 1.8.0
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '2.0'
|
@@ -64,7 +64,6 @@ files:
|
|
64
64
|
- LICENSE.txt
|
65
65
|
- README.md
|
66
66
|
- lib/fmrest-core.rb
|
67
|
-
- lib/fmrest-spyke.rb
|
68
67
|
- lib/fmrest.rb
|
69
68
|
- lib/fmrest/connection_settings.rb
|
70
69
|
- lib/fmrest/errors.rb
|
@@ -76,6 +75,7 @@ files:
|
|
76
75
|
- lib/fmrest/token_store/moneta.rb
|
77
76
|
- lib/fmrest/token_store/null.rb
|
78
77
|
- lib/fmrest/token_store/redis.rb
|
78
|
+
- lib/fmrest/token_store/short_memory.rb
|
79
79
|
- lib/fmrest/v1.rb
|
80
80
|
- lib/fmrest/v1/auth.rb
|
81
81
|
- lib/fmrest/v1/connection.rb
|
data/lib/fmrest-spyke.rb
DELETED