contenttruck-rb 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +16 -0
- data/lib/contenttruck/client.rb +155 -0
- data/lib/contenttruck/version.rb +1 -1
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 10f91fed1dcb74097e86b9ce6385ed9b1ff60ae8664aca186721a656f9fcdb0e
|
4
|
+
data.tar.gz: 53a2eca6ffadd08571dab8929577e1a7259594405b97da5df5517bf9b6bb0dfb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a24a64be8a258857e60925639dd0dd9419498df75a240d54efa0c3f636e280a58986122ae38269e42ec0c13e79c746e2081f278918a65e269408b12a4350f455
|
7
|
+
data.tar.gz: abd7d4cc77ef0fc3eac98fbc81c6a3bb092344635f0ae789e7e7f380fa9551006c8e319b8e127c9ca1cbbf31b25ef77b4d64f77fa5f62279b8387d1c97045a8c
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,155 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'uri'
|
4
|
+
require 'net/http'
|
5
|
+
require 'json'
|
6
|
+
|
7
|
+
module Contenttruck
|
8
|
+
class UserError < StandardError
|
9
|
+
def initialize(code, message)
|
10
|
+
super(message)
|
11
|
+
@code = code
|
12
|
+
end
|
13
|
+
|
14
|
+
def code
|
15
|
+
@code
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class Client
|
20
|
+
def initialize(base_url)
|
21
|
+
raise ArgumentError, 'base_url must be a String' unless base_url.is_a?(String)
|
22
|
+
@rpc_url = URI.parse(base_url)
|
23
|
+
|
24
|
+
# Set the path of the RPC URL to /_contenttruck.
|
25
|
+
@rpc_url.path = '/_contenttruck'
|
26
|
+
end
|
27
|
+
|
28
|
+
def upload(key, partition, relative_path, content_type, content_or_reader)
|
29
|
+
raise ArgumentError, 'key must be a String' unless key.is_a?(String)
|
30
|
+
raise ArgumentError, 'partition must be a String' unless partition.is_a?(String)
|
31
|
+
raise ArgumentError, 'relative_path must be a String' unless relative_path.is_a?(String)
|
32
|
+
raise ArgumentError, 'content_type must be a String' unless content_type.is_a?(String)
|
33
|
+
unless content_or_reader.is_a?(String) || content_or_reader.respond_to?(:read)
|
34
|
+
raise ArgumentError, 'content_or_reader must be a String or reader'
|
35
|
+
end
|
36
|
+
|
37
|
+
_do_rpc_request('Upload', {
|
38
|
+
'key' => key,
|
39
|
+
'partition' => partition,
|
40
|
+
'relative_path' => relative_path,
|
41
|
+
}, content_type, content_or_reader)
|
42
|
+
end
|
43
|
+
|
44
|
+
def delete(key, partition, relative_path)
|
45
|
+
raise ArgumentError, 'key must be a String' unless key.is_a?(String)
|
46
|
+
raise ArgumentError, 'partition must be a String' unless partition.is_a?(String)
|
47
|
+
raise ArgumentError, 'relative_path must be a String' unless relative_path.is_a?(String)
|
48
|
+
|
49
|
+
_do_rpc_request('Delete', {
|
50
|
+
'key' => key,
|
51
|
+
'partition' => partition,
|
52
|
+
'relative_path' => relative_path,
|
53
|
+
})
|
54
|
+
end
|
55
|
+
|
56
|
+
def create_key(sudo_key, partitions)
|
57
|
+
raise ArgumentError, 'sudo_key must be a String' unless sudo_key.is_a?(String)
|
58
|
+
raise ArgumentError, 'partitions must be an Array' unless partitions.is_a?(Array)
|
59
|
+
partitions.each do |partition|
|
60
|
+
raise ArgumentError, 'partitions must be an Array of Strings' unless partition.is_a?(String)
|
61
|
+
end
|
62
|
+
|
63
|
+
_do_rpc_request('CreateKey', {
|
64
|
+
'sudo_key' => sudo_key,
|
65
|
+
'partitions' => partitions,
|
66
|
+
})
|
67
|
+
end
|
68
|
+
|
69
|
+
def delete_key(sudo_key, key)
|
70
|
+
raise ArgumentError, 'sudo_key must be a String' unless sudo_key.is_a?(String)
|
71
|
+
raise ArgumentError, 'key must be a String' unless key.is_a?(String)
|
72
|
+
|
73
|
+
_do_rpc_request('DeleteKey', {
|
74
|
+
'sudo_key' => sudo_key,
|
75
|
+
'key' => key,
|
76
|
+
})
|
77
|
+
end
|
78
|
+
|
79
|
+
def create_partition(sudo_key, name, rule_set)
|
80
|
+
raise ArgumentError, 'sudo_key must be a String' unless sudo_key.is_a?(String)
|
81
|
+
raise ArgumentError, 'name must be a String' unless name.is_a?(String)
|
82
|
+
raise ArgumentError, 'rule_set must be a String' unless rule_set.is_a?(String)
|
83
|
+
|
84
|
+
_do_rpc_request('CreatePartition', {
|
85
|
+
'sudo_key' => sudo_key,
|
86
|
+
'name' => name,
|
87
|
+
'rule_set' => rule_set,
|
88
|
+
})
|
89
|
+
end
|
90
|
+
|
91
|
+
def delete_partition(sudo_key, name)
|
92
|
+
raise ArgumentError, 'sudo_key must be a String' unless sudo_key.is_a?(String)
|
93
|
+
raise ArgumentError, 'name must be a String' unless name.is_a?(String)
|
94
|
+
|
95
|
+
_do_rpc_request('DeletePartition', {
|
96
|
+
'sudo_key' => sudo_key,
|
97
|
+
'name' => name,
|
98
|
+
})
|
99
|
+
end
|
100
|
+
|
101
|
+
private
|
102
|
+
|
103
|
+
def _to_json(value)
|
104
|
+
# Basically works around the fact that some people might not have ActiveSupport loaded.
|
105
|
+
return value.to_json if value.respond_to?(:to_json)
|
106
|
+
JSON.generate(value)
|
107
|
+
end
|
108
|
+
|
109
|
+
def _get_user_error(response)
|
110
|
+
begin
|
111
|
+
content = JSON.parse(response.body)
|
112
|
+
return UserError.new(content['code'], content['message']) if content['code'] && content['message']
|
113
|
+
rescue; end
|
114
|
+
end
|
115
|
+
|
116
|
+
def _do_rpc_request(type, body, content_type = nil, content_reader = nil)
|
117
|
+
http = Net::HTTP.new(@rpc_url.host, @rpc_url.port)
|
118
|
+
http.use_ssl = true if @rpc_url.scheme == 'https'
|
119
|
+
|
120
|
+
request = Net::HTTP::Post.new(@rpc_url)
|
121
|
+
request['X-Type'] = type
|
122
|
+
if content_type
|
123
|
+
# Include the JSON in a header and send the body.
|
124
|
+
request['X-Json-Body'] = _to_json(body)
|
125
|
+
request['Content-Type'] = content_type
|
126
|
+
content_length = 0
|
127
|
+
if content_reader.instance_of?(String)
|
128
|
+
request.body = content_reader
|
129
|
+
content_length = content_reader.bytesize
|
130
|
+
else
|
131
|
+
request.body_stream = content_reader
|
132
|
+
content_length = content_reader.size
|
133
|
+
end
|
134
|
+
request['Content-Length'] = content_length.to_s
|
135
|
+
else
|
136
|
+
# Send the body as JSON.
|
137
|
+
request['Content-Type'] = 'application/json'
|
138
|
+
json = _to_json(body)
|
139
|
+
request['Content-Length'] = json.bytesize.to_s
|
140
|
+
request.body = json
|
141
|
+
end
|
142
|
+
|
143
|
+
response = http.request(request)
|
144
|
+
|
145
|
+
# Handle ok responses.
|
146
|
+
return nil if response.code == '204'
|
147
|
+
return JSON.parse(response.body) if response.code == '200'
|
148
|
+
|
149
|
+
# Handle errors.
|
150
|
+
x = _get_user_error(response)
|
151
|
+
raise x if x
|
152
|
+
raise StandardError, "Unexpected response code #{response.code} (body: #{response.body})"
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
data/lib/contenttruck/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: contenttruck-rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jake Gealer
|
@@ -18,11 +18,13 @@ extensions: []
|
|
18
18
|
extra_rdoc_files: []
|
19
19
|
files:
|
20
20
|
- Gemfile
|
21
|
+
- Gemfile.lock
|
21
22
|
- LICENSE.txt
|
22
23
|
- README.md
|
23
24
|
- Rakefile
|
24
25
|
- contenttruck.gemspec
|
25
26
|
- lib/contenttruck.rb
|
27
|
+
- lib/contenttruck/client.rb
|
26
28
|
- lib/contenttruck/version.rb
|
27
29
|
- sig/contenttruck.rbs
|
28
30
|
homepage: https://github.com/webscalesoftwareltd/contenttruck-rb
|