platformcraft-filespot 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +0 -1
- data/lib/filespot.rb +2 -0
- data/lib/filespot/client.rb +2 -0
- data/lib/filespot/client/download.rb +14 -0
- data/lib/filespot/client/objects.rb +28 -6
- data/lib/filespot/configuration.rb +18 -0
- data/lib/filespot/digest.rb +4 -0
- data/lib/filespot/request.rb +18 -0
- data/lib/filespot/response.rb +11 -1
- data/lib/filespot/version.rb +2 -1
- data/platformcraft-filespot.gemspec +1 -1
- data/spec/spec_helper.rb +13 -8
- metadata +5 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f3cbc70d020bcd62346f1726886acc00a20b4a2e
|
4
|
+
data.tar.gz: cdb832f47944d0f0378c0678de16da3f1d6679ad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 975d1d2ba3f209d8c98470dfb7ccb2a1aacaa0fe6c849fcafdb196ef691da914f50efeee8de72e708a95e64294beee93a42db8d3c6fc3649e6b69ac8453a629c
|
7
|
+
data.tar.gz: c3c7e031f6cfa2a79943e5f793f474b723d8fc3e7578ea42d90d456bd3c3e002c20821616e2fd54ab8fb3365625d8e43fb1fe297a9f49a3d2226248ad1a2bd6f
|
data/.gitignore
CHANGED
data/lib/filespot.rb
CHANGED
data/lib/filespot/client.rb
CHANGED
@@ -1,11 +1,17 @@
|
|
1
1
|
module Filespot
|
2
|
+
##
|
3
|
+
# Download module wraps methods with `/download` resource[http://doc.platformcraft.ru/filespot/api/#download]
|
2
4
|
module Download
|
5
|
+
# POST /download
|
6
|
+
# returns task_id
|
3
7
|
def post_download(url, path = nil)
|
4
8
|
res = Response.new(Request.post("/download", {}, { url: url, path: path }))
|
5
9
|
return nil unless res.code == 200
|
6
10
|
res.data['task_id']
|
7
11
|
end
|
8
12
|
|
13
|
+
# GET /download_tasks
|
14
|
+
# returns tasks list
|
9
15
|
def get_download_tasks
|
10
16
|
res = Response.new(Request.get("/download_tasks"))
|
11
17
|
return [] unless res.code == 200
|
@@ -16,21 +22,29 @@ module Filespot
|
|
16
22
|
arr
|
17
23
|
end
|
18
24
|
|
25
|
+
# GET /download_tasks/{:task_id}
|
26
|
+
# returns task data
|
19
27
|
def get_download_task(task_id)
|
20
28
|
res = Response.new(Request.get("/download_tasks/#{task_id}"))
|
21
29
|
return nil unless res.code == 200
|
22
30
|
Task.new(res.data['task'], res.data['files'])
|
23
31
|
end
|
24
32
|
|
33
|
+
# DELETE /download_tasks/{:task_id}
|
34
|
+
# returns removal status
|
25
35
|
def delete_download_task(task_id)
|
26
36
|
res = Response.new(Request.delete("/download_tasks/#{task_id}"))
|
27
37
|
res
|
28
38
|
end
|
29
39
|
end
|
30
40
|
|
41
|
+
##
|
42
|
+
# Task class provides task as object
|
31
43
|
class Task
|
44
|
+
# files data
|
32
45
|
attr_reader :files
|
33
46
|
|
47
|
+
# creates object
|
34
48
|
def initialize(data, files = [])
|
35
49
|
data.each { |k, v| define_singleton_method(k.to_sym) { v } }
|
36
50
|
@files = files
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module Filespot
|
2
|
+
##
|
3
|
+
# Objects module wraps methods with `/objects` resource[http://doc.platformcraft.ru/filespot/api/#objects]
|
2
4
|
module Objects
|
3
|
-
|
4
|
-
|
5
|
-
end
|
6
|
-
|
5
|
+
# GET /objects
|
6
|
+
# returns an objects list
|
7
7
|
def get_objects(folder=nil)
|
8
8
|
res = Response.new(Request.get("/objects", folder: folder))
|
9
9
|
return [] unless res.code == 200
|
@@ -14,12 +14,18 @@ module Filespot
|
|
14
14
|
arr
|
15
15
|
end
|
16
16
|
|
17
|
+
# GET /objects/{:object_id}
|
18
|
+
# returns an object
|
17
19
|
def get_object(object_id)
|
18
20
|
res = Response.new(Request.get("/objects/#{object_id}"))
|
19
21
|
return nil unless res.code == 200
|
20
22
|
Object.new(res.data['object'])
|
21
23
|
end
|
22
24
|
|
25
|
+
# POST /objects
|
26
|
+
# * +file+ - file path(*required*)
|
27
|
+
# * +name+ - name that will be stored in API service
|
28
|
+
# returns a file info
|
23
29
|
def post_object(file, name = nil)
|
24
30
|
file_io = Faraday::UploadIO.new(file, 'application/octet-stream')
|
25
31
|
res = Response.new(Request.post("/objects", {}, { file: file_io, name: name }))
|
@@ -28,28 +34,44 @@ module Filespot
|
|
28
34
|
Object.new(res.data['object'])
|
29
35
|
end
|
30
36
|
|
37
|
+
# DELETE /objects/{:object_id}
|
38
|
+
# returns removal status
|
31
39
|
def delete_object(object_id)
|
32
40
|
res = Response.new(Request.delete("/objects/#{object_id}"))
|
33
41
|
res
|
34
42
|
end
|
35
43
|
|
44
|
+
# deletes object which has been found by path
|
36
45
|
def delete_object_by_path(path)
|
37
|
-
object = get_object_by_path
|
46
|
+
object = get_object_by_path(path)
|
38
47
|
return delete_object(object.id) if object
|
48
|
+
|
39
49
|
nil
|
40
50
|
end
|
41
51
|
|
52
|
+
# GET /objects/{:path}
|
53
|
+
# returns an objects list
|
42
54
|
def get_object_by_path(path)
|
43
55
|
full_path = path[0] == '/' ? path : "/#{path}"
|
44
|
-
folder = File.dirname
|
56
|
+
folder = File.dirname(full_path)
|
57
|
+
|
45
58
|
get_objects(folder).each do |object|
|
46
59
|
return object if object.path == full_path
|
47
60
|
end
|
61
|
+
|
48
62
|
nil
|
49
63
|
end
|
64
|
+
|
65
|
+
# checks if object exists
|
66
|
+
def exists?(path)
|
67
|
+
!!get_object_by_path(path)
|
68
|
+
end
|
50
69
|
end
|
51
70
|
|
71
|
+
# Object class provides API object as ruby object
|
52
72
|
class Object
|
73
|
+
|
74
|
+
# creates object
|
53
75
|
def initialize(data)
|
54
76
|
data.each { |k, v| define_singleton_method(k.to_sym) { v } }
|
55
77
|
end
|
@@ -1,18 +1,35 @@
|
|
1
1
|
module Filespot
|
2
|
+
|
3
|
+
##
|
4
|
+
# Configuration module provides gem settings
|
5
|
+
#
|
6
|
+
# Filespot.configure do |config|
|
7
|
+
# config.url = 'api.platformcraft.ru'
|
8
|
+
# config.version = 1
|
9
|
+
# config.apikey = '12345'
|
10
|
+
# config.apiuserid = '12345'
|
11
|
+
# end
|
12
|
+
#
|
2
13
|
module Configuration
|
14
|
+
# default API url
|
3
15
|
API_URL = 'api.platformcraft.ru'
|
16
|
+
#default API version
|
4
17
|
API_VERSION = 1
|
5
18
|
|
19
|
+
# options
|
6
20
|
OPTIONS = [
|
7
21
|
:url, :version, :apiuserid, :apikey
|
8
22
|
].freeze
|
9
23
|
|
24
|
+
# settings attributes
|
10
25
|
attr_accessor *OPTIONS
|
11
26
|
|
27
|
+
# invoke module
|
12
28
|
def self.extended(base)
|
13
29
|
base.init
|
14
30
|
end
|
15
31
|
|
32
|
+
# set default params
|
16
33
|
def init
|
17
34
|
self.url = API_URL
|
18
35
|
self.version = API_VERSION
|
@@ -20,6 +37,7 @@ module Filespot
|
|
20
37
|
self.apikey = nil
|
21
38
|
end
|
22
39
|
|
40
|
+
# configure with gem settings
|
23
41
|
def configure
|
24
42
|
yield self
|
25
43
|
end
|
data/lib/filespot/digest.rb
CHANGED
@@ -2,7 +2,11 @@ require 'openssl'
|
|
2
2
|
require 'base64'
|
3
3
|
|
4
4
|
module Filespot
|
5
|
+
##
|
6
|
+
# Digest class provides some encryption features
|
5
7
|
class Digest
|
8
|
+
|
9
|
+
# generates HMAC[https://en.wikipedia.org/wiki/Hash-based_message_authentication_code]
|
6
10
|
def self.hmac(http_method, uri)
|
7
11
|
data = "#{http_method.upcase}+#{URI.decode(uri).gsub(/\Ahttps?:\/\//, '')}"
|
8
12
|
OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), Filespot.apikey, data)
|
data/lib/filespot/request.rb
CHANGED
@@ -2,18 +2,36 @@ require 'faraday'
|
|
2
2
|
require 'open-uri'
|
3
3
|
|
4
4
|
module Filespot
|
5
|
+
##
|
6
|
+
# Request class wraps HTTP-verbs
|
5
7
|
class Request
|
6
8
|
|
9
|
+
# GET
|
10
|
+
#
|
11
|
+
# * +api_method+ - API method name
|
12
|
+
# * +uri_params+ - contains API method params
|
7
13
|
def self.get(api_method = '', uri_params = {})
|
8
14
|
uri = api_uri('GET', api_method, uri_params)
|
9
15
|
connection(uri).get(uri.query)
|
10
16
|
end
|
11
17
|
|
18
|
+
# POST
|
19
|
+
#
|
20
|
+
# * +api_method+ - API method name
|
21
|
+
# * +uri_params+ - contains API method params
|
22
|
+
# * +post_params+ - contains API post params
|
23
|
+
#
|
24
|
+
# === Example
|
25
|
+
# Request.post("/objects", {}, { file: file_io, name: name })
|
12
26
|
def self.post(api_method = '', uri_params = {}, post_params = {})
|
13
27
|
uri = api_uri('POST', api_method, uri_params)
|
14
28
|
connection(uri).post(uri.query, post_params)
|
15
29
|
end
|
16
30
|
|
31
|
+
# DELETE
|
32
|
+
#
|
33
|
+
# * +api_method+ - API method name
|
34
|
+
# * +uri_params+ - contains API method params
|
17
35
|
def self.delete(api_method = '', uri_params = {})
|
18
36
|
uri = api_uri('DELETE', api_method, uri_params)
|
19
37
|
connection(uri).delete(uri.query)
|
data/lib/filespot/response.rb
CHANGED
@@ -1,9 +1,19 @@
|
|
1
1
|
require 'json'
|
2
2
|
|
3
3
|
module Filespot
|
4
|
+
##
|
5
|
+
# Response class provides API response
|
4
6
|
class Response
|
5
|
-
|
7
|
+
# HTTP code
|
8
|
+
attr_reader :code
|
6
9
|
|
10
|
+
# response status
|
11
|
+
attr_reader :status
|
12
|
+
|
13
|
+
# response data in JSON format
|
14
|
+
attr_reader :data
|
15
|
+
|
16
|
+
# creates response, checks errors and provides data if success
|
7
17
|
def initialize(response)
|
8
18
|
return error if response.status == 500
|
9
19
|
|
data/lib/filespot/version.rb
CHANGED
@@ -6,7 +6,7 @@ Gem::Specification.new do |gem|
|
|
6
6
|
gem.email = "adroff@gmail.com"
|
7
7
|
gem.description = "gem provides platformcraft filespot api"
|
8
8
|
gem.summary = "http://doc.platformcraft.ru/filespot/api/"
|
9
|
-
gem.homepage = ""
|
9
|
+
gem.homepage = "https://github.com/droff/platformcraft-filespot"
|
10
10
|
|
11
11
|
gem.add_development_dependency 'rake'
|
12
12
|
gem.add_development_dependency 'rspec'
|
data/spec/spec_helper.rb
CHANGED
@@ -24,21 +24,26 @@ RSpec.configure do |config|
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
+
def uri
|
28
|
+
/api.platformcraft.ru\/1/
|
29
|
+
end
|
30
|
+
|
31
|
+
def headers
|
32
|
+
{
|
33
|
+
'Accept'=>'*/*',
|
34
|
+
'Accept-Encoding'=> 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
|
35
|
+
'User-Agent'=> /Faraday/
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
27
39
|
def stub_get(api_method, fixture_name)
|
28
|
-
|
29
|
-
agent = 'Faraday v0.9.2'
|
30
|
-
uri = /api.platformcraft.ru\/1/
|
31
|
-
stub_request(:get, uri).with(headers: {'Accept'=>'*/*', 'Accept-Encoding'=> encoding, 'User-Agent'=> agent}).to_return(status: 200, body: fixture(fixture_name), headers: {})
|
40
|
+
stub_request(:get, uri).with(headers: headers).to_return(status: 200, body: fixture(fixture_name), headers: {})
|
32
41
|
end
|
33
42
|
|
34
43
|
def stub_post(api_method, fixture_name)
|
35
|
-
encoding = 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3'
|
36
|
-
agent = 'Faraday v0.9.2'
|
37
|
-
uri = /api.platformcraft.ru\/1/
|
38
44
|
stub_request(:post, uri).with(headers: {'Accept'=>'*/*', 'Accept-Encoding'=> encoding, 'User-Agent'=> agent}).to_return(status: 200, body: fixture(fixture_name), headers: {})
|
39
45
|
end
|
40
46
|
|
41
|
-
|
42
47
|
def fixture_path
|
43
48
|
File.expand_path("../fixtures", __FILE__)
|
44
49
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: platformcraft-filespot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- droff
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-12-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -113,7 +113,7 @@ files:
|
|
113
113
|
- spec/lib/digest_spec.rb
|
114
114
|
- spec/lib/response_spec.rb
|
115
115
|
- spec/spec_helper.rb
|
116
|
-
homepage:
|
116
|
+
homepage: https://github.com/droff/platformcraft-filespot
|
117
117
|
licenses: []
|
118
118
|
metadata: {}
|
119
119
|
post_install_message:
|
@@ -132,19 +132,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
132
132
|
version: '0'
|
133
133
|
requirements: []
|
134
134
|
rubyforge_project:
|
135
|
-
rubygems_version: 2.6.
|
135
|
+
rubygems_version: 2.6.8
|
136
136
|
signing_key:
|
137
137
|
specification_version: 4
|
138
138
|
summary: http://doc.platformcraft.ru/filespot/api/
|
139
|
-
test_files:
|
140
|
-
- spec/fixtures/download_tasks.json
|
141
|
-
- spec/fixtures/download_tasks_id.json
|
142
|
-
- spec/fixtures/objects.json
|
143
|
-
- spec/fixtures/objects_id.json
|
144
|
-
- spec/fixtures/objects_post.json
|
145
|
-
- spec/lib/client/download_spec.rb
|
146
|
-
- spec/lib/client/objects_spec.rb
|
147
|
-
- spec/lib/client_spec.rb
|
148
|
-
- spec/lib/digest_spec.rb
|
149
|
-
- spec/lib/response_spec.rb
|
150
|
-
- spec/spec_helper.rb
|
139
|
+
test_files: []
|