kinto_box 0.1.10 → 0.1.12

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
  SHA1:
3
- metadata.gz: a82cbc2032eb2fbac538e53b4d3556bd06f8b227
4
- data.tar.gz: c814a3a47e72c92d8850c49ef817d37f50caa8a8
3
+ metadata.gz: 32a1ab4c6cd2f76e5a07c2c7df08e281b6ef8ae3
4
+ data.tar.gz: e4935d11684d5f8a6346c0b9dd7de758ef51548d
5
5
  SHA512:
6
- metadata.gz: 3066b795cdf28e23a3eef7b730600ef2f2775b8e0f1330df32437add3f2fb872ad45dfe3a672b8a348854ec0b7fd394ba218902d270267a26a8a2d36cb70df8e
7
- data.tar.gz: 03923f433c65c0471f5fad445338c20b5d16a2cdad09cebff0e2e09b3002d78d78cd929ab0bfba0ad1738c4dc788da0a9458acd9843ffb5035fdcafcb4e46f1d
6
+ metadata.gz: 84f70e98d251392478f69938e5cfc480bf6ba608af4c03324eedf36d10ba2346bec2a9b69529af9e9f902eb139c175adfe718f5737803cb9cf031959f69871ee
7
+ data.tar.gz: 802b3bfc51dd2dbbb21357e8b629e919a70e5206082b6e669f2ede5d7df12ac8dade82ac33cbc6ea6de333b61ffe28ef39d048b3c6cb7f58b29684b4a6b5bf9f
data/lib/kinto_box.rb CHANGED
@@ -84,6 +84,39 @@ module KintoBox
84
84
  delete '/buckets'
85
85
  end
86
86
 
87
+ # Raw request
88
+ #
89
+ def request(path, method, data = {})
90
+ case method.upcase
91
+ when 'PUT'
92
+ self.class.put(path, :body => data.to_json)
93
+ when 'GET'
94
+ self.class.get(path)
95
+ when 'POST'
96
+ self.class.post(path, :body => data.to_json)
97
+ when 'DELETE'
98
+ self.class.delete(path)
99
+ when 'OPTIONS'
100
+ self.class.options(path)
101
+ when 'HEAD'
102
+ self.class.head(path)
103
+ when 'MOVE'
104
+ self.class.move(path, :body => data.to_json)
105
+ when 'COPY'
106
+ self.class.copy(path, :body => data.to_json)
107
+ when 'PATCH'
108
+ self.class.copy(path, :body => data.to_json)
109
+ else
110
+ raise HTTPBadRequest
111
+ end
112
+ end
113
+
114
+ # Make batch requests
115
+ def create_batch_request
116
+ KintoBatchRequest.new(self)
117
+ end
118
+
119
+
87
120
  # Calls http PUT on path
88
121
  #
89
122
  # @params [String]path Url path
@@ -128,5 +161,14 @@ module KintoBox
128
161
  def get(path)
129
162
  ResponseHandler.handle self.class.get(path)
130
163
  end
164
+
165
+ # Calls http HEAD on path
166
+ #
167
+ # @params [String]path Url path
168
+ # @params [Hash] data to be sent in the body
169
+ # @return [Hash] response body
170
+ def head(path, data = {})
171
+ ResponseHandler.get_response_head self.class.head(path)
172
+ end
131
173
  end
132
174
  end
@@ -0,0 +1,30 @@
1
+ require 'kinto_box/kinto_collection'
2
+ require 'kinto_box/kinto_object'
3
+ require 'kinto_box/kinto_request'
4
+
5
+ module KintoBox
6
+ class KintoBatchRequest
7
+
8
+ def initialize(kinto_client)
9
+ @kinto_client = kinto_client
10
+ @request_data = {'defaults' => {
11
+ 'method'=> 'POST',
12
+ 'path'=> '/'
13
+ },
14
+ 'requests' =>[]
15
+ }
16
+ @requests = @request_data['requests']
17
+ end
18
+
19
+ def add_request(request)
20
+ @requests.push(request.hashed_object)
21
+ self
22
+ end
23
+
24
+ def send
25
+
26
+ @kinto_client.post('/batch', @request_data)
27
+ end
28
+
29
+ end
30
+ end
@@ -2,10 +2,8 @@ require 'kinto_box/kinto_collection'
2
2
  require 'kinto_box/kinto_object'
3
3
  require 'kinto_box/kinto_group'
4
4
  module KintoBox
5
- class KintoBucket
6
- include KintoObject
5
+ class KintoBucket < KintoObject
7
6
 
8
- attr_accessor :id
9
7
  attr_reader :kinto_client
10
8
 
11
9
  def initialize (client, bucket_id)
@@ -14,10 +12,11 @@ module KintoBox
14
12
  @kinto_client = client
15
13
  @id = bucket_id
16
14
  @url_path = "/buckets/#{@id}"
15
+ @child_path = '/collections'
17
16
  end
18
17
 
19
- def list_collections
20
- @kinto_client.get("#{@url_path}/collections")
18
+ def list_collections(filters = nil, sort = nil)
19
+ @kinto_client.get(url_w_qsp(filters, sort))
21
20
  end
22
21
 
23
22
  def list_groups
@@ -26,16 +25,14 @@ module KintoBox
26
25
 
27
26
  def collection (collection_id)
28
27
  @collection = KintoCollection.new(self, collection_id)
29
- @collection
30
28
  end
31
29
 
32
30
  def group(group_id)
33
31
  @group = KintoGroup.new(self, group_id)
34
- @group
35
32
  end
36
33
 
37
34
  def create_collection(collection_id)
38
- @kinto_client.post("#{@url_path}/collections", { 'data' => { 'id' => collection_id}})
35
+ @kinto_client.post("#{@url_path}#{@child_path}", { 'data' => { 'id' => collection_id}})
39
36
  collection(collection_id)
40
37
  end
41
38
 
@@ -46,7 +43,20 @@ module KintoBox
46
43
  end
47
44
 
48
45
  def delete_collections
49
- @kinto_client.delete("#{@url_path}/collections")
46
+ @kinto_client.delete(url_w_qsp)
50
47
  end
48
+
49
+ def delete_groups
50
+ @kinto_client.delete("#{@url_path}/groups")
51
+ end
52
+
53
+ def count_collections(filters = nil)
54
+ @kinto_client.head(url_w_qsp(filters))['Total-Records'].to_i
55
+ end
56
+
57
+ alias_method :create_collection_request, :create_child_request
58
+ alias_method :list_collection_request, :list_children_request
59
+ alias_method :delete_collections_request, :delete_children_request
60
+ alias_method :count_collections_request, :count_children_request
51
61
  end
52
62
  end
@@ -1,11 +1,11 @@
1
1
  require 'kinto_box/kinto_record'
2
2
  require 'kinto_box/kinto_object'
3
+ require 'kinto_box/kinto_batch_request'
3
4
 
4
5
  module KintoBox
5
- class KintoCollection
6
- include KintoObject
6
+ class KintoCollection < KintoObject
7
+
7
8
 
8
- attr_accessor :id
9
9
  attr_reader :bucket
10
10
 
11
11
  def initialize (bucket, collection_id)
@@ -14,31 +14,39 @@ module KintoBox
14
14
  @bucket = bucket
15
15
  @id = collection_id
16
16
  @url_path = "/buckets/#{bucket.id}/collections/#{@id}"
17
+ @child_path = '/records'
17
18
  end
18
19
 
19
20
  def record (record_id)
20
- record = KintoRecord.new(self, record_id)
21
- record
21
+ KintoRecord.new(self, record_id)
22
22
  end
23
23
 
24
24
 
25
25
  def list_records(filters = nil, sort = nil)
26
- query_string = '?'
27
- query_string += filters unless filters.nil?
28
- query_string += '&' unless filters.nil? || sort.nil?
29
- query_string += "_sort=#{sort}" unless sort.nil?
30
- path = query_string == '?' ? "#{@url_path}/records" : "#{@url_path}/records#{query_string}"
31
- @kinto_client.get(path)
26
+ @kinto_client.get(url_w_qsp(filters, sort))
32
27
  end
33
28
 
29
+
34
30
  def create_record(data)
35
- resp = @kinto_client.post("#{@url_path}/records", { 'data' => data})
31
+ resp = @kinto_client.post("#{@url_path}#{@child_path}", { 'data' => data})
36
32
  record_id = resp['data']['id']
37
33
  record(record_id)
38
34
  end
39
35
 
40
- def delete_records
41
- @kinto_client.delete("#{@url_path}/records")
36
+
37
+ def delete_records(filters = nil)
38
+ @kinto_client.delete(url_w_qsp(filters))
39
+ end
40
+
41
+
42
+ def count_records(filters = nil)
43
+ @kinto_client.head(url_w_qsp(filters))['Total-Records'].to_i
42
44
  end
45
+
46
+
47
+ alias_method :create_record_request, :create_child_request
48
+ alias_method :list_records_request, :list_children_request
49
+ alias_method :delete_records_request, :delete_children_request
50
+ alias_method :count_records_request, :count_children_request
43
51
  end
44
52
  end
@@ -1,8 +1,7 @@
1
1
  require 'kinto_box/kinto_object'
2
2
 
3
3
  module KintoBox
4
- class KintoGroup
5
- include KintoObject
4
+ class KintoGroup < KintoObject
6
5
 
7
6
  attr_accessor :id
8
7
  attr_reader :bucket
@@ -1,5 +1,9 @@
1
1
  module KintoBox
2
- module KintoObject
2
+ class KintoObject
3
+
4
+ attr_accessor :id
5
+ attr_reader :url_path
6
+
3
7
  def info
4
8
  @kinto_client.get(@url_path)
5
9
  end
@@ -21,20 +25,49 @@ module KintoBox
21
25
  true
22
26
  end
23
27
 
28
+ def info_request
29
+ KintoRequest.new('GET', @url_path)
30
+ end
31
+
32
+ def update_request(data)
33
+ KintoRequest.new('PATCH', @url_path, {'data' => data})
34
+ end
35
+
36
+ def delete_request
37
+ KintoRequest.new('DELETE', @url_path)
38
+ end
39
+
40
+ def create_child_request(data)
41
+ KintoRequest.new('POST', url_w_qsp, { 'data' => data})
42
+ end
43
+
44
+ def list_children_request(filters = nil, sort = nil)
45
+ KintoRequest.new('GET', url_w_qsp(filters, sort))
46
+ end
47
+
48
+ def delete_children_request(filters = nil)
49
+ KintoRequest.new('DELETE', url_w_qsp(filters))
50
+ end
51
+
52
+ def count_children_request(filters = nil)
53
+ KintoRequest.new('HEAD', url_w_qsp(filters))
54
+ end
55
+
24
56
  def add_permission(principal, permission)
25
57
  @kinto_client.patch(@url_path, {'permissions' => { permission => [principal_name(principal)] }})
26
- return self
58
+ self
27
59
  end
28
60
 
29
61
  def replace_permission(principal, permission)
30
62
  @kinto_client.put(@url_path, {'permissions' => { permission => [principal_name(principal)] }})
31
- return self
63
+ self
32
64
  end
33
65
 
34
66
  def permissions
35
67
  info['permissions']
36
68
  end
37
69
 
70
+
38
71
  private
39
72
 
40
73
  def principal_name(principal)
@@ -49,5 +82,14 @@ module KintoBox
49
82
  return principal
50
83
  end
51
84
  end
85
+
86
+ def url_w_qsp(filters = nil, sort = nil, add_child = true)
87
+ url = @child_path.nil? || !add_child ? @url_path : "#{@url_path}#{@child_path}"
88
+ query_string = ''
89
+ query_string = filters unless filters.nil?
90
+ query_string = "#{query_string}&" unless filters.nil? || sort.nil?
91
+ query_string = "#{query_string}_sort=#{sort}" unless sort.nil?
92
+ query_string == '' ? url : "#{url}?#{query_string}"
93
+ end
52
94
  end
53
95
  end
@@ -1,13 +1,13 @@
1
1
  require 'kinto_box/kinto_object'
2
2
  module KintoBox
3
- class KintoRecord
4
- include KintoObject
3
+ class KintoRecord < KintoObject
5
4
  attr_reader :id
6
5
  def initialize (collection, record_id)
7
6
  raise ArgumentError if collection.nil? || record_id.nil?
8
7
  @kinto_client = collection.bucket.kinto_client
9
8
  @id = record_id
10
9
  @url_path = "/buckets/#{collection.bucket.id}/collections/#{collection.id}/records/#{@id}"
10
+ @child_path = nil
11
11
  end
12
12
 
13
13
  def replace(data)
@@ -0,0 +1,18 @@
1
+ module KintoBox
2
+ class KintoRequest
3
+
4
+ def initialize(method = 'GET', path = nil , body = {}, headers = nil)
5
+ @method = method
6
+ @path = path
7
+ @body = body
8
+ @headers = headers
9
+ end
10
+
11
+ def hashed_object
12
+ { 'method' => @method,
13
+ 'path' => @path,
14
+ 'body' => @body
15
+ }
16
+ end
17
+ end
18
+ end
@@ -50,6 +50,12 @@ module KintoBox
50
50
  end
51
51
  end
52
52
 
53
+ def self.get_response_head(resp)
54
+ if [200, 201].include? resp.code
55
+ resp.headers
56
+ else
57
+ raise BadRequest, resp
58
+ end
59
+ end
53
60
  end
54
-
55
61
  end
@@ -1,3 +1,3 @@
1
1
  module KintoBox
2
- VERSION = "0.1.10"
2
+ VERSION = "0.1.12"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kinto_box
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.10
4
+ version: 0.1.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kavya Sukumar
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-09-14 00:00:00.000000000 Z
11
+ date: 2016-11-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -103,11 +103,13 @@ files:
103
103
  - bin/setup
104
104
  - kinto_box.gemspec
105
105
  - lib/kinto_box.rb
106
+ - lib/kinto_box/kinto_batch_request.rb
106
107
  - lib/kinto_box/kinto_bucket.rb
107
108
  - lib/kinto_box/kinto_collection.rb
108
109
  - lib/kinto_box/kinto_group.rb
109
110
  - lib/kinto_box/kinto_object.rb
110
111
  - lib/kinto_box/kinto_record.rb
112
+ - lib/kinto_box/kinto_request.rb
111
113
  - lib/kinto_box/response_handler.rb
112
114
  - lib/kinto_box/version.rb
113
115
  homepage: http://github.com/voxmedia/kinto_box