dm_cloud 0.0.55 → 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.
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