klaro-client 0.2.0 → 0.3.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.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/lib/klaro/client/errors.rb +10 -0
- data/lib/klaro/client/request_handler.rb +70 -0
- data/lib/klaro/client/resource/story.rb +55 -0
- data/lib/klaro/client/resource.rb +7 -0
- metadata +5 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9612e0a404f699dce37fa9d937c7c5b79758834f058aa125074107f9b5a70468
|
4
|
+
data.tar.gz: cb0fe33f9ecf1a43839d162738b5d29e36072179e03c1cf05c44185de85d353d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fedd2867b05272d285640f822b26cd45b732fa75665525699b51abd5e1da04b2c8f644b177d3547e4e39ca37b1d4d42e626d87193504631f3b8731e01881e830
|
7
|
+
data.tar.gz: 046d46ade148f02cac554f74df9cdb45d80f74172941720eec79af395e62fbd357a5969a6c69c71c3224ff45601cbf5767c9b5903dee3e279081d24ec846c809
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module Klaro
|
2
|
+
class Client
|
3
|
+
class RequestHandler
|
4
|
+
|
5
|
+
attr_reader :base_url, :token
|
6
|
+
|
7
|
+
def initialize(url)
|
8
|
+
@base_url = url
|
9
|
+
end
|
10
|
+
|
11
|
+
def authenticate(user, password)
|
12
|
+
@token = get_token Http
|
13
|
+
.headers({
|
14
|
+
'Content-Type' => 'application/json'
|
15
|
+
})
|
16
|
+
.post("#{base_url}/api/auth/tokens/", payload(user, password))
|
17
|
+
end
|
18
|
+
|
19
|
+
def get(endpoint, raw = false)
|
20
|
+
url = "#{base_url}#{endpoint}"
|
21
|
+
info("GET `#{url}`")
|
22
|
+
response = http.get(url, ssl_context: http_ctx)
|
23
|
+
raise Error::NoSuchBoardFound if response.status >= 300 || response.status <200
|
24
|
+
|
25
|
+
raw ? response.to_s : JSON.parse(response.to_s)
|
26
|
+
end
|
27
|
+
|
28
|
+
def post(endpoint, body)
|
29
|
+
url = "#{base_url}#{endpoint}"
|
30
|
+
info("POST `#{url}`")
|
31
|
+
http.post(url, body.merge(ssl_context: http_ctx))
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
def get_token(response)
|
36
|
+
raise Error::AuthenticationFailed if response.status >= 300 || response.status <200
|
37
|
+
|
38
|
+
response = JSON.parse(response.body)
|
39
|
+
"#{response['token_type']} #{response['access_token']}"
|
40
|
+
end
|
41
|
+
|
42
|
+
def payload(user, password)
|
43
|
+
{ json: {
|
44
|
+
grant_type: "client_credentials",
|
45
|
+
client_id: user,
|
46
|
+
client_secret: password
|
47
|
+
},
|
48
|
+
ssl_context: http_ctx
|
49
|
+
}
|
50
|
+
end
|
51
|
+
|
52
|
+
def http_ctx
|
53
|
+
OpenSSL::SSL::SSLContext.new
|
54
|
+
end
|
55
|
+
|
56
|
+
def http
|
57
|
+
Http.headers(
|
58
|
+
{
|
59
|
+
Authorization: @token
|
60
|
+
}
|
61
|
+
)
|
62
|
+
end
|
63
|
+
|
64
|
+
def info(msg)
|
65
|
+
puts msg
|
66
|
+
end
|
67
|
+
alias error info
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Klaro
|
2
|
+
class Client
|
3
|
+
class Story < Resource
|
4
|
+
|
5
|
+
def download_and_relocate_attachments(root_path, target_folder, client)
|
6
|
+
as = self.attachments.map do |attachment|
|
7
|
+
url = attachment["url"]
|
8
|
+
url += "?n=" + URI.encode_www_form_component(attachment["filename"]) unless url =~ /\?n=/
|
9
|
+
path = handle_image(url, root_path, target_folder, client)
|
10
|
+
attachment.merge("url" => path)
|
11
|
+
end
|
12
|
+
self.class.new(self.to_h.merge(
|
13
|
+
attachments: as
|
14
|
+
))
|
15
|
+
rescue => ex
|
16
|
+
puts ex.message
|
17
|
+
puts ex.backtrace.join("\n")
|
18
|
+
raise
|
19
|
+
end
|
20
|
+
|
21
|
+
def download_and_relocate_images(root_path, target_folder, client)
|
22
|
+
spec = self.specification.gsub(%r{!\[([^\]]*)\]\(([^\)]*)\)}) do
|
23
|
+
m = Regexp.last_match
|
24
|
+
label, url = m[1], m[2]
|
25
|
+
image_relative_path = handle_image(url, root_path, target_folder, client)
|
26
|
+
""
|
27
|
+
end
|
28
|
+
self.class.new(self.to_h.merge(
|
29
|
+
specification: spec
|
30
|
+
))
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def handle_image(url, root_path, folder, client)
|
36
|
+
image_path = get_image_path(url, folder)
|
37
|
+
download_image(url, image_path, client) unless image_path.exists?
|
38
|
+
'/' + image_path.relative_to(root_path).to_s
|
39
|
+
end
|
40
|
+
|
41
|
+
def get_image_path(url, folder)
|
42
|
+
file_name = URI.parse(url).query.gsub('n=', '')
|
43
|
+
file_name = URI.decode_www_form_component(file_name)
|
44
|
+
folder/"#{self['card-kind']}/#{identifier}/#{file_name}"
|
45
|
+
end
|
46
|
+
|
47
|
+
def download_image(url, target_file, client)
|
48
|
+
target_file.parent.mkdir_p unless target_file.parent.exists?
|
49
|
+
img = client.request.get("#{url}", true)
|
50
|
+
target_file.write(img)
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: klaro-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- enspirit
|
@@ -90,6 +90,10 @@ files:
|
|
90
90
|
- Rakefile
|
91
91
|
- VERSION
|
92
92
|
- lib/klaro/client.rb
|
93
|
+
- lib/klaro/client/errors.rb
|
94
|
+
- lib/klaro/client/request_handler.rb
|
95
|
+
- lib/klaro/client/resource.rb
|
96
|
+
- lib/klaro/client/resource/story.rb
|
93
97
|
homepage:
|
94
98
|
licenses:
|
95
99
|
- MIT
|