fulcrum 0.8.1 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
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