appwrite 1.0.11 → 2.1.2

Sign up to get free protection for your applications and to get access to all the features.
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