fulcrum 0.8.1 → 0.9.1

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
- SHA1:
3
- metadata.gz: 21844b906c980b7f2d119ea117e10e528d8b8575
4
- data.tar.gz: 0b5dd17ff88ddf767bed5ffac583e986aeb031de
2
+ SHA256:
3
+ metadata.gz: a6da67d577a8e64b2f9a92ea5360b370e78f1fb253a1e1029f07b2c2c756fc05
4
+ data.tar.gz: 65684be4fc3cd0ec36b8f9a17b97d42e2f4e2664c8b29d4e611e321e6a8f150d
5
5
  SHA512:
6
- metadata.gz: a0ed4ded8c9149b7f60703cb1eef7820e98a5452f8ff92d0861db8376b8945c1b82cf8ddbf0410d639eaf5b5c9c0862e0c1fa8b1fd6c7e8e775604611c1ce2ba
7
- data.tar.gz: dc1abf45a5eeb3e41b6dab0085c270c78ab3efaa2dda3f446fcd2be0850921e9610c7b7d584b722dbf1661128b3b14c3a7a2edb726addebffef8ff88bc48d40c
6
+ metadata.gz: a78d0a12e1a5c7a1f57de8556271b3ad0733fdda72fb0ea3d2d4e41284c1b3fc255a7c03686a0cca22d3c12f59ef0edb4cb1145f36bec3ffb31cfc0bb21aac24
7
+ data.tar.gz: a9107b8ce100e57f2b0a7958519b4b3781deb32b36f72378ff09f918e400ab8a0b653b0b29424e3fe5e6bb3640715650124e390ebf95b908f682530a9e361366
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## v0.8.0 (February 20, 2020)
2
+ * Add form history support (#28)
3
+
1
4
  ## v0.7.0 (April 12, 2019)
2
5
  * Add roles support (#20)
3
6
  * Add audit logs support (#13)
data/README.md CHANGED
@@ -291,6 +291,22 @@ Format can be 'json', 'geojson', 'gpx', or 'kml'.
291
291
 
292
292
 
293
293
 
294
+ ## Attachments
295
+
296
+ ### client.attachments.all(params = {})
297
+
298
+ ### client.attachments.find(id)
299
+
300
+ ### client.attachments.create(file_or_path, attributes = {})
301
+
302
+ Suggestion pass a File.open(file) to this as parameter
303
+
304
+ ### client.attachments.finalize(id)
305
+
306
+ ### client.attachments.delete(id)
307
+
308
+
309
+
294
310
  ## Changesets
295
311
 
296
312
  ### client.changesets.all(params = {})
data/fulcrum.gemspec CHANGED
@@ -16,11 +16,11 @@ Gem::Specification.new do |gem|
16
16
  gem.require_paths = ["lib"]
17
17
  gem.version = Fulcrum::VERSION
18
18
 
19
- gem.add_development_dependency 'rake', '~> 10.4', '>= 10.4.2'
20
- gem.add_development_dependency 'rspec', '~> 3.2', '>= 3.2.0'
21
- gem.add_development_dependency 'webmock', '~> 1.12', '>= 1.12.0'
19
+ gem.add_development_dependency 'rake'
20
+ gem.add_development_dependency 'rspec'
21
+ gem.add_development_dependency 'webmock'
22
22
 
23
- gem.add_dependency 'activesupport', '>= 4.1.0'
24
- gem.add_dependency 'faraday', '~> 0.9', '>= 0.9.1'
25
- gem.add_dependency 'faraday_middleware', '~> 0.9', '>= 0.9.1'
23
+ gem.add_dependency 'activesupport'
24
+ gem.add_dependency 'faraday'
25
+ gem.add_dependency 'faraday_middleware'
26
26
  end
@@ -0,0 +1,46 @@
1
+ module Fulcrum
2
+ class Attachment < MediaResource
3
+ include Actions::Delete
4
+
5
+ def finalize(id)
6
+ call(:post, "#{collection}/finalize", {id: id})
7
+ end
8
+
9
+ def collection
10
+ resources_name
11
+ end
12
+
13
+ def member(id)
14
+ "#{resources_name}/#{id}"
15
+ end
16
+
17
+ def find(id)
18
+ call(:get, member(id))
19
+ end
20
+
21
+ def all(params = {})
22
+ call(:get, collection, params)
23
+ end
24
+
25
+ def create(file, attrs = {})
26
+ response = call(:post, create_action, attrs)
27
+ binary_upload(file, response['url'], attrs[:file_size])
28
+ { name: attrs[:name], attachment_id: response['id'] }
29
+ end
30
+
31
+ private
32
+
33
+ def binary_upload(file, url, file_size)
34
+ connection = Faraday.new(url: url) do |faraday|
35
+ faraday.request :multipart
36
+ faraday.adapter :net_http
37
+ end
38
+ connection.put do |req|
39
+ req.headers['Content-Type'] = 'octet/stream'
40
+ req.headers['Content-Length'] = "#{file_size}"
41
+ req.headers['Content-Transfer-Encoding'] = 'binary'
42
+ req.body = Faraday::UploadIO.new(file, 'octet/stream')
43
+ end
44
+ end
45
+ end
46
+ end
@@ -2,9 +2,7 @@ require 'faraday'
2
2
  require 'faraday_middleware'
3
3
 
4
4
  module Fulcrum
5
-
6
5
  class Client
7
-
8
6
  DEFAULT_URL = 'https://api.fulcrumapp.com/api/v2'
9
7
 
10
8
  DEFAULT_USER_AGENT = "Fulcrum Ruby API Client, Version #{Fulcrum::VERSION}"
@@ -62,6 +60,7 @@ module Fulcrum
62
60
  connection.basic_auth(username, password)
63
61
 
64
62
  resp = connection.get('users.json')
63
+
65
64
  user = resp.body['user']
66
65
  user['contexts'] = user['contexts'].map{|c| c.except!('api_token')}
67
66
 
@@ -82,8 +81,8 @@ module Fulcrum
82
81
 
83
82
  def self.create_connection(url, key = nil)
84
83
  Faraday.new(url) do |connection|
85
- connection.request :multipart
86
- connection.request :json
84
+ connection.request :multipart
85
+ connection.request :json
87
86
 
88
87
  connection.response :raise_error
89
88
  connection.response :json, content_type: 'application/json'
@@ -120,6 +119,10 @@ module Fulcrum
120
119
  @audio ||= Fulcrum::Audio.new(self)
121
120
  end
122
121
 
122
+ def attachments
123
+ @attachment ||= Fulcrum::Attachment.new(self)
124
+ end
125
+
123
126
  def signatures
124
127
  @signatures ||= Fulcrum::Signature.new(self)
125
128
  end
@@ -1,3 +1,3 @@
1
1
  module Fulcrum
2
- VERSION = "0.8.1"
2
+ VERSION = "0.9.1"
3
3
  end
data/lib/fulcrum.rb CHANGED
@@ -17,6 +17,7 @@ require 'fulcrum/actions/media_versions'
17
17
  require 'fulcrum/actions/gps_track'
18
18
  require 'fulcrum/video'
19
19
  require 'fulcrum/audio'
20
+ require 'fulcrum/attachment'
20
21
  require 'fulcrum/signature'
21
22
  require 'fulcrum/project'
22
23
  require 'fulcrum/record'
@@ -26,5 +27,4 @@ require 'fulcrum/webhook'
26
27
  require 'fulcrum/role'
27
28
  require 'fulcrum/audit_log'
28
29
  require 'fulcrum/authorization'
29
- require 'fulcrum/client'
30
-
30
+ require 'fulcrum/client'
@@ -0,0 +1,56 @@
1
+ %PDF-1.7
2
+ %����
3
+ 1 0 obj
4
+ <</Pages 2 0 R /Type/Catalog>>
5
+ endobj
6
+ 2 0 obj
7
+ <</Count 2/Kids[ 4 0 R 8 0 R ]/Type/Pages>>
8
+ endobj
9
+ 3 0 obj
10
+ <</CreationDate(D:20210803100643)/Creator(PDFium)/Producer(PDFium)>>
11
+ endobj
12
+ 4 0 obj
13
+ <</Contents 5 0 R /MediaBox[ 0 0 612 792]/Parent 2 0 R /Resources<</Font<</F1 6 0 R >>/ProcSet 7 0 R >>/Type/Page>>
14
+ endobj
15
+ 5 0 obj
16
+ <</Filter/FlateDecode/Length 311>>stream
17
+ x����j�0����[h������ɡ(��.b�Q��`ɥ��k'$�@�J��;}�β�a�(€a�}��� EIF�,a�8'.CQ��
18
+ �����Ryz������9s_S�G��V�sNrNy��r���>�d��hv}nr���A;�T�q ��V� �o�/,��
19
+ endstream
20
+ endobj
21
+ 6 0 obj
22
+ <</BaseFont/Helvetica/Encoding/WinAnsiEncoding/Name/F1/Subtype/Type1/Type/Font>>
23
+ endobj
24
+ 7 0 obj
25
+ [/PDF/Text]
26
+ endobj
27
+ 8 0 obj
28
+ <</Contents 9 0 R /MediaBox[ 0 0 612 792]/Parent 2 0 R /Resources<</Font<</F1 6 0 R >>/ProcSet 7 0 R >>/Type/Page>>
29
+ endobj
30
+ 9 0 obj
31
+ <</Filter/FlateDecode/Length 274>>stream
32
+ x����j�0����[X�1��+��Bi�^z�k�,E#v߾YE��"%�̐��f�p��^���e
33
+ V�Z³)n�{�R���&��ۙ�ъ�$ 7�
34
+ ����?ݠM{�#F;�%!�,Lg���%͹=֗x�7�$#�y�\�b8�����2r3����z�����
35
+ endstream
36
+ endobj
37
+ xref
38
+ 0 10
39
+ 0000000000 65535 f
40
+ 0000000017 00000 n
41
+ 0000000066 00000 n
42
+ 0000000129 00000 n
43
+ 0000000216 00000 n
44
+ 0000000350 00000 n
45
+ 0000000733 00000 n
46
+ 0000000832 00000 n
47
+ 0000000862 00000 n
48
+ 0000000996 00000 n
49
+ trailer
50
+ <<
51
+ /Root 1 0 R
52
+ /Info 3 0 R
53
+ /Size 10/ID[<06CD5B1232D77C2A68B8A7743652C304><06CD5B1232D77C2A68B8A7743652C304>]>>
54
+ startxref
55
+ 1342
56
+ %%EOF
@@ -0,0 +1,93 @@
1
+ require 'spec_helper'
2
+
3
+ include Support::ResourceExamples
4
+
5
+ describe Fulcrum::Attachment do
6
+ let(:test_file) { './spec/data/test.pdf' }
7
+
8
+ include_context 'with client'
9
+ include_context 'with media resource'
10
+ include_context 'with resource parameters'
11
+
12
+ let(:resource) { client.attachments }
13
+
14
+ include_examples 'finds resource'
15
+ include_examples 'deletes resource'
16
+
17
+ let(:create_url) do
18
+ "#{client.url}/#{resource.create_action}"
19
+ end
20
+
21
+ describe '#all' do
22
+ let(:list_response) do
23
+ data = {}
24
+ data["form_id"] = {}
25
+ data.to_json
26
+ end
27
+
28
+ it 'lists all attachments' do
29
+ stub_request(:get, create_url)
30
+ .to_return(status: 200, body: list_response,
31
+ headers: {"Content-Type" => "application/json"})
32
+
33
+ resources = resource.all
34
+
35
+ expect(client.response.status).to eq(200)
36
+
37
+ expect(resources).to be_a(Hash)
38
+ end
39
+ end
40
+
41
+ describe '#create' do
42
+ let(:ws_url) do
43
+ 'https://fulcrumapp.s3.amazonaws.com/attachments/example'
44
+ end
45
+
46
+ let(:attrs) do
47
+ { "name": "Test",
48
+ "owners": [ {
49
+ "type": "form",
50
+ "id": "12345"
51
+ } ] }
52
+ end
53
+
54
+ let(:response) do
55
+ data = {}
56
+ data['url'] = ws_url
57
+ data['id'] = "123"
58
+ data.to_json
59
+ end
60
+
61
+ let(:create_parameters) { [ File.open(test_file) , attrs ] }
62
+
63
+ it 'creates attachment data' do
64
+ stub_request(:post, create_url)
65
+ .with(body: attrs)
66
+ .to_return(status: 200, body: response,
67
+ headers: {"Content-Type" => "application/json"})
68
+ stub_request(:put, ws_url)
69
+ .to_return(status: 200,
70
+ headers: {"Content-Type" => "application/json"})
71
+
72
+ object = resource.create(*create_parameters)
73
+
74
+ expect(client.response.status).to eq(200)
75
+
76
+ expect(object[:name]).to eq(attrs[:name])
77
+
78
+ expect(object[:attachment_id]).to eq(JSON.parse(response)['id'])
79
+ end
80
+ end
81
+
82
+ describe '#finalize' do
83
+ it 'finalizes the attachment' do
84
+ stub_request(:post, "#{create_url}/finalize")
85
+ .to_return(status: 201,
86
+ headers: {"Content-Type" => "application/json"})
87
+
88
+ object = resource.finalize(resource_id)
89
+
90
+ expect(client.response.status).to eq(201)
91
+ end
92
+ end
93
+ end
@@ -23,14 +23,15 @@ describe Fulcrum::Client do
23
23
  end
24
24
 
25
25
  it 'can get_user' do
26
- url = 'https://fred%40flinstones.com:secret@api.fulcrumapp.com/api/v2/users.json'
27
26
  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
27
 
29
- stub_request(:get, url)
30
- .to_return(status: 200, body: response,
31
- headers: {"Content-Type" => "application/json"})
28
+ stub_request(:get, "https://api.fulcrumapp.com/api/v2/users.json")
29
+ .with(
30
+ headers: {
31
+ 'Authorization' => 'Basic ZnJlZEBmbGluc3RvbmVzLmNvbTpzZWNyZXQ='
32
+ }
33
+ ).to_return(status: 200, body: response, headers: { 'Content-Type'=>'application/json' })
32
34
 
33
- sql = 'select name from tables limit 1;'
34
35
  user = Fulcrum::Client.get_user('fred@flinstones.com', 'secret')
35
36
 
36
37
  expect(user['contexts'].length).to eq(1)
@@ -38,14 +39,16 @@ describe Fulcrum::Client do
38
39
  end
39
40
 
40
41
  it 'can create_authorization' do
41
- url = 'https://fred%40flinstones.com:secret@api.fulcrumapp.com/api/v2/authorizations.json'
42
42
  body = '{"authorization":{"organization_id":"abc-123","note":"Tess Ting","timeout":null,"user_id":null}}'
43
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
44
 
45
- stub_request(:post, url)
46
- .with(body: body)
47
- .to_return(status: 200, body: response,
48
- headers: {"Content-Type" => "application/json"})
45
+ stub_request(:post, "https://api.fulcrumapp.com/api/v2/authorizations.json").
46
+ with(
47
+ body: body,
48
+ headers: {
49
+ 'Authorization' => 'Basic ZnJlZEBmbGluc3RvbmVzLmNvbTpzZWNyZXQ='
50
+ }
51
+ ).to_return(status: 200, body: response, headers: { 'Content-Type'=>'application/json' })
49
52
 
50
53
  authorization = Fulcrum::Client.create_authorization('fred@flinstones.com', 'secret', 'abc-123', 'Tess Ting')
51
54
 
@@ -144,8 +144,6 @@ module Support
144
144
  object = resource.delete(resource_id)
145
145
 
146
146
  expect(client.response.status).to eq(204)
147
-
148
- expect(object).to be_a(Hash)
149
147
  end
150
148
  end
151
149
  end
data/spec/spec_helper.rb CHANGED
@@ -2,5 +2,4 @@ require 'rspec'
2
2
  require 'webmock/rspec'
3
3
  require 'fulcrum'
4
4
  require 'client_helper'
5
- require 'resource_examples'
6
-
5
+ require 'resource_examples'
metadata CHANGED
@@ -1,129 +1,99 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fulcrum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fulcrum
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-20 00:00:00.000000000 Z
11
+ date: 2022-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '10.4'
20
17
  - - ">="
21
18
  - !ruby/object:Gem::Version
22
- version: 10.4.2
19
+ version: '0'
23
20
  type: :development
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
- - - "~>"
28
- - !ruby/object:Gem::Version
29
- version: '10.4'
30
24
  - - ">="
31
25
  - !ruby/object:Gem::Version
32
- version: 10.4.2
26
+ version: '0'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: rspec
35
29
  requirement: !ruby/object:Gem::Requirement
36
30
  requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: '3.2'
40
31
  - - ">="
41
32
  - !ruby/object:Gem::Version
42
- version: 3.2.0
33
+ version: '0'
43
34
  type: :development
44
35
  prerelease: false
45
36
  version_requirements: !ruby/object:Gem::Requirement
46
37
  requirements:
47
- - - "~>"
48
- - !ruby/object:Gem::Version
49
- version: '3.2'
50
38
  - - ">="
51
39
  - !ruby/object:Gem::Version
52
- version: 3.2.0
40
+ version: '0'
53
41
  - !ruby/object:Gem::Dependency
54
42
  name: webmock
55
43
  requirement: !ruby/object:Gem::Requirement
56
44
  requirements:
57
- - - "~>"
58
- - !ruby/object:Gem::Version
59
- version: '1.12'
60
45
  - - ">="
61
46
  - !ruby/object:Gem::Version
62
- version: 1.12.0
47
+ version: '0'
63
48
  type: :development
64
49
  prerelease: false
65
50
  version_requirements: !ruby/object:Gem::Requirement
66
51
  requirements:
67
- - - "~>"
68
- - !ruby/object:Gem::Version
69
- version: '1.12'
70
52
  - - ">="
71
53
  - !ruby/object:Gem::Version
72
- version: 1.12.0
54
+ version: '0'
73
55
  - !ruby/object:Gem::Dependency
74
56
  name: activesupport
75
57
  requirement: !ruby/object:Gem::Requirement
76
58
  requirements:
77
59
  - - ">="
78
60
  - !ruby/object:Gem::Version
79
- version: 4.1.0
61
+ version: '0'
80
62
  type: :runtime
81
63
  prerelease: false
82
64
  version_requirements: !ruby/object:Gem::Requirement
83
65
  requirements:
84
66
  - - ">="
85
67
  - !ruby/object:Gem::Version
86
- version: 4.1.0
68
+ version: '0'
87
69
  - !ruby/object:Gem::Dependency
88
70
  name: faraday
89
71
  requirement: !ruby/object:Gem::Requirement
90
72
  requirements:
91
- - - "~>"
92
- - !ruby/object:Gem::Version
93
- version: '0.9'
94
73
  - - ">="
95
74
  - !ruby/object:Gem::Version
96
- version: 0.9.1
75
+ version: '0'
97
76
  type: :runtime
98
77
  prerelease: false
99
78
  version_requirements: !ruby/object:Gem::Requirement
100
79
  requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '0.9'
104
80
  - - ">="
105
81
  - !ruby/object:Gem::Version
106
- version: 0.9.1
82
+ version: '0'
107
83
  - !ruby/object:Gem::Dependency
108
84
  name: faraday_middleware
109
85
  requirement: !ruby/object:Gem::Requirement
110
86
  requirements:
111
- - - "~>"
112
- - !ruby/object:Gem::Version
113
- version: '0.9'
114
87
  - - ">="
115
88
  - !ruby/object:Gem::Version
116
- version: 0.9.1
89
+ version: '0'
117
90
  type: :runtime
118
91
  prerelease: false
119
92
  version_requirements: !ruby/object:Gem::Requirement
120
93
  requirements:
121
- - - "~>"
122
- - !ruby/object:Gem::Version
123
- version: '0.9'
124
94
  - - ">="
125
95
  - !ruby/object:Gem::Version
126
- version: 0.9.1
96
+ version: '0'
127
97
  description: Fulcrum API
128
98
  email:
129
99
  - info@fulcrumapp.com
@@ -147,6 +117,7 @@ files:
147
117
  - lib/fulcrum/actions/list.rb
148
118
  - lib/fulcrum/actions/media_versions.rb
149
119
  - lib/fulcrum/actions/update.rb
120
+ - lib/fulcrum/attachment.rb
150
121
  - lib/fulcrum/audio.rb
151
122
  - lib/fulcrum/audit_log.rb
152
123
  - lib/fulcrum/authorization.rb
@@ -172,7 +143,9 @@ files:
172
143
  - spec/data/test.jpg
173
144
  - spec/data/test.m4a
174
145
  - spec/data/test.mp4
146
+ - spec/data/test.pdf
175
147
  - spec/data/test.png
148
+ - spec/lib/attachment_spec.rb
176
149
  - spec/lib/audio_spec.rb
177
150
  - spec/lib/audit_log_spec.rb
178
151
  - spec/lib/authorization_spec.rb
@@ -195,7 +168,7 @@ homepage: https://github.com/fulcrumapp/fulcrum-ruby
195
168
  licenses:
196
169
  - MIT
197
170
  metadata: {}
198
- post_install_message:
171
+ post_install_message:
199
172
  rdoc_options: []
200
173
  require_paths:
201
174
  - lib
@@ -210,9 +183,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
210
183
  - !ruby/object:Gem::Version
211
184
  version: '0'
212
185
  requirements: []
213
- rubyforge_project:
214
- rubygems_version: 2.5.2.3
215
- signing_key:
186
+ rubygems_version: 3.3.11
187
+ signing_key:
216
188
  specification_version: 4
217
189
  summary: Fulcrum API client for ruby
218
190
  test_files:
@@ -220,7 +192,9 @@ test_files:
220
192
  - spec/data/test.jpg
221
193
  - spec/data/test.m4a
222
194
  - spec/data/test.mp4
195
+ - spec/data/test.pdf
223
196
  - spec/data/test.png
197
+ - spec/lib/attachment_spec.rb
224
198
  - spec/lib/audio_spec.rb
225
199
  - spec/lib/audit_log_spec.rb
226
200
  - spec/lib/authorization_spec.rb