ku6vms_sdk 0.1.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 ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZWI1NTZmNjIzMDhiMjVhMjQxMjQwMjRlNjhjYzBhZmY1ZDFjODkzOQ==
5
+ data.tar.gz: !binary |-
6
+ ZDgzZTJhMjU4ODU2YmVlZDlmNGQ3MDQyNmM4MTczNjQ1YTIzMDI2Ng==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ NGFiN2IyMmNkOWU1MjljZTJiMTBhYWNiNTE2ZTFiMWZhNGUxNTFkN2M0NjI1
10
+ OGQ0YjRhOGFmZDFhMmE2OTZmZTE5MzkxZGI3ODViZGQ3Yzk0ODBhM2FlZDNk
11
+ ZjkyYjFiODdhMzgwZWRmMDg5ZjVkM2M3YzQ0MzkyZGMwMGFmMTM=
12
+ data.tar.gz: !binary |-
13
+ ODE0MDFhZDFmODkyYTQ5MWZmMTkzZTgzY2UzZWM3YzAyYzI0MjE0ZGI0OTJh
14
+ MjdhOTVlNTQyOWMyYTlhMzkwMTdiODUwZGMwNzlkYjFmM2M2NzMzMmMzNWM5
15
+ Mzc3MjY5M2U0YjA3YTg1OGM5MWFiY2E2NzhjNGZmZTRiNGFhYzg=
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ coverage
6
+ InstalledFiles
7
+ lib/bundler/man
8
+ pkg
9
+ rdoc
10
+ spec/reports
11
+ test/tmp
12
+ test/version_tmp
13
+ tmp
14
+
15
+ # YARD artifacts
16
+ .yardoc
17
+ _yardoc
18
+ doc/
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source 'http://rubygems.org/'
2
+
3
+ ONE_NINE = RUBY_VERSION >= "1.9."
4
+
5
+ gem 'multipart_body'
6
+ gem 'eventmachine'
7
+ gem 'em-http-request'
8
+ gem 'rspec'
9
+ gem 'mocha'
10
+ gem 'debugger'
data/Gemfile.lock ADDED
@@ -0,0 +1,47 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ addressable (2.3.5)
5
+ columnize (0.3.6)
6
+ cookiejar (0.3.0)
7
+ debugger (1.1.3)
8
+ columnize (>= 0.3.1)
9
+ debugger-linecache (~> 1.1.1)
10
+ debugger-ruby_core_source (~> 1.1.2)
11
+ debugger-linecache (1.1.2)
12
+ debugger-ruby_core_source (>= 1.1.1)
13
+ debugger-ruby_core_source (1.1.9)
14
+ diff-lcs (1.2.4)
15
+ em-http-request (1.1.0)
16
+ addressable (>= 2.3.4)
17
+ cookiejar
18
+ em-socksify (>= 0.3)
19
+ eventmachine (>= 1.0.3)
20
+ http_parser.rb (>= 0.6.0.beta.2)
21
+ em-socksify (0.3.0)
22
+ eventmachine (>= 1.0.0.beta.4)
23
+ eventmachine (1.0.3)
24
+ http_parser.rb (0.6.0.beta.2)
25
+ metaclass (0.0.1)
26
+ mocha (0.12.3)
27
+ metaclass (~> 0.0.1)
28
+ multipart_body (0.2.1)
29
+ rspec (2.14.1)
30
+ rspec-core (~> 2.14.0)
31
+ rspec-expectations (~> 2.14.0)
32
+ rspec-mocks (~> 2.14.0)
33
+ rspec-core (2.14.4)
34
+ rspec-expectations (2.14.0)
35
+ diff-lcs (>= 1.1.3, < 2.0)
36
+ rspec-mocks (2.14.2)
37
+
38
+ PLATFORMS
39
+ ruby
40
+
41
+ DEPENDENCIES
42
+ debugger
43
+ em-http-request
44
+ eventmachine
45
+ mocha
46
+ multipart_body
47
+ rspec
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2013 Tim Lang <langyong135@gmail.com>
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,9 @@
1
+ = Ku6vms SDK
2
+
3
+ ku6vms sdk provides access to ku6vms {Ku6VMS}[http://www.ku6vms.com]
4
+
5
+ == Installation
6
+ gem install ku6vms_sdk
7
+
8
+ == License
9
+ (MIT License) - Copyright (c) 2013 Tim Lang
@@ -0,0 +1,30 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ # Load version requiring the canonical "sndacs/version", otherwise Ruby will think
4
+ # is a different file and complaint about a double declaration of Sndacs::VERSION.
5
+ $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
6
+ require "grandcloud"
7
+
8
+ Gem::Specification.new do |s|
9
+ s.name = "ku6vms_sdk"
10
+ s.version = GrandCloud::VERSION
11
+ s.platform = Gem::Platform::RUBY
12
+ s.authors = ["Tim Lang"]
13
+ s.email = ["langyong135@gmail.com"]
14
+ s.homepage = "https://github.com/TimLang/ku6vms_sdk"
15
+ s.summary = "Library for accessing Ku6vms"
16
+ s.description = "ku6vms library provides access to SNDA ku6vms."
17
+
18
+ s.required_rubygems_version = ">= 1.3.6"
19
+
20
+ s.add_dependency "em-http-request", "~> 1.0.0"
21
+ s.add_development_dependency "bundler", ">= 1.0.0"
22
+ #s.add_development_dependency "rspec", "~> 2.0"
23
+ #s.add_development_dependency "test-unit", ">= 2.0"
24
+
25
+ s.files = `git ls-files`.split("\n")
26
+ s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
27
+ s.require_path = "lib"
28
+ s.license = 'MIT'
29
+ end
30
+
@@ -0,0 +1,52 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ module GrandCloud
4
+
5
+ class Authentication
6
+ attr_reader :secret_access_key, :snda_access_key_id
7
+
8
+ def initialize(secret_access_key, snda_access_key_id)
9
+ @secret_access_key, @snda_access_key_id = secret_access_key, snda_access_key_id
10
+ end
11
+
12
+ def create_signature options
13
+ secret_access_key = @secret_access_key
14
+ http_verb = options[:method].to_s.upcase
15
+ host = options[:host] || DEFAULT_HOST_URL
16
+ uri = options[:uri] || ''
17
+ protocal_params = options[:protocal_params]
18
+
19
+ partial_signature = "#{http_verb}\n#{host}\n#{uri}"
20
+ partial_signature << "\n#{protocal_params}" unless protocal_params.nil?
21
+ digest = OpenSSL::Digest::Digest.new("sha256")
22
+ hmac = OpenSSL::HMAC.digest(digest, secret_access_key, partial_signature)
23
+
24
+ Base64.encode64(hmac).chomp
25
+ end
26
+
27
+ def generate_protocol_params additional_params
28
+ {
29
+ :Expires => format_time((DateTime.now+(1/24.00)).to_time),
30
+ #:Expires => '2013-07-03 00:00:00',
31
+ :SignatureMethod => 'HmacSHA256',
32
+ :SndaAccessKeyId => @snda_access_key_id,
33
+ :Timestamp => format_time(Time.now)
34
+ #:Timestamp => '2013-07-02 11:36:11'
35
+ }.merge!(additional_params ? additional_params : {}).sort.collect{|k,v| "#{k}=#{v}"}.join('&')
36
+ end
37
+
38
+ def generate_upload_params request_params
39
+ request_params.merge!({
40
+ :SignatureMethod => 'HmacSHA256',
41
+ :SndaAccessKeyId => @snda_access_key_id
42
+ }).sort.collect{|k,v| "#{k}=#{v}"}.join('&')
43
+ end
44
+
45
+ private
46
+ def format_time time
47
+ time.strftime("%Y-%m-%d %H:%M:%S")
48
+ end
49
+
50
+ end
51
+
52
+ end
@@ -0,0 +1,61 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ module GrandCloud
4
+
5
+ module Base
6
+
7
+ class << self
8
+ attr_accessor :secret_access_key, :snda_access_key_id
9
+
10
+ def send_request options
11
+ auth = GrandCloud::Authentication.new(@secret_access_key, @snda_access_key_id)
12
+ protocal_params = auth.generate_protocol_params options[:additional_params]
13
+
14
+ signature = auth.create_signature({
15
+ :method => options[:method],
16
+ :uri => options[:uri],
17
+ :protocal_params => protocal_params,
18
+ :host => options[:host]
19
+ })
20
+
21
+ url = URI.escape((options[:url] || ("http://#{(options[:host] || DEFAULT_HOST_URL)+options[:uri]}")) + "?" + protocal_params)+'&Signature='+CGI::escape(signature)
22
+
23
+ params = {:head => {:Accept => options[:header_accept] || 'application/json'}}
24
+ params.merge!(options[:request_params]) if options[:request_params]
25
+ EM::HttpRequest.new(url).send((options[:method] && options[:method].downcase) || "get", params)
26
+ end
27
+
28
+ def file_upload options
29
+ auth = GrandCloud::Authentication.new(@secret_access_key, @snda_access_key_id)
30
+
31
+ protocal_params = auth.generate_upload_params options[:request_params]
32
+ signature = auth.create_signature({
33
+ :method => options[:method],
34
+ :uri => options[:uri],
35
+ :host => options[:host],
36
+ :protocal_params => protocal_params
37
+ })
38
+
39
+ url = URI.escape(options[:url] + "?" + protocal_params) + '&Signature=' + CGI::escape(signature)
40
+
41
+ #multipart patch
42
+ partfile = Part.new(
43
+ :name => 'file',
44
+ :filename => File.basename(options[:file_path]),
45
+ :body => File.new(options[:file_path]).read
46
+ )
47
+ parts = [partfile]
48
+ body = MultipartBody.new(parts)
49
+
50
+ EM::HttpRequest.new(url).post(
51
+ :head => {
52
+ 'content-type' => "multipart/form-data; boundary=#{body.boundary}"
53
+ },
54
+ :body => body.to_s
55
+ )
56
+ end
57
+
58
+ end
59
+ end
60
+ end
61
+
@@ -0,0 +1,13 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ module GrandCloud
4
+
5
+ module Error
6
+
7
+ class ResponseError < StandardError
8
+
9
+ end
10
+
11
+ end
12
+
13
+ end
@@ -0,0 +1,5 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ module GrandCloud
4
+ VERSION = '0.1.0'
5
+ end
@@ -0,0 +1,207 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'logger'
3
+
4
+ module GrandCloud
5
+
6
+ class Video
7
+
8
+ def get id
9
+ json = common_request do
10
+ Base.send_request({:method => 'get', :uri => "/video/#{id}"})
11
+ end
12
+ wrap_object(json['video'])
13
+ rescue Error::ResponseError => e
14
+ GrandCloud.logger.error(e)
15
+ return nil
16
+ end
17
+
18
+ #u must start an event loop when u uploading an media
19
+ def run
20
+ EM.run { yield }
21
+ end
22
+
23
+ # upload is an async method
24
+ def upload title, file_path, &block
25
+ file = File.new(file_path)
26
+ creation = Base.send_request({
27
+ :method => 'post',
28
+ :uri => '/video',
29
+ :additional_params => {
30
+ :Title => title
31
+ }
32
+ })
33
+ creation.callback do
34
+ rep = JSON.parse(creation.response)
35
+ GrandCloud.logger.warn(rep)
36
+ req = Base.file_upload({
37
+ :method => 'post',
38
+ :uri => '/vmsUpload.htm',
39
+ :url => rep['uploadUrl'],
40
+ :file_path => file_path,
41
+ :host => rep['uploadUrl'].gsub(/^http:\/\/(.+)\/.+/, '\1'),
42
+ :request_params => {
43
+ :sid => rep['sid'],
44
+ :cfrom => 'client',
45
+ :filesize => file.size,
46
+ :ext => File.extname(file)
47
+ }
48
+ })
49
+ callback(req, block.to_proc, rep.select{|k, v| k =='sid' || k =='vid'})
50
+ end
51
+ creation.errback do
52
+ GrandCloud.logger.error('requesting error...')
53
+ end
54
+ end
55
+
56
+ def update id, title, desc
57
+ json = common_request do
58
+ Base.send_request({
59
+ :method => 'put',
60
+ :uri => "/video/#{id}",
61
+ :request_params => {
62
+ :body => {
63
+ :Vid => id,
64
+ :Title => title,
65
+ :Description => desc
66
+ }
67
+ }
68
+ })
69
+ end
70
+ json['returnValue']
71
+ rescue Error::ResponseError => e
72
+ GrandCloud.logger.error(e)
73
+ return false
74
+ end
75
+
76
+ def destory id
77
+ json = common_request do
78
+ Base.send_request({
79
+ :method => 'delete',
80
+ :uri => "/videos/#{id}"
81
+ })
82
+ end
83
+ json['returnValue']
84
+ rescue Error::ResponseError => e
85
+ GrandCloud.logger.error(e)
86
+ return false
87
+ end
88
+
89
+ def list
90
+ json = common_request do
91
+ Base.send_request({:method => 'get', :uri => "/videos"})
92
+ end
93
+ json['videoSet'].map{|v| wrap_object(v) }
94
+ rescue Error::ResponseError => e
95
+ GrandCloud.logger.error(e)
96
+ return []
97
+ end
98
+
99
+ def import_ku6 ku6vid
100
+ common_request do
101
+ Base.send_request({
102
+ :method => 'get',
103
+ :uri => '/videos/importation/ku6',
104
+ :additional_params => {
105
+ :Ku6vids => ku6vid
106
+ }
107
+ })
108
+ end
109
+ end
110
+
111
+ def publish id, programId
112
+ publish_attributes = %w(vid ku6vid publishedJavaScript publishedHtml publishedSwf)
113
+
114
+ json = common_request do
115
+ Base.send_request({
116
+ :method => 'get',
117
+ :uri => "/video/#{id}/publication",
118
+ :additional_params => {
119
+ :ProgramId => programId
120
+ }
121
+ })
122
+ end
123
+
124
+ json = json['publication'].select {|k, v| publish_attributes.include?(k) }.inject({}) do |r, (k, v)|
125
+ r.merge!(k => (v.is_a?(Hash) ? v['value'] : v))
126
+ end
127
+ wrap_object(json)
128
+ rescue Error::ResponseError => e
129
+ GrandCloud.logger.error(e)
130
+ return nil
131
+ end
132
+
133
+ def get_programs
134
+ common_request do
135
+ Base.send_request({
136
+ :method => 'get',
137
+ :uri => '/programs'
138
+ })
139
+ end
140
+ rescue Error::ResponseError => e
141
+ GrandCloud.logger.error(e)
142
+ return []
143
+ end
144
+
145
+ #15622
146
+ def get_default_program_id
147
+ programs = get_programs
148
+ unless programs.empty?
149
+ result = programs['programSet'].select{|a| a['programName'] == '默认方案'}
150
+ result.empty? ? nil : result[0]['programId']
151
+ else
152
+ nil
153
+ end
154
+ rescue Error::ResponseError => e
155
+ GrandCloud.logger.error(e)
156
+ return nil
157
+ end
158
+
159
+ private
160
+
161
+ def callback req, func=nil, additional_attributes=nil
162
+ response = EM::DefaultDeferrable.new
163
+ req.callback do
164
+ rep = JSON.parse(req.response)
165
+ if rep['errors']
166
+ response.fail(rep)
167
+ else
168
+ response.succeed(additional_attributes ? rep.merge!(additional_attributes) : rep)
169
+ end
170
+ raise Error::ResponseError.new(rep['errors'][0]) if rep['errors']
171
+ func.call(rep) if func
172
+ EM.stop
173
+ end
174
+ req.errback do
175
+ response.fail(nil)
176
+ raise Error::ResponseError.new("Maybe the network doesn't working")
177
+ EM.stop
178
+ end
179
+ response
180
+ end
181
+
182
+ # mock a sysynchronous request
183
+ def common_request
184
+ result= ''
185
+ EM.run do
186
+ callback(yield).callback do |rep|
187
+ result = rep
188
+ end.errback do |rep|
189
+ result = rep
190
+ end
191
+ end
192
+ result
193
+ end
194
+
195
+ #wrap object from json, please see the ku6vms document for the object attribute detail
196
+ def wrap_object json
197
+ json.inject(self) do |r, (k, v)|
198
+ r.class.class_eval do; attr_accessor k; end
199
+ r.__send__("#{k}=", v)
200
+ r
201
+ end
202
+ self
203
+ end
204
+
205
+ end
206
+
207
+ end
data/lib/grandcloud.rb ADDED
@@ -0,0 +1,29 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'date'
3
+ require 'net/http'
4
+ require 'cgi'
5
+ require 'eventmachine'
6
+ require 'em-http'
7
+ require 'json'
8
+ require 'base64'
9
+ require 'openssl'
10
+ require 'multipart_body'
11
+ require 'logger'
12
+ require 'grand_cloud/exceptions'
13
+ require 'grand_cloud/authentication'
14
+ require 'grand_cloud/base'
15
+ require 'grand_cloud/video'
16
+ require 'grand_cloud/version'
17
+
18
+ module GrandCloud
19
+
20
+ DEFAULT_HOST_URL = "api.ku6vms.com"
21
+
22
+ attr_reader :logger
23
+
24
+ def self.logger
25
+ @logger || (@logger = Logger.new(STDOUT))
26
+ end
27
+
28
+
29
+ end
@@ -0,0 +1,103 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ require 'spec_heler'
4
+ require 'debugger'
5
+
6
+ module GrandCloud
7
+
8
+ module Rspec
9
+ #21430166
10
+ @@video_id = nil
11
+
12
+ describe Video do
13
+
14
+ before :all do
15
+ @video = GrandCloud::Video.new
16
+ end
17
+
18
+ def raise_common_request_exception
19
+ @video.stubs(:common_request).raises(GrandCloud::Error::ResponseError, '')
20
+ end
21
+
22
+ context "#video must done successfully functions" do
23
+
24
+ it 'should upload video' do
25
+ @video.run do
26
+ GrandCloud.logger.info('start uploading, please wait...')
27
+ @video.upload('spec_video', '/tmp/test.mp4'){ |rep|
28
+ @@video_id = rep['vid']
29
+ rep['code'].should == 200
30
+ }
31
+ end
32
+ end
33
+
34
+ it "should get video detail" do
35
+ @video.get(@@video_id).vid.should_not nil
36
+ end
37
+
38
+ it 'should list video size greater than zero' do
39
+ @video.list.size.should > 0
40
+ end
41
+
42
+ it 'should list video can get vid' do
43
+ videos = @video.list
44
+ videos.each do |v|
45
+ v.vid.should_not nil
46
+ end
47
+ end
48
+
49
+ it 'should list programs greater than zero' do
50
+ @video.get_programs.size.should > 0
51
+ end
52
+
53
+ it 'should get default program id' do
54
+ @video.get_default_program_id.should_not nil
55
+ end
56
+
57
+ it 'should update video successfully' do
58
+ @video.update(@@video_id, 'test foo', 'Foo Bar').should == true
59
+ end
60
+
61
+ it 'should delete video successfully' do
62
+ @video.destory(@@video_id).should == true
63
+ end
64
+
65
+ end
66
+
67
+ context '#video must done failed functions' do
68
+
69
+ it 'should return nil when getting video raise exception' do
70
+ @video.get(nil).should == nil
71
+ end
72
+
73
+ it "should return false when updating video raise exception" do
74
+ @video.update(nil, nil, nil).should == false
75
+ end
76
+
77
+ it "should return false when deleting video raise exception" do
78
+ @video.destory(nil).should == false
79
+ end
80
+
81
+ it "should return empty array when listing videos raise exception" do
82
+ raise_common_request_exception
83
+ @video.list.should == []
84
+ end
85
+
86
+ it "should return empty array when getting programs raise exception" do
87
+ raise_common_request_exception
88
+ @video.get_programs.should == []
89
+ end
90
+
91
+ it "should return nil when getting default program id raise exception" do
92
+ raise_common_request_exception
93
+ @video.get_default_program_id.should == nil
94
+ end
95
+
96
+ it "should return nil when publishing video raise exception" do
97
+ @video.publish(nil, nil).should == nil
98
+ end
99
+ end
100
+
101
+ end
102
+ end
103
+ end
@@ -0,0 +1,22 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ $: << File.join(File.dirname(__FILE__), '../lib')
4
+ require 'grandcloud'
5
+ require 'rspec'
6
+ require 'mocha'
7
+
8
+ RSpec.configure do |config|
9
+ config.include RSpec::Matchers
10
+
11
+ config.mock_with :rspec
12
+ end
13
+
14
+ module GrandCloud
15
+
16
+ GrandCloud::Base.secret_access_key = 'YmU0Mzk5NDYtZGZlMC00ZmNiLWI0Y2YtNzA4NGQxYzk4MGQ1'
17
+ GrandCloud::Base.snda_access_key_id = 'BH297OBMKFV0T2LO9MC189P2J'
18
+
19
+ GrandCloud.logger.formatter = proc do |severity, datetime, progname, msg|
20
+ "#{datetime}: #{msg}\n"
21
+ end
22
+ end
data/test/test.html ADDED
@@ -0,0 +1,11 @@
1
+ <html>
2
+ <head>
3
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
4
+ </head>
5
+ <body>
6
+ <form action="http://58.215.38.43/vmsUpload.htm?SignatureMethod=HmacSHA256&SndaAccessKeyId=BH297OBMKFV0T2LO9MC189P2J&cfrom=client&ext=.avi&filesize=1987072&sid=1380664177266&Signature=78ohtr7UJGrdz3cOgLpR6FluduK4K0FIUTyQGKWRVzM%3D" method="post" enctype="multipart/form-data">
7
+ <input name="file" type="file" />
8
+ <input name="submit" value="Upload" type="submit" />
9
+ </form>
10
+ </body>
11
+ </html>
metadata ADDED
@@ -0,0 +1,88 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ku6vms_sdk
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Tim Lang
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-08-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: em-http-request
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 1.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 1.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: 1.0.0
41
+ description: ku6vms library provides access to SNDA ku6vms.
42
+ email:
43
+ - langyong135@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - .gitignore
49
+ - Gemfile
50
+ - Gemfile.lock
51
+ - LICENSE
52
+ - README.md
53
+ - ku6vms_sdk.gemspec
54
+ - lib/grand_cloud/authentication.rb
55
+ - lib/grand_cloud/base.rb
56
+ - lib/grand_cloud/exceptions.rb
57
+ - lib/grand_cloud/version.rb
58
+ - lib/grand_cloud/video.rb
59
+ - lib/grandcloud.rb
60
+ - spec/grand_cloud/video_spec.rb
61
+ - spec/spec_heler.rb
62
+ - test/test.html
63
+ homepage: https://github.com/TimLang/ku6vms_sdk
64
+ licenses:
65
+ - MIT
66
+ metadata: {}
67
+ post_install_message:
68
+ rdoc_options: []
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ! '>='
79
+ - !ruby/object:Gem::Version
80
+ version: 1.3.6
81
+ requirements: []
82
+ rubyforge_project:
83
+ rubygems_version: 2.0.6
84
+ signing_key:
85
+ specification_version: 4
86
+ summary: Library for accessing Ku6vms
87
+ test_files: []
88
+ has_rdoc: