fulcrum 0.6.1 → 0.7.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cbf32689caffd5cd03c88cd47bbec2151f2f1df9
4
- data.tar.gz: da2b6713ecb79809c430ca0b146e88e11210c5f4
3
+ metadata.gz: 6e9e353e52485fa1f980302440b23986368b8b88
4
+ data.tar.gz: c0f212bc29ecb2ca29cc603a21c96ddfb09574be
5
5
  SHA512:
6
- metadata.gz: 4eeff4ba0354af7d4ca5a257fc88c13cbdcc7f0b1414583b2830cc6f39dea1671c2bebda5302f63f4cc2c377cf9c82d2bba2e689582ddae59da6ee3452898b26
7
- data.tar.gz: c17d79eea8e7e1ba27e7c7a1731ca8e5132598776dbfdc8ee39a15222e56b85fcaeeddbd5228e426227a5f232cefe4530f795a3640d2126e426bcc1ba654a2e3
6
+ metadata.gz: b1ebf6988865e7947127983f4c856c900c983962f9015a93036d4b97bc7286f80eb5c65e2b7ef2739b253c63896ca35e93c977e947297e7ffe0fc00f029a70da
7
+ data.tar.gz: 4c36ddb729622e26344547219173b298d5997f44fd479c5825a1de0423598b66f7280f7f8168c9be21db09945099469096e6601188105838e836416c0965c9c6
@@ -1,3 +1,12 @@
1
+ ## vTBD
2
+ * Add roles support (#20)
3
+ * Add audit logs support (#13)
4
+ * Add ability to create, update, and delete projects (#16)
5
+ * Add record history support (#15)
6
+ * Add Query API support (#21)
7
+ * Add authorizations support (#18)
8
+ * Add users support (#17)
9
+
1
10
  ## v0.6.0
2
11
  * Add format option for fetching media tracks (default: json) (#10)
3
12
  * Lower ActiveSupport dependency to 4.1.x (#12)
data/README.md CHANGED
@@ -28,12 +28,22 @@ Or install it yourself as:
28
28
 
29
29
  ## Client
30
30
 
31
- All interaction with the API is done through a client object. Below is a simple example of how to instantiate a client object.
31
+ Most interaction with the API is done through a client object. Below is a simple example of how to instantiate a client object.
32
32
 
33
33
  ```ruby
34
34
  client = Fulcrum::Client.new(your_api_key)
35
35
  ```
36
36
 
37
+ A client object assumes you have an API key. To get an API key use the `get_user` and `create_authorization` class methods.
38
+
39
+ ```ruby
40
+ Fulcrum::Client.get_user(email, password)
41
+ # returns a user's name, email, avatar url, and a list of organizations with ids for creating authorizations
42
+
43
+ Fulcrum::Client.create_authorization(email, password, org_id, note, timeout = nil, user_id = nil)
44
+ # creates an authorization for yourself or another user in the provided organization id
45
+ ```
46
+
37
47
 
38
48
  ## Basics
39
49
 
@@ -83,6 +93,10 @@ Update an existing record by its `id` using a `Hash` of attributes. The format o
83
93
 
84
94
  Delete a record by its `id`. This method optionally accepts a `changeset_id` to group deletes into a Changeset for compatibility with the activity feed.
85
95
 
96
+ ### client.records.find(id)
97
+
98
+ Find a record's history by its `id`.
99
+
86
100
 
87
101
 
88
102
  ## Forms
@@ -305,6 +319,44 @@ Format can be 'json', 'geojson', 'gpx', or 'kml'.
305
319
 
306
320
 
307
321
 
322
+ ## Roles
323
+
324
+ ### client.roles.all(params = {})
325
+
326
+
327
+
328
+ ## Audit Logs
329
+
330
+ ### client.audit_logs.all(params = {})
331
+
332
+ ### client.audit_logs.find(id)
333
+
334
+
335
+
336
+ ## Authorizations
337
+
338
+ ### client.authorizations.all(params = {})
339
+
340
+ ### client.authorizations.find(id)
341
+
342
+ ### client.authorizations.update(id, authorization)
343
+
344
+ ### client.authorizations.delete(id)
345
+
346
+ ### client.authorizations.regenerate(id)
347
+
348
+
349
+
350
+ ## Query
351
+
352
+ ### client.query(sql, format = 'json')
353
+
354
+ Fetches a Query API response for various formats for a provided SQL string.
355
+
356
+ Format can be 'json', 'csv', or 'geojson'.
357
+
358
+
359
+
308
360
  ## Extra Reading
309
361
 
310
362
  * [Fulcrum API documentation](http://fulcrumapp.com/developers/api/)
@@ -23,5 +23,8 @@ require 'fulcrum/record'
23
23
  require 'fulcrum/layer'
24
24
  require 'fulcrum/changeset'
25
25
  require 'fulcrum/webhook'
26
+ require 'fulcrum/role'
27
+ require 'fulcrum/audit_log'
28
+ require 'fulcrum/authorization'
26
29
  require 'fulcrum/client'
27
30
 
@@ -0,0 +1,6 @@
1
+ module Fulcrum
2
+ class AuditLog < Resource
3
+ include Actions::List
4
+ include Actions::Find
5
+ end
6
+ end
@@ -0,0 +1,12 @@
1
+ module Fulcrum
2
+ class Authorization < Resource
3
+ include Actions::List
4
+ include Actions::Find
5
+ include Actions::Update
6
+ include Actions::Delete
7
+
8
+ def regenerate(id)
9
+ call(:post, member_action(id, 'regenerate'))[resource_name]
10
+ end
11
+ end
12
+ end
@@ -52,11 +52,34 @@ module Fulcrum
52
52
 
53
53
  resp.body['user']['contexts'].map do |context|
54
54
  { id: context['id'],
55
- name: context['name'],
56
- token: context['api_token'] }
55
+ name: context['name'] }
57
56
  end
58
57
  end
59
58
 
59
+ def self.get_user(username, password, url=DEFAULT_URL)
60
+ connection = create_connection(url)
61
+
62
+ connection.basic_auth(username, password)
63
+
64
+ resp = connection.get('users.json')
65
+ user = resp.body['user']
66
+ user['contexts'] = user['contexts'].map{|c| c.except!('api_token')}
67
+
68
+ user
69
+ end
70
+
71
+ def self.create_authorization(username, password, organization_id, note, timeout = nil, user_id = nil, url=DEFAULT_URL)
72
+ connection = create_connection(url)
73
+
74
+ connection.basic_auth(username, password)
75
+
76
+ body = { authorization: { organization_id: organization_id,
77
+ note: note, timeout: timeout, user_id: user_id } }
78
+ resp = connection.post('authorizations.json', body)
79
+
80
+ resp.body['authorization']
81
+ end
82
+
60
83
  def self.create_connection(url, key = nil)
61
84
  Faraday.new(url) do |connection|
62
85
  connection.request :multipart
@@ -124,5 +147,23 @@ module Fulcrum
124
147
  def webhooks
125
148
  @webhooks ||= Fulcrum::Webhook.new(self)
126
149
  end
150
+
151
+ def roles
152
+ @roles ||= Fulcrum::Role.new(self)
153
+ end
154
+
155
+ def audit_logs
156
+ @audit_logs ||= Fulcrum::AuditLog.new(self)
157
+ end
158
+
159
+ def authorizations
160
+ @authorizations ||= Fulcrum::Authorization.new(self)
161
+ end
162
+
163
+ def query(sql, format = 'json')
164
+ body = { q: sql,
165
+ format: format }
166
+ call(:post, 'query', body)
167
+ end
127
168
  end
128
169
  end
@@ -2,6 +2,9 @@ module Fulcrum
2
2
  class Project < Resource
3
3
  include Actions::List
4
4
  include Actions::Find
5
+ include Actions::Create
6
+ include Actions::Update
7
+ include Actions::Delete
5
8
  end
6
9
  end
7
10
 
@@ -11,5 +11,11 @@ module Fulcrum
11
11
 
12
12
  call(:delete, member(id), attributes_for_object(record_attributes))
13
13
  end
14
+
15
+ def history(id)
16
+ result = call(:get, member_action(id, 'history'))
17
+
18
+ Page.new(result, resources_name)
19
+ end
14
20
  end
15
21
  end
@@ -0,0 +1,5 @@
1
+ module Fulcrum
2
+ class Role < Resource
3
+ include Actions::List
4
+ end
5
+ end
@@ -1,3 +1,3 @@
1
1
  module Fulcrum
2
- VERSION = "0.6.1"
2
+ VERSION = "0.7.0"
3
3
  end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ include Support::ResourceExamples
4
+
5
+ describe Fulcrum::AuditLog do
6
+ include_context 'with client'
7
+ include_context 'with resource'
8
+
9
+ let(:resource) { client.audit_logs }
10
+
11
+ include_examples 'lists resource'
12
+ include_examples 'finds resource'
13
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ include Support::ResourceExamples
4
+
5
+ describe Fulcrum::Authorization do
6
+ include_context 'with client'
7
+ include_context 'with resource'
8
+
9
+ let(:resource) { client.authorizations }
10
+
11
+ include_examples 'lists resource'
12
+ include_examples 'finds resource'
13
+ include_examples 'updates resource'
14
+ include_examples 'deletes resource'
15
+ end
@@ -6,4 +6,50 @@ describe Fulcrum::Client do
6
6
  it 'has a default url' do
7
7
  expect(client.url).to eq(Fulcrum::Client::DEFAULT_URL)
8
8
  end
9
+
10
+ it 'can query' do
11
+ url = "#{client.url}/query"
12
+ response = 'audio,system,,,,,'
13
+
14
+ stub_request(:post, url)
15
+ .with(body: '{"q":"select name from tables limit 1;","format":"csv"}')
16
+ .to_return(status: 200, body: response,
17
+ headers: {"Content-Type" => "text/plain"})
18
+
19
+ sql = 'select name from tables limit 1;'
20
+ csv = client.query(sql, 'csv')
21
+
22
+ expect(csv).to eq(response)
23
+ end
24
+
25
+ it 'can get_user' do
26
+ url = 'https://fred%40flinstones.com:secret@api.fulcrumapp.com/api/v2/users.json'
27
+ response = '{"user":{"first_name":"Jason","last_name":"Sanford","email":"jason@fulcrumapp.com","image_small":"https://fulcrumapp-dev.s3.amazonaws.com/user-images/small_abc.jpg","image_large":"https://fulcrumapp-dev.s3.amazonaws.com/user-images/large_abc.jpg","id":"49d06ce5-1457-476c-9cb4-fd9d41ea43ef","contexts":[{"name":"Team Jason","id":"e09c1a03-819d-47d6-aebc-f8712d292b57","api_token":"abc123","image_small":"https://fulcrumapp-dev.s3.amazonaws.com/organization-images/small_abc.jpg","image_large":"https://fulcrumapp-dev.s3.amazonaws.com/organization-images/large_abc.jpg","type":"organization","role":{},"domain":null,"plan":{}}],"access":{"allowed":true}}}'
28
+
29
+ stub_request(:get, url)
30
+ .to_return(status: 200, body: response,
31
+ headers: {"Content-Type" => "application/json"})
32
+
33
+ sql = 'select name from tables limit 1;'
34
+ user = Fulcrum::Client.get_user('fred@flinstones.com', 'secret')
35
+
36
+ expect(user['contexts'].length).to eq(1)
37
+ expect(user['contexts'][0]['id']).to eq('e09c1a03-819d-47d6-aebc-f8712d292b57')
38
+ end
39
+
40
+ it 'can create_authorization' do
41
+ url = 'https://fred%40flinstones.com:secret@api.fulcrumapp.com/api/v2/authorizations.json'
42
+ body = '{"authorization":{"organization_id":"abc-123","note":"Tess Ting","timeout":null,"user_id":null}}'
43
+ response = '{"authorization":{"note":"Tess Ting","expires_at":null,"timeout":null,"token_last_8":"46c5cb33","last_ip_address":null,"last_user_agent":null,"token":"ac493349cd4de0c376185c1d347d24ce5a3867bd3e04397bb875ed6b9b0546b768caa3bf46c5cb33","created_at":"2019-04-12T13:25:28Z","updated_at":"2019-04-12T13:25:28Z","id":"f1d84caa-da28-4fc5-a341-44bb9efa6266","last_used_at":null,"user_id":"4f1cfa091441405373000443"}}'
44
+
45
+ stub_request(:post, url)
46
+ .with(body: body)
47
+ .to_return(status: 200, body: response,
48
+ headers: {"Content-Type" => "application/json"})
49
+
50
+ authorization = Fulcrum::Client.create_authorization('fred@flinstones.com', 'secret', 'abc-123', 'Tess Ting')
51
+
52
+ expect(authorization['note']).to eq('Tess Ting')
53
+ expect(authorization['token_last_8']).to eq('46c5cb33')
54
+ end
9
55
  end
@@ -10,4 +10,7 @@ describe Fulcrum::Project do
10
10
 
11
11
  include_examples 'lists resource'
12
12
  include_examples 'finds resource'
13
+ include_examples 'creates resource'
14
+ include_examples 'updates resource'
15
+ include_examples 'deletes resource'
13
16
  end
@@ -13,4 +13,23 @@ describe Fulcrum::Record do
13
13
  include_examples 'creates resource'
14
14
  include_examples 'updates resource'
15
15
  include_examples 'deletes resource'
16
+
17
+ it 'lists all resources' do
18
+ url = "#{client.url}/records/abc-123/history.json"
19
+
20
+ stub_request(:get, url)
21
+ .to_return(status: 200, body: list_response,
22
+ headers: {"Content-Type" => "application/json"})
23
+
24
+ page = resource.history('abc-123')
25
+
26
+ expect(client.response.status).to eq(200)
27
+
28
+ expect(page).to respond_to(:current_page)
29
+ expect(page).to respond_to(:total_pages)
30
+ expect(page).to respond_to(:total_count)
31
+ expect(page).to respond_to(:per_page)
32
+
33
+ expect(page.objects).to be_a(Array)
34
+ end
16
35
  end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ include Support::ResourceExamples
4
+
5
+ describe Fulcrum::Role do
6
+ include_context 'with client'
7
+ include_context 'with resource'
8
+
9
+ let(:resource) { client.roles }
10
+
11
+ include_examples 'lists resource'
12
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fulcrum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fulcrum
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-03 00:00:00.000000000 Z
11
+ date: 2019-04-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -148,6 +148,8 @@ files:
148
148
  - lib/fulcrum/actions/media_versions.rb
149
149
  - lib/fulcrum/actions/update.rb
150
150
  - lib/fulcrum/audio.rb
151
+ - lib/fulcrum/audit_log.rb
152
+ - lib/fulcrum/authorization.rb
151
153
  - lib/fulcrum/changeset.rb
152
154
  - lib/fulcrum/choice_list.rb
153
155
  - lib/fulcrum/classification_set.rb
@@ -161,6 +163,7 @@ files:
161
163
  - lib/fulcrum/project.rb
162
164
  - lib/fulcrum/record.rb
163
165
  - lib/fulcrum/resource.rb
166
+ - lib/fulcrum/role.rb
164
167
  - lib/fulcrum/signature.rb
165
168
  - lib/fulcrum/version.rb
166
169
  - lib/fulcrum/video.rb
@@ -171,6 +174,8 @@ files:
171
174
  - spec/data/test.mp4
172
175
  - spec/data/test.png
173
176
  - spec/lib/audio_spec.rb
177
+ - spec/lib/audit_log_spec.rb
178
+ - spec/lib/authorization_spec.rb
174
179
  - spec/lib/choice_list_spec.rb
175
180
  - spec/lib/classification_set_spec.rb
176
181
  - spec/lib/client_spec.rb
@@ -180,6 +185,7 @@ files:
180
185
  - spec/lib/photo_spec.rb
181
186
  - spec/lib/project_spec.rb
182
187
  - spec/lib/record_spec.rb
188
+ - spec/lib/role_spec.rb
183
189
  - spec/lib/signature_spec.rb
184
190
  - spec/lib/video_spec.rb
185
191
  - spec/lib/webhook_spec.rb
@@ -205,7 +211,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
205
211
  version: '0'
206
212
  requirements: []
207
213
  rubyforge_project:
208
- rubygems_version: 2.6.13
214
+ rubygems_version: 2.5.2.3
209
215
  signing_key:
210
216
  specification_version: 4
211
217
  summary: Fulcrum API client for ruby
@@ -216,6 +222,8 @@ test_files:
216
222
  - spec/data/test.mp4
217
223
  - spec/data/test.png
218
224
  - spec/lib/audio_spec.rb
225
+ - spec/lib/audit_log_spec.rb
226
+ - spec/lib/authorization_spec.rb
219
227
  - spec/lib/choice_list_spec.rb
220
228
  - spec/lib/classification_set_spec.rb
221
229
  - spec/lib/client_spec.rb
@@ -225,6 +233,7 @@ test_files:
225
233
  - spec/lib/photo_spec.rb
226
234
  - spec/lib/project_spec.rb
227
235
  - spec/lib/record_spec.rb
236
+ - spec/lib/role_spec.rb
228
237
  - spec/lib/signature_spec.rb
229
238
  - spec/lib/video_spec.rb
230
239
  - spec/lib/webhook_spec.rb