dm_cloud 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/dm_cloud.gemspec CHANGED
@@ -16,4 +16,5 @@ Gem::Specification.new do |gem|
16
16
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ["lib"]
19
+ gem.add_dependency 'curb', "~> 0.8.0"
19
20
  end
@@ -26,16 +26,10 @@ module DMCloud
26
26
  request['fields'] = []
27
27
 
28
28
  # requested media meta datas
29
- fields[:meta].each { |value| request['fields'] << "meta.#{value}" } if fields[:meta].present?
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']
30
32
 
31
- #the creation date as a unix timestamp
32
- request['fields'] << 'created' if fields[:created]
33
-
34
- # the url of the embed player
35
- request['fields'] << 'embed_url' if fields[:embed_url]
36
-
37
- # the ratio of the video frame as a float (eg: 16/9, 4/3, etc).
38
- request['fields'] << 'frame_ratio' if fields[:frame_ratio]
39
33
  # the worldwide statistics on the number of views
40
34
  # request['fields'] << 'stats.global.last_week' if fields[:stats][:global]
41
35
 
@@ -46,7 +40,7 @@ module DMCloud
46
40
 
47
41
  assets_names = ['source'] if assets_names.nil?
48
42
  if not fields[:assets]
49
- request = all_assets_fields(request, assets_names)
43
+ # request = all_assets_fields(request, assets_names)
50
44
  else
51
45
  assets_names.each do |name|
52
46
  fields[:assets].each { |value| request << "assets.#{name}.#{value.to_s}" }
@@ -62,16 +56,9 @@ module DMCloud
62
56
 
63
57
  request['fields'] = []
64
58
  # requested media meta datas
65
- fields[:meta].each { |key| request << "meta.#{key.to_s}" } if fields[:meta].present?
66
-
67
- #the creation date as a unix timestamp
68
- request['fields'] << 'created' if fields[:created]
69
-
70
- # the url of the embed player
71
- request['fields'] << 'embed_url' if fields[:embed_url]
72
-
73
- # the ratio of the video frame as a float (eg: 16/9, 4/3, etc).
74
- request['fields'] << 'frame_ratio' if fields[:frame_ratio]
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']
75
62
 
76
63
  # TODO: handle global statistics request in another module
77
64
  # the worldwide statistics on the number of views
@@ -84,10 +71,10 @@ module DMCloud
84
71
 
85
72
  assets_names = ['source'] if assets_names.nil?
86
73
  if not fields[:assets]
87
- request = all_assets_fields(request, assets_names)
74
+ # request = all_assets_fields(request, assets_names)
88
75
  else
89
76
  assets_names.each do |name|
90
- fields[:assets].each { |value| request << "assets.#{name}.#{value.to_s}" }
77
+ fields[:assets].each { |value| request['fields'] << "assets.#{name}.#{value.to_s}" }
91
78
  end
92
79
  end
93
80
 
@@ -72,8 +72,8 @@ module DMCloud
72
72
  def self.list(options = {})
73
73
  call_type = "media.list"
74
74
 
75
- page = options[:page].present? ? options[:page] : 1
76
- per_page = options[:per_page].present? ? options[:per_page] : 10
75
+ page = options[:page] ? options[:page] : 1
76
+ per_page = options[:per_page] ? options[:per_page] : 10
77
77
 
78
78
  params = {
79
79
  :call => call_type,
@@ -4,6 +4,8 @@ module DMCloud
4
4
  class Request
5
5
 
6
6
  DAILYMOTION_API = 'http://api.dmcloud.net/api'
7
+ DAILYMOTION_STATIC = 'http://api.dmcloud.net/api'
8
+
7
9
 
8
10
  def self.send_request(params)
9
11
  puts 'body request params : ' + params.to_json + "\n" + '-' * 80
@@ -23,8 +25,9 @@ module DMCloud
23
25
  end
24
26
 
25
27
  def self.execute(call, params = {})
26
- request = DMCloud::Signing.identify(params)
27
- params['auth'] = request
28
+ url = define(call)
29
+ params['auth'] = DMCloud::Signing.identify(params)
30
+
28
31
  result = send_request(params)
29
32
  parse_response(result)
30
33
  end
@@ -33,6 +36,8 @@ module DMCloud
33
36
  puts 'result : ' + result.to_yaml
34
37
  end
35
38
 
36
-
39
+ def self.define(action)
40
+ DAILYMOTION_API
41
+ end
37
42
  end
38
43
  end
@@ -11,11 +11,11 @@ module DMCloud
11
11
  api_key = DMCloud.config[:secret_key]
12
12
 
13
13
  normalized_request = normalize(request).to_s
14
- puts 'normalized_values : ' + normalized_request + "\n" + '-' * 80
14
+ puts 'identify:: normalized_values : ' + normalized_request + "\n" + '-' * 80
15
15
 
16
16
  params = user_id + normalized_request + api_key
17
17
 
18
- puts 'Values before MD5 encrypt : ' + params + "\n" + '-' * 80
18
+ puts 'identify:: Values before MD5 encrypt : ' + params + "\n" + '-' * 80
19
19
 
20
20
  checksum = Digest::MD5.hexdigest(params)
21
21
  auth_token = user_id + ':' + checksum
@@ -39,20 +39,21 @@ module DMCloud
39
39
  # Result :
40
40
  # return a string which contain the signed url like
41
41
  # <url>?auth=<expires>-<sec>-<nonce>-<md5sum>[-<pub-sec-data>]
42
- def self.sign(stream)
42
+ def self.sign(stream, security_datas = nil)
43
43
  raise StandardError, "missing :stream in params" unless stream
44
- security = security(DMCloud.config[:security_level])
45
- sec_data = security_data(DMCloud.config[:security_level])
44
+ sec_level = security(DMCloud.config[:security_level])
45
+ sec_data = security_data(DMCloud.config[:security_level], security_datas) unless security_datas.nil?
46
46
 
47
47
  base = {
48
- :sec_level => security(DMCloud.config[:security_level]),
48
+ :sec_level => sec_level,
49
49
  :url_no_query => stream,
50
50
  :expires => (Time.now + 1.hour).to_i,
51
51
  :nonce => SecureRandom.hex(16)[0,8],
52
52
  :secret => DMCloud.config[:secret_key]
53
53
  }
54
+
54
55
  base.merge!(:sec_data => sec_data, :pub_sec_data => sec_data) unless sec_data.nil?
55
- puts base
56
+
56
57
  digest_struct = build_digest_struct(base)
57
58
 
58
59
  check_sum = Digest::MD5.hexdigest(digest_struct)
@@ -111,7 +112,7 @@ module DMCloud
111
112
  type = :none unless type
112
113
  type = type.to_sym if type.class == String
113
114
 
114
- result = case type
115
+ case type
115
116
  when :none
116
117
  0 # None
117
118
  when :delegate
@@ -129,13 +130,12 @@ module DMCloud
129
130
  when :referer
130
131
  1 << 6 # A list of URL prefixes separated by spaces stored in the pub-sec-data component (ex: rf=http;//domain.com/a/+http:/domain.com/b/).
131
132
  end
132
- result
133
133
  end
134
134
 
135
135
  def self.security_data(type, value = nil)
136
136
  type = type.to_sym if type.class == String
137
-
138
- result = case type
137
+
138
+ case type
139
139
  when :asnum
140
140
  "as=#{value}" # The number part of the end-user AS prefixed by the ‘AS’ string (ie: as=AS41690)
141
141
  when :ip
@@ -149,13 +149,12 @@ module DMCloud
149
149
  else
150
150
  nil
151
151
  end
152
- result
153
152
  end
154
153
 
155
154
  def self.security_pub_sec_data(type, value)
156
155
  type = type.to_sym if type.class == String
157
156
 
158
- result = case type
157
+ case type
159
158
  when :country
160
159
  "cc=#{value}" # A list of 2 characters long country codes in lowercase by comas. If the list starts with a dash, the rule is inverted (ie: cc=fr,gb,de or cc=-fr,it). This data have to be stored in pub-sec-data component
161
160
  when :referer
@@ -163,13 +162,23 @@ module DMCloud
163
162
  else
164
163
  nil
165
164
  end
166
- result
167
165
  end
168
166
 
169
- def self.normalize(params)
170
- str = params.to_json.to_s
171
- str.gsub!(/[^A-Za-z0-9]/, '')
172
- str
173
- end
167
+ def self.normalize params
168
+ case params
169
+ when Array
170
+ params.collect { |element| normalize(element) }.join('')
171
+ when Hash
172
+ params.to_a.sort_by {|a,b| a.to_s }.collect {|array| array.first.to_s + normalize(array.last)}.join('')
173
+ else
174
+ params.to_s
175
+ end
176
+ end
177
+
178
+ # def self.normalize(params)
179
+ # str = params.to_json.to_s
180
+ # str.gsub!(/[^A-Za-z0-9]/, '')
181
+ # str
182
+ # end
174
183
  end
175
184
  end
@@ -3,6 +3,8 @@ require "openssl"
3
3
  require "base64"
4
4
  require 'digest/md5'
5
5
 
6
+ # This module generate methods to generate video's fluxes
7
+ # before signing it and request it.
6
8
  module DMCloud
7
9
  class Streaming
8
10
  # Default URL to get embed content ou direct url
@@ -1,3 +1,3 @@
1
1
  module DMCloud
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
data/lib/dm_cloud.rb CHANGED
@@ -1,9 +1,17 @@
1
1
  require "dm_cloud/version"
2
2
  require 'yaml'
3
-
3
+
4
+ # This gem's comments come from DailyMotion Cloud API,
5
+ # that's the better way to see changes on new version and logic.
6
+ # For parts more generals and not representating DailyMotion Cloud API,
7
+ # I add some about my own opinion.
4
8
  module DMCloud
5
9
 
6
10
  # Configuration defaults
11
+ # I used this parts from Slainer68 paybox_system gem.
12
+ # I liked the concept and how he handle this part.
13
+ # Thx Slainer68, I created my first gem,
14
+ # and next one will be an update to your paybox_system gem.
7
15
  @@config = {
8
16
  :security_level => 'none',
9
17
  :protocol => 'http'
@@ -18,6 +26,7 @@ module DMCloud
18
26
  end
19
27
 
20
28
  # Configure through yaml file
29
+ # for ruby scripting usage
21
30
  def self.configure_with(yaml_file_path = nil)
22
31
  yaml_file_path = YAML_INITIALIZER_PATH unless yaml_file_path
23
32
  begin
@@ -31,46 +40,19 @@ module DMCloud
31
40
  configure(config)
32
41
  end
33
42
 
43
+ # 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.
34
46
  def self.config
35
47
  @@config = configure unless @@config
36
48
  @@config
37
49
  end
38
-
39
- def self.create_has_library(library)
40
- define_singleton_method("has_#{library}?") do
41
- cv="@@#{library}"
42
- if !class_variable_defined? cv
43
- begin
44
- require library.to_s
45
- class_variable_set(cv,true)
46
- rescue LoadError
47
- class_variable_set(cv,false)
48
- end
49
- end
50
- class_variable_get(cv)
51
- end
52
- end
53
-
54
- create_has_library :streaming
55
- create_has_library :media
56
-
57
- class << self
58
- # Load a object saved on a file.
59
- def load(filename)
60
- if File.exists? filename
61
- o=false
62
- File.open(filename,"r") {|fp| o=Marshal.load(fp) }
63
- o
64
- else
65
- false
66
- end
67
- end
68
- end
69
-
50
+
51
+ # Loading classes to easier access
52
+ # NOTE: I like this way to handle my classes,
53
+ # sexiest than using require 'my_class_file' everywhere
70
54
  autoload(:Streaming, 'dm_cloud/streaming')
71
55
  autoload(:Media, 'dm_cloud/media')
72
56
  autoload(:Request, 'dm_cloud/request')
73
57
  autoload(:Signing, 'dm_cloud/signing')
74
- end
75
-
76
- # Dir.glob('dm_cloud/**/*.rb').each{ |m| require File.dirname(__FILE__) + '/dm_cloud/' + m }
58
+ end
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.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,8 +9,24 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-25 00:00:00.000000000 Z
13
- dependencies: []
12
+ date: 2012-10-26 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: curb
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.8.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.8.0
14
30
  description: This gem will simplify usage of DailyMotion Cloud API, it represent api
15
31
  in ruby style, with automated handler for search and upload files
16
32
  email: