smartsheet 1.0.0.beta.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.rubocop.yml +5 -0
  4. data/.travis.yml +6 -0
  5. data/Gemfile +6 -0
  6. data/LICENSE +202 -0
  7. data/README.md +139 -0
  8. data/Rakefile +13 -0
  9. data/bin/console +14 -0
  10. data/bin/setup +8 -0
  11. data/lib/smartsheet.rb +3 -0
  12. data/lib/smartsheet/api/body_builder.rb +26 -0
  13. data/lib/smartsheet/api/endpoint_spec.rb +35 -0
  14. data/lib/smartsheet/api/faraday_adapter/faraday_net_client.rb +42 -0
  15. data/lib/smartsheet/api/faraday_adapter/faraday_response.rb +60 -0
  16. data/lib/smartsheet/api/faraday_adapter/middleware/faraday_error_translator.rb +20 -0
  17. data/lib/smartsheet/api/faraday_adapter/middleware/response_parser.rb +25 -0
  18. data/lib/smartsheet/api/file_spec.rb +28 -0
  19. data/lib/smartsheet/api/header_builder.rb +85 -0
  20. data/lib/smartsheet/api/request.rb +29 -0
  21. data/lib/smartsheet/api/request_client.rb +26 -0
  22. data/lib/smartsheet/api/request_logger.rb +148 -0
  23. data/lib/smartsheet/api/request_spec.rb +43 -0
  24. data/lib/smartsheet/api/response_net_client_decorator.rb +47 -0
  25. data/lib/smartsheet/api/retry_logic.rb +37 -0
  26. data/lib/smartsheet/api/retry_net_client_decorator.rb +36 -0
  27. data/lib/smartsheet/api/url_builder.rb +25 -0
  28. data/lib/smartsheet/client.rb +115 -0
  29. data/lib/smartsheet/constants.rb +16 -0
  30. data/lib/smartsheet/endpoints/contacts/contacts.rb +29 -0
  31. data/lib/smartsheet/endpoints/favorites/favorites.rb +158 -0
  32. data/lib/smartsheet/endpoints/folders/folders.rb +124 -0
  33. data/lib/smartsheet/endpoints/groups/groups.rb +82 -0
  34. data/lib/smartsheet/endpoints/home/home.rb +19 -0
  35. data/lib/smartsheet/endpoints/reports/reports.rb +96 -0
  36. data/lib/smartsheet/endpoints/reports/reports_share.rb +68 -0
  37. data/lib/smartsheet/endpoints/search/search.rb +29 -0
  38. data/lib/smartsheet/endpoints/server_info/server_info.rb +19 -0
  39. data/lib/smartsheet/endpoints/share/share.rb +58 -0
  40. data/lib/smartsheet/endpoints/sheets/cells.rb +80 -0
  41. data/lib/smartsheet/endpoints/sheets/columns.rb +65 -0
  42. data/lib/smartsheet/endpoints/sheets/comments.rb +60 -0
  43. data/lib/smartsheet/endpoints/sheets/comments_attachments.rb +77 -0
  44. data/lib/smartsheet/endpoints/sheets/discussions.rb +80 -0
  45. data/lib/smartsheet/endpoints/sheets/discussions_attachments.rb +21 -0
  46. data/lib/smartsheet/endpoints/sheets/rows.rb +91 -0
  47. data/lib/smartsheet/endpoints/sheets/rows_attachments.rb +91 -0
  48. data/lib/smartsheet/endpoints/sheets/sheets.rb +301 -0
  49. data/lib/smartsheet/endpoints/sheets/sheets_attachments.rb +173 -0
  50. data/lib/smartsheet/endpoints/sheets/sheets_share.rb +68 -0
  51. data/lib/smartsheet/endpoints/sights/sights.rb +97 -0
  52. data/lib/smartsheet/endpoints/sights/sights_share.rb +68 -0
  53. data/lib/smartsheet/endpoints/templates/templates.rb +28 -0
  54. data/lib/smartsheet/endpoints/token/token.rb +57 -0
  55. data/lib/smartsheet/endpoints/update_requests/sent_update_requests.rb +42 -0
  56. data/lib/smartsheet/endpoints/update_requests/update_requests.rb +69 -0
  57. data/lib/smartsheet/endpoints/users/alternate_emails.rb +77 -0
  58. data/lib/smartsheet/endpoints/users/users.rb +73 -0
  59. data/lib/smartsheet/endpoints/webhooks/webhooks.rb +70 -0
  60. data/lib/smartsheet/endpoints/workspaces/workspaces.rb +83 -0
  61. data/lib/smartsheet/endpoints/workspaces/workspaces_share.rb +68 -0
  62. data/lib/smartsheet/error.rb +30 -0
  63. data/lib/smartsheet/general_request.rb +53 -0
  64. data/lib/smartsheet/version.rb +5 -0
  65. data/read-write-sheet/config.json +4 -0
  66. data/read-write-sheet/read_write_sheet.rb +89 -0
  67. data/smartsheet.gemspec +47 -0
  68. metadata +279 -0
@@ -0,0 +1,73 @@
1
+ require_relative 'alternate_emails'
2
+
3
+ module Smartsheet
4
+ class Users
5
+ attr_reader :client, :alternate_emails
6
+ private :client
7
+
8
+ def initialize(client)
9
+ @client = client
10
+
11
+ @alternate_emails = AlternateEmails.new(client)
12
+ end
13
+
14
+ def add(body:, params: {}, header_overrides: {})
15
+ endpoint_spec = Smartsheet::API::EndpointSpec.new(:post, ['users'], body_type: :json)
16
+ request_spec = Smartsheet::API::RequestSpec.new(
17
+ header_overrides: header_overrides,
18
+ body: body,
19
+ params: params
20
+ )
21
+ client.make_request(endpoint_spec, request_spec)
22
+ end
23
+
24
+ def get_current(params: {}, header_overrides: {})
25
+ endpoint_spec = Smartsheet::API::EndpointSpec.new(:get, ['users', 'me'])
26
+ request_spec = Smartsheet::API::RequestSpec.new(
27
+ params: params,
28
+ header_overrides: header_overrides
29
+ )
30
+ client.make_request(endpoint_spec, request_spec)
31
+ end
32
+
33
+ def get(user_id:, params: {}, header_overrides: {})
34
+ endpoint_spec = Smartsheet::API::EndpointSpec.new(:get, ['users', :user_id])
35
+ request_spec = Smartsheet::API::RequestSpec.new(
36
+ params: params,
37
+ header_overrides: header_overrides,
38
+ user_id: user_id
39
+ )
40
+ client.make_request(endpoint_spec, request_spec)
41
+ end
42
+
43
+ def list(params: {}, header_overrides: {})
44
+ endpoint_spec = Smartsheet::API::EndpointSpec.new(:get, ['users'])
45
+ request_spec = Smartsheet::API::RequestSpec.new(
46
+ header_overrides: header_overrides,
47
+ params: params
48
+ )
49
+ client.make_request(endpoint_spec, request_spec)
50
+ end
51
+
52
+ def remove(user_id:, params: {}, header_overrides: {})
53
+ endpoint_spec = Smartsheet::API::EndpointSpec.new(:delete, ['users', :user_id])
54
+ request_spec = Smartsheet::API::RequestSpec.new(
55
+ header_overrides: header_overrides,
56
+ params: params,
57
+ user_id: user_id
58
+ )
59
+ client.make_request(endpoint_spec, request_spec)
60
+ end
61
+
62
+ def update(user_id:, body:, params: {}, header_overrides: {})
63
+ endpoint_spec = Smartsheet::API::EndpointSpec.new(:put, ['users', :user_id], body_type: :json)
64
+ request_spec = Smartsheet::API::RequestSpec.new(
65
+ params: params,
66
+ header_overrides: header_overrides,
67
+ body: body,
68
+ user_id: user_id
69
+ )
70
+ client.make_request(endpoint_spec, request_spec)
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,70 @@
1
+ module Smartsheet
2
+ class Webhooks
3
+ attr_reader :client
4
+ private :client
5
+
6
+ def initialize(client)
7
+ @client = client
8
+ end
9
+
10
+ def create(body:, params: {}, header_overrides: {})
11
+ endpoint_spec = Smartsheet::API::EndpointSpec.new(:post, ['webhooks'], body_type: :json)
12
+ request_spec = Smartsheet::API::RequestSpec.new(
13
+ params: params,
14
+ header_overrides: header_overrides,
15
+ body: body
16
+ )
17
+ client.make_request(endpoint_spec, request_spec)
18
+ end
19
+
20
+ def delete(webhook_id:, params: {}, header_overrides: {})
21
+ endpoint_spec = Smartsheet::API::EndpointSpec.new(:delete, ['webhooks', :webhook_id])
22
+ request_spec = Smartsheet::API::RequestSpec.new(
23
+ params: params,
24
+ header_overrides: header_overrides,
25
+ webhook_id: webhook_id
26
+ )
27
+ client.make_request(endpoint_spec, request_spec)
28
+ end
29
+
30
+ def get(webhook_id:, params: {}, header_overrides: {})
31
+ endpoint_spec = Smartsheet::API::EndpointSpec.new(:get, ['webhooks', :webhook_id])
32
+ request_spec = Smartsheet::API::RequestSpec.new(
33
+ params: params,
34
+ header_overrides: header_overrides,
35
+ webhook_id: webhook_id
36
+ )
37
+ client.make_request(endpoint_spec, request_spec)
38
+ end
39
+
40
+ def list(params: {}, header_overrides: {})
41
+ endpoint_spec = Smartsheet::API::EndpointSpec.new(:get, ['webhooks'])
42
+ request_spec = Smartsheet::API::RequestSpec.new(
43
+ params: params,
44
+ header_overrides: header_overrides
45
+ )
46
+ client.make_request(endpoint_spec, request_spec)
47
+ end
48
+
49
+ def reset_shared_secret(webhook_id:, params: {}, header_overrides: {})
50
+ endpoint_spec = Smartsheet::API::EndpointSpec.new(:post, ['webhooks', :webhook_id, 'resetsharedsecret'])
51
+ request_spec = Smartsheet::API::RequestSpec.new(
52
+ params: params,
53
+ header_overrides: header_overrides,
54
+ webhook_id: webhook_id
55
+ )
56
+ client.make_request(endpoint_spec, request_spec)
57
+ end
58
+
59
+ def update(webhook_id:, body:, params: {}, header_overrides: {})
60
+ endpoint_spec = Smartsheet::API::EndpointSpec.new(:put, ['webhooks', :webhook_id], body_type: :json)
61
+ request_spec = Smartsheet::API::RequestSpec.new(
62
+ params: params,
63
+ header_overrides: header_overrides,
64
+ body: body,
65
+ webhook_id: webhook_id
66
+ )
67
+ client.make_request(endpoint_spec, request_spec)
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,83 @@
1
+ require_relative 'workspaces_share'
2
+
3
+ module Smartsheet
4
+ class Workspaces
5
+ attr_reader :client, :share
6
+ private :client
7
+
8
+ def initialize(client)
9
+ @client = client
10
+
11
+ @share = WorkspacesShare.new(client)
12
+ end
13
+
14
+ def copy(workspace_id:, body:, params: {}, header_overrides: {})
15
+ endpoint_spec = Smartsheet::API::EndpointSpec.new(
16
+ :post,
17
+ ['workspaces', :workspace_id, 'copy'],
18
+ body_type: :json
19
+ )
20
+ request_spec = Smartsheet::API::RequestSpec.new(
21
+ header_overrides: header_overrides,
22
+ params: params,
23
+ body: body,
24
+ workspace_id: workspace_id
25
+ )
26
+ client.make_request(endpoint_spec, request_spec)
27
+ end
28
+
29
+ def create(body:, params: {}, header_overrides: {})
30
+ endpoint_spec = Smartsheet::API::EndpointSpec.new(:post, ['workspaces'], body_type: :json)
31
+ request_spec = Smartsheet::API::RequestSpec.new(
32
+ params: params,
33
+ header_overrides: header_overrides,
34
+ body: body
35
+ )
36
+ client.make_request(endpoint_spec, request_spec)
37
+ end
38
+
39
+ def delete(workspace_id:, params: {}, header_overrides: {})
40
+ endpoint_spec = Smartsheet::API::EndpointSpec.new(:delete, ['workspaces', :workspace_id])
41
+ request_spec = Smartsheet::API::RequestSpec.new(
42
+ params: params,
43
+ header_overrides: header_overrides,
44
+ workspace_id: workspace_id
45
+ )
46
+ client.make_request(endpoint_spec, request_spec)
47
+ end
48
+
49
+ def get(workspace_id:, params: {}, header_overrides: {})
50
+ endpoint_spec = Smartsheet::API::EndpointSpec.new(:get, ['workspaces', :workspace_id])
51
+ request_spec = Smartsheet::API::RequestSpec.new(
52
+ header_overrides: header_overrides,
53
+ params: params,
54
+ workspace_id: workspace_id
55
+ )
56
+ client.make_request(endpoint_spec, request_spec)
57
+ end
58
+
59
+ def list(params: {}, header_overrides: {})
60
+ endpoint_spec = Smartsheet::API::EndpointSpec.new(:get, ['workspaces'])
61
+ request_spec = Smartsheet::API::RequestSpec.new(
62
+ header_overrides: header_overrides,
63
+ params: params,
64
+ )
65
+ client.make_request(endpoint_spec, request_spec)
66
+ end
67
+
68
+ def update(workspace_id:, body:, params: {}, header_overrides: {})
69
+ endpoint_spec = Smartsheet::API::EndpointSpec.new(
70
+ :put,
71
+ ['workspaces', :workspace_id],
72
+ body_type: :json
73
+ )
74
+ request_spec = Smartsheet::API::RequestSpec.new(
75
+ params: params,
76
+ header_overrides: header_overrides,
77
+ body: body,
78
+ workspace_id: workspace_id
79
+ )
80
+ client.make_request(endpoint_spec, request_spec)
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,68 @@
1
+ require 'smartsheet/endpoints/share/share'
2
+
3
+ module Smartsheet
4
+ class WorkspacesShare
5
+ attr_reader :client
6
+ private :client
7
+
8
+ URL = ['workspaces', :workspace_id].freeze
9
+
10
+ def initialize(client)
11
+ @client = client
12
+ end
13
+
14
+ def delete(workspace_id:, share_id:, params: {}, header_overrides: {})
15
+ delete_share(
16
+ share_id: share_id,
17
+ url: URL,
18
+ params: params,
19
+ header_overrides: header_overrides,
20
+ workspace_id: workspace_id
21
+ )
22
+ end
23
+
24
+ def get(workspace_id:, share_id:, params: {}, header_overrides: {})
25
+ get_share(
26
+ share_id: share_id,
27
+ url: URL,
28
+ params: params,
29
+ header_overrides: header_overrides,
30
+ workspace_id: workspace_id
31
+ )
32
+ end
33
+
34
+ def list(workspace_id:, params: {}, header_overrides: {})
35
+ list_share(
36
+ url: URL,
37
+ header_overrides: header_overrides,
38
+ params: params,
39
+ workspace_id: workspace_id
40
+ )
41
+ end
42
+
43
+ def create(workspace_id:, body:, params: {}, header_overrides: {})
44
+ create_share(
45
+ url: URL,
46
+ header_overrides: header_overrides,
47
+ params: params,
48
+ body: body,
49
+ workspace_id: workspace_id
50
+ )
51
+ end
52
+
53
+ def update(workspace_id:, share_id:, body:, params: {}, header_overrides: {})
54
+ update_share(
55
+ share_id: share_id,
56
+ url: URL,
57
+ params: params,
58
+ header_overrides: header_overrides,
59
+ body: body,
60
+ workspace_id: workspace_id
61
+ )
62
+ end
63
+
64
+ private
65
+
66
+ include Smartsheet::Share
67
+ end
68
+ end
@@ -0,0 +1,30 @@
1
+ require 'forwardable'
2
+
3
+ module Smartsheet
4
+ class Error < StandardError; end
5
+
6
+ # Errors for invalid requests, timeouts, etc.
7
+ class RequestError < Error
8
+ attr_reader :wrapped_exception
9
+
10
+ def initialize(ex)
11
+ super(ex.message)
12
+ @wrapped_exception = ex
13
+ end
14
+ end
15
+
16
+ class ApiError < Error
17
+ extend Forwardable
18
+
19
+ def initialize(error_response)
20
+ super(error_response.message)
21
+ @error_response = error_response
22
+ end
23
+
24
+ def_delegators :error_response, :error_code, :message, :ref_id, :detail
25
+
26
+ private
27
+
28
+ attr_reader :error_response
29
+ end
30
+ end
@@ -0,0 +1,53 @@
1
+ require 'smartsheet/api/file_spec'
2
+
3
+ module Smartsheet
4
+ module GeneralRequest
5
+ def request(method:, url_path:, body: nil, params: {}, header_overrides: {})
6
+ spec = body.nil? ? {} : {body_type: :json}
7
+ endpoint_spec = Smartsheet::API::EndpointSpec.new(method, [url_path], **spec)
8
+ request_spec = Smartsheet::API::RequestSpec.new(
9
+ header_overrides: header_overrides,
10
+ body: body,
11
+ params: params
12
+ )
13
+ client.make_request(endpoint_spec, request_spec)
14
+ end
15
+
16
+ def request_with_file(
17
+ method:,
18
+ url_path:,
19
+ file:,
20
+ file_length:,
21
+ filename:,
22
+ content_type: '',
23
+ params: {},
24
+ header_overrides: {}
25
+ )
26
+ endpoint_spec = Smartsheet::API::EndpointSpec.new(method, [url_path], body_type: :file)
27
+ request_spec = Smartsheet::API::RequestSpec.new(
28
+ header_overrides: header_overrides,
29
+ params: params,
30
+ file_spec: Smartsheet::API::ObjectFileSpec.new(file, filename, file_length, content_type)
31
+ )
32
+ client.make_request(endpoint_spec, request_spec)
33
+ end
34
+
35
+ def request_with_file_from_path(
36
+ method:,
37
+ url_path:,
38
+ path:,
39
+ filename: nil,
40
+ content_type: '',
41
+ params: {},
42
+ header_overrides: {}
43
+ )
44
+ endpoint_spec = Smartsheet::API::EndpointSpec.new(method, [url_path], body_type: :file)
45
+ request_spec = Smartsheet::API::RequestSpec.new(
46
+ header_overrides: header_overrides,
47
+ params: params,
48
+ file_spec: Smartsheet::API::PathFileSpec.new(path, filename, content_type)
49
+ )
50
+ client.make_request(endpoint_spec, request_spec)
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,5 @@
1
+ require 'smartsheet/constants'
2
+
3
+ module Smartsheet
4
+ VERSION = Constants::VERSION
5
+ end
@@ -0,0 +1,4 @@
1
+ {
2
+ "token": "TOKEN",
3
+ "sheet_id": "SHEET_ID"
4
+ }
@@ -0,0 +1,89 @@
1
+ require 'smartsheet/client'
2
+
3
+
4
+ def row_update(row_id, column_id, value)
5
+ {
6
+ id: row_id,
7
+ cells: [{
8
+ columnId: column_id,
9
+ value: value
10
+ }]
11
+ }
12
+ end
13
+
14
+ def column_map(sheet)
15
+ column_map = {}
16
+ sheet[:columns].each do |column|
17
+ column_map[column[:title]] = column[:id]
18
+ end
19
+
20
+ column_map
21
+ end
22
+
23
+ def get_cell_by_column(row, column_id)
24
+ row[:cells].find {|cell| cell[:column_id] == column_id}
25
+ end
26
+
27
+ def get_cell_by_column_name(row, column_name, column_map)
28
+ get_cell_by_column(row, column_map[column_name])
29
+ end
30
+
31
+ def build_update_complete_row(row, column_map)
32
+ status_cell = get_cell_by_column_name(row, 'Status', column_map)
33
+ remaining_cell = get_cell_by_column_name(row, 'Remaining', column_map)
34
+
35
+ if status_cell[:display_value] == 'Complete'
36
+ unless remaining_cell[:display_value] == '0'
37
+ puts "Updating row #{row[:row_number]}"
38
+ row_update(row[:id], remaining_cell[:column_id], 0)
39
+ end
40
+ end
41
+ end
42
+
43
+ def build_update_complete_rows_body(sheet)
44
+ column_map = column_map(sheet)
45
+ update_rows = []
46
+ sheet[:rows].each do |row|
47
+ update_row = build_update_complete_row(row, column_map)
48
+ update_rows.push(update_row) unless update_row.nil?
49
+ end
50
+
51
+ update_rows
52
+ end
53
+
54
+ def update_complete_rows(sheet_id, client)
55
+ sheet = client.sheets.get(sheet_id: sheet_id)
56
+
57
+ update_rows_body = build_update_complete_rows_body(sheet)
58
+ if update_rows_body.empty?
59
+ puts 'No Update Required'
60
+ return
61
+ end
62
+
63
+ client.sheets.rows.update(sheet_id: sheet[:id], body: update_rows_body)
64
+ end
65
+
66
+ def load_config(config_name)
67
+ file = File.open(config_name)
68
+
69
+ JSON.load(file)
70
+ end
71
+
72
+
73
+ config = load_config('config.json')
74
+
75
+ client = Smartsheet::Client.new(token: config['token'])
76
+
77
+ begin
78
+ update_complete_rows(config['sheet_id'], client)
79
+ rescue Smartsheet::ApiError => e
80
+ puts "API returned error:"
81
+ puts "\terror code: #{e.error_code}"
82
+ puts "\tref id: #{e.ref_id}"
83
+ puts "\tmessage: #{e.message}"
84
+ end
85
+
86
+
87
+
88
+
89
+