fmrest 0.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.
@@ -0,0 +1,6 @@
1
+ module FmRest
2
+ module V1
3
+ module TokenStore
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,73 @@
1
+ require "fmrest/v1/token_store/base"
2
+
3
+ module FmRest
4
+ module V1
5
+ module TokenStore
6
+ # Heavily inspired by Moneta's ActiveRecord store:
7
+ #
8
+ # https://github.com/minad/moneta/blob/master/lib/moneta/adapters/activerecord.rb
9
+ #
10
+ class ActiveRecord < Base
11
+ DEFAULT_TABLE_NAME = "fmrest_session_tokens".freeze
12
+
13
+ @connection_lock = ::Mutex.new
14
+ class << self
15
+ attr_reader :connection_lock
16
+ end
17
+
18
+ attr_reader :connection_pool, :model
19
+
20
+ delegate :with_connection, to: :connection_pool
21
+
22
+ def initialize(host, database, options = {})
23
+ super
24
+
25
+ @connection_pool = ::ActiveRecord::Base.connection_pool
26
+
27
+ create_table
28
+
29
+ @model = Class.new(::ActiveRecord::Base)
30
+ @model.table_name = table_name
31
+ end
32
+
33
+ def clear
34
+ model.where(scope: scope).delete_all
35
+ end
36
+
37
+ def fetch
38
+ model.where(scope: scope).pluck(:token).first
39
+ end
40
+
41
+ def store(token)
42
+ record = model.find_or_initialize_by(scope: scope)
43
+ record.token = token
44
+ record.save!
45
+ token
46
+ end
47
+
48
+ private
49
+
50
+ def create_table
51
+ with_connection do |conn|
52
+ return if conn.table_exists?(table_name)
53
+
54
+ # Prevent multiple connections from attempting to create the table simultaneously.
55
+ self.class.connection_lock.synchronize do
56
+ conn.create_table(table_name, id: false) do |t|
57
+ t.string :scope, null: false
58
+ t.string :token, null: false
59
+ t.datetime :updated_at
60
+ end
61
+ conn.add_index(table_name, :scope, unique: true)
62
+ conn.add_index(table_name, [:scope, :token])
63
+ end
64
+ end
65
+ end
66
+
67
+ def table_name
68
+ options[:table_name] || DEFAULT_TABLE_NAME
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,14 @@
1
+ module FmRest
2
+ module V1
3
+ module TokenStore
4
+ class Base
5
+ attr_reader :scope, :options
6
+
7
+ def initialize(host, database, options = {})
8
+ @scope = "#{host.to_s}:#{database.to_s}"
9
+ @options = options
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,26 @@
1
+ require "fmrest/v1/token_store/base"
2
+
3
+ module FmRest
4
+ module V1
5
+ module TokenStore
6
+ class Memory < Base
7
+ def initialize(host, database, options = {})
8
+ super
9
+ @tokens = {}
10
+ end
11
+
12
+ def clear
13
+ @tokens.delete(scope)
14
+ end
15
+
16
+ def fetch
17
+ @tokens[scope]
18
+ end
19
+
20
+ def store(token)
21
+ @tokens[scope] = token
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,3 @@
1
+ module FmRest
2
+ VERSION = "0.1.0"
3
+ end
metadata ADDED
@@ -0,0 +1,211 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fmrest
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Pedro Carbajal
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-01-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faraday
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.9.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '2.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 0.9.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: faraday_middleware
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 0.9.1
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '2.0'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: 0.9.1
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '2.0'
53
+ - !ruby/object:Gem::Dependency
54
+ name: bundler
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '1.16'
60
+ type: :development
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '1.16'
67
+ - !ruby/object:Gem::Dependency
68
+ name: rake
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: '10.0'
74
+ type: :development
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: '10.0'
81
+ - !ruby/object:Gem::Dependency
82
+ name: rspec
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '3.0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: '3.0'
95
+ - !ruby/object:Gem::Dependency
96
+ name: spyke
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ - !ruby/object:Gem::Dependency
110
+ name: webmock
111
+ requirement: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: '0'
116
+ type: :development
117
+ prerelease: false
118
+ version_requirements: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ - !ruby/object:Gem::Dependency
124
+ name: multi_json
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ type: :development
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ - !ruby/object:Gem::Dependency
138
+ name: pry-byebug
139
+ requirement: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ type: :development
145
+ prerelease: false
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ description: FileMaker Data API client using Faraday, with optional ActiveRecord-like
152
+ ORM based on Spyke
153
+ email:
154
+ - pedro_c@beezwax.net
155
+ executables: []
156
+ extensions: []
157
+ extra_rdoc_files: []
158
+ files:
159
+ - ".gitignore"
160
+ - ".rspec"
161
+ - ".travis.yml"
162
+ - CODE_OF_CONDUCT.md
163
+ - Gemfile
164
+ - LICENSE.txt
165
+ - README.md
166
+ - Rakefile
167
+ - fmrest.gemspec
168
+ - lib/fmrest.rb
169
+ - lib/fmrest/spyke.rb
170
+ - lib/fmrest/spyke/base.rb
171
+ - lib/fmrest/spyke/json_parser.rb
172
+ - lib/fmrest/spyke/model.rb
173
+ - lib/fmrest/spyke/model/associations.rb
174
+ - lib/fmrest/spyke/model/attributes.rb
175
+ - lib/fmrest/spyke/model/connection.rb
176
+ - lib/fmrest/spyke/model/orm.rb
177
+ - lib/fmrest/spyke/model/uri.rb
178
+ - lib/fmrest/spyke/portal.rb
179
+ - lib/fmrest/spyke/relation.rb
180
+ - lib/fmrest/v1.rb
181
+ - lib/fmrest/v1/token_session.rb
182
+ - lib/fmrest/v1/token_store.rb
183
+ - lib/fmrest/v1/token_store/active_record.rb
184
+ - lib/fmrest/v1/token_store/base.rb
185
+ - lib/fmrest/v1/token_store/memory.rb
186
+ - lib/fmrest/version.rb
187
+ homepage: https://github.com/beezwax/fmrest-ruby
188
+ licenses:
189
+ - MIT
190
+ metadata: {}
191
+ post_install_message:
192
+ rdoc_options: []
193
+ require_paths:
194
+ - lib
195
+ required_ruby_version: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - ">="
198
+ - !ruby/object:Gem::Version
199
+ version: '0'
200
+ required_rubygems_version: !ruby/object:Gem::Requirement
201
+ requirements:
202
+ - - ">="
203
+ - !ruby/object:Gem::Version
204
+ version: '0'
205
+ requirements: []
206
+ rubyforge_project:
207
+ rubygems_version: 2.7.7
208
+ signing_key:
209
+ specification_version: 4
210
+ summary: FileMaker Data API client using Faraday
211
+ test_files: []