platformcraft-filespot 0.0.4

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 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