platformcraft-filespot 0.1.1 → 0.1.6
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 +4 -0
- data/README.md +44 -0
- data/Rakefile +26 -0
- data/lib/filespot.rb +5 -0
- data/lib/filespot/client.rb +2 -0
- data/lib/filespot/client/download.rb +20 -1
- data/lib/filespot/client/objects.rb +43 -2
- data/lib/filespot/configuration.rb +18 -0
- data/lib/filespot/digest.rb +5 -1
- data/lib/filespot/request.rb +22 -2
- data/lib/filespot/response.rb +19 -10
- data/lib/filespot/version.rb +1 -1
- data/platformcraft-filespot.gemspec +2 -1
- data/spec/fixtures/download_tasks.json +27 -0
- data/spec/fixtures/download_tasks_id_error.json +15 -0
- data/spec/fixtures/objects_id.json +58 -0
- data/spec/fixtures/objects_post.json +17 -0
- data/spec/lib/client/download_spec.rb +20 -7
- data/spec/lib/client/objects_spec.rb +7 -1
- data/spec/lib/digest_spec.rb +11 -7
- data/spec/lib/response_spec.rb +0 -2
- data/spec/spec_helper.rb +19 -4
- metadata +33 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 96b2cbbf8419db3f0ee1694b7954417441946387
|
4
|
+
data.tar.gz: fff0f63033cbb2c76197513fae2ad719ae9e2bbe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7eb7cab06ddfa53433744dfaf29d1a48398f5d2effa1117650b3f208acfcb5fa9a580647776d0b1d5b04b016b7e044d7ba1913e18457079b907190b92c626408
|
7
|
+
data.tar.gz: 45cc86e0d83d084fe585172887d8f843dc9aeadd9cc80b3bd243e18a0f94b8ed790d06580010b9efa63d699a4f565fe71dd6dd77e04df49fb7300fdcbd314476
|
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/README.md
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
[![Build Status](https://travis-ci.org/droff/platformcraft-filespot.svg?branch=master)](https://travis-ci.org/droff/platformcraft-filespot)
|
2
|
+
|
3
|
+
Filespot API Ruby Gem
|
4
|
+
====================
|
5
|
+
A Ruby wrapper for the Filespot API
|
6
|
+
|
7
|
+
http://doc.platformcraft.ru/filespot/api/
|
8
|
+
|
9
|
+
Installation
|
10
|
+
------------
|
11
|
+
|
12
|
+
> gem install platformcraft-filespot
|
13
|
+
|
14
|
+
|
15
|
+
Configuration
|
16
|
+
------------
|
17
|
+
```ruby
|
18
|
+
Filespot.configure do |config|
|
19
|
+
config.url = 'api.platformcraft.ru'
|
20
|
+
config.version = 1
|
21
|
+
config.apikey = '12345'
|
22
|
+
config.apiuserid = '12345'
|
23
|
+
end
|
24
|
+
```
|
25
|
+
|
26
|
+
Example
|
27
|
+
------------
|
28
|
+
```ruby
|
29
|
+
require 'filespot'
|
30
|
+
|
31
|
+
Filespot.configure do |config|
|
32
|
+
config.apiuserid = '12345'
|
33
|
+
config.apikey = '12345'
|
34
|
+
end
|
35
|
+
|
36
|
+
file = File.open('example.txt')
|
37
|
+
|
38
|
+
object = Filespot::Client.post_object(file)
|
39
|
+
puts object.name #example.txt
|
40
|
+
|
41
|
+
objects = Filespot::Client.get_objects
|
42
|
+
puts objects.count # 1
|
43
|
+
puts objects.map(&:name) # example.txt
|
44
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
RSpec::Core::RakeTask.new(:spec)
|
6
|
+
|
7
|
+
task default: :spec
|
8
|
+
|
9
|
+
namespace :doc do
|
10
|
+
begin
|
11
|
+
require 'yard'
|
12
|
+
rescue LoadError
|
13
|
+
else
|
14
|
+
YARD::Rake::YardocTask.new do |task|
|
15
|
+
task.files = ['README.md', 'lib/**/*.rb']
|
16
|
+
task.options = [
|
17
|
+
'--protected',
|
18
|
+
'--output-dir', 'doc/yard',
|
19
|
+
'--tag', 'format:Supported formats',
|
20
|
+
'--tag', 'authenticated:Requires Authentication',
|
21
|
+
'--tag', 'rate_limited:Rate Limited',
|
22
|
+
'--markup', 'markdown',
|
23
|
+
]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/filespot.rb
CHANGED
data/lib/filespot/client.rb
CHANGED
@@ -1,11 +1,19 @@
|
|
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
|
+
STATUS_ERROR = 'Error'.freeze
|
6
|
+
|
7
|
+
# POST /download
|
8
|
+
# returns task_id
|
3
9
|
def post_download(url, path = nil)
|
4
10
|
res = Response.new(Request.post("/download", {}, { url: url, path: path }))
|
5
11
|
return nil unless res.code == 200
|
6
12
|
res.data['task_id']
|
7
13
|
end
|
8
14
|
|
15
|
+
# GET /download_tasks
|
16
|
+
# returns tasks list
|
9
17
|
def get_download_tasks
|
10
18
|
res = Response.new(Request.get("/download_tasks"))
|
11
19
|
return [] unless res.code == 200
|
@@ -16,21 +24,32 @@ module Filespot
|
|
16
24
|
arr
|
17
25
|
end
|
18
26
|
|
27
|
+
# GET /download_tasks/{:task_id}
|
28
|
+
# returns task data
|
19
29
|
def get_download_task(task_id)
|
20
30
|
res = Response.new(Request.get("/download_tasks/#{task_id}"))
|
21
31
|
return nil unless res.code == 200
|
22
|
-
Task.new(res.data['task'], res.data['files'])
|
32
|
+
task = Task.new(res.data['task'], res.data['files'])
|
33
|
+
|
34
|
+
raise(Filespot::TaskError, task.body) if task.status == STATUS_ERROR
|
35
|
+
task
|
23
36
|
end
|
24
37
|
|
38
|
+
# DELETE /download_tasks/{:task_id}
|
39
|
+
# returns removal status
|
25
40
|
def delete_download_task(task_id)
|
26
41
|
res = Response.new(Request.delete("/download_tasks/#{task_id}"))
|
27
42
|
res
|
28
43
|
end
|
29
44
|
end
|
30
45
|
|
46
|
+
##
|
47
|
+
# Task class provides task as object
|
31
48
|
class Task
|
49
|
+
# files data
|
32
50
|
attr_reader :files
|
33
51
|
|
52
|
+
# creates object
|
34
53
|
def initialize(data, files = [])
|
35
54
|
data.each { |k, v| define_singleton_method(k.to_sym) { v } }
|
36
55
|
@files = files
|
@@ -1,7 +1,11 @@
|
|
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
|
+
# GET /objects
|
6
|
+
# returns an objects list
|
7
|
+
def get_objects(folder=nil)
|
8
|
+
res = Response.new(Request.get("/objects", folder: folder))
|
5
9
|
return [] unless res.code == 200
|
6
10
|
|
7
11
|
arr = []
|
@@ -10,12 +14,18 @@ module Filespot
|
|
10
14
|
arr
|
11
15
|
end
|
12
16
|
|
17
|
+
# GET /objects/{:object_id}
|
18
|
+
# returns an object
|
13
19
|
def get_object(object_id)
|
14
20
|
res = Response.new(Request.get("/objects/#{object_id}"))
|
15
21
|
return nil unless res.code == 200
|
16
22
|
Object.new(res.data['object'])
|
17
23
|
end
|
18
24
|
|
25
|
+
# POST /objects
|
26
|
+
# * +file+ - file path(*required*)
|
27
|
+
# * +name+ - name that will be stored in API service
|
28
|
+
# returns a file info
|
19
29
|
def post_object(file, name = nil)
|
20
30
|
file_io = Faraday::UploadIO.new(file, 'application/octet-stream')
|
21
31
|
res = Response.new(Request.post("/objects", {}, { file: file_io, name: name }))
|
@@ -24,13 +34,44 @@ module Filespot
|
|
24
34
|
Object.new(res.data['object'])
|
25
35
|
end
|
26
36
|
|
37
|
+
# DELETE /objects/{:object_id}
|
38
|
+
# returns removal status
|
27
39
|
def delete_object(object_id)
|
28
40
|
res = Response.new(Request.delete("/objects/#{object_id}"))
|
29
41
|
res
|
30
42
|
end
|
43
|
+
|
44
|
+
# deletes object which has been found by path
|
45
|
+
def delete_object_by_path(path)
|
46
|
+
object = get_object_by_path(path)
|
47
|
+
return delete_object(object.id) if object
|
48
|
+
|
49
|
+
nil
|
50
|
+
end
|
51
|
+
|
52
|
+
# GET /objects/{:path}
|
53
|
+
# returns an objects list
|
54
|
+
def get_object_by_path(path)
|
55
|
+
full_path = path[0] == '/' ? path : "/#{path}"
|
56
|
+
folder = File.dirname(full_path)
|
57
|
+
|
58
|
+
get_objects(folder).each do |object|
|
59
|
+
return object if object.path == full_path
|
60
|
+
end
|
61
|
+
|
62
|
+
nil
|
63
|
+
end
|
64
|
+
|
65
|
+
# checks if object exists
|
66
|
+
def exists?(path)
|
67
|
+
!!get_object_by_path(path)
|
68
|
+
end
|
31
69
|
end
|
32
70
|
|
71
|
+
# Object class provides API object as ruby object
|
33
72
|
class Object
|
73
|
+
|
74
|
+
# creates object
|
34
75
|
def initialize(data)
|
35
76
|
data.each { |k, v| define_singleton_method(k.to_sym) { v } }
|
36
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,9 +2,13 @@ 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
|
-
data = "#{http_method.upcase}+#{URI.decode(uri).gsub(
|
11
|
+
data = "#{http_method.upcase}+#{URI.decode(uri).gsub(/\Ahttps?:\/\//, '')}"
|
8
12
|
OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), Filespot.apikey, data)
|
9
13
|
end
|
10
14
|
end
|
data/lib/filespot/request.rb
CHANGED
@@ -1,18 +1,37 @@
|
|
1
1
|
require 'faraday'
|
2
|
+
require 'open-uri'
|
2
3
|
|
3
4
|
module Filespot
|
5
|
+
##
|
6
|
+
# Request class wraps HTTP-verbs
|
4
7
|
class Request
|
5
8
|
|
9
|
+
# GET
|
10
|
+
#
|
11
|
+
# * +api_method+ - API method name
|
12
|
+
# * +uri_params+ - contains API method params
|
6
13
|
def self.get(api_method = '', uri_params = {})
|
7
14
|
uri = api_uri('GET', api_method, uri_params)
|
8
15
|
connection(uri).get(uri.query)
|
9
16
|
end
|
10
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 })
|
11
26
|
def self.post(api_method = '', uri_params = {}, post_params = {})
|
12
27
|
uri = api_uri('POST', api_method, uri_params)
|
13
28
|
connection(uri).post(uri.query, post_params)
|
14
29
|
end
|
15
30
|
|
31
|
+
# DELETE
|
32
|
+
#
|
33
|
+
# * +api_method+ - API method name
|
34
|
+
# * +uri_params+ - contains API method params
|
16
35
|
def self.delete(api_method = '', uri_params = {})
|
17
36
|
uri = api_uri('DELETE', api_method, uri_params)
|
18
37
|
connection(uri).delete(uri.query)
|
@@ -40,10 +59,11 @@ module Filespot
|
|
40
59
|
end
|
41
60
|
|
42
61
|
def self.api_uri(http_method, api_method, params)
|
43
|
-
uri = URI("
|
62
|
+
uri = URI("https://" + Filespot.url)
|
44
63
|
uri.path = "/#{Filespot.version}#{api_method}"
|
45
|
-
uri.query = URI.encode_www_form(
|
64
|
+
uri.query = URI.encode_www_form(default_params)
|
46
65
|
uri.query += "&hash=#{Digest.hmac(http_method, uri.to_s)}"
|
66
|
+
uri.query += "&#{URI.encode_www_form(params)}" if params.any?
|
47
67
|
uri
|
48
68
|
end
|
49
69
|
end
|
data/lib/filespot/response.rb
CHANGED
@@ -1,26 +1,35 @@
|
|
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)
|
18
|
+
return error if response.status == 500
|
19
|
+
|
20
|
+
@data = JSON.parse(response.body)
|
8
21
|
if response.status == 200
|
9
|
-
|
10
|
-
@
|
11
|
-
@status = json_data.delete('status')
|
12
|
-
@data = json_data
|
13
|
-
else
|
14
|
-
return_error
|
22
|
+
@code = @data.delete('code').to_i
|
23
|
+
@status = @data.delete('status')
|
15
24
|
end
|
25
|
+
error(response.status) unless @status
|
16
26
|
end
|
17
27
|
|
18
28
|
private
|
19
29
|
|
20
|
-
def
|
21
|
-
@code =
|
30
|
+
def error(code=500)
|
31
|
+
@code = code
|
22
32
|
@status = 'error'
|
23
|
-
@data = nil
|
24
33
|
end
|
25
34
|
end
|
26
35
|
end
|
data/lib/filespot/version.rb
CHANGED
@@ -6,8 +6,9 @@ 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
|
+
gem.add_development_dependency 'rake'
|
11
12
|
gem.add_development_dependency 'rspec'
|
12
13
|
gem.add_development_dependency 'webmock'
|
13
14
|
gem.add_dependency 'json'
|
@@ -0,0 +1,27 @@
|
|
1
|
+
{
|
2
|
+
"code": 200,
|
3
|
+
"status": "success",
|
4
|
+
"count": 2,
|
5
|
+
"tasks": [
|
6
|
+
{
|
7
|
+
"id": "56365b04044dfe6917000002",
|
8
|
+
"category": "download",
|
9
|
+
"title": "Download test1.mp4",
|
10
|
+
"body": "Please wait.",
|
11
|
+
"status": "Progress",
|
12
|
+
"time_start": "01.11.2015T21:33:40",
|
13
|
+
"time_finish": "",
|
14
|
+
"lock": true
|
15
|
+
},
|
16
|
+
{
|
17
|
+
"id": "57011e2a534b44741fc67880",
|
18
|
+
"category": "download",
|
19
|
+
"title": "Download abc.mp4",
|
20
|
+
"body": "Download success.",
|
21
|
+
"status": "Completed",
|
22
|
+
"time_start": "03.04.2016T16:44:10",
|
23
|
+
"time_finish": "03.04.2016T16:44:11",
|
24
|
+
"lock": false
|
25
|
+
}
|
26
|
+
]
|
27
|
+
}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
{
|
2
|
+
"code": 200,
|
3
|
+
"files": null,
|
4
|
+
"status": "success",
|
5
|
+
"task": {
|
6
|
+
"id": "57011e2a534b44741fc67880",
|
7
|
+
"category": "download",
|
8
|
+
"title": "Download 0000001.1080.mp4",
|
9
|
+
"body": "Internal server error.",
|
10
|
+
"status": "Error",
|
11
|
+
"time_start": "25.01.2021T16:03:20",
|
12
|
+
"time_finish": "25.01.2021T16:04:20",
|
13
|
+
"lock": false
|
14
|
+
}
|
15
|
+
}
|
@@ -0,0 +1,58 @@
|
|
1
|
+
{
|
2
|
+
"code": 200,
|
3
|
+
"status": "success",
|
4
|
+
"object": {
|
5
|
+
"id": "56787f0c044dfe226b000001",
|
6
|
+
"name": "test.mp4",
|
7
|
+
"path": "/test.mp4",
|
8
|
+
"size": 985781,
|
9
|
+
"content_type": "video/mp4",
|
10
|
+
"create_date": "22.12.2015T01:37:00",
|
11
|
+
"latest_update": "",
|
12
|
+
"resource_url": "api.platformcraft.ru/objects/56787f0c044dfe226b000001",
|
13
|
+
"cdn_url": "cdn.platformcraft.ru/billy/test.mp4",
|
14
|
+
"video": "video.platformcraft.ru/56787f0c044dfe226b000001",
|
15
|
+
"advanced": {
|
16
|
+
"audio_streams": [
|
17
|
+
{
|
18
|
+
"bit_rate": 128079,
|
19
|
+
"channel_layout": "stereo",
|
20
|
+
"channels": 2,
|
21
|
+
"codec_long_name": "AAC (Advanced Audio Coding)",
|
22
|
+
"codec_name": "aac",
|
23
|
+
"codec_type": "audio",
|
24
|
+
"duration": 6.61712,
|
25
|
+
"index": 0,
|
26
|
+
"sample_rate": 44100
|
27
|
+
}
|
28
|
+
],
|
29
|
+
"format": {
|
30
|
+
"bit_rate": 24756,
|
31
|
+
"duration": 6.618,
|
32
|
+
"format_long_name": "QuickTime / MOV",
|
33
|
+
"format_name": "mov,mp4,m4a,3gp,3g2,mj2",
|
34
|
+
"nb_streams": 2
|
35
|
+
},
|
36
|
+
"video_streams": [
|
37
|
+
{
|
38
|
+
"bit_rate": 1062457,
|
39
|
+
"codec_name": "h264",
|
40
|
+
"codec_type": "video",
|
41
|
+
"codeclongname": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10",
|
42
|
+
"display_aspect_ratio": "16:9",
|
43
|
+
"duration": 6.573233,
|
44
|
+
"fps": 29.97002997002997,
|
45
|
+
"height": 360,
|
46
|
+
"index": 1,
|
47
|
+
"width": 640
|
48
|
+
}
|
49
|
+
]
|
50
|
+
},
|
51
|
+
"previews":[
|
52
|
+
"cdn.platformcraft.ru/billy/.previews/preview-569fa828534b446996058b6d",
|
53
|
+
"cdn.platformcraft.ru/billy/.previews/preview-569fa828534b446996058b70",
|
54
|
+
"cdn.platformcraft.ru/billy/.previews/preview-569fa828534b446996058b73"
|
55
|
+
],
|
56
|
+
"status":"ok"
|
57
|
+
}
|
58
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
{
|
2
|
+
"code": 200,
|
3
|
+
"status": "success",
|
4
|
+
"object": {
|
5
|
+
"id": "56787f0c044dfe226b000001",
|
6
|
+
"name": "test.mp4",
|
7
|
+
"path": "/test.mp4",
|
8
|
+
"size": 985781,
|
9
|
+
"content_type": "video/mp4",
|
10
|
+
"create_date": "22.12.2015T01:37:00",
|
11
|
+
"latest_update": "",
|
12
|
+
"resource_url": "api.platformcraft.ru/objects/56787f0c044dfe226b000001",
|
13
|
+
"cdn_url": "cdn.platformcraft.ru/billy/test.mp4",
|
14
|
+
"video": "video.platformcraft.ru/56787f0c044dfe226b000001",
|
15
|
+
"status": "ok"
|
16
|
+
}
|
17
|
+
}
|
@@ -1,12 +1,12 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
describe Filespot::Download do
|
4
2
|
describe 'Download' do
|
5
|
-
context 'get_download_task' do
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
3
|
+
context '#get_download_task' do
|
4
|
+
let(:task_id) { '57011e2a534b44741fc67880' }
|
5
|
+
|
6
|
+
it 'task_id found' do
|
7
|
+
stub_get("/download_tasks/#{task_id}", 'download_tasks_id.json')
|
8
|
+
task = Filespot::Client.get_download_task(task_id)
|
9
|
+
expect(task.id).to eq task_id
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'task_id not found' do
|
@@ -14,6 +14,19 @@ describe Filespot::Download do
|
|
14
14
|
task = Filespot::Client.get_download_task('nil')
|
15
15
|
expect(task).to eq nil
|
16
16
|
end
|
17
|
+
|
18
|
+
it 'raise error' do
|
19
|
+
stub_get("download_tasks/#{task_id}", 'download_tasks_id_error.json')
|
20
|
+
expect { Filespot::Client.get_download_task(task_id) }.to raise_error(Filespot::TaskError)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context '#get_download_tasks' do
|
25
|
+
it 'get tasks' do
|
26
|
+
stub_get('/download_tasks', 'download_tasks.json')
|
27
|
+
tasks = Filespot::Client.get_download_tasks
|
28
|
+
expect(tasks.count).to eq 2
|
29
|
+
end
|
17
30
|
end
|
18
31
|
end
|
19
32
|
end
|
@@ -2,10 +2,16 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Filespot::Client do
|
4
4
|
describe 'Objects' do
|
5
|
-
it '
|
5
|
+
it '#get_objects' do
|
6
6
|
stub_get('/objects', 'objects.json')
|
7
7
|
objects = Filespot::Client.get_objects
|
8
8
|
expect(objects.count).to eq 2
|
9
9
|
end
|
10
|
+
|
11
|
+
it '#get_object' do
|
12
|
+
stub_get('/objects/56787f0c044dfe226b000001', 'objects_id.json')
|
13
|
+
object = Filespot::Client.get_object('56787f0c044dfe226b000001')
|
14
|
+
expect(object.id).to eq '56787f0c044dfe226b000001'
|
15
|
+
end
|
10
16
|
end
|
11
17
|
end
|
data/spec/lib/digest_spec.rb
CHANGED
@@ -1,12 +1,16 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
describe Filespot::Digest do
|
4
|
-
context '
|
5
|
-
|
2
|
+
context '#hmac' do
|
3
|
+
let (:apikey) { 'APIUserKey' }
|
4
|
+
let (:url) { 'api.platformcraft.ru/1/objects?apiuserid=test×tamp=1450342665' }
|
5
|
+
let (:hash) { OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), apikey, "GET+#{url}") }
|
6
|
+
|
7
|
+
subject { described_class.hmac('GET', url) }
|
8
|
+
|
9
|
+
|
10
|
+
it 'evaluate correct' do
|
11
|
+
allow(Filespot).to receive(:apikey).and_return(apikey)
|
6
12
|
|
7
|
-
|
8
|
-
allow(Filespot).to receive(:apikey) { "APIUserKey" }
|
9
|
-
expect(subject).to eq '46c5500379d2c09c6f8972c7fd79c27fd7ebf0dd0ab47833a034fd613a4f4d93'
|
13
|
+
expect(subject).to eq hash
|
10
14
|
end
|
11
15
|
end
|
12
16
|
end
|
data/spec/lib/response_spec.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'webmock/rspec'
|
2
2
|
require 'filespot'
|
3
|
+
require 'openssl'
|
4
|
+
require 'base64'
|
3
5
|
|
4
6
|
RSpec.configure do |config|
|
5
7
|
config.expect_with :rspec do |expectations|
|
@@ -22,11 +24,24 @@ RSpec.configure do |config|
|
|
22
24
|
end
|
23
25
|
end
|
24
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
|
+
|
25
39
|
def stub_get(api_method, fixture_name)
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
40
|
+
stub_request(:get, uri).with(headers: headers).to_return(status: 200, body: fixture(fixture_name), headers: {})
|
41
|
+
end
|
42
|
+
|
43
|
+
def stub_post(api_method, fixture_name)
|
44
|
+
stub_request(:post, uri).with(headers: {'Accept'=>'*/*', 'Accept-Encoding'=> encoding, 'User-Agent'=> agent}).to_return(status: 200, body: fixture(fixture_name), headers: {})
|
30
45
|
end
|
31
46
|
|
32
47
|
def fixture_path
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
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.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- droff
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: rspec
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -74,7 +88,10 @@ extra_rdoc_files: []
|
|
74
88
|
files:
|
75
89
|
- ".gitignore"
|
76
90
|
- ".rspec"
|
91
|
+
- ".travis.yml"
|
77
92
|
- Gemfile
|
93
|
+
- README.md
|
94
|
+
- Rakefile
|
78
95
|
- lib/filespot.rb
|
79
96
|
- lib/filespot/client.rb
|
80
97
|
- lib/filespot/client/download.rb
|
@@ -85,18 +102,22 @@ files:
|
|
85
102
|
- lib/filespot/response.rb
|
86
103
|
- lib/filespot/version.rb
|
87
104
|
- platformcraft-filespot.gemspec
|
105
|
+
- spec/fixtures/download_tasks.json
|
88
106
|
- spec/fixtures/download_tasks_id.json
|
107
|
+
- spec/fixtures/download_tasks_id_error.json
|
89
108
|
- spec/fixtures/objects.json
|
109
|
+
- spec/fixtures/objects_id.json
|
110
|
+
- spec/fixtures/objects_post.json
|
90
111
|
- spec/lib/client/download_spec.rb
|
91
112
|
- spec/lib/client/objects_spec.rb
|
92
113
|
- spec/lib/client_spec.rb
|
93
114
|
- spec/lib/digest_spec.rb
|
94
115
|
- spec/lib/response_spec.rb
|
95
116
|
- spec/spec_helper.rb
|
96
|
-
homepage:
|
117
|
+
homepage: https://github.com/droff/platformcraft-filespot
|
97
118
|
licenses: []
|
98
119
|
metadata: {}
|
99
|
-
post_install_message:
|
120
|
+
post_install_message:
|
100
121
|
rdoc_options: []
|
101
122
|
require_paths:
|
102
123
|
- lib
|
@@ -111,14 +132,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
132
|
- !ruby/object:Gem::Version
|
112
133
|
version: '0'
|
113
134
|
requirements: []
|
114
|
-
rubyforge_project:
|
115
|
-
rubygems_version: 2.6.
|
116
|
-
signing_key:
|
135
|
+
rubyforge_project:
|
136
|
+
rubygems_version: 2.6.14
|
137
|
+
signing_key:
|
117
138
|
specification_version: 4
|
118
139
|
summary: http://doc.platformcraft.ru/filespot/api/
|
119
140
|
test_files:
|
141
|
+
- spec/fixtures/download_tasks.json
|
120
142
|
- spec/fixtures/download_tasks_id.json
|
143
|
+
- spec/fixtures/download_tasks_id_error.json
|
121
144
|
- spec/fixtures/objects.json
|
145
|
+
- spec/fixtures/objects_id.json
|
146
|
+
- spec/fixtures/objects_post.json
|
122
147
|
- spec/lib/client/download_spec.rb
|
123
148
|
- spec/lib/client/objects_spec.rb
|
124
149
|
- spec/lib/client_spec.rb
|