platformcraft-filespot 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b3d2b33ba24d26cc68e01cb49807c7ceaf04a31a
4
+ data.tar.gz: 9bedc8895465e41f61343c650fc0f82e08c1e15e
5
+ SHA512:
6
+ metadata.gz: 6f05ff51f02b870835d5e9c1780e9ab411736db04186110d4227f181cc34e34548460d044d1f1131f5001e1998c4ef588cb55e258ac9870c3ed42c7a839b219b
7
+ data.tar.gz: 732aea3821e71b77b3e3fb67d78a2e4c62b470e8a4dbb20b09b4ffc31f81b9622fc9d007a89b50a128cfad40433144993d33cad0f7a160e939c6c46310959f2d
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ Gemfile.lock
2
+ *.gem
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
data/lib/filespot.rb ADDED
@@ -0,0 +1,10 @@
1
+ require 'filespot/version'
2
+ require 'filespot/configuration'
3
+ require 'filespot/digest'
4
+ require 'filespot/request'
5
+ require 'filespot/response'
6
+ require 'filespot/client'
7
+
8
+ module Filespot
9
+ extend Configuration
10
+ end
@@ -0,0 +1,7 @@
1
+ require 'filespot/client/objects'
2
+
3
+ module Filespot
4
+ class Client
5
+ extend Objects
6
+ end
7
+ end
@@ -0,0 +1,38 @@
1
+ module Filespot
2
+ module Objects
3
+ def get_objects
4
+ res = Response.new(Request.get("/objects"))
5
+ return [] unless res.code == 200
6
+
7
+ arr = []
8
+ count, objects = res.data['count'].to_i, res.data['objects']
9
+ count.times { |i| arr << Object.new(res.data['objects'][i]) }
10
+ arr
11
+ end
12
+
13
+ def get_object(object_id)
14
+ res = Response.new(Request.get("/objects/#{object_id}"))
15
+ return nil unless res.code == 200
16
+ Object.new(res.data['object'])
17
+ end
18
+
19
+ def post_object(file, type)
20
+ file_io = Faraday::UploadIO.new(file, type)
21
+ res = Response.new(Request.post("/objects", {}, { file: file_io }))
22
+ return res unless res.code == 200
23
+
24
+ Object.new(res.data['object'])
25
+ end
26
+
27
+ def delete_object(object_id)
28
+ res = Response.new(Request.delete("/objects/#{object_id}"))
29
+ res
30
+ end
31
+ end
32
+
33
+ class Object
34
+ def initialize(data)
35
+ data.each { |k, v| define_singleton_method(k.to_sym) { v } }
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,27 @@
1
+ module Filespot
2
+ module Configuration
3
+ API_URL = 'api.platformcraft.ru'
4
+ API_VERSION = 1
5
+
6
+ OPTIONS = [
7
+ :url, :version, :apiuserid, :apikey
8
+ ].freeze
9
+
10
+ attr_accessor *OPTIONS
11
+
12
+ def self.extended(base)
13
+ base.init
14
+ end
15
+
16
+ def init
17
+ self.url = API_URL
18
+ self.version = API_VERSION
19
+ self.apiuserid = nil
20
+ self.apikey = nil
21
+ end
22
+
23
+ def configure
24
+ yield self
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,11 @@
1
+ require 'openssl'
2
+ require 'base64'
3
+
4
+ module Filespot
5
+ class Digest
6
+ def self.hmac(http_method, uri)
7
+ data = "#{http_method.upcase}+#{URI.decode(uri).gsub('http://', '')}"
8
+ OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), Filespot.apikey, data)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,50 @@
1
+ require 'faraday'
2
+
3
+ module Filespot
4
+ class Request
5
+
6
+ def self.get(api_method = '', uri_params = {})
7
+ uri = api_uri('GET', api_method, uri_params)
8
+ connection(uri).get(uri.query)
9
+ end
10
+
11
+ def self.post(api_method = '', uri_params = {}, post_params = {})
12
+ uri = api_uri('POST', api_method, uri_params)
13
+ connection(uri).post(uri.query, post_params)
14
+ end
15
+
16
+ def self.delete(api_method = '', uri_params = {})
17
+ uri = api_uri('DELETE', api_method, uri_params)
18
+ connection(uri).delete(uri.query)
19
+ end
20
+
21
+ private
22
+
23
+ def self.connection(uri)
24
+ Faraday.new(uri) do |f|
25
+ f.request :multipart
26
+ f.request :url_encoded
27
+ f.adapter :net_http
28
+ end
29
+ end
30
+
31
+ def self.init_params(params)
32
+ params.merge(default_params)
33
+ end
34
+
35
+ def self.default_params
36
+ {
37
+ apiuserid: Filespot.apiuserid,
38
+ timestamp: Time.now.to_i
39
+ }
40
+ end
41
+
42
+ def self.api_uri(http_method, api_method, params)
43
+ uri = URI("http://" + Filespot.url)
44
+ uri.path = "/#{Filespot.version}#{api_method}"
45
+ uri.query = URI.encode_www_form(init_params(params))
46
+ uri.query += "&hash=#{Digest.hmac(http_method, uri.to_s)}"
47
+ uri
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,14 @@
1
+ require 'json'
2
+
3
+ module Filespot
4
+ class Response
5
+ attr_reader :code, :status, :data
6
+
7
+ def initialize(response)
8
+ json_data = JSON.parse(response.body)
9
+ @code = json_data.delete('code').to_i
10
+ @status = json_data.delete('status')
11
+ @data = json_data
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,3 @@
1
+ module Filespot
2
+ VERSION = '0.0.4'.freeze
3
+ end
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/filespot/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["droff"]
6
+ gem.email = "adroff@gmail.com"
7
+ gem.description = "gem provides platformcraft filespot api"
8
+ gem.summary = "http://doc.platformcraft.ru/filespot/api/"
9
+ gem.homepage = ""
10
+
11
+ gem.add_development_dependency 'rspec'
12
+ gem.add_development_dependency 'webmock'
13
+ gem.add_dependency 'json'
14
+ gem.add_dependency 'faraday'
15
+
16
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ gem.files = `git ls-files`.split("\n")
18
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ gem.name = "platformcraft-filespot"
20
+ gem.require_paths = ["lib"]
21
+ gem.version = Filespot::VERSION
22
+ end
@@ -0,0 +1,33 @@
1
+ {
2
+ "code": 200,
3
+ "status": "success",
4
+ "count": 2,
5
+ "objects": [
6
+ {
7
+ "id": "56787f0c044dfe226b000001",
8
+ "name": "test.mp4",
9
+ "path": "/test.mp4",
10
+ "size": 985781,
11
+ "content_type": "video/mp4",
12
+ "create_date": "22.12.2015T01:37:00",
13
+ "latest_update": "",
14
+ "resource_url": "api.platformcraft.ru/objects/56787f0c044dfe226b000001",
15
+ "cdn_url": "cdn.platformcraft.ru/billy/test.mp4",
16
+ "video": "api.platformcraft.ru/56787f0c044dfe226b000001",
17
+ "status": "ok"
18
+ },
19
+ {
20
+ "id": "56787f0c044dfe226b000002",
21
+ "name": "test1.mp4",
22
+ "path": "/test1.mp4",
23
+ "size": 985781,
24
+ "content_type": "video/mp4",
25
+ "create_date": "22.12.2015T01:37:00",
26
+ "latest_update": "",
27
+ "resource_url": "api.platformcraft.ru/objects/56787f0c044dfe226b000002",
28
+ "cdn_url": "cdn.platformcraft.ru/billy/test1.mp4",
29
+ "video": "api.platformcraft.ru/56787f0c044dfe226b000001",
30
+ "status": "ok"
31
+ }
32
+ ]
33
+ }
@@ -0,0 +1,23 @@
1
+ require 'spec_helper'
2
+
3
+ describe Filespot::Client do
4
+ describe 'Objects' do
5
+ before do
6
+ allow(Time).to receive(:now).and_return(1450342665)
7
+
8
+ Filespot.configure do |config|
9
+ config.url = 'api.platformcraft.ru'
10
+ config.version = '1'
11
+ config.apiuserid = 'test'
12
+ config.apikey = 'APIUserKey'
13
+ end
14
+ end
15
+
16
+ it '.get_objects' do
17
+ uri = 'http://api.platformcraft.ru/1/objects?apiuserid=test&hash=46c5500379d2c09c6f8972c7fd79c27fd7ebf0dd0ab47833a034fd613a4f4d93&timestamp=1450342665'
18
+ stub_get(uri, 'objects.json')
19
+ objects = Filespot::Client.get_objects
20
+ expect(objects.count).to eq 2
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe Filespot::Client do
4
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe Filespot::Digest do
4
+ context 'fake data' do
5
+ subject { Filespot::Digest.hmac('GET', 'api.platformcraft.ru/1/objects?apiuserid=test&timestamp=1450342665') }
6
+
7
+ it '.hmac' do
8
+ allow(Filespot).to receive(:apikey) { "APIUserKey" }
9
+ expect(subject).to eq '46c5500379d2c09c6f8972c7fd79c27fd7ebf0dd0ab47833a034fd613a4f4d93'
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,26 @@
1
+ require 'webmock/rspec'
2
+ require 'filespot'
3
+
4
+ RSpec.configure do |config|
5
+ config.expect_with :rspec do |expectations|
6
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
7
+ end
8
+
9
+ config.mock_with :rspec do |mocks|
10
+ mocks.verify_partial_doubles = true
11
+ end
12
+ end
13
+
14
+ def stub_get(uri, fixture_name)
15
+ encoding = 'gzip;q=1.0,deflate;q=0.6,identity;q=0.3'
16
+ agent = 'Faraday v0.9.2'
17
+ stub_request(:get, uri).with(headers: {'Accept'=>'*/*', 'Accept-Encoding'=> encoding, 'User-Agent'=> agent}).to_return(status: 200, body: fixture(fixture_name), headers: {})
18
+ end
19
+
20
+ def fixture_path
21
+ File.expand_path("../fixtures", __FILE__)
22
+ end
23
+
24
+ def fixture(file)
25
+ File.read(fixture_path + '/' + file)
26
+ end
metadata ADDED
@@ -0,0 +1,120 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: platformcraft-filespot
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.4
5
+ platform: ruby
6
+ authors:
7
+ - droff
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-04-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
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'
27
+ - !ruby/object:Gem::Dependency
28
+ name: webmock
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: json
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: faraday
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: gem provides platformcraft filespot api
70
+ email: adroff@gmail.com
71
+ executables: []
72
+ extensions: []
73
+ extra_rdoc_files: []
74
+ files:
75
+ - ".gitignore"
76
+ - ".rspec"
77
+ - Gemfile
78
+ - lib/filespot.rb
79
+ - lib/filespot/client.rb
80
+ - lib/filespot/client/objects.rb
81
+ - lib/filespot/configuration.rb
82
+ - lib/filespot/digest.rb
83
+ - lib/filespot/request.rb
84
+ - lib/filespot/response.rb
85
+ - lib/filespot/version.rb
86
+ - platformcraft-filespot.gemspec
87
+ - spec/fixtures/objects.json
88
+ - spec/lib/client/objects_spec.rb
89
+ - spec/lib/client_spec.rb
90
+ - spec/lib/digest_spec.rb
91
+ - spec/spec_helper.rb
92
+ homepage: ''
93
+ licenses: []
94
+ metadata: {}
95
+ post_install_message:
96
+ rdoc_options: []
97
+ require_paths:
98
+ - lib
99
+ required_ruby_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ required_rubygems_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ requirements: []
110
+ rubyforge_project:
111
+ rubygems_version: 2.6.2
112
+ signing_key:
113
+ specification_version: 4
114
+ summary: http://doc.platformcraft.ru/filespot/api/
115
+ test_files:
116
+ - spec/fixtures/objects.json
117
+ - spec/lib/client/objects_spec.rb
118
+ - spec/lib/client_spec.rb
119
+ - spec/lib/digest_spec.rb
120
+ - spec/spec_helper.rb