files.com 1.0.132 → 1.0.137

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
2
  SHA256:
3
- metadata.gz: '08bc9f16d5d9c80f23b951dfd587fd8e6ac05da09efbc174d4f01d802c45596b'
4
- data.tar.gz: c15f2b59612650caf3c4df6d5e3ffa9ba6be5b4836d0e2eb52617874d60aebec
3
+ metadata.gz: 4651a8c9e40410069aefe8b9660b1d6111d94ec4b096180d2d129a673f399e2f
4
+ data.tar.gz: 45c8fc31918f48e3b6e33339cd30aeef577b1d57b24b285da2c6057da23d4859
5
5
  SHA512:
6
- metadata.gz: 69c4a9e1e1daae0bf0cd0f37ee8ccda29b50ac8bdcce773852b767a8c8f551bdf14f881256568efbb87dde514f42d81e30c737b519993f016204bebdd493a87d
7
- data.tar.gz: a15358d708e6496abd3ce5ab63efa1ffdd9cdc2357a470780fd71cd2026a1ed1c201a104eb4fb373347b6607a3180bb675e00f61695061649ae1675b90143c5b
6
+ metadata.gz: 569b5ec090de98ca588f13ce988bec47ef1372b2da0eedcf4debcaf446b47a57b6fda2fe6f3f0a4124215d1c1a369178029b0f901fbb7d17edd80135e843fba3
7
+ data.tar.gz: 0045eb7f270dfa3270204a5986f5ebf249d95c5eb414028a8990d41a1aeacea9fb6fab852b2c827614bc51d1d2fe48a98adc874c59b9857097ee21959a403ff1
data/_VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.132
1
+ 1.0.137
@@ -17,6 +17,9 @@
17
17
  * `note` (string): A note sent to the recipient with the bundle.
18
18
  * `recipient` (string): The recipient's email address.
19
19
  * `sent_at` (date-time): When the Bundle was shared with this recipient.
20
+ * `user_id` (int64): User ID. Provide a value of `0` to operate the current session's user.
21
+ * `bundle_id` (int64): Bundle to share.
22
+ * `share_after_create` (boolean): Set to true to share the link with the recipient upon creation.
20
23
 
21
24
 
22
25
  ---
@@ -44,3 +47,30 @@ Files::BundleRecipient.list(
44
47
  * `filter_lt` (object): If set, return records where the specifiied field is less than the supplied value. Valid fields are `has_registrations`.
45
48
  * `filter_lteq` (object): If set, return records where the specifiied field is less than or equal to the supplied value. Valid fields are `has_registrations`.
46
49
  * `bundle_id` (int64): Required - List recipients for the bundle with this ID.
50
+
51
+
52
+ ---
53
+
54
+ ## Create Bundle Recipient
55
+
56
+ ```
57
+ Files::BundleRecipient.create(
58
+ user_id: 1,
59
+ bundle_id: 1,
60
+ recipient: "johndoe@gmail.com",
61
+ name: "John Smith",
62
+ company: "Acme Ltd",
63
+ note: "Just a note.",
64
+ share_after_create: true
65
+ )
66
+ ```
67
+
68
+ ### Parameters
69
+
70
+ * `user_id` (int64): User ID. Provide a value of `0` to operate the current session's user.
71
+ * `bundle_id` (int64): Required - Bundle to share.
72
+ * `recipient` (string): Required - Email addresses to share this bundle with.
73
+ * `name` (string): Name of recipient.
74
+ * `company` (string): Company of recipient.
75
+ * `note` (string): Note to include in email.
76
+ * `share_after_create` (boolean): Set to true to share the link with the recipient upon creation.
@@ -0,0 +1,76 @@
1
+ # InboxRecipient
2
+
3
+ ## Example InboxRecipient Object
4
+
5
+ ```
6
+ {
7
+ "company": "Acme Inc.",
8
+ "name": "John Doe",
9
+ "note": "Some note.",
10
+ "recipient": "john.doe@example.com",
11
+ "sent_at": "2000-01-01T01:00:00Z"
12
+ }
13
+ ```
14
+
15
+ * `company` (string): The recipient's company.
16
+ * `name` (string): The recipient's name.
17
+ * `note` (string): A note sent to the recipient with the inbox.
18
+ * `recipient` (string): The recipient's email address.
19
+ * `sent_at` (date-time): When the Inbox was shared with this recipient.
20
+ * `user_id` (int64): User ID. Provide a value of `0` to operate the current session's user.
21
+ * `inbox_id` (int64): Inbox to share.
22
+ * `share_after_create` (boolean): Set to true to share the link with the recipient upon creation.
23
+
24
+
25
+ ---
26
+
27
+ ## List Inbox Recipients
28
+
29
+ ```
30
+ Files::InboxRecipient.list(
31
+ user_id: 1,
32
+ per_page: 1,
33
+ inbox_id: 1
34
+ )
35
+ ```
36
+
37
+ ### Parameters
38
+
39
+ * `user_id` (int64): User ID. Provide a value of `0` to operate the current session's user.
40
+ * `cursor` (string): Used for pagination. Send a cursor value to resume an existing list from the point at which you left off. Get a cursor from an existing list via the X-Files-Cursor-Next header.
41
+ * `per_page` (int64): Number of records to show per page. (Max: 10,000, 1,000 or less is recommended).
42
+ * `sort_by` (object): If set, sort records by the specified field in either 'asc' or 'desc' direction (e.g. sort_by[last_login_at]=desc). Valid fields are `has_registrations`.
43
+ * `filter` (object): If set, return records where the specifiied field is equal to the supplied value. Valid fields are `has_registrations`.
44
+ * `filter_gt` (object): If set, return records where the specifiied field is greater than the supplied value. Valid fields are `has_registrations`.
45
+ * `filter_gteq` (object): If set, return records where the specifiied field is greater than or equal to the supplied value. Valid fields are `has_registrations`.
46
+ * `filter_like` (object): If set, return records where the specifiied field is equal to the supplied value. Valid fields are `has_registrations`.
47
+ * `filter_lt` (object): If set, return records where the specifiied field is less than the supplied value. Valid fields are `has_registrations`.
48
+ * `filter_lteq` (object): If set, return records where the specifiied field is less than or equal to the supplied value. Valid fields are `has_registrations`.
49
+ * `inbox_id` (int64): Required - List recipients for the inbox with this ID.
50
+
51
+
52
+ ---
53
+
54
+ ## Create Inbox Recipient
55
+
56
+ ```
57
+ Files::InboxRecipient.create(
58
+ user_id: 1,
59
+ inbox_id: 1,
60
+ recipient: "johndoe@gmail.com",
61
+ name: "John Smith",
62
+ company: "Acme Ltd",
63
+ note: "Just a note.",
64
+ share_after_create: true
65
+ )
66
+ ```
67
+
68
+ ### Parameters
69
+
70
+ * `user_id` (int64): User ID. Provide a value of `0` to operate the current session's user.
71
+ * `inbox_id` (int64): Required - Inbox to share.
72
+ * `recipient` (string): Required - Email addresses to share this inbox with.
73
+ * `name` (string): Name of recipient.
74
+ * `company` (string): Company of recipient.
75
+ * `note` (string): Note to include in email.
76
+ * `share_after_create` (boolean): Set to true to share the link with the recipient upon creation.
data/docs/status.md CHANGED
@@ -17,12 +17,16 @@
17
17
 
18
18
  ]
19
19
  }
20
- ]
20
+ ],
21
+ "clickwrap_id": 1,
22
+ "clickwrap_body": ""
21
23
  }
22
24
  ```
23
25
 
24
- * `code` (int64): Status http code
26
+ * `code` (int64): Status HTTP code
25
27
  * `message` (string): Error message
26
28
  * `status` (string): Status message
27
29
  * `data`: Additional data
28
30
  * `errors` (array): A list of api errors
31
+ * `clickwrap_id` (int64): Required Clickwrap id
32
+ * `clickwrap_body` (string): Required Clickwrap body
data/lib/files.com.rb CHANGED
@@ -58,6 +58,7 @@ require "files.com/models/history"
58
58
  require "files.com/models/history_export"
59
59
  require "files.com/models/history_export_result"
60
60
  require "files.com/models/image"
61
+ require "files.com/models/inbox_recipient"
61
62
  require "files.com/models/inbox_registration"
62
63
  require "files.com/models/inbox_upload"
63
64
  require "files.com/models/invoice"
@@ -277,16 +277,12 @@ module Files
277
277
  code: error_data[:code] || resp.http_status,
278
278
  }
279
279
 
280
- case resp.http_status
281
- when 400, 404
282
- InvalidRequestError.new(error_data[:message], opts)
283
- when 401
284
- AuthenticationError.new(error_data[:message], opts)
285
- when 403
286
- PermissionError.new(error_data[:message], opts)
287
- when 429
288
- RateLimitError.new(error_data[:message], opts)
289
- else
280
+ return APIError.new(error_data[:message], opts) unless resp&.data&.dig(:type)
281
+
282
+ begin
283
+ error_class = Files.const_get(resp.data[:type].split("/").map { |piece| piece.split("-").map(&:capitalize).join('') + 'Error' }.join("::"))
284
+ error_class.new(error_data[:message], opts)
285
+ rescue NameError
290
286
  APIError.new(error_data[:message], opts)
291
287
  end
292
288
  end
@@ -26,16 +26,163 @@ module Files
26
26
  end
27
27
  end
28
28
 
29
- class APIError < Error; end
29
+ class APIConnectionError < Error; end
30
30
  class AuthenticationError < Error; end
31
- class ConnectionError < Error; end
32
- class InvalidRequestError < Error; end
31
+ class InvalidParameterError < Error; end
32
+ class MissingParameterError < Error; end
33
33
  class NotImplementedError < Error; end
34
- class PermissionError < Error; end
35
- class RateLimitError < Error; end
36
- class TooManyRequestsError < Error; end
37
- class ValidationError < Error; end
38
34
 
39
- class InvalidParameterError < InvalidRequestError; end
40
- class MissingParameterError < InvalidRequestError; end
35
+ class APIError < Error
36
+ attr_reader :detail
37
+ attr_reader :error
38
+ attr_reader :errors
39
+ attr_reader :http_code
40
+ attr_reader :instance
41
+ attr_reader :model_errors
42
+ attr_reader :title
43
+ attr_reader :type
44
+
45
+ def initialize(message = nil, **kwargs)
46
+ @detail = kwargs.dig(:json_body, 'detail')
47
+ @error = kwargs.dig(:json_body, 'error')
48
+ @errors = kwargs.dig(:json_body, 'errors')
49
+ @http_code = kwargs.dig(:json_body, 'http-code')
50
+ @instance = kwargs.dig(:json_body, 'instance')
51
+ @model_errors = kwargs.dig(:json_body, 'model_errors')
52
+ @title = kwargs.dig(:json_body, 'title')
53
+ @type = kwargs.dig(:json_body, 'type')
54
+
55
+ super(message, **kwargs)
56
+ end
57
+ end
58
+
59
+ class ProcessingPendingError < APIError; end
60
+
61
+ class AccountInBadStandingError < APIError; end
62
+ class AccountOverdueError < AccountInBadStandingError; end
63
+
64
+ class BadRequestError < APIError; end
65
+ class AttachmentTooLargeError < BadRequestError; end
66
+ class CannotDownloadDirectoryError < BadRequestError; end
67
+ class CantMoveWithMultipleLocationsError < BadRequestError; end
68
+ class DatetimeParseError < BadRequestError; end
69
+ class DestinationSameError < BadRequestError; end
70
+ class FolderMustNotBeAFileError < BadRequestError; end
71
+ class InvalidFilterCombinationError < BadRequestError; end
72
+ class InvalidFilterFieldError < BadRequestError; end
73
+ class InvalidInputEncodingError < BadRequestError; end
74
+ class InvalidInterfaceError < BadRequestError; end
75
+ class InvalidOauthError < BadRequestError; end
76
+ class InvalidOauthProviderError < BadRequestError; end
77
+ class InvalidReturnToUrlError < BadRequestError; end
78
+ class InvalidUploadOffsetError < BadRequestError; end
79
+ class InvalidUsernameOrPasswordError < BadRequestError; end
80
+ class OperationOnNonScimResourceError < BadRequestError; end
81
+ class UnsupportedHttpResponseFormatError < BadRequestError; end
82
+ class UnsupportedMediaTypeError < BadRequestError; end
83
+ class UserIdInvalidError < BadRequestError; end
84
+ class UserIdOnUserEndpointError < BadRequestError; end
85
+ class UserRequiredError < BadRequestError; end
86
+
87
+ class InvalidParamsError < APIError; end
88
+ class InvalidCursorError < InvalidParamsError; end
89
+ class NoValidInputParamsError < InvalidParamsError; end
90
+ class ReauthenticationNeededFieldsError < InvalidParamsError; end
91
+ class RequestParamPathCannotHaveTrailingWhitespaceError < InvalidParamsError; end
92
+ class RequestParamsContainInvalidCharacterError < InvalidParamsError; end
93
+ class RequestParamsInvalidError < InvalidParamsError; end
94
+ class RequestParamsRequiredError < InvalidParamsError; end
95
+ class UnsupportedCurrencyError < InvalidParamsError; end
96
+
97
+ class LockedError < APIError; end
98
+ class FileLockedError < LockedError; end
99
+ class FolderLockedError < LockedError; end
100
+ class ResourceLockedError < LockedError; end
101
+ class SubfolderLockedError < LockedError; end
102
+
103
+ class NotAuthenticatedError < APIError; end
104
+ class OneTimePasswordIncorrectError < NotAuthenticatedError; end
105
+ class TwoFactorAuthenticationErrorError < NotAuthenticatedError; end
106
+ class TwoFactorAuthenticationRequiredError < NotAuthenticatedError; end
107
+ class TwoFactorAuthenticationSetupExpiredError < NotAuthenticatedError; end
108
+
109
+ class NotAuthorizedError < APIError; end
110
+ class ApiKeyIsDisabledError < NotAuthorizedError; end
111
+ class ApiKeyIsPathRestrictedError < NotAuthorizedError; end
112
+ class ApiKeyOnlyForDesktopAppError < NotAuthorizedError; end
113
+ class ApiKeyOnlyForOfficeIntegrationError < NotAuthorizedError; end
114
+ class AuthenticationRequiredError < NotAuthorizedError; end
115
+ class CannotLoginWhileUsingKeyError < NotAuthorizedError; end
116
+ class CantActForOtherUserError < NotAuthorizedError; end
117
+ class ContactAdminForPasswordChangeHelpError < NotAuthorizedError; end
118
+ class FolderAdminOrBillingPermissionError < NotAuthorizedError; end
119
+ class FolderAdminPermissionRequiredError < NotAuthorizedError; end
120
+ class HistoryExportNonAdminsMustQueryByFolderOrPathError < NotAuthorizedError; end
121
+ class HistoryPermissionRequiredError < NotAuthorizedError; end
122
+ class InsufficientPermissionForParamsError < NotAuthorizedError; end
123
+ class LockedOutError < NotAuthorizedError; end
124
+ class LockoutRegionMismatchError < NotAuthorizedError; end
125
+ class MustAuthenticateWithApiKeyError < NotAuthorizedError; end
126
+ class NeedAdminPermissionForInboxError < NotAuthorizedError; end
127
+ class NoBillingPermissionError < NotAuthorizedError; end
128
+ class NotAllowedToCreateBundleError < NotAuthorizedError; end
129
+ class PasswordChangeNotRequiredError < NotAuthorizedError; end
130
+ class PasswordChangeRequiredError < NotAuthorizedError; end
131
+ class ReadOnlySessionError < NotAuthorizedError; end
132
+ class ReadPermissionRequiredError < NotAuthorizedError; end
133
+ class ReauthenticationFailedError < NotAuthorizedError; end
134
+ class ReauthenticationFailedFinalError < NotAuthorizedError; end
135
+ class ReauthenticationNeededActionError < NotAuthorizedError; end
136
+ class SelfManagedRequiredError < NotAuthorizedError; end
137
+ class UnauthorizedError < NotAuthorizedError; end
138
+ class UserIdWithoutSiteAdminError < NotAuthorizedError; end
139
+ class WritePermissionRequiredError < NotAuthorizedError; end
140
+ class ZipDownloadIpMismatchError < NotAuthorizedError; end
141
+
142
+ class NotFoundError < APIError; end
143
+ class ApiKeyNotFoundError < NotFoundError; end
144
+ class BundlePathNotFoundError < NotFoundError; end
145
+ class CodeNotFoundError < NotFoundError; end
146
+ class FileNotFoundError < NotFoundError; end
147
+ class FileUploadNotFoundError < NotFoundError; end
148
+ class FolderNotFoundError < NotFoundError; end
149
+ class GroupNotFoundError < NotFoundError; end
150
+ class HistoryExportNotReadyError < NotFoundError; end
151
+ class InboxNotFoundError < NotFoundError; end
152
+ class NestedNotFoundError < NotFoundError; end
153
+ class PlanNotFoundError < NotFoundError; end
154
+ class SiteNotFoundError < NotFoundError; end
155
+ class UserNotFoundError < NotFoundError; end
156
+
157
+ class ProcessingFailureError < APIError; end
158
+ class BundleRegistrationCodeFailedError < ProcessingFailureError; end
159
+ class DestinationExistsError < ProcessingFailureError; end
160
+ class DestinationParentConflictError < ProcessingFailureError; end
161
+ class DestinationParentDoesNotExistError < ProcessingFailureError; end
162
+ class FailedToChangePasswordError < ProcessingFailureError; end
163
+ class FileNotUploadedError < ProcessingFailureError; end
164
+ class FolderNotEmptyError < ProcessingFailureError; end
165
+ class HistoryExportFailureError < ProcessingFailureError; end
166
+ class HistoryUnavailableError < ProcessingFailureError; end
167
+ class InboxRegistrationCodeFailedError < ProcessingFailureError; end
168
+ class InvalidBundleCodeError < ProcessingFailureError; end
169
+ class InvalidOrExpiredCodeError < ProcessingFailureError; end
170
+ class ModelSaveErrorError < ProcessingFailureError; end
171
+ class RemoteServerErrorError < ProcessingFailureError; end
172
+ class TwoFactorAuthenticationCodeAlreadySentError < ProcessingFailureError; end
173
+ class UnprocessableEntityError < ProcessingFailureError; end
174
+
175
+ class RateLimitedError < APIError; end
176
+ class ReauthenticationRateLimitedError < RateLimitedError; end
177
+ class TooManyLoginAttemptsError < RateLimitedError; end
178
+ class TooManyRequestsError < RateLimitedError; end
179
+
180
+ class SiteConfigurationError < APIError; end
181
+ class AccountAlreadyExistsError < SiteConfigurationError; end
182
+ class NoAccountForSiteError < SiteConfigurationError; end
183
+ class SiteAdminRequiredError < SiteConfigurationError; end
184
+ class SiteWasRemovedError < SiteConfigurationError; end
185
+ class TrialExpiredError < SiteConfigurationError; end
186
+ class TrialLockedError < SiteConfigurationError; end
187
+ class UserRequestsEnabledRequiredError < SiteConfigurationError; end
41
188
  end
@@ -14,26 +14,82 @@ module Files
14
14
  @attributes[:company]
15
15
  end
16
16
 
17
+ def company=(value)
18
+ @attributes[:company] = value
19
+ end
20
+
17
21
  # string - The recipient's name.
18
22
  def name
19
23
  @attributes[:name]
20
24
  end
21
25
 
26
+ def name=(value)
27
+ @attributes[:name] = value
28
+ end
29
+
22
30
  # string - A note sent to the recipient with the bundle.
23
31
  def note
24
32
  @attributes[:note]
25
33
  end
26
34
 
35
+ def note=(value)
36
+ @attributes[:note] = value
37
+ end
38
+
27
39
  # string - The recipient's email address.
28
40
  def recipient
29
41
  @attributes[:recipient]
30
42
  end
31
43
 
44
+ def recipient=(value)
45
+ @attributes[:recipient] = value
46
+ end
47
+
32
48
  # date-time - When the Bundle was shared with this recipient.
33
49
  def sent_at
34
50
  @attributes[:sent_at]
35
51
  end
36
52
 
53
+ def sent_at=(value)
54
+ @attributes[:sent_at] = value
55
+ end
56
+
57
+ # int64 - User ID. Provide a value of `0` to operate the current session's user.
58
+ def user_id
59
+ @attributes[:user_id]
60
+ end
61
+
62
+ def user_id=(value)
63
+ @attributes[:user_id] = value
64
+ end
65
+
66
+ # int64 - Bundle to share.
67
+ def bundle_id
68
+ @attributes[:bundle_id]
69
+ end
70
+
71
+ def bundle_id=(value)
72
+ @attributes[:bundle_id] = value
73
+ end
74
+
75
+ # boolean - Set to true to share the link with the recipient upon creation.
76
+ def share_after_create
77
+ @attributes[:share_after_create]
78
+ end
79
+
80
+ def share_after_create=(value)
81
+ @attributes[:share_after_create] = value
82
+ end
83
+
84
+ def save
85
+ if @attributes[:id]
86
+ raise NotImplementedError.new("The BundleRecipient object doesn't support updates.")
87
+ else
88
+ new_obj = BundleRecipient.create(@attributes, @options)
89
+ @attributes = new_obj.attributes
90
+ end
91
+ end
92
+
37
93
  # Parameters:
38
94
  # user_id - int64 - User ID. Provide a value of `0` to operate the current session's user.
39
95
  # cursor - string - Used for pagination. Send a cursor value to resume an existing list from the point at which you left off. Get a cursor from an existing list via the X-Files-Cursor-Next header.
@@ -68,5 +124,27 @@ module Files
68
124
  def self.all(params = {}, options = {})
69
125
  list(params, options)
70
126
  end
127
+
128
+ # Parameters:
129
+ # user_id - int64 - User ID. Provide a value of `0` to operate the current session's user.
130
+ # bundle_id (required) - int64 - Bundle to share.
131
+ # recipient (required) - string - Email addresses to share this bundle with.
132
+ # name - string - Name of recipient.
133
+ # company - string - Company of recipient.
134
+ # note - string - Note to include in email.
135
+ # share_after_create - boolean - Set to true to share the link with the recipient upon creation.
136
+ def self.create(params = {}, options = {})
137
+ raise InvalidParameterError.new("Bad parameter: user_id must be an Integer") if params.dig(:user_id) and !params.dig(:user_id).is_a?(Integer)
138
+ raise InvalidParameterError.new("Bad parameter: bundle_id must be an Integer") if params.dig(:bundle_id) and !params.dig(:bundle_id).is_a?(Integer)
139
+ raise InvalidParameterError.new("Bad parameter: recipient must be an String") if params.dig(:recipient) and !params.dig(:recipient).is_a?(String)
140
+ raise InvalidParameterError.new("Bad parameter: name must be an String") if params.dig(:name) and !params.dig(:name).is_a?(String)
141
+ raise InvalidParameterError.new("Bad parameter: company must be an String") if params.dig(:company) and !params.dig(:company).is_a?(String)
142
+ raise InvalidParameterError.new("Bad parameter: note must be an String") if params.dig(:note) and !params.dig(:note).is_a?(String)
143
+ raise MissingParameterError.new("Parameter missing: bundle_id") unless params.dig(:bundle_id)
144
+ raise MissingParameterError.new("Parameter missing: recipient") unless params.dig(:recipient)
145
+
146
+ response, options = Api.send_request("/bundle_recipients", :post, params, options)
147
+ BundleRecipient.new(response.data, options)
148
+ end
71
149
  end
72
150
  end
@@ -0,0 +1,150 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Files
4
+ class InboxRecipient
5
+ attr_reader :options, :attributes
6
+
7
+ def initialize(attributes = {}, options = {})
8
+ @attributes = attributes || {}
9
+ @options = options || {}
10
+ end
11
+
12
+ # string - The recipient's company.
13
+ def company
14
+ @attributes[:company]
15
+ end
16
+
17
+ def company=(value)
18
+ @attributes[:company] = value
19
+ end
20
+
21
+ # string - The recipient's name.
22
+ def name
23
+ @attributes[:name]
24
+ end
25
+
26
+ def name=(value)
27
+ @attributes[:name] = value
28
+ end
29
+
30
+ # string - A note sent to the recipient with the inbox.
31
+ def note
32
+ @attributes[:note]
33
+ end
34
+
35
+ def note=(value)
36
+ @attributes[:note] = value
37
+ end
38
+
39
+ # string - The recipient's email address.
40
+ def recipient
41
+ @attributes[:recipient]
42
+ end
43
+
44
+ def recipient=(value)
45
+ @attributes[:recipient] = value
46
+ end
47
+
48
+ # date-time - When the Inbox was shared with this recipient.
49
+ def sent_at
50
+ @attributes[:sent_at]
51
+ end
52
+
53
+ def sent_at=(value)
54
+ @attributes[:sent_at] = value
55
+ end
56
+
57
+ # int64 - User ID. Provide a value of `0` to operate the current session's user.
58
+ def user_id
59
+ @attributes[:user_id]
60
+ end
61
+
62
+ def user_id=(value)
63
+ @attributes[:user_id] = value
64
+ end
65
+
66
+ # int64 - Inbox to share.
67
+ def inbox_id
68
+ @attributes[:inbox_id]
69
+ end
70
+
71
+ def inbox_id=(value)
72
+ @attributes[:inbox_id] = value
73
+ end
74
+
75
+ # boolean - Set to true to share the link with the recipient upon creation.
76
+ def share_after_create
77
+ @attributes[:share_after_create]
78
+ end
79
+
80
+ def share_after_create=(value)
81
+ @attributes[:share_after_create] = value
82
+ end
83
+
84
+ def save
85
+ if @attributes[:id]
86
+ raise NotImplementedError.new("The InboxRecipient object doesn't support updates.")
87
+ else
88
+ new_obj = InboxRecipient.create(@attributes, @options)
89
+ @attributes = new_obj.attributes
90
+ end
91
+ end
92
+
93
+ # Parameters:
94
+ # user_id - int64 - User ID. Provide a value of `0` to operate the current session's user.
95
+ # cursor - string - Used for pagination. Send a cursor value to resume an existing list from the point at which you left off. Get a cursor from an existing list via the X-Files-Cursor-Next header.
96
+ # per_page - int64 - Number of records to show per page. (Max: 10,000, 1,000 or less is recommended).
97
+ # sort_by - object - If set, sort records by the specified field in either 'asc' or 'desc' direction (e.g. sort_by[last_login_at]=desc). Valid fields are `has_registrations`.
98
+ # filter - object - If set, return records where the specifiied field is equal to the supplied value. Valid fields are `has_registrations`.
99
+ # filter_gt - object - If set, return records where the specifiied field is greater than the supplied value. Valid fields are `has_registrations`.
100
+ # filter_gteq - object - If set, return records where the specifiied field is greater than or equal to the supplied value. Valid fields are `has_registrations`.
101
+ # filter_like - object - If set, return records where the specifiied field is equal to the supplied value. Valid fields are `has_registrations`.
102
+ # filter_lt - object - If set, return records where the specifiied field is less than the supplied value. Valid fields are `has_registrations`.
103
+ # filter_lteq - object - If set, return records where the specifiied field is less than or equal to the supplied value. Valid fields are `has_registrations`.
104
+ # inbox_id (required) - int64 - List recipients for the inbox with this ID.
105
+ def self.list(params = {}, options = {})
106
+ raise InvalidParameterError.new("Bad parameter: user_id must be an Integer") if params.dig(:user_id) and !params.dig(:user_id).is_a?(Integer)
107
+ raise InvalidParameterError.new("Bad parameter: cursor must be an String") if params.dig(:cursor) and !params.dig(:cursor).is_a?(String)
108
+ raise InvalidParameterError.new("Bad parameter: per_page must be an Integer") if params.dig(:per_page) and !params.dig(:per_page).is_a?(Integer)
109
+ raise InvalidParameterError.new("Bad parameter: sort_by must be an Hash") if params.dig(:sort_by) and !params.dig(:sort_by).is_a?(Hash)
110
+ raise InvalidParameterError.new("Bad parameter: filter must be an Hash") if params.dig(:filter) and !params.dig(:filter).is_a?(Hash)
111
+ raise InvalidParameterError.new("Bad parameter: filter_gt must be an Hash") if params.dig(:filter_gt) and !params.dig(:filter_gt).is_a?(Hash)
112
+ raise InvalidParameterError.new("Bad parameter: filter_gteq must be an Hash") if params.dig(:filter_gteq) and !params.dig(:filter_gteq).is_a?(Hash)
113
+ raise InvalidParameterError.new("Bad parameter: filter_like must be an Hash") if params.dig(:filter_like) and !params.dig(:filter_like).is_a?(Hash)
114
+ raise InvalidParameterError.new("Bad parameter: filter_lt must be an Hash") if params.dig(:filter_lt) and !params.dig(:filter_lt).is_a?(Hash)
115
+ raise InvalidParameterError.new("Bad parameter: filter_lteq must be an Hash") if params.dig(:filter_lteq) and !params.dig(:filter_lteq).is_a?(Hash)
116
+ raise InvalidParameterError.new("Bad parameter: inbox_id must be an Integer") if params.dig(:inbox_id) and !params.dig(:inbox_id).is_a?(Integer)
117
+ raise MissingParameterError.new("Parameter missing: inbox_id") unless params.dig(:inbox_id)
118
+
119
+ List.new(InboxRecipient, params) do
120
+ Api.send_request("/inbox_recipients", :get, params, options)
121
+ end
122
+ end
123
+
124
+ def self.all(params = {}, options = {})
125
+ list(params, options)
126
+ end
127
+
128
+ # Parameters:
129
+ # user_id - int64 - User ID. Provide a value of `0` to operate the current session's user.
130
+ # inbox_id (required) - int64 - Inbox to share.
131
+ # recipient (required) - string - Email addresses to share this inbox with.
132
+ # name - string - Name of recipient.
133
+ # company - string - Company of recipient.
134
+ # note - string - Note to include in email.
135
+ # share_after_create - boolean - Set to true to share the link with the recipient upon creation.
136
+ def self.create(params = {}, options = {})
137
+ raise InvalidParameterError.new("Bad parameter: user_id must be an Integer") if params.dig(:user_id) and !params.dig(:user_id).is_a?(Integer)
138
+ raise InvalidParameterError.new("Bad parameter: inbox_id must be an Integer") if params.dig(:inbox_id) and !params.dig(:inbox_id).is_a?(Integer)
139
+ raise InvalidParameterError.new("Bad parameter: recipient must be an String") if params.dig(:recipient) and !params.dig(:recipient).is_a?(String)
140
+ raise InvalidParameterError.new("Bad parameter: name must be an String") if params.dig(:name) and !params.dig(:name).is_a?(String)
141
+ raise InvalidParameterError.new("Bad parameter: company must be an String") if params.dig(:company) and !params.dig(:company).is_a?(String)
142
+ raise InvalidParameterError.new("Bad parameter: note must be an String") if params.dig(:note) and !params.dig(:note).is_a?(String)
143
+ raise MissingParameterError.new("Parameter missing: inbox_id") unless params.dig(:inbox_id)
144
+ raise MissingParameterError.new("Parameter missing: recipient") unless params.dig(:recipient)
145
+
146
+ response, options = Api.send_request("/inbox_recipients", :post, params, options)
147
+ InboxRecipient.new(response.data, options)
148
+ end
149
+ end
150
+ end
@@ -9,7 +9,7 @@ module Files
9
9
  @options = options || {}
10
10
  end
11
11
 
12
- # int64 - Status http code
12
+ # int64 - Status HTTP code
13
13
  def code
14
14
  @attributes[:code]
15
15
  end
@@ -33,5 +33,15 @@ module Files
33
33
  def errors
34
34
  @attributes[:errors]
35
35
  end
36
+
37
+ # int64 - Required Clickwrap id
38
+ def clickwrap_id
39
+ @attributes[:clickwrap_id]
40
+ end
41
+
42
+ # string - Required Clickwrap body
43
+ def clickwrap_body
44
+ @attributes[:clickwrap_body]
45
+ end
36
46
  end
37
47
  end
data/lib/files.com/uri.rb CHANGED
@@ -34,17 +34,11 @@ module Files
34
34
  # here we need to, so switch to ASCII.
35
35
  component = component.dup
36
36
  component.force_encoding(Encoding::ASCII_8BIT)
37
- unencoded = Addressable::URI.unencode_component(component, String, leave_encoded)
38
- begin
39
- encoded = Addressable::URI.encode_component(
40
- # Addressable::IDNA.unicode_normalize_kc(unencoded),
41
- unencoded,
42
- character_class,
43
- leave_encoded
44
- )
45
- rescue ArgumentError
46
- encoded = encode_component(unencoded)
47
- end
37
+ encoded = Addressable::URI.encode_component(
38
+ component,
39
+ character_class,
40
+ leave_encoded
41
+ )
48
42
  encoded.force_encoding(Encoding::UTF_8)
49
43
  encoded
50
44
  end
data/spec/uri_spec.rb CHANGED
@@ -2,10 +2,14 @@ require "spec_helper"
2
2
 
3
3
  RSpec.describe Files::URI do
4
4
  describe "normalized_path" do
5
- it { expect(described_class.normalized_path("[[strange stuff]]#yes.text")).to eq("%5B%5Bstrange%20stuff%5D%5D%23yes.text") }
5
+ it { expect(described_class.normalized_path("path/[[strange stuff]]#yes.text")).to eq("path/%5B%5Bstrange%20stuff%5D%5D%23yes.text") }
6
6
  it { expect(Addressable::URI.unencode_component(described_class.normalized_path("[[strange stuff]]#yes.text"))).to eq("[[strange stuff]]#yes.text") }
7
7
 
8
8
  it { expect(described_class.normalized_path("folder/AdÇe")).to eq("folder/AdC%CC%A7e") }
9
9
  it { expect(Addressable::URI.unencode_component(described_class.normalized_path("AdÇe"))).to eq("AdÇe") }
10
+
11
+ it { expect(described_class.normalized_path("lorem%20ipsum.txt")).to eq("lorem%2520ipsum.txt") }
12
+ it { expect(described_class.normalized_path("lorem%ipsum.txt")).to eq("lorem%25ipsum.txt") }
13
+ it { expect(described_class.normalized_path("lorem ipsum.txt")).to eq("lorem%20ipsum.txt") }
10
14
  end
11
15
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: files.com
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.132
4
+ version: 1.0.137
5
5
  platform: ruby
6
6
  authors:
7
7
  - files.com
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-21 00:00:00.000000000 Z
11
+ date: 2021-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -117,6 +117,7 @@ files:
117
117
  - docs/history_export.md
118
118
  - docs/history_export_result.md
119
119
  - docs/image.md
120
+ - docs/inbox_recipient.md
120
121
  - docs/inbox_registration.md
121
122
  - docs/inbox_upload.md
122
123
  - docs/invoice.md
@@ -187,6 +188,7 @@ files:
187
188
  - lib/files.com/models/history_export.rb
188
189
  - lib/files.com/models/history_export_result.rb
189
190
  - lib/files.com/models/image.rb
191
+ - lib/files.com/models/inbox_recipient.rb
190
192
  - lib/files.com/models/inbox_registration.rb
191
193
  - lib/files.com/models/inbox_upload.rb
192
194
  - lib/files.com/models/invoice.rb