dm_cloud 0.0.55 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,4 +1,16 @@
1
1
  source 'https://rubygems.org'
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
2
5
 
3
- # Specify your gem's dependencies in dm_cloud.gemspec
4
- gemspec
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+ group :development do
9
+ gem "rspec", "~> 2.8.0"
10
+ gem "rdoc", "~> 3.12"
11
+ gem "bundler"
12
+ gem "jeweler", "~> 1.8.4"
13
+ gem "rcov", ">= 0"
14
+ gem "vcr"
15
+ gem 'webmock', :git => "https://github.com/i0rek/webmock.git", :branch => "typhoeus_0.5.0"
16
+ end
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # DMCloud
1
+ # DmCloud
2
2
 
3
3
  I created this gem to simplify request and responses from DailyMotion Cloud API.
4
4
  With this gem, you can :
@@ -11,8 +11,10 @@ With this gem, you can :
11
11
 
12
12
  Add this line to your application's Gemfile:
13
13
 
14
- gem 'dm_cloud'
15
-
14
+ gem 'dm_cloud', "0.0.60" #stable version
15
+ or
16
+ gem 'dm_cloud' # edge version
17
+
16
18
  And then execute:
17
19
 
18
20
  $ bundle
@@ -33,7 +35,7 @@ You can note the securitylevel, for more information about it, take a look at `l
33
35
  DMC_SECRET = 'your api key'
34
36
  DMC_SECURITY_LEVEL = :none
35
37
 
36
- DMCloud.configure( {
38
+ DmCloud.configure( {
37
39
  :user_key => DMC_USER_ID,
38
40
  :secret_key => DMC_SECRET,
39
41
  :security_level => DMC_SECURITY_LEVEL
@@ -78,12 +80,12 @@ Description of security levels :
78
80
  Second part, get you embed url :
79
81
  It will return a string containing the iframe with the DailyMotion Cloud player.
80
82
 
81
- DMCloud::Streaming.embed('your video id looks like a secret key')
83
+ DmCloud::Streaming.embed('your video id looks like a secret key')
82
84
 
83
85
  Or how to get your direct url :
84
86
  It will return a string containing the direct link to your file.
85
87
 
86
- DMCloud::Streaming.url('your video id', ['asset_name'], {options})
88
+ DmCloud::Streaming.url('your video id', ['asset_name'], {options})
87
89
 
88
90
  The next parts will come soon, just need some time to finish it
89
91
  and create corresponding tests.
@@ -93,14 +95,14 @@ and create corresponding tests.
93
95
 
94
96
  If you need to list your video you can use this method :
95
97
 
96
- DMCloud::Media.list({:page => 1, :per_page => 10})
98
+ DmCloud::Media.list({:page => 1, :per_page => 10})
97
99
  It will return videos information and more :
98
100
 
99
101
  result to yaml :
100
102
 
101
103
  '{"result": {
102
104
  "list": [{
103
- "embed_url": "http://api.dmcloud.net/player/embed/:your_id/:media_id",
105
+ "embed_url": "http://api.DmCloud.net/player/embed/:your_id/:media_id",
104
106
  "assets": {
105
107
  "source": {
106
108
  "status": "ready",
@@ -114,7 +116,7 @@ result to yaml :
114
116
  "video_bitrate": 1000618,
115
117
  "created": 1347641702,
116
118
  "audio_nbr_channel": 2,
117
- "download_url": "http://cdn.dmcloud.net/route/http/:your_id/:media_id/source-1347634502.mp4?filename=my_video_name-source-1347634502.mp4&auth=1351277028-3-672hcu1m-3fcab065b9bf103e70d3883aa8c657be",
119
+ "download_url": "http://cdn.DmCloud.net/route/http/:your_id/:media_id/source-1347634502.mp4?filename=my_video_name-source-1347634502.mp4&auth=1351277028-3-672hcu1m-3fcab065b9bf103e70d3883aa8c657be",
118
120
  "video_aspect": 1.7777777777777777,
119
121
  "video_height": 576,
120
122
  "audio_bitrate": 128017,
@@ -136,7 +138,7 @@ result to yaml :
136
138
 
137
139
  As you can see, this give many information, you can submit a hash like this :
138
140
 
139
- DMCloud::Media.list({:page => 1, :per_page => 10, :fields => {:meta => :title }, :assets => [:download_url, :created ]})
141
+ DmCloud::Media.list({:page => 1, :per_page => 10, :fields => {:meta => :title }, :assets => [:download_url, :created ]})
140
142
 
141
143
 
142
144
 
data/Rakefile CHANGED
@@ -1 +1,52 @@
1
- require "bundler/gem_tasks"
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ gem.name = "dm_cloud"
17
+ # gem.version = DmCloud::VERSION
18
+ gem.authors = ["Jeremy Mortelette"]
19
+ gem.email = ["mortelette.jeremy@gmail.com"]
20
+ gem.description = 'This gem will simplify usage of DailyMotion Cloud API, it represent api in ruby style, with automated handler for search and upload files'
21
+ gem.summary = 'Simplify DailyMotion Cloud API usage'
22
+ gem.homepage = ""
23
+
24
+ gem.files = `git ls-files`.split($/)
25
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
26
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
27
+ gem.require_paths = ["lib"]
28
+ end
29
+
30
+ Jeweler::RubygemsDotOrgTasks.new
31
+
32
+ require 'rspec/core'
33
+ require 'rspec/core/rake_task'
34
+ RSpec::Core::RakeTask.new(:spec) do |spec|
35
+ spec.pattern = FileList['spec/**/*_spec.rb']
36
+ end
37
+
38
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
39
+ spec.pattern = 'spec/**/*_spec.rb'
40
+ spec.rcov = true
41
+ end
42
+
43
+ task :default => :spec
44
+ #
45
+ # Rake::RDocTask.new do |rdoc|
46
+ # version = File.exist?('VERSION') ? File.read('VERSION') : ""
47
+ #
48
+ # rdoc.rdoc_dir = 'rdoc'
49
+ # rdoc.title = "twits #{version}"
50
+ # rdoc.rdoc_files.include('README*')
51
+ # rdoc.rdoc_files.include('lib/**/*.rb')
52
+ # end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -1,4 +1,4 @@
1
- module DMCloud
1
+ module DmCloud
2
2
  module Builder
3
3
  module Media
4
4
  def self.create(url = '', assets_names = [], meta = {})
@@ -22,13 +22,12 @@ module DMCloud
22
22
  request = Hash.new
23
23
 
24
24
  # the media id
25
- request['id'] = media_id
26
- request['fields'] = []
25
+ request[:fields] = []
27
26
 
28
27
  # requested media meta datas
29
- fields[:meta] = [ 'title'] unless fields[:meta]
30
- fields[:meta].each { |value| request['fields'] << "meta.#{value.to_s}" }
31
- request['fields'] += ['id', 'created', 'embed_url', 'frame_ratio']
28
+ fields[:meta] = ['title'] unless fields[:meta]
29
+ fields[:meta].each { |value| request[:fields] << "meta.#{value.to_s}" }
30
+ request[:fields] += ['id', 'created', 'embed_url', 'frame_ratio']
32
31
 
33
32
  # the worldwide statistics on the number of views
34
33
  # request['fields'] << 'stats.global.last_week' if fields[:stats][:global]
@@ -46,7 +45,7 @@ module DMCloud
46
45
  fields[:assets].each { |value| request << "assets.#{name}.#{value.to_s}" }
47
46
  end
48
47
  end
49
-
48
+ puts "request fields = #{request.to_yaml}"
50
49
  request
51
50
  end
52
51
 
@@ -54,11 +53,11 @@ module DMCloud
54
53
  # raise StandardError, "missing :media_id in params" unless media_id
55
54
  request = Hash.new
56
55
 
57
- request['fields'] = []
56
+ request[:fields] = []
58
57
  # requested media meta datas
59
- fields[:meta] = [ 'title'] unless fields[:meta].present?
60
- fields[:meta].each { |value| request['fields'] << "meta.#{value.to_s}" }
61
- request['fields'] += ['id', 'created', 'embed_url', 'frame_ratio']
58
+ fields[:meta] = ['title'] unless fields[:meta]
59
+ fields[:meta].each { |value| request[:fields] << "meta.#{value.to_s}" }
60
+ request[:fields] += ['id', 'created', 'embed_url', 'frame_ratio']
62
61
 
63
62
  # TODO: handle global statistics request in another module
64
63
  # the worldwide statistics on the number of views
@@ -74,7 +73,7 @@ module DMCloud
74
73
  request = all_assets_fields(request, assets_names)
75
74
  else
76
75
  assets_names.each do |name|
77
- fields[:assets].each { |value| request['fields'] << "assets.#{name}.#{value.to_s}" }
76
+ fields[:assets].each { |value| request[:fields] << "assets.#{name}.#{value.to_s}" }
78
77
  end
79
78
  end
80
79
 
@@ -88,27 +87,27 @@ module DMCloud
88
87
  # It's also used as default if no fields params is submitted.
89
88
  def self.all_assets_fields(request, assets_names)
90
89
  assets_names.each do |name|
91
- request['fields'] << "assets.#{name}.download_url"
92
- request['fields'] << "assets.#{name}.status"
93
- request['fields'] << "assets.#{name}.container"
94
- request['fields'] << "assets.#{name}.duration"
95
- request['fields'] << "assets.#{name}.global_bitrate"
96
- request['fields'] << "assets.#{name}.video_codec"
97
- request['fields'] << "assets.#{name}.video_width"
98
- request['fields'] << "assets.#{name}.video_height"
99
- request['fields'] << "assets.#{name}.video_bitrate"
100
- request['fields'] << "assets.#{name}.video_rotation"
101
- request['fields'] << "assets.#{name}.video_fps"
102
- request['fields'] << "assets.#{name}.video_fps_mode"
103
- request['fields'] << "assets.#{name}.video_aspect"
104
- request['fields'] << "assets.#{name}.video_interlaced"
105
- request['fields'] << "assets.#{name}.audio_codec"
106
- request['fields'] << "assets.#{name}.audio_bitrate"
107
- request['fields'] << "assets.#{name}.audio_nbr_channel"
108
- request['fields'] << "assets.#{name}.audio_samplerate"
109
- request['fields'] << "assets.#{name}.created"
110
- request['fields'] << "assets.#{name}.file_extension"
111
- request['fields'] << "assets.#{name}.file_size"
90
+ request[:fields] << "assets.#{name}.download_url"
91
+ request[:fields] << "assets.#{name}.status"
92
+ request[:fields] << "assets.#{name}.container"
93
+ request[:fields] << "assets.#{name}.duration"
94
+ request[:fields] << "assets.#{name}.global_bitrate"
95
+ request[:fields] << "assets.#{name}.video_codec"
96
+ request[:fields] << "assets.#{name}.video_width"
97
+ request[:fields] << "assets.#{name}.video_height"
98
+ request[:fields] << "assets.#{name}.video_bitrate"
99
+ request[:fields] << "assets.#{name}.video_rotation"
100
+ request[:fields] << "assets.#{name}.video_fps"
101
+ request[:fields] << "assets.#{name}.video_fps_mode"
102
+ request[:fields] << "assets.#{name}.video_aspect"
103
+ request[:fields] << "assets.#{name}.video_interlaced"
104
+ request[:fields] << "assets.#{name}.audio_codec"
105
+ request[:fields] << "assets.#{name}.audio_bitrate"
106
+ request[:fields] << "assets.#{name}.audio_nbr_channel"
107
+ request[:fields] << "assets.#{name}.audio_samplerate"
108
+ request[:fields] << "assets.#{name}.created"
109
+ request[:fields] << "assets.#{name}.file_extension"
110
+ request[:fields] << "assets.#{name}.file_size"
112
111
  end
113
112
  request
114
113
  end
@@ -1,6 +1,6 @@
1
1
  require 'dm_cloud/builder/media'
2
2
 
3
- module DMCloud
3
+ module DmCloud
4
4
  class Media
5
5
  # Creates a new media object.
6
6
  # This method can either create an empty media object
@@ -22,7 +22,7 @@ module DMCloud
22
22
  :call => call_type,
23
23
  args: Builder::Media.create(options)
24
24
  }
25
- DMCloud::Request.execute(call_type, params)
25
+ DmCloud.config[:auto_call] == true ? DmCloud::Request.execute(call_type, params) : {call: call_type, params: params}
26
26
  end
27
27
 
28
28
  # Delete a media object with all its associated assets.
@@ -32,13 +32,14 @@ module DMCloud
32
32
  # Return :
33
33
  # Nothing
34
34
  def self.delete(media_id)
35
+ raise StandardError, "missing :media_id in params" unless media_id
35
36
  call_type = "media.delete"
36
37
 
37
38
  params = {
38
39
  :call => call_type,
39
40
  args: { id: media_id}
40
41
  }
41
- DMCloud::Request.execute(call_type, params)
42
+ DmCloud.config[:auto_call] == true ? DmCloud::Request.execute(call_type, params) : {call: call_type, params: params}
42
43
  end
43
44
 
44
45
  # Gives information about a given media object.
@@ -48,14 +49,15 @@ module DMCloud
48
49
  # fields (Array) – (required) the list of fields to retrieve.
49
50
  # Returns:
50
51
  # a multi-level structure containing about the media related to the requested fields.
51
- def self.info(media_id, assets_names = ['source'], fields = [])
52
+ def self.info(media_id, assets_names = ['source'], fields = {})
53
+ raise StandardError, "missing :media_id in params" unless media_id
52
54
  call_type = "media.info"
53
55
 
54
56
  params = {
55
57
  :call => call_type,
56
- args: DMCloud::Builder::Media.info(media_id, assets_names, fields)
58
+ args: DmCloud::Builder::Media.info(media_id, assets_names, fields)
57
59
  }
58
- DMCloud::Request.execute(call_type, params)
60
+ DmCloud.config[:auto_call] == true ? DmCloud::Request.execute(call_type, params) : {call: call_type, params: params}
59
61
  end
60
62
 
61
63
  # Returns a paginated list of media info structures.
@@ -67,7 +69,7 @@ module DMCloud
67
69
  # fields (Array) – (optional default return all informations) the fields to retrieve
68
70
  # page (Integer) – (optional) the page number, default: 1
69
71
  # per_page (Integer) – (optional) the number of objet per page, default: 10
70
- # Returns:
72
+ # Returns:
71
73
  # an object with information for the pagination and the result of the query.
72
74
  def self.list(options = {})
73
75
  call_type = "media.list"
@@ -77,11 +79,11 @@ module DMCloud
77
79
 
78
80
  params = {
79
81
  :call => call_type,
80
- args: DMCloud::Builder::Media.list(options),
82
+ args: DmCloud::Builder::Media.list(options),
81
83
  :page => page,
82
84
  :per_page => per_page
83
85
  }
84
- DMCloud::Request.execute(call_type, params)
86
+ DmCloud.config[:auto_call] == true ? DmCloud::Request.execute(call_type, params) : {call: call_type, params: params}
85
87
  end
86
88
 
87
89
  end
@@ -1,15 +1,16 @@
1
1
  require 'net/http'
2
+ require 'json'
2
3
 
3
- module DMCloud
4
+ module DmCloud
4
5
  class Request
5
6
 
6
- DAILYMOTION_API = 'http://api.dmcloud.net/api'
7
- DAILYMOTION_STATIC = 'http://api.dmcloud.net/api'
7
+ DAILYMOTION_API = 'http://api.DmCloud.net/api'
8
+ DAILYMOTION_STATIC = 'http://api.DmCloud.net/api'
8
9
 
9
10
  # This method control signing for Media calls and handle request and response.
10
11
  def self.execute(call, params = {})
11
12
  url = define(call)
12
- params['auth'] = DMCloud::Signing.identify(params)
13
+ params['auth'] = DmCloud::Signing.identify(params)
13
14
 
14
15
  result = send_request(params)
15
16
  parse_response(result)
@@ -21,11 +22,10 @@ module DMCloud
21
22
 
22
23
  http = Net::HTTP.new(@uri.host, @uri.port)
23
24
  request = Net::HTTP::Post.new(@uri.request_uri)
24
- # request.basic_auth @uri.user, @uri.password
25
25
  request.content_type = 'application/json'
26
26
  request.body = params.to_json
27
27
 
28
- puts 'request (YAML format ): ' + request.to_yaml + "\n" + '-' * 80
28
+ # puts 'request (YAML format ): ' + request.to_yaml + "\n" + '-' * 80
29
29
 
30
30
  http.request(request).body
31
31
  end
@@ -33,7 +33,6 @@ module DMCloud
33
33
 
34
34
 
35
35
  def self.parse_response(result)
36
- puts 'result : ' + result.to_yaml # For debugging, will be remove when test will exists
37
36
  JSON.parse(result)
38
37
  end
39
38
 
@@ -1,4 +1,6 @@
1
- module DMCloud
1
+ require 'rubygems'
2
+
3
+ module DmCloud
2
4
  class Signing
3
5
  # Generate auth token for request from Media
4
6
  # Params:
@@ -7,16 +9,16 @@ module DMCloud
7
9
  # return a string which contain the auth token for the request
8
10
  # <url>?auth=<expires>-<sec>-<nonce>-<md5sum>[-<pub-sec-data>]
9
11
  def self.identify(request)
10
- user_id = DMCloud.config[:user_key]
11
- api_key = DMCloud.config[:secret_key]
12
-
12
+ user_id = DmCloud.config[:user_key]
13
+ api_key = DmCloud.config[:secret_key]
14
+
13
15
  normalized_request = normalize(request).to_s
14
- puts 'identify:: normalized_values : ' + normalized_request + "\n" + '-' * 80
15
-
16
+ # puts 'identify:: normalized_values : ' + normalized_request + "\n" + '-' * 80
17
+
16
18
  params = user_id + normalized_request + api_key
17
-
18
- puts 'identify:: Values before MD5 encrypt : ' + params + "\n" + '-' * 80
19
-
19
+
20
+ # puts 'identify:: Values before MD5 encrypt : ' + params + "\n" + '-' * 80
21
+
20
22
  checksum = Digest::MD5.hexdigest(params)
21
23
  auth_token = user_id + ':' + checksum
22
24
 
@@ -41,27 +43,25 @@ module DMCloud
41
43
  # <url>?auth=<expires>-<sec>-<nonce>-<md5sum>[-<pub-sec-data>]
42
44
  def self.sign(stream, security_datas = nil)
43
45
  raise StandardError, "missing :stream in params" unless stream
44
- sec_level = security(DMCloud.config[:security_level])
45
- sec_data = security_data(DMCloud.config[:security_level], security_datas) unless security_datas.nil?
46
+ sec_level = security(DmCloud.config[:security_level])
47
+ sec_data = security_data(DmCloud.config[:security_level], security_datas) unless security_datas.nil?
46
48
 
47
49
  base = {
48
50
  :sec_level => sec_level,
49
51
  :url_no_query => stream,
50
- :expires => (Time.now + 1.hour).to_i,
52
+ :expires => 1.hours.from_now.to_i,
51
53
  :nonce => SecureRandom.hex(16)[0,8],
52
- :secret => DMCloud.config[:secret_key]
54
+ :secret => DmCloud.config[:secret_key]
53
55
  }
54
-
55
56
  base.merge!(:sec_data => sec_data, :pub_sec_data => sec_data) unless sec_data.nil?
56
57
 
57
58
  digest_struct = build_digest_struct(base)
58
-
59
59
  check_sum = Digest::MD5.hexdigest(digest_struct)
60
60
 
61
61
  signed_url = [base[:expires], base[:sec_level], base[:nonce], check_sum].compact
62
62
  signed_url.merge!(:pub_sec_data => sec_data) unless sec_data.nil?
63
63
 
64
- puts signed_url
64
+ # puts signed_url
65
65
 
66
66
  signed_url = signed_url.join('-')
67
67
  signed_url
@@ -107,7 +107,7 @@ module DMCloud
107
107
  # but gathered and lock at the first use.
108
108
  # Result :
109
109
  # Return a string which contain the signed url like
110
- # http://cdn.dmcloud.net/route/<user_id>/<media_id>/<asset_name>.<asset_extension>?auth=<auth_token>
110
+ # http://cdn.DmCloud.net/route/<user_id>/<media_id>/<asset_name>.<asset_extension>?auth=<auth_token>
111
111
  def self.security(type = nil)
112
112
  type = :none unless type
113
113
  type = type.to_sym if type.class == String
@@ -5,12 +5,13 @@ require 'digest/md5'
5
5
 
6
6
  # This module generate methods to generate video's fluxes
7
7
  # before signing it and request it.
8
- module DMCloud
8
+ module DmCloud
9
9
  class Streaming
10
10
  # Default URL to get embed content ou direct url
11
- DIRECT_STREAM = '[PROTOCOL]://cdn.dmcloud.net/route/[USER_ID]/[MEDIA_ID]/[ASSET_NAME].[ASSET_EXTENSION]'
12
- EMBED_STREAM = '[PROTOCOL]://api.dmcloud.net/embed/[USER_ID]/[MEDIA_ID]?auth=[AUTH_TOKEN]&skin=[SKIN_ID]'
11
+ DIRECT_STREAM = '[PROTOCOL]://cdn.DmCloud.net/route/[USER_ID]/[MEDIA_ID]/[ASSET_NAME].[ASSET_EXTENSION]'
12
+ EMBED_STREAM = '[PROTOCOL]://api.DmCloud.net/embed/[USER_ID]/[MEDIA_ID]?auth=[AUTH_TOKEN]&skin=[SKIN_ID]'
13
13
  EMBED_IFRAME = '<iframe width=[WIDTH] height=[HEIGHT] frameborder="0" scrolling="no" src="[EMBED_URL]"></iframe>'
14
+
14
15
  # Get embeded player
15
16
  # Params :
16
17
  # media_id: this is the id of the media (eg: 4c922386dede830447000009)
@@ -20,20 +21,20 @@ module DMCloud
20
21
  # height: (optional) the height for the video player frame
21
22
  # Result :
22
23
  # return a string which contain the signed url like
23
- # <iframe width="848" height="480" frameborder="0" scrolling="no" src="http://api.dmcloud.net/embed/<user_id>/<media_id>?auth=<auth_token>&skin=<skin_id>"></iframe>
24
+ # <iframe width="848" height="480" frameborder="0" scrolling="no" src="http://api.DmCloud.net/embed/<user_id>/<media_id>?auth=<auth_token>&skin=<skin_id>"></iframe>
24
25
  def self.embed(media_id, options = {})
25
26
  raise StandardError, "missing :media_id in params" unless media_id
26
27
 
27
- skin_id = options[:skin_id].present? ? options[:skin_id] : 'modern1'
28
- width = options[:width].present? ? options[:width] : '848'
29
- height = options[:height].present? ? options[:height] : '480'
28
+ skin_id = options[:skin_id] ? options[:skin_id] : 'modern1'
29
+ width = options[:width] ? options[:width] : '848'
30
+ height = options[:height] ? options[:height] : '480'
30
31
 
31
32
  stream = EMBED_STREAM
32
- stream.gsub!('[PROTOCOL]', DMCloud.config[:protocol])
33
- stream.gsub!('[USER_ID]', DMCloud.config[:user_key])
33
+ stream.gsub!('[PROTOCOL]', DmCloud.config[:protocol])
34
+ stream.gsub!('[USER_ID]', DmCloud.config[:user_key])
34
35
  stream.gsub!('[MEDIA_ID]', media_id)
35
36
  stream.gsub!('[SKIN_ID]', skin_id)
36
- stream += '?auth=[AUTH_TOKEN]'.gsub!('[AUTH_TOKEN]', DMCloud::Signing.sign(stream))
37
+ stream += '?auth=[AUTH_TOKEN]'.gsub!('[AUTH_TOKEN]', DmCloud::Signing.sign(stream))
37
38
 
38
39
  frame = EMBED_IFRAME
39
40
  frame.gsub!('[WIDTH]', width)
@@ -49,20 +50,20 @@ module DMCloud
49
50
  # asset_extension: the extension of the asset, most of the time it is the first part of the asset name (eg: mp4)
50
51
  # Result :
51
52
  # return a string which contain the signed url like
52
- # http://cdn.dmcloud.net/route/<user_id>/<media_id>/<asset_name>.<asset_extension>?auth=<auth_token>
53
+ # http://cdn.DmCloud.net/route/<user_id>/<media_id>/<asset_name>.<asset_extension>?auth=<auth_token>
53
54
  def self.url(media_id, asset_name, asset_extension = nil)
54
- asset_extension = asset_name.split('_').first unless asset_extension
55
-
56
55
  raise StandardError, "missing :media_id in params" unless media_id
57
56
  raise StandardError, "missing :asset_name in params" unless asset_name
57
+ asset_extension = asset_name.split('_').first unless asset_extension
58
58
 
59
59
  stream = DIRECT_STREAM
60
- stream.gsub!('[PROTOCOL]', DMCloud.config[:protocol])
61
- stream.gsub!('[USER_ID]', DMCloud.config[:user_key])
60
+ stream.gsub!('[PROTOCOL]', DmCloud.config[:protocol])
61
+ stream.gsub!('[USER_ID]', DmCloud.config[:user_key])
62
62
  stream.gsub!('[MEDIA_ID]', media_id)
63
63
  stream.gsub!('[ASSET_NAME]', asset_name)
64
64
  stream.gsub!('[ASSET_EXTENSION]', asset_extension)
65
- stream += '?auth=[AUTH_TOKEN]'.gsub!('[AUTH_TOKEN]', DMCloud::Signing.sign(stream))
65
+
66
+ stream += '?auth=[AUTH_TOKEN]'.gsub!('[AUTH_TOKEN]', DmCloud::Signing.sign(stream))
66
67
  stream
67
68
  end
68
69
  end
@@ -1,3 +1,3 @@
1
- module DMCloud
2
- VERSION = "0.0.55"
1
+ module DmCloud
2
+ VERSION = "0.0.65"
3
3
  end
data/lib/dm_cloud.rb CHANGED
@@ -1,11 +1,10 @@
1
- require "dm_cloud/version"
2
1
  require 'yaml'
3
2
 
4
3
  # This gem's comments come from DailyMotion Cloud API,
5
4
  # that's the better way to see changes on new version and logic.
6
5
  # For parts more generals and not representating DailyMotion Cloud API,
7
6
  # I add some about my own opinion.
8
- module DMCloud
7
+ module DmCloud
9
8
 
10
9
  # Configuration defaults
11
10
  # I used this parts from Slainer68 paybox_system gem.
@@ -13,8 +12,11 @@ module DMCloud
13
12
  # Thx Slainer68, I created my first gem,
14
13
  # and next one will be an update to your paybox_system gem.
15
14
  @@config = {
16
- :security_level => 'none',
17
- :protocol => 'http'
15
+ security_level: 'none',
16
+ protocol: 'http',
17
+ auto_call: true,
18
+ user_key: nil,
19
+ secret_key: nil
18
20
  }
19
21
 
20
22
  YAML_INITIALIZER_PATH = File.dirname(__FILE__)
@@ -41,8 +43,6 @@ module DMCloud
41
43
  end
42
44
 
43
45
  # Access to config variables (security level, user_id and api_key)
44
- # NOTE: The unless @@config is not really interesting,
45
- # this mean we should loose user credentials to API.
46
46
  def self.config
47
47
  @@config = configure unless @@config
48
48
  @@config
@@ -0,0 +1,48 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ require 'dm_cloud/media'
4
+
5
+ describe DmCloud::Media do
6
+ use_vcr_cassette
7
+
8
+ context "Using test account" do
9
+ before :each do
10
+ DmCloud.configure({:user_key => TEST_USER_KEY, :secret_key => TEST_SECRET_KEY, auto_call: false})
11
+ end
12
+
13
+ context "Having a collection" do
14
+ it "should list four medias" do
15
+ subject { list(:per_page => 20)['result']['total'].should == (4) }
16
+ end
17
+
18
+ it "should get all the titles" do
19
+ result = DmCloud::Media.list(:fields => {:meta => [:title]}, :per_page => 20) #['result']['list']
20
+ result[:call].should == "media.list"
21
+ result[:params][:args][:fields].should include("meta.title")
22
+ end
23
+
24
+ it "should get page 2 with 2 records per page" do
25
+ result = DmCloud::Media.list(:per_page => 2, :page => 2)
26
+ result[:params][:page].should == 2
27
+ result[:params][:per_page].should == 2
28
+ end
29
+ end
30
+
31
+ context "Querying a single media" do
32
+ it "should have an default fields" do
33
+ result = DmCloud::Media.info('4f33ddbc94a6f6517c001577')
34
+ fields = result[:params][:args][:fields]
35
+ puts fields.to_yaml
36
+ fields.should include('embed_url')
37
+ end
38
+
39
+ # it "should have a stream url" do
40
+ # subject { stream_url('4f33ddbc94a6f6517c001577').should include("http://cdn.DmCloud.net/route/4f33d9c8f325e11c830016af/4f33ddbc94a6f6517c001577/mp4_h264_aac.mp4")
41
+ # end
42
+ #
43
+ # it "should have http detected as protocol" do
44
+ # @cloudkey.media.stream_url('4f33ddbc94a6f6517c001577', 'mp4_h264_aac',Cloudkey::SecurityPolicy.new, :download => true).should include("/http/")
45
+ # end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,35 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+ require 'dm_cloud/signing'
3
+
4
+ describe DmCloud::Signing do
5
+
6
+ before do
7
+ DmCloud.configure({ :user_key => "hello world", :secret_key => "sEcReT_KeY" })
8
+ end
9
+
10
+ it "should sign 'hello world' with sEcReT_KeY and returns 'b5d93121a6dc87562b46beb8ba809ace'" do
11
+ auth_token = subject { identify() }
12
+ auth_token.should == 'b5d93121a6dc87562b46beb8ba809ace'
13
+ end
14
+
15
+ it "it should sign an url" do
16
+ let(:signed_url) { stub(:sign).with("http://google.fr","olol") }
17
+ end
18
+
19
+ context "Normalizing" do
20
+ {
21
+ 'foo42bar' => ['foo', 42, 'bar'],
22
+ 'pink3red2yellow1' => {'yellow' => 1, 'red' => 2, 'pink' => 3},
23
+ 'foo42pink3red2yellow1bar' => ['foo', 42, {'yellow' => 1, 'red' => 2, 'pink' => 3}, 'bar'],
24
+ 'foo42pink3red2yellow1bar' => [:foo, 42, {:yellow => 1, :red => 2, :pink => 3}, :bar],
25
+ '12' => [nil, 1,2],
26
+ '' => nil,
27
+ '212345' => {2 => [nil, 1,2], 3 => nil, 4 => 5}
28
+ }.each do |normalized, original|
29
+ it "should normalize #{original.inspect} into #{normalized}" do
30
+ subject { normalize(original).should == normalized }
31
+ end
32
+ end
33
+ end
34
+
35
+ end
@@ -0,0 +1,23 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+ require 'dm_cloud/streaming'
3
+
4
+
5
+ describe DmCloud::Streaming do
6
+ use_vcr_cassette
7
+
8
+ context "check " do
9
+ before :each do
10
+ DmCloud.configure({user_key: TEST_USER_KEY, secret_key: TEST_SECRET_KEY, auto_execute: false})
11
+ end
12
+
13
+ context "Querying a single media" do
14
+ it "should have an embedded url" do
15
+ DmCloud::Streaming.embed('4f33ddbc94a6f6517c001577').should include("http://api.DmCloud.net/embed/4f33d9c8f325e11c830016af/4f33ddbc94a6f6517c001577")
16
+ end
17
+
18
+ it "should have a stream url" do
19
+ DmCloud::Streaming.url('4f33ddbc94a6f6517c001577', 'source').should include("http://cdn.DmCloud.net/route/4f33d9c8f325e11c830016af/4f33ddbc94a6f6517c001577/mp4_h264_aac.mp4")
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,28 @@
1
+ require 'spec_helper'
2
+ require 'dm_cloud'
3
+
4
+ describe DmCloud do
5
+ context "configuration" do
6
+ use_vcr_cassette
7
+
8
+ it "should provide a config on DmCloud" do
9
+ DmCloud.should respond_to :config
10
+ end
11
+
12
+ it "should be initialized with default values" do
13
+ DmCloud.configure
14
+ DmCloud.config[:security_level].should == 'none'
15
+ DmCloud.config[:protocol].should == 'http'
16
+ DmCloud.config[:auto_call].should be_true
17
+ end
18
+
19
+ context "after configuration setted" do
20
+ it "should be properly set" do
21
+ DmCloud.configure({user_key: TEST_USER_KEY, secret_key: TEST_SECRET_KEY, auto_call: false })
22
+ DmCloud.config[:user_key].should == TEST_USER_KEY
23
+ DmCloud.config[:secret_key].should == TEST_SECRET_KEY
24
+ DmCloud.config[:auto_call].should == false
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,57 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '/../', 'lib'))
3
+ require 'rubygems'
4
+ require 'rspec'
5
+ require 'rspec/autorun'
6
+
7
+ # Requires supporting files with custom matchers and macros, etc,
8
+ # in ./support/ and its subdirectories.
9
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
10
+
11
+ # def self.behavior(obj)
12
+ # if @methods
13
+ # @methods = @methods.select{|met| @methods.member? met }
14
+ # else
15
+ # @methods = obj.public_methods
16
+ # end
17
+ # end
18
+ # puts "Common Methods: #{@methods.sort.join(', ')}" if @methods
19
+
20
+ module Compare
21
+ def self.type(obj)
22
+ @objects ||= []
23
+ @objects << obj
24
+ end
25
+
26
+ def self.report
27
+ puts "Object Types: #{@objects.collect{|o| o.class}.join(', ')}" if @objects
28
+ end
29
+ end
30
+
31
+ class Object
32
+ def put_methods(regex=/.*/)
33
+ puts self.methods.grep(regex)
34
+ end
35
+ end
36
+
37
+ RSpec.configure do |config|
38
+ config.after(:suite) do
39
+ Compare.report
40
+ end
41
+ end
42
+
43
+ # Hook on http requests
44
+ require 'vcr'
45
+
46
+ TEST_USER_KEY = "my_user_key"
47
+ TEST_SECRET_KEY = "my_secret_key"
48
+
49
+ VCR.configure do |c|
50
+ c.cassette_library_dir = 'spec/cassettes'
51
+ # c.stub_with :fakeweb
52
+ c.default_cassette_options = { :record => :new_episodes }
53
+ end
54
+
55
+ RSpec.configure do |c|
56
+ c.extend VCR::RSpec::Macros
57
+ end
@@ -0,0 +1,163 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: http://api.dmcloud.net/api
6
+ body: ! '{"call":"media.list","args":{"fields":["meta.title"],"per_page": 20 },"auth": ":f588b19a1e8a9e6c65a88ae37ec2dd1a" }'
7
+ headers:
8
+ Content-Type:
9
+ - application/json
10
+ response:
11
+ status:
12
+ code: 200
13
+ message: OK
14
+ headers:
15
+ Server:
16
+ - nginx/1.0.6
17
+ Date:
18
+ - Fri, 10 Feb 2012 17:32:57 GMT
19
+ Content-Type:
20
+ - application/json
21
+ Transfer-Encoding:
22
+ - chunked
23
+ Connection:
24
+ - close
25
+ X-Response-Time:
26
+ - 4.233 ms
27
+ Access-Control-Allow-Origin:
28
+ - ! '*'
29
+ Access-Control-Allow-Headers:
30
+ - Origin, X-Requested-With, Content-Type, Accept
31
+ Set-Cookie:
32
+ - dmvk=f7847df6ed2f4c3c82708ed0a831961b; Domain=.dmcloud.net; Path=/
33
+ X-Dc-Node:
34
+ - www-01
35
+ body: ! '{"result": {"list": [{"meta": {"title": "Comment ajouter des informations
36
+ sur un graphique avec excel 2007"}}, {"meta": {"title": "Comment ajuster la
37
+ taille des colonnes et des lignes avec excel 2007"}}, {"meta": {"title": "Comment
38
+ ajouter des en-t\u00eates et des pieds de page avec excel 2007"}}, {"meta":
39
+ {"title": "Comment ajuster un tableau sur une page avec excel 2007"}}], "pages":
40
+ 1, "on_this_page": 4, "per_page": 20, "total": 4, "page": 1}}'
41
+ http_version: !!null
42
+ recorded_at: Fri, 10 Feb 2012 17:32:57 GMT
43
+ - request:
44
+ method: post
45
+ uri: http://api.dmcloud.net/api
46
+ body: ! '{"call":"media.list","args":{"fields":["meta.title"],"per_page":20},"auth":"4f33d9c8f325e11c830016af:f588b19a1e8a9e6c65a88ae37ec2dd1a"}'
47
+ headers:
48
+ Content-Type:
49
+ - application/json
50
+ response:
51
+ status:
52
+ code: 200
53
+ message: OK
54
+ headers:
55
+ Server:
56
+ - nginx/1.0.6
57
+ Date:
58
+ - Fri, 10 Feb 2012 17:32:57 GMT
59
+ Content-Type:
60
+ - application/json
61
+ Transfer-Encoding:
62
+ - chunked
63
+ Connection:
64
+ - close
65
+ X-Response-Time:
66
+ - 4.233 ms
67
+ Access-Control-Allow-Origin:
68
+ - ! '*'
69
+ Access-Control-Allow-Headers:
70
+ - Origin, X-Requested-With, Content-Type, Accept
71
+ Set-Cookie:
72
+ - dmvk=f7847df6ed2f4c3c82708ed0a831961b; Domain=.dmcloud.net; Path=/
73
+ X-Dc-Node:
74
+ - www-01
75
+ body: ! '{"result": {"list": [{"meta": {"title": "Comment ajouter des informations
76
+ sur un graphique avec excel 2007"}}, {"meta": {"title": "Comment ajuster la
77
+ taille des colonnes et des lignes avec excel 2007"}}, {"meta": {"title": "Comment
78
+ ajouter des en-t\u00eates et des pieds de page avec excel 2007"}}, {"meta":
79
+ {"title": "Comment ajuster un tableau sur une page avec excel 2007"}}], "pages":
80
+ 1, "on_this_page": 4, "per_page": 20, "total": 4, "page": 1}}'
81
+ http_version: !!null
82
+ recorded_at: Fri, 10 Feb 2012 17:32:57 GMT
83
+ - request:
84
+ method: post
85
+ uri: http://api.dmcloud.net/api
86
+ body: ! '{"call":"media.list","args":{"fields":["meta.title"],"per_page":20},"auth":"4f33d9c8f325e11c830016af:f588b19a1e8a9e6c65a88ae37ec2dd1a"}'
87
+ headers:
88
+ Content-Type:
89
+ - application/json
90
+ response:
91
+ status:
92
+ code: 200
93
+ message: OK
94
+ headers:
95
+ Server:
96
+ - nginx/1.0.6
97
+ Date:
98
+ - Fri, 10 Feb 2012 17:32:57 GMT
99
+ Content-Type:
100
+ - application/json
101
+ Transfer-Encoding:
102
+ - chunked
103
+ Connection:
104
+ - close
105
+ X-Response-Time:
106
+ - 4.127 ms
107
+ Access-Control-Allow-Origin:
108
+ - ! '*'
109
+ Access-Control-Allow-Headers:
110
+ - Origin, X-Requested-With, Content-Type, Accept
111
+ Set-Cookie:
112
+ - dmvk=5db2b968588f4e3fa9b9f9c8c4f0f22e; Domain=.dmcloud.net; Path=/
113
+ X-Dc-Node:
114
+ - www-01
115
+ body: ! '{"result": {"list": [{"meta": {"title": "Comment ajouter des informations
116
+ sur un graphique avec excel 2007"}}, {"meta": {"title": "Comment ajuster la
117
+ taille des colonnes et des lignes avec excel 2007"}}, {"meta": {"title": "Comment
118
+ ajouter des en-t\u00eates et des pieds de page avec excel 2007"}}, {"meta":
119
+ {"title": "Comment ajuster un tableau sur une page avec excel 2007"}}], "pages":
120
+ 1, "on_this_page": 4, "per_page": 20, "total": 4, "page": 1}}'
121
+ http_version: !!null
122
+ recorded_at: Fri, 10 Feb 2012 17:32:57 GMT
123
+ - request:
124
+ method: post
125
+ uri: http://api.dmcloud.net/api
126
+ body: ! '{"call":"media.list","args":{"fields":["meta.title"],"per_page":20},"auth":"4f33d9c8f325e11c830016af:f588b19a1e8a9e6c65a88ae37ec2dd1a"}'
127
+ headers:
128
+ Content-Type:
129
+ - application/json
130
+ response:
131
+ status:
132
+ code: 200
133
+ message: OK
134
+ headers:
135
+ Server:
136
+ - nginx/1.0.6
137
+ Date:
138
+ - Fri, 10 Feb 2012 17:32:57 GMT
139
+ Content-Type:
140
+ - application/json
141
+ Transfer-Encoding:
142
+ - chunked
143
+ Connection:
144
+ - close
145
+ X-Response-Time:
146
+ - 4.127 ms
147
+ Access-Control-Allow-Origin:
148
+ - ! '*'
149
+ Access-Control-Allow-Headers:
150
+ - Origin, X-Requested-With, Content-Type, Accept
151
+ Set-Cookie:
152
+ - dmvk=5db2b968588f4e3fa9b9f9c8c4f0f22e; Domain=.dmcloud.net; Path=/
153
+ X-Dc-Node:
154
+ - www-01
155
+ body: ! '{"result": {"list": [{"meta": {"title": "Comment ajouter des informations
156
+ sur un graphique avec excel 2007"}}, {"meta": {"title": "Comment ajuster la
157
+ taille des colonnes et des lignes avec excel 2007"}}, {"meta": {"title": "Comment
158
+ ajouter des en-t\u00eates et des pieds de page avec excel 2007"}}, {"meta":
159
+ {"title": "Comment ajuster un tableau sur une page avec excel 2007"}}], "pages":
160
+ 1, "on_this_page": 4, "per_page": 20, "total": 4, "page": 1}}'
161
+ http_version: !!null
162
+ recorded_at: Fri, 10 Feb 2012 17:32:57 GMT
163
+ recorded_with: VCR 2.0.0.rc1
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dm_cloud
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.55
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,22 +9,136 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-26 00:00:00.000000000 Z
13
- dependencies: []
12
+ date: 2012-11-25 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 2.8.0
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 2.8.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: rdoc
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: '3.12'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '3.12'
46
+ - !ruby/object:Gem::Dependency
47
+ name: bundler
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: jeweler
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 1.8.4
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 1.8.4
78
+ - !ruby/object:Gem::Dependency
79
+ name: rcov
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: vcr
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: webmock
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
14
126
  description: This gem will simplify usage of DailyMotion Cloud API, it represent api
15
127
  in ruby style, with automated handler for search and upload files
16
128
  email:
17
129
  - mortelette.jeremy@gmail.com
18
130
  executables: []
19
131
  extensions: []
20
- extra_rdoc_files: []
132
+ extra_rdoc_files:
133
+ - LICENSE.txt
134
+ - README.md
21
135
  files:
22
136
  - .gitignore
23
137
  - Gemfile
24
138
  - LICENSE.txt
25
139
  - README.md
26
140
  - Rakefile
27
- - dm_cloud.gemspec
141
+ - VERSION
28
142
  - lib/dm_cloud.rb
29
143
  - lib/dm_cloud/builder/media.rb
30
144
  - lib/dm_cloud/media.rb
@@ -32,6 +146,13 @@ files:
32
146
  - lib/dm_cloud/signing.rb
33
147
  - lib/dm_cloud/streaming.rb
34
148
  - lib/dm_cloud/version.rb
149
+ - spec/dm_cloud/media_spec.rb
150
+ - spec/dm_cloud/signing_spec.rb
151
+ - spec/dm_cloud/streaming_spec.rb
152
+ - spec/dm_cloud_spec.rb
153
+ - spec/spec_helper.rb
154
+ - spec/vcr_cassettes/dm_cloud/dm_cloud_streaming.yml
155
+ - spec/vcr_cassettes/dm_cloud_media.yml
35
156
  homepage: ''
36
157
  licenses: []
37
158
  post_install_message:
@@ -44,6 +165,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
44
165
  - - ! '>='
45
166
  - !ruby/object:Gem::Version
46
167
  version: '0'
168
+ segments:
169
+ - 0
170
+ hash: 4229416292724513702
47
171
  required_rubygems_version: !ruby/object:Gem::Requirement
48
172
  none: false
49
173
  requirements:
@@ -56,4 +180,11 @@ rubygems_version: 1.8.24
56
180
  signing_key:
57
181
  specification_version: 3
58
182
  summary: Simplify DailyMotion Cloud API usage
59
- test_files: []
183
+ test_files:
184
+ - spec/dm_cloud/media_spec.rb
185
+ - spec/dm_cloud/signing_spec.rb
186
+ - spec/dm_cloud/streaming_spec.rb
187
+ - spec/dm_cloud_spec.rb
188
+ - spec/spec_helper.rb
189
+ - spec/vcr_cassettes/dm_cloud/dm_cloud_streaming.yml
190
+ - spec/vcr_cassettes/dm_cloud_media.yml
data/dm_cloud.gemspec DELETED
@@ -1,19 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'dm_cloud/version'
5
-
6
- Gem::Specification.new do |gem|
7
- gem.name = "dm_cloud"
8
- gem.version = DMCloud::VERSION
9
- gem.authors = ["Jeremy Mortelette"]
10
- gem.email = ["mortelette.jeremy@gmail.com"]
11
- gem.description = 'This gem will simplify usage of DailyMotion Cloud API, it represent api in ruby style, with automated handler for search and upload files'
12
- gem.summary = 'Simplify DailyMotion Cloud API usage'
13
- gem.homepage = ""
14
-
15
- gem.files = `git ls-files`.split($/)
16
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
- gem.require_paths = ["lib"]
19
- end