appwrite 1.0.11 → 2.1.2

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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +16 -0
  3. data/Gemfile +1 -0
  4. data/LICENSE +1 -1
  5. data/README.md +72 -5
  6. data/appwrite.gemspec +3 -5
  7. data/docs/examples/account/create-recovery.md +15 -0
  8. data/docs/examples/account/create-verification.md +15 -0
  9. data/docs/examples/account/delete-session.md +15 -0
  10. data/docs/examples/account/delete-sessions.md +15 -0
  11. data/docs/examples/account/delete.md +15 -0
  12. data/docs/examples/account/get-logs.md +15 -0
  13. data/docs/examples/account/get-prefs.md +15 -0
  14. data/docs/examples/account/get-sessions.md +15 -0
  15. data/docs/examples/account/get.md +15 -0
  16. data/docs/examples/account/update-email.md +15 -0
  17. data/docs/examples/account/update-name.md +15 -0
  18. data/docs/examples/account/update-password.md +15 -0
  19. data/docs/examples/account/update-prefs.md +15 -0
  20. data/docs/examples/account/update-recovery.md +15 -0
  21. data/docs/examples/account/update-verification.md +15 -0
  22. data/docs/examples/{database/get-collection-logs.md → avatars/get-initials.md} +2 -2
  23. data/docs/examples/database/create-document.md +1 -1
  24. data/docs/examples/database/update-collection.md +1 -1
  25. data/docs/examples/database/update-document.md +1 -1
  26. data/docs/examples/functions/create-execution.md +15 -0
  27. data/docs/examples/functions/create-tag.md +15 -0
  28. data/docs/examples/functions/create.md +15 -0
  29. data/docs/examples/functions/delete-tag.md +15 -0
  30. data/docs/examples/functions/delete.md +15 -0
  31. data/docs/examples/functions/get-execution.md +15 -0
  32. data/docs/examples/functions/get-tag.md +15 -0
  33. data/docs/examples/functions/get.md +15 -0
  34. data/docs/examples/functions/list-executions.md +15 -0
  35. data/docs/examples/functions/list-tags.md +15 -0
  36. data/docs/examples/functions/list.md +15 -0
  37. data/docs/examples/functions/update-tag.md +15 -0
  38. data/docs/examples/functions/update.md +15 -0
  39. data/docs/examples/locale/get-languages.md +15 -0
  40. data/docs/examples/storage/create-file.md +1 -1
  41. data/docs/examples/teams/delete-membership.md +1 -1
  42. data/docs/examples/teams/update-membership-roles.md +15 -0
  43. data/docs/examples/teams/update-membership-status.md +15 -0
  44. data/docs/examples/users/delete.md +15 -0
  45. data/docs/examples/users/update-status.md +1 -1
  46. data/lib/appwrite.rb +5 -0
  47. data/lib/appwrite/client.rb +46 -5
  48. data/lib/appwrite/exception.rb +14 -0
  49. data/lib/appwrite/file.rb +23 -0
  50. data/lib/appwrite/services/account.rb +280 -0
  51. data/lib/appwrite/services/avatars.rb +133 -34
  52. data/lib/appwrite/services/database.rb +199 -67
  53. data/lib/appwrite/services/functions.rb +357 -0
  54. data/lib/appwrite/services/health.rb +12 -24
  55. data/lib/appwrite/services/locale.rb +16 -12
  56. data/lib/appwrite/services/storage.rb +124 -35
  57. data/lib/appwrite/services/teams.rb +187 -34
  58. data/lib/appwrite/services/users.rb +115 -31
  59. metadata +44 -11
@@ -0,0 +1,15 @@
1
+ require 'appwrite'
2
+
3
+ client = Appwrite::Client.new()
4
+
5
+ client
6
+ .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint
7
+ .set_project('5df5acd0d48c2') # Your project ID
8
+ .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key
9
+ ;
10
+
11
+ functions = Appwrite::Functions.new(client);
12
+
13
+ response = functions.create_execution(function_id: '[FUNCTION_ID]');
14
+
15
+ puts response
@@ -0,0 +1,15 @@
1
+ require 'appwrite'
2
+
3
+ client = Appwrite::Client.new()
4
+
5
+ client
6
+ .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint
7
+ .set_project('5df5acd0d48c2') # Your project ID
8
+ .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key
9
+ ;
10
+
11
+ functions = Appwrite::Functions.new(client);
12
+
13
+ response = functions.create_tag(function_id: '[FUNCTION_ID]', command: '[COMMAND]', code: Appwrite::File.new());
14
+
15
+ puts response
@@ -0,0 +1,15 @@
1
+ require 'appwrite'
2
+
3
+ client = Appwrite::Client.new()
4
+
5
+ client
6
+ .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint
7
+ .set_project('5df5acd0d48c2') # Your project ID
8
+ .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key
9
+ ;
10
+
11
+ functions = Appwrite::Functions.new(client);
12
+
13
+ response = functions.create(name: '[NAME]', execute: [], env: 'dotnet-3.1');
14
+
15
+ puts response
@@ -0,0 +1,15 @@
1
+ require 'appwrite'
2
+
3
+ client = Appwrite::Client.new()
4
+
5
+ client
6
+ .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint
7
+ .set_project('5df5acd0d48c2') # Your project ID
8
+ .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key
9
+ ;
10
+
11
+ functions = Appwrite::Functions.new(client);
12
+
13
+ response = functions.delete_tag(function_id: '[FUNCTION_ID]', tag_id: '[TAG_ID]');
14
+
15
+ puts response
@@ -0,0 +1,15 @@
1
+ require 'appwrite'
2
+
3
+ client = Appwrite::Client.new()
4
+
5
+ client
6
+ .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint
7
+ .set_project('5df5acd0d48c2') # Your project ID
8
+ .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key
9
+ ;
10
+
11
+ functions = Appwrite::Functions.new(client);
12
+
13
+ response = functions.delete(function_id: '[FUNCTION_ID]');
14
+
15
+ puts response
@@ -0,0 +1,15 @@
1
+ require 'appwrite'
2
+
3
+ client = Appwrite::Client.new()
4
+
5
+ client
6
+ .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint
7
+ .set_project('5df5acd0d48c2') # Your project ID
8
+ .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key
9
+ ;
10
+
11
+ functions = Appwrite::Functions.new(client);
12
+
13
+ response = functions.get_execution(function_id: '[FUNCTION_ID]', execution_id: '[EXECUTION_ID]');
14
+
15
+ puts response
@@ -0,0 +1,15 @@
1
+ require 'appwrite'
2
+
3
+ client = Appwrite::Client.new()
4
+
5
+ client
6
+ .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint
7
+ .set_project('5df5acd0d48c2') # Your project ID
8
+ .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key
9
+ ;
10
+
11
+ functions = Appwrite::Functions.new(client);
12
+
13
+ response = functions.get_tag(function_id: '[FUNCTION_ID]', tag_id: '[TAG_ID]');
14
+
15
+ puts response
@@ -0,0 +1,15 @@
1
+ require 'appwrite'
2
+
3
+ client = Appwrite::Client.new()
4
+
5
+ client
6
+ .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint
7
+ .set_project('5df5acd0d48c2') # Your project ID
8
+ .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key
9
+ ;
10
+
11
+ functions = Appwrite::Functions.new(client);
12
+
13
+ response = functions.get(function_id: '[FUNCTION_ID]');
14
+
15
+ puts response
@@ -0,0 +1,15 @@
1
+ require 'appwrite'
2
+
3
+ client = Appwrite::Client.new()
4
+
5
+ client
6
+ .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint
7
+ .set_project('5df5acd0d48c2') # Your project ID
8
+ .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key
9
+ ;
10
+
11
+ functions = Appwrite::Functions.new(client);
12
+
13
+ response = functions.list_executions(function_id: '[FUNCTION_ID]');
14
+
15
+ puts response
@@ -0,0 +1,15 @@
1
+ require 'appwrite'
2
+
3
+ client = Appwrite::Client.new()
4
+
5
+ client
6
+ .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint
7
+ .set_project('5df5acd0d48c2') # Your project ID
8
+ .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key
9
+ ;
10
+
11
+ functions = Appwrite::Functions.new(client);
12
+
13
+ response = functions.list_tags(function_id: '[FUNCTION_ID]');
14
+
15
+ puts response
@@ -0,0 +1,15 @@
1
+ require 'appwrite'
2
+
3
+ client = Appwrite::Client.new()
4
+
5
+ client
6
+ .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint
7
+ .set_project('5df5acd0d48c2') # Your project ID
8
+ .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key
9
+ ;
10
+
11
+ functions = Appwrite::Functions.new(client);
12
+
13
+ response = functions.list();
14
+
15
+ puts response
@@ -0,0 +1,15 @@
1
+ require 'appwrite'
2
+
3
+ client = Appwrite::Client.new()
4
+
5
+ client
6
+ .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint
7
+ .set_project('5df5acd0d48c2') # Your project ID
8
+ .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key
9
+ ;
10
+
11
+ functions = Appwrite::Functions.new(client);
12
+
13
+ response = functions.update_tag(function_id: '[FUNCTION_ID]', tag: '[TAG]');
14
+
15
+ puts response
@@ -0,0 +1,15 @@
1
+ require 'appwrite'
2
+
3
+ client = Appwrite::Client.new()
4
+
5
+ client
6
+ .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint
7
+ .set_project('5df5acd0d48c2') # Your project ID
8
+ .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key
9
+ ;
10
+
11
+ functions = Appwrite::Functions.new(client);
12
+
13
+ response = functions.update(function_id: '[FUNCTION_ID]', name: '[NAME]', execute: []);
14
+
15
+ puts response
@@ -0,0 +1,15 @@
1
+ require 'appwrite'
2
+
3
+ client = Appwrite::Client.new()
4
+
5
+ client
6
+ .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint
7
+ .set_project('5df5acd0d48c2') # Your project ID
8
+ .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key
9
+ ;
10
+
11
+ locale = Appwrite::Locale.new(client);
12
+
13
+ response = locale.get_languages();
14
+
15
+ puts response
@@ -10,6 +10,6 @@ client
10
10
 
11
11
  storage = Appwrite::Storage.new(client);
12
12
 
13
- response = storage.create_file(file: File.new(), read: [], write: []);
13
+ response = storage.create_file(file: Appwrite::File.new());
14
14
 
15
15
  puts response
@@ -10,6 +10,6 @@ client
10
10
 
11
11
  teams = Appwrite::Teams.new(client);
12
12
 
13
- response = teams.delete_membership(team_id: '[TEAM_ID]', invite_id: '[INVITE_ID]');
13
+ response = teams.delete_membership(team_id: '[TEAM_ID]', membership_id: '[MEMBERSHIP_ID]');
14
14
 
15
15
  puts response
@@ -0,0 +1,15 @@
1
+ require 'appwrite'
2
+
3
+ client = Appwrite::Client.new()
4
+
5
+ client
6
+ .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint
7
+ .set_project('5df5acd0d48c2') # Your project ID
8
+ .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key
9
+ ;
10
+
11
+ teams = Appwrite::Teams.new(client);
12
+
13
+ response = teams.update_membership_roles(team_id: '[TEAM_ID]', membership_id: '[MEMBERSHIP_ID]', roles: []);
14
+
15
+ puts response
@@ -0,0 +1,15 @@
1
+ require 'appwrite'
2
+
3
+ client = Appwrite::Client.new()
4
+
5
+ client
6
+ .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint
7
+ .set_project('5df5acd0d48c2') # Your project ID
8
+ .set_j_w_t('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ...') # Your secret JSON Web Token
9
+ ;
10
+
11
+ teams = Appwrite::Teams.new(client);
12
+
13
+ response = teams.update_membership_status(team_id: '[TEAM_ID]', membership_id: '[MEMBERSHIP_ID]', user_id: '[USER_ID]', secret: '[SECRET]');
14
+
15
+ puts response
@@ -0,0 +1,15 @@
1
+ require 'appwrite'
2
+
3
+ client = Appwrite::Client.new()
4
+
5
+ client
6
+ .set_endpoint('https://[HOSTNAME_OR_IP]/v1') # Your API Endpoint
7
+ .set_project('5df5acd0d48c2') # Your project ID
8
+ .set_key('919c2d18fb5d4...a2ae413da83346ad2') # Your secret API key
9
+ ;
10
+
11
+ users = Appwrite::Users.new(client);
12
+
13
+ response = users.delete(user_id: '[USER_ID]');
14
+
15
+ puts response
@@ -10,6 +10,6 @@ client
10
10
 
11
11
  users = Appwrite::Users.new(client);
12
12
 
13
- response = users.update_status(user_id: '[USER_ID]', status: '1');
13
+ response = users.update_status(user_id: '[USER_ID]', status: 1);
14
14
 
15
15
  puts response
data/lib/appwrite.rb CHANGED
@@ -1,10 +1,15 @@
1
1
  require 'net/http'
2
2
  require 'uri'
3
3
  require 'json'
4
+ require 'mime/types'
4
5
  require_relative 'appwrite/client'
5
6
  require_relative 'appwrite/service'
7
+ require_relative 'appwrite/exception'
8
+ require_relative 'appwrite/file'
9
+ require_relative 'appwrite/services/account'
6
10
  require_relative 'appwrite/services/avatars'
7
11
  require_relative 'appwrite/services/database'
12
+ require_relative 'appwrite/services/functions'
8
13
  require_relative 'appwrite/services/health'
9
14
  require_relative 'appwrite/services/locale'
10
15
  require_relative 'appwrite/services/storage'
@@ -20,7 +20,8 @@ module Appwrite
20
20
  @headers = {
21
21
  'content-type' => '',
22
22
  'user-agent' => RUBY_PLATFORM + ':ruby-' + RUBY_VERSION,
23
- 'x-sdk-version' => 'appwrite:ruby:1.0.11'
23
+ 'x-sdk-version' => 'appwrite:ruby:2.1.2',
24
+ 'X-Appwrite-Response-Format' => '0.8.0'
24
25
  }
25
26
  @endpoint = 'https://appwrite.io/v1';
26
27
  end
@@ -37,6 +38,12 @@ module Appwrite
37
38
  return self
38
39
  end
39
40
 
41
+ def set_j_w_t(value)
42
+ add_header('x-appwrite-jwt', value)
43
+
44
+ return self
45
+ end
46
+
40
47
  def set_locale(value)
41
48
  add_header('x-appwrite-locale', value)
42
49
 
@@ -50,7 +57,7 @@ module Appwrite
50
57
  end
51
58
 
52
59
  def add_header(key, value)
53
- @headers[key.downcase] = value.downcase
60
+ @headers[key.downcase] = value
54
61
 
55
62
  return self
56
63
  end
@@ -72,11 +79,14 @@ module Appwrite
72
79
  payload = ''
73
80
 
74
81
  headers = @headers.merge(headers)
75
-
82
+ @BOUNDARY = "----A30#3ad1"
76
83
  if (method != METHOD_GET)
77
84
  case headers['content-type'][0, headers['content-type'].index(';') || headers['content-type'].length]
78
85
  when 'application/json'
79
86
  payload = params.to_json
87
+ when 'multipart/form-data'
88
+ payload = "--#{@BOUNDARY}\r\n" + encodeFormData(params)
89
+ headers['content-type'] = "multipart/form-data; boundary=#{@BOUNDARY}"
80
90
  else
81
91
  payload = encode(params)
82
92
  end
@@ -85,7 +95,7 @@ module Appwrite
85
95
  begin
86
96
  response = http.send_request(method.upcase, uri.request_uri, payload, headers)
87
97
  rescue => error
88
- raise 'Request Failed: ' + error.message
98
+ raise Appwrite::Exception.new(error.message)
89
99
  end
90
100
 
91
101
  # Handle Redirects
@@ -95,8 +105,39 @@ module Appwrite
95
105
 
96
106
  return fetch(method, uri, headers, {}, limit - 1)
97
107
  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)
113
+ end
98
114
 
99
- return JSON.parse(response.body);
115
+ if(response.code.to_i >= 400)
116
+ raise Appwrite::Exception.new(res['message'], res['status'], res)
117
+ end
118
+
119
+ return res;
120
+ end
121
+
122
+ def encodeFormData(value, key=nil)
123
+ 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 ''
127
+ else
128
+ post_body = []
129
+ if(value.instance_of? File)
130
+ post_body << "Content-Disposition: form-data; name=\"#{key}\"; filename=\"#{value.name}\"\r\n"
131
+ post_body << "Content-Type: #{value.mimeType}\r\n\r\n"
132
+ post_body << value.content
133
+ post_body << "\r\n--#{@BOUNDARY}--\r\n"
134
+ else
135
+ post_body << "Content-Disposition: form-data; name=\"#{key}\"\r\n\r\n"
136
+ post_body << "#{value.to_s}"
137
+ post_body << "\r\n--#{@BOUNDARY}\r\n"
138
+ end
139
+ post_body.join
140
+ end
100
141
  end
101
142
 
102
143
  def encode(value, key = nil)
@@ -0,0 +1,14 @@
1
+ module Appwrite
2
+ class Exception < StandardError
3
+ @code = 0;
4
+ @response = nil;
5
+
6
+ def initialize(message, code, response)
7
+ super(message)
8
+ @code = code
9
+ @response = response
10
+ end
11
+ attr_reader :code
12
+ attr_reader :response
13
+ end
14
+ end