files.com 1.0.132 → 1.0.137

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
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