appwrite 2.4.1 → 4.1.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 (178) hide show
  1. checksums.yaml +4 -4
  2. data/lib/appwrite/client.rb +209 -56
  3. data/lib/appwrite/exception.rb +7 -7
  4. data/lib/appwrite/file.rb +9 -15
  5. data/lib/appwrite/models/attribute_boolean.rb +52 -0
  6. data/lib/appwrite/models/attribute_email.rb +57 -0
  7. data/lib/appwrite/models/attribute_enum.rb +62 -0
  8. data/lib/appwrite/models/attribute_float.rb +62 -0
  9. data/lib/appwrite/models/attribute_integer.rb +62 -0
  10. data/lib/appwrite/models/attribute_ip.rb +57 -0
  11. data/lib/appwrite/models/attribute_list.rb +32 -0
  12. data/lib/appwrite/models/attribute_string.rb +57 -0
  13. data/lib/appwrite/models/attribute_url.rb +57 -0
  14. data/lib/appwrite/models/bucket.rb +82 -0
  15. data/lib/appwrite/models/bucket_list.rb +32 -0
  16. data/lib/appwrite/models/collection.rb +62 -0
  17. data/lib/appwrite/models/collection_list.rb +32 -0
  18. data/lib/appwrite/models/continent.rb +32 -0
  19. data/lib/appwrite/models/continent_list.rb +32 -0
  20. data/lib/appwrite/models/country.rb +32 -0
  21. data/lib/appwrite/models/country_list.rb +32 -0
  22. data/lib/appwrite/models/currency.rb +57 -0
  23. data/lib/appwrite/models/currency_list.rb +32 -0
  24. data/lib/appwrite/models/deployment.rb +77 -0
  25. data/lib/appwrite/models/deployment_list.rb +32 -0
  26. data/lib/appwrite/models/document.rb +50 -0
  27. data/lib/appwrite/models/document_list.rb +36 -0
  28. data/lib/appwrite/models/execution.rb +72 -0
  29. data/lib/appwrite/models/execution_list.rb +32 -0
  30. data/lib/appwrite/models/file.rb +77 -0
  31. data/lib/appwrite/models/file_list.rb +32 -0
  32. data/lib/appwrite/models/function.rb +92 -0
  33. data/lib/appwrite/models/function_list.rb +32 -0
  34. data/lib/appwrite/models/health_antivirus.rb +32 -0
  35. data/lib/appwrite/models/health_queue.rb +27 -0
  36. data/lib/appwrite/models/health_status.rb +32 -0
  37. data/lib/appwrite/models/health_time.rb +37 -0
  38. data/lib/appwrite/models/index.rb +47 -0
  39. data/lib/appwrite/models/index_list.rb +32 -0
  40. data/lib/appwrite/models/language.rb +37 -0
  41. data/lib/appwrite/models/language_list.rb +32 -0
  42. data/lib/appwrite/models/locale.rb +57 -0
  43. data/lib/appwrite/models/log.rb +127 -0
  44. data/lib/appwrite/models/log_list.rb +32 -0
  45. data/lib/appwrite/models/membership.rb +67 -0
  46. data/lib/appwrite/models/membership_list.rb +32 -0
  47. data/lib/appwrite/models/phone.rb +37 -0
  48. data/lib/appwrite/models/phone_list.rb +32 -0
  49. data/lib/appwrite/models/preferences.rb +30 -0
  50. data/lib/appwrite/models/runtime.rb +57 -0
  51. data/lib/appwrite/models/runtime_list.rb +32 -0
  52. data/lib/appwrite/models/session.rb +142 -0
  53. data/lib/appwrite/models/session_list.rb +32 -0
  54. data/lib/appwrite/models/team.rb +42 -0
  55. data/lib/appwrite/models/team_list.rb +32 -0
  56. data/lib/appwrite/models/token.rb +42 -0
  57. data/lib/appwrite/models/user.rb +62 -0
  58. data/lib/appwrite/models/user_list.rb +32 -0
  59. data/lib/appwrite/query.rb +42 -0
  60. data/lib/appwrite/service.rb +0 -5
  61. data/lib/appwrite/services/account.rb +400 -138
  62. data/lib/appwrite/services/avatars.rb +188 -125
  63. data/lib/appwrite/services/database.rb +875 -130
  64. data/lib/appwrite/services/functions.rb +441 -207
  65. data/lib/appwrite/services/health.rb +201 -58
  66. data/lib/appwrite/services/locale.rb +133 -32
  67. data/lib/appwrite/services/storage.rb +471 -118
  68. data/lib/appwrite/services/teams.rb +302 -118
  69. data/lib/appwrite/services/users.rb +322 -127
  70. data/lib/appwrite.rb +57 -0
  71. metadata +74 -111
  72. data/.github/ISSUE_TEMPLATE/bug.yaml +0 -82
  73. data/.github/ISSUE_TEMPLATE/documentation.yaml +0 -32
  74. data/.github/ISSUE_TEMPLATE/feature.yaml +0 -40
  75. data/.travis.yml +0 -16
  76. data/CHANGELOG.md +0 -1
  77. data/Gemfile +0 -4
  78. data/LICENSE +0 -12
  79. data/README.md +0 -96
  80. data/appwrite.gemspec +0 -11
  81. data/docs/examples/account/create-recovery.md +0 -15
  82. data/docs/examples/account/create-verification.md +0 -15
  83. data/docs/examples/account/delete-session.md +0 -15
  84. data/docs/examples/account/delete-sessions.md +0 -15
  85. data/docs/examples/account/delete.md +0 -15
  86. data/docs/examples/account/get-logs.md +0 -15
  87. data/docs/examples/account/get-prefs.md +0 -15
  88. data/docs/examples/account/get-session.md +0 -15
  89. data/docs/examples/account/get-sessions.md +0 -15
  90. data/docs/examples/account/get.md +0 -15
  91. data/docs/examples/account/update-email.md +0 -15
  92. data/docs/examples/account/update-name.md +0 -15
  93. data/docs/examples/account/update-password.md +0 -15
  94. data/docs/examples/account/update-prefs.md +0 -15
  95. data/docs/examples/account/update-recovery.md +0 -15
  96. data/docs/examples/account/update-verification.md +0 -15
  97. data/docs/examples/avatars/get-browser.md +0 -15
  98. data/docs/examples/avatars/get-credit-card.md +0 -15
  99. data/docs/examples/avatars/get-favicon.md +0 -15
  100. data/docs/examples/avatars/get-flag.md +0 -15
  101. data/docs/examples/avatars/get-image.md +0 -15
  102. data/docs/examples/avatars/get-initials.md +0 -15
  103. data/docs/examples/avatars/get-q-r.md +0 -15
  104. data/docs/examples/database/create-collection.md +0 -15
  105. data/docs/examples/database/create-document.md +0 -15
  106. data/docs/examples/database/delete-collection.md +0 -15
  107. data/docs/examples/database/delete-document.md +0 -15
  108. data/docs/examples/database/get-collection.md +0 -15
  109. data/docs/examples/database/get-document.md +0 -15
  110. data/docs/examples/database/list-collections.md +0 -15
  111. data/docs/examples/database/list-documents.md +0 -15
  112. data/docs/examples/database/update-collection.md +0 -15
  113. data/docs/examples/database/update-document.md +0 -15
  114. data/docs/examples/functions/create-execution.md +0 -15
  115. data/docs/examples/functions/create-tag.md +0 -15
  116. data/docs/examples/functions/create.md +0 -15
  117. data/docs/examples/functions/delete-tag.md +0 -15
  118. data/docs/examples/functions/delete.md +0 -15
  119. data/docs/examples/functions/get-execution.md +0 -15
  120. data/docs/examples/functions/get-tag.md +0 -15
  121. data/docs/examples/functions/get.md +0 -15
  122. data/docs/examples/functions/list-executions.md +0 -15
  123. data/docs/examples/functions/list-tags.md +0 -15
  124. data/docs/examples/functions/list.md +0 -15
  125. data/docs/examples/functions/update-tag.md +0 -15
  126. data/docs/examples/functions/update.md +0 -15
  127. data/docs/examples/health/get-anti-virus.md +0 -15
  128. data/docs/examples/health/get-cache.md +0 -15
  129. data/docs/examples/health/get-d-b.md +0 -15
  130. data/docs/examples/health/get-queue-certificates.md +0 -15
  131. data/docs/examples/health/get-queue-functions.md +0 -15
  132. data/docs/examples/health/get-queue-logs.md +0 -15
  133. data/docs/examples/health/get-queue-tasks.md +0 -15
  134. data/docs/examples/health/get-queue-usage.md +0 -15
  135. data/docs/examples/health/get-queue-webhooks.md +0 -15
  136. data/docs/examples/health/get-storage-local.md +0 -15
  137. data/docs/examples/health/get-time.md +0 -15
  138. data/docs/examples/health/get.md +0 -15
  139. data/docs/examples/locale/get-continents.md +0 -15
  140. data/docs/examples/locale/get-countries-e-u.md +0 -15
  141. data/docs/examples/locale/get-countries-phones.md +0 -15
  142. data/docs/examples/locale/get-countries.md +0 -15
  143. data/docs/examples/locale/get-currencies.md +0 -15
  144. data/docs/examples/locale/get-languages.md +0 -15
  145. data/docs/examples/locale/get.md +0 -15
  146. data/docs/examples/storage/create-file.md +0 -15
  147. data/docs/examples/storage/delete-file.md +0 -15
  148. data/docs/examples/storage/get-file-download.md +0 -15
  149. data/docs/examples/storage/get-file-preview.md +0 -15
  150. data/docs/examples/storage/get-file-view.md +0 -15
  151. data/docs/examples/storage/get-file.md +0 -15
  152. data/docs/examples/storage/list-files.md +0 -15
  153. data/docs/examples/storage/update-file.md +0 -15
  154. data/docs/examples/teams/create-membership.md +0 -15
  155. data/docs/examples/teams/create.md +0 -15
  156. data/docs/examples/teams/delete-membership.md +0 -15
  157. data/docs/examples/teams/delete.md +0 -15
  158. data/docs/examples/teams/get-memberships.md +0 -15
  159. data/docs/examples/teams/get.md +0 -15
  160. data/docs/examples/teams/list.md +0 -15
  161. data/docs/examples/teams/update-membership-roles.md +0 -15
  162. data/docs/examples/teams/update-membership-status.md +0 -15
  163. data/docs/examples/teams/update.md +0 -15
  164. data/docs/examples/users/create.md +0 -15
  165. data/docs/examples/users/delete-session.md +0 -15
  166. data/docs/examples/users/delete-sessions.md +0 -15
  167. data/docs/examples/users/delete.md +0 -15
  168. data/docs/examples/users/get-logs.md +0 -15
  169. data/docs/examples/users/get-prefs.md +0 -15
  170. data/docs/examples/users/get-sessions.md +0 -15
  171. data/docs/examples/users/get.md +0 -15
  172. data/docs/examples/users/list.md +0 -15
  173. data/docs/examples/users/update-email.md +0 -15
  174. data/docs/examples/users/update-name.md +0 -15
  175. data/docs/examples/users/update-password.md +0 -15
  176. data/docs/examples/users/update-prefs.md +0 -15
  177. data/docs/examples/users/update-status.md +0 -15
  178. data/docs/examples/users/update-verification.md +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8c1eb3f808d7681c19fb3ce67089478bd8407225953e985602d375e2826cebd5
4
- data.tar.gz: be200991cd57aa18f7de0ea66ba32cddb0362475098799a177fb6b4e3614e063
3
+ metadata.gz: 9ccc9454e05eee3806e9bcb29e95ef8202b0fc617215e837e52a2cff52199bfd
4
+ data.tar.gz: 739353c7c628f0711f3c466c3d35f6db829bec9362415a735cf9ac3b72273a41
5
5
  SHA512:
6
- metadata.gz: fc95e5305739fbcb2ca092a48d7b03f821d75fa686c853d1dd1110aef3e806e331e7df1cc91280ed7bfb8950878de61471100fb68c0fde0768a2faad13de040e
7
- data.tar.gz: 5952f3051e0a25aa4913b9b64d8de94f3490d984e54139a6b76e5a139ed795358de993836ec63e3eb6660cb47881bad3e7608c18dee49d1054b57450746d1f89
6
+ metadata.gz: 483f458ce6e1b4abdeaeb96e60fabeb4f778fe775e39a1999abf19725f461a2db190b8b2b31f15d32d838436ac8b0e58bf6f1ce4f183e4a019d4fab75f0e8773
7
+ data.tar.gz: 91b5993ca7e9186e65150daf278751a510155d2d15a0de54169d9b6efdee376b93a99f512f75a649b32e04a389fe9ca8224e144c6905ccca4b11639930995478
@@ -1,3 +1,5 @@
1
+ #frozen_string_literal: true
2
+
1
3
  require 'net/http'
2
4
  require 'uri'
3
5
  require 'json'
@@ -5,136 +7,287 @@ require 'cgi'
5
7
 
6
8
  module Appwrite
7
9
  class Client
8
-
9
- METHOD_GET = 'get'
10
- METHOD_POST = 'post'
11
- METHOD_PUT = 'put'
12
- METHOD_PATCH = 'patch'
13
- METHOD_DELETE = 'delete'
14
- METHOD_HEAD = 'head'
15
- METHOD_OPTIONS = 'options'
16
- METHOD_CONNECT = 'connect'
17
- METHOD_TRACE = 'trace'
18
-
19
- def initialize()
10
+
11
+ def initialize
12
+ @chunk_size = 5*1024*1024
20
13
  @headers = {
21
- 'content-type' => '',
22
14
  'user-agent' => RUBY_PLATFORM + ':ruby-' + RUBY_VERSION,
23
- 'x-sdk-version' => 'appwrite:ruby:2.4.1',
24
- 'X-Appwrite-Response-Format' => '0.11.0'
15
+ 'x-sdk-version' => 'appwrite:ruby:4.1.0',
16
+ 'X-Appwrite-Response-Format' => '0.13.0'
25
17
  }
26
- @endpoint = 'https://appwrite.io/v1';
18
+ @endpoint = 'https://HOSTNAME/v1'
27
19
  end
28
20
 
21
+ # Set Project
22
+ #
23
+ # Your project ID
24
+ #
25
+ # @param [String] value The value to set for the Project header
26
+ #
27
+ # @return [self]
29
28
  def set_project(value)
30
29
  add_header('x-appwrite-project', value)
31
30
 
32
- return self
31
+ self
33
32
  end
34
33
 
34
+ # Set Key
35
+ #
36
+ # Your secret API key
37
+ #
38
+ # @param [String] value The value to set for the Key header
39
+ #
40
+ # @return [self]
35
41
  def set_key(value)
36
42
  add_header('x-appwrite-key', value)
37
43
 
38
- return self
44
+ self
39
45
  end
40
46
 
47
+ # Set JWT
48
+ #
49
+ # Your secret JSON Web Token
50
+ #
51
+ # @param [String] value The value to set for the JWT header
52
+ #
53
+ # @return [self]
41
54
  def set_jwt(value)
42
55
  add_header('x-appwrite-jwt', value)
43
56
 
44
- return self
57
+ self
45
58
  end
46
59
 
60
+ # Set Locale
61
+ #
62
+ # @param [String] value The value to set for the Locale header
63
+ #
64
+ # @return [self]
47
65
  def set_locale(value)
48
66
  add_header('x-appwrite-locale', value)
49
67
 
50
- return self
68
+ self
51
69
  end
52
70
 
71
+ # Set endpoint.
72
+ #
73
+ # @param [String] endpoint The endpoint to set
74
+ #
75
+ # @return [self]
53
76
  def set_endpoint(endpoint)
54
77
  @endpoint = endpoint
55
78
 
56
- return self
79
+ self
57
80
  end
58
-
81
+
82
+ # Set self signed.
83
+ #
84
+ # @param [String] self_signed Whether to allow self signed certificates.
85
+ #
86
+ # @return [self]
87
+ def set_self_signed(self_signed = true)
88
+ @self_signed = self_signed
89
+
90
+ self
91
+ end
92
+
93
+
94
+ # Add Header
95
+ #
96
+ # @param [String] key The key for the header to add
97
+ # @param [String] value The value for the header to add
98
+ #
99
+ # @return [self]
59
100
  def add_header(key, value)
60
101
  @headers[key.downcase] = value
61
102
 
62
- return self
103
+ self
63
104
  end
64
-
65
- def call(method, path = '', headers = {}, params = {})
66
- uri = URI.parse(@endpoint + path + ((method == METHOD_GET && params.length) ? '?' + encode(params) : ''))
67
- return fetch(method, uri, headers, params)
105
+
106
+ # Send the HTTP request.
107
+ #
108
+ # @param [String] method The HTTP method for the request
109
+ # @param [String] path The path for the request
110
+ # @param [Hash] headers The headers to send with the request
111
+ # @param [Hash] params The parameters to send with the request
112
+ # @param [Class] response_type The type of response to return
113
+ #
114
+ # @return [self]
115
+ def call(
116
+ method:,
117
+ path: '',
118
+ headers: {},
119
+ params: {},
120
+ response_type: nil
121
+ )
122
+ uri = URI.parse(@endpoint + path + ((method == "GET" && params.length) ? '?' + encode(params) : ''))
123
+
124
+ fetch(method, uri, headers, params, response_type)
68
125
  end
69
126
 
70
- protected
127
+ def chunked_upload(
128
+ path:,
129
+ headers:,
130
+ params:,
131
+ param_name: '',
132
+ id_param_name: nil,
133
+ on_progress: nil,
134
+ response_type: nil
135
+ )
136
+ file_path = params[param_name.to_sym]
137
+ size = ::File.size(file_path)
138
+
139
+ if size < @chunk_size
140
+ slice = ::File.read(file_path)
141
+ params[param_name] = File.new(file_path, slice)
142
+ return call(
143
+ method: 'POST',
144
+ path: path,
145
+ headers: headers,
146
+ params: params,
147
+ response_type: response_type,
148
+ )
149
+ end
150
+
151
+ offset = 0
152
+ id_param_name = id_param_name.to_sym if id_param_name
153
+ if id_param_name&.empty? == false && params[id_param_name] != "unique()"
154
+ # Make a request to check if a file already exists
155
+ current = call(
156
+ method: "GET",
157
+ path: "#{path}/#{params[id_param_name]}",
158
+ headers: headers,
159
+ params: {}
160
+ )
161
+ chunks_uploaded = current['chunksUploaded'].to_i
162
+ offset = [size, (chunks_uploaded * @chunk_size)].min
163
+ end
164
+
165
+ while offset < size
166
+ slice = IO.read(file_path, @chunk_size, offset)
167
+
168
+ params[param_name] = File.new(file_path, slice)
169
+ headers['content-range'] = "bytes #{offset}-#{[offset + @chunk_size - 1, size].min}/#{size}"
170
+
171
+ result = call(
172
+ method: 'POST',
173
+ path: path,
174
+ headers: headers,
175
+ params: params,
176
+ )
177
+
178
+ offset += @chunk_size
179
+
180
+ if defined? result['$id']
181
+ headers['x-Appwrite-id'] = result['$id']
182
+ end
183
+
184
+ on_progress.call({
185
+ id: result['$id'],
186
+ progress: ([offset, size].min).to_f/size.to_f * 100.0,
187
+ size_uploaded: [offset, size].min,
188
+ chunks_total: result['chunksTotal'],
189
+ chunks_uploaded: result['chunksUploaded']
190
+ }) unless on_progress.nil?
191
+ end
192
+
193
+ return result unless response_type.respond_to?("from")
194
+
195
+ response_type.from(map: result)
196
+ end
71
197
 
72
198
  private
73
199
 
74
- def fetch(method, uri, headers, params, limit = 5)
200
+ def fetch(
201
+ method,
202
+ uri,
203
+ headers,
204
+ params,
205
+ response_type = nil,
206
+ limit = 5
207
+ )
75
208
  raise ArgumentError, 'Too Many HTTP Redirects' if limit == 0
76
209
 
77
- http = Net::HTTP.new(uri.host, uri.port)
78
- http.use_ssl = (uri.scheme == 'https')
210
+ @http = Net::HTTP.new(uri.host, uri.port) unless defined? @http
211
+ @http.use_ssl = !@self_signed
79
212
  payload = ''
80
213
 
81
214
  headers = @headers.merge(headers)
82
- @BOUNDARY = "----A30#3ad1"
83
- if (method != METHOD_GET)
84
- case headers['content-type'][0, headers['content-type'].index(';') || headers['content-type'].length]
215
+
216
+ @boundary = "----A30#3ad1"
217
+ if method != "GET"
218
+ case headers[:'content-type']
85
219
  when 'application/json'
86
220
  payload = params.to_json
87
221
  when 'multipart/form-data'
88
- payload = "--#{@BOUNDARY}\r\n" + encodeFormData(params)
89
- headers['content-type'] = "multipart/form-data; boundary=#{@BOUNDARY}"
222
+ payload = "--#{@boundary}\r\n" + encode_form_data(params)
223
+ headers[:'content-type'] = "multipart/form-data; boundary=#{@boundary}"
90
224
  else
91
225
  payload = encode(params)
92
226
  end
93
227
  end
94
228
 
95
229
  begin
96
- response = http.send_request(method.upcase, uri.request_uri, payload, headers)
230
+ response = @http.send_request(method, uri.request_uri, payload, headers)
97
231
  rescue => error
98
232
  raise Appwrite::Exception.new(error.message)
99
233
  end
100
234
 
101
235
  # Handle Redirects
102
- if (response.class == Net::HTTPRedirection || response.class == Net::HTTPMovedPermanently)
236
+ if response.class == Net::HTTPRedirection || response.class == Net::HTTPMovedPermanently
103
237
  location = response['location']
104
238
  uri = URI.parse(uri.scheme + "://" + uri.host + "" + location)
105
239
 
106
- return fetch(method, uri, headers, {}, limit - 1)
240
+ return fetch(method, uri, headers, {}, response_type, limit - 1)
107
241
  end
108
-
109
- begin
110
- res = JSON.parse(response.body);
111
- rescue JSON::ParserError => e
112
- raise Appwrite::Exception.new(response.body, response.code, nil)
242
+
243
+ if response.content_type == 'application/json'
244
+ begin
245
+ result = JSON.parse(response.body)
246
+ rescue JSON::ParserError => e
247
+ raise Appwrite::Exception.new(response.body, response.code, nil, response)
248
+ end
249
+
250
+ if response.code.to_i >= 400
251
+ raise Appwrite::Exception.new(result['message'], result['status'], result['type'], result)
252
+ end
253
+
254
+ unless response_type.respond_to?("from")
255
+ return result
256
+ end
257
+
258
+ return response_type.from(map: result)
113
259
  end
114
260
 
115
- if(response.code.to_i >= 400)
116
- raise Appwrite::Exception.new(res['message'], res['status'], res)
261
+ if response.code.to_i >= 400
262
+ raise Appwrite::Exception.new(response.body, response.code, response)
117
263
  end
118
264
 
119
- return res;
265
+ if response.respond_to?("body_permitted?")
266
+ return response.body if response.body_permitted?
267
+ end
268
+
269
+ return response
120
270
  end
121
271
 
122
- def encodeFormData(value, key=nil)
272
+ def encode_form_data(value, key=nil)
123
273
  case value
124
- when Hash then value.map { |k,v| encodeFormData(v,k) }.join
125
- when Array then value.map { |v| encodeFormData(v, "#{key}[]") }.join
126
- when nil then ''
274
+ when Hash
275
+ value.map { |k,v| encode_form_data(v,k) }.join
276
+ when Array
277
+ value.map { |v| encode_form_data(v, "#{key}[]") }.join
278
+ when nil
279
+ ''
127
280
  else
128
281
  post_body = []
129
- if(value.instance_of? File)
282
+ if value.instance_of? File
130
283
  post_body << "Content-Disposition: form-data; name=\"#{key}\"; filename=\"#{value.name}\"\r\n"
131
- post_body << "Content-Type: #{value.mimeType}\r\n\r\n"
284
+ post_body << "Content-Type: #{value.mime_type}\r\n\r\n"
132
285
  post_body << value.content
133
- post_body << "\r\n--#{@BOUNDARY}--\r\n"
286
+ post_body << "\r\n--#{@boundary}--\r\n"
134
287
  else
135
288
  post_body << "Content-Disposition: form-data; name=\"#{key}\"\r\n\r\n"
136
289
  post_body << "#{value.to_s}"
137
- post_body << "\r\n--#{@BOUNDARY}\r\n"
290
+ post_body << "\r\n--#{@boundary}\r\n"
138
291
  end
139
292
  post_body.join
140
293
  end
@@ -154,4 +307,4 @@ module Appwrite
154
307
  root_key.nil? ? key : "#{root_key}[#{key.to_s}]"
155
308
  end
156
309
  end
157
- end
310
+ end
@@ -1,14 +1,14 @@
1
1
  module Appwrite
2
2
  class Exception < StandardError
3
- @code = 0;
4
- @response = nil;
5
-
6
- def initialize(message, code, response)
3
+ attr_reader :code
4
+ attr_reader :response
5
+ attr_reader :type
6
+
7
+ def initialize(message, code = 0, type = nil, response = nil)
7
8
  super(message)
8
9
  @code = code
10
+ @type = type
9
11
  @response = response
10
12
  end
11
- attr_reader :code
12
- attr_reader :response
13
13
  end
14
- end
14
+ end
data/lib/appwrite/file.rb CHANGED
@@ -2,22 +2,16 @@ require 'mime/types'
2
2
 
3
3
  module Appwrite
4
4
  class File
5
- def initialize(path)
6
- @name = ::File.basename(path)
7
- @content = ::File.read(path)
8
- @mimeType = MIME::Types.type_for(path)
9
- end
10
-
11
- def name
12
- @name
13
- end
5
+ attr_reader :path
6
+ attr_reader :name
7
+ attr_reader :content
8
+ attr_reader :mime_type
14
9
 
15
- def content
16
- @content
17
- end
18
-
19
- def mimeType
20
- @mimeType
10
+ def initialize(path, content)
11
+ @path = path
12
+ @content = content
13
+ @name = ::File.basename(path)
14
+ @mime_type = MIME::Types.type_for(path)
21
15
  end
22
16
  end
23
17
  end
@@ -0,0 +1,52 @@
1
+ #frozen_string_literal: true
2
+
3
+ module Appwrite
4
+ module Models
5
+ class AttributeBoolean
6
+ attr_reader :key
7
+ attr_reader :type
8
+ attr_reader :status
9
+ attr_reader :required
10
+ attr_reader :array
11
+ attr_reader :default
12
+
13
+ def initialize(
14
+ key:,
15
+ type:,
16
+ status:,
17
+ required:,
18
+ array: ,
19
+ default:
20
+ )
21
+ @key = key
22
+ @type = type
23
+ @status = status
24
+ @required = required
25
+ @array = array
26
+ @default = default
27
+ end
28
+
29
+ def self.from(map:)
30
+ AttributeBoolean.new(
31
+ key: map["key"],
32
+ type: map["type"],
33
+ status: map["status"],
34
+ required: map["required"],
35
+ array: map["array"],
36
+ default: map["default"]
37
+ )
38
+ end
39
+
40
+ def to_map
41
+ {
42
+ "key": @key,
43
+ "type": @type,
44
+ "status": @status,
45
+ "required": @required,
46
+ "array": @array,
47
+ "default": @default
48
+ }
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,57 @@
1
+ #frozen_string_literal: true
2
+
3
+ module Appwrite
4
+ module Models
5
+ class AttributeEmail
6
+ attr_reader :key
7
+ attr_reader :type
8
+ attr_reader :status
9
+ attr_reader :required
10
+ attr_reader :array
11
+ attr_reader :format
12
+ attr_reader :default
13
+
14
+ def initialize(
15
+ key:,
16
+ type:,
17
+ status:,
18
+ required:,
19
+ array: ,
20
+ format:,
21
+ default:
22
+ )
23
+ @key = key
24
+ @type = type
25
+ @status = status
26
+ @required = required
27
+ @array = array
28
+ @format = format
29
+ @default = default
30
+ end
31
+
32
+ def self.from(map:)
33
+ AttributeEmail.new(
34
+ key: map["key"],
35
+ type: map["type"],
36
+ status: map["status"],
37
+ required: map["required"],
38
+ array: map["array"],
39
+ format: map["format"],
40
+ default: map["default"]
41
+ )
42
+ end
43
+
44
+ def to_map
45
+ {
46
+ "key": @key,
47
+ "type": @type,
48
+ "status": @status,
49
+ "required": @required,
50
+ "array": @array,
51
+ "format": @format,
52
+ "default": @default
53
+ }
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,62 @@
1
+ #frozen_string_literal: true
2
+
3
+ module Appwrite
4
+ module Models
5
+ class AttributeEnum
6
+ attr_reader :key
7
+ attr_reader :type
8
+ attr_reader :status
9
+ attr_reader :required
10
+ attr_reader :array
11
+ attr_reader :elements
12
+ attr_reader :format
13
+ attr_reader :default
14
+
15
+ def initialize(
16
+ key:,
17
+ type:,
18
+ status:,
19
+ required:,
20
+ array: ,
21
+ elements:,
22
+ format:,
23
+ default:
24
+ )
25
+ @key = key
26
+ @type = type
27
+ @status = status
28
+ @required = required
29
+ @array = array
30
+ @elements = elements
31
+ @format = format
32
+ @default = default
33
+ end
34
+
35
+ def self.from(map:)
36
+ AttributeEnum.new(
37
+ key: map["key"],
38
+ type: map["type"],
39
+ status: map["status"],
40
+ required: map["required"],
41
+ array: map["array"],
42
+ elements: map["elements"],
43
+ format: map["format"],
44
+ default: map["default"]
45
+ )
46
+ end
47
+
48
+ def to_map
49
+ {
50
+ "key": @key,
51
+ "type": @type,
52
+ "status": @status,
53
+ "required": @required,
54
+ "array": @array,
55
+ "elements": @elements,
56
+ "format": @format,
57
+ "default": @default
58
+ }
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,62 @@
1
+ #frozen_string_literal: true
2
+
3
+ module Appwrite
4
+ module Models
5
+ class AttributeFloat
6
+ attr_reader :key
7
+ attr_reader :type
8
+ attr_reader :status
9
+ attr_reader :required
10
+ attr_reader :array
11
+ attr_reader :min
12
+ attr_reader :max
13
+ attr_reader :default
14
+
15
+ def initialize(
16
+ key:,
17
+ type:,
18
+ status:,
19
+ required:,
20
+ array: ,
21
+ min: ,
22
+ max: ,
23
+ default:
24
+ )
25
+ @key = key
26
+ @type = type
27
+ @status = status
28
+ @required = required
29
+ @array = array
30
+ @min = min
31
+ @max = max
32
+ @default = default
33
+ end
34
+
35
+ def self.from(map:)
36
+ AttributeFloat.new(
37
+ key: map["key"],
38
+ type: map["type"],
39
+ status: map["status"],
40
+ required: map["required"],
41
+ array: map["array"],
42
+ min: map["min"],
43
+ max: map["max"],
44
+ default: map["default"]
45
+ )
46
+ end
47
+
48
+ def to_map
49
+ {
50
+ "key": @key,
51
+ "type": @type,
52
+ "status": @status,
53
+ "required": @required,
54
+ "array": @array,
55
+ "min": @min,
56
+ "max": @max,
57
+ "default": @default
58
+ }
59
+ end
60
+ end
61
+ end
62
+ end