smartsheet 1.0.0.beta.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.
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
+