s3_media_server_api 0.1.0.5 → 0.1.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a292172cf6349c6cae06a1f6b12f301c985c5154
4
- data.tar.gz: 1b6280133ccf42bbcf3e4b71edbba261cdb9d0c2
3
+ metadata.gz: 9dd5d2438d4686aef0f18d3bf611f72e4916dd34
4
+ data.tar.gz: bc6826997c05d221a2af7a902da1d954ce511dea
5
5
  SHA512:
6
- metadata.gz: c287cf5899834b6427ba9676b24b1ee7186ba9288ee172025f684a6395fe448d2d163b04ca5da4a75bf725b9e39fae922852c3d342f3ba08f69ca3e732b15255
7
- data.tar.gz: 3410f7b5cafb132fb4bf4807f28e7e00e71b1cbfd5249971dd96931d58ea55a637a61c5d3416180479f4c0f49e9224c10720fcaec6b6661ca247b1c52fc0bf2a
6
+ metadata.gz: d665f7356ee6ceda17205ef6ab8b3bdb47c067aeb0c03fc53acfe33e50719f47fc0d0d315fa9dd35d7e62dc93f871588d4723b4648067078a1578f7c21455788
7
+ data.tar.gz: 6abd0d44ea37b137b63dfb8d3a1368fbcc081233eea23322ea76e0c4b33eae8315c371ff6460bbcf33b6c0f48c2ad99f860d57c01fb7308f774c5b1f7d8af7fb
data/Gemfile.lock ADDED
@@ -0,0 +1,81 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ s3_media_server_api (0.1.0.3)
5
+ asynk (>= 0.0.1)
6
+ faraday
7
+ mimemagic
8
+ parallel
9
+ simple_file_uploader
10
+
11
+ GEM
12
+ remote: https://rubygems.org/
13
+ specs:
14
+ activesupport (5.0.0)
15
+ concurrent-ruby (~> 1.0, >= 1.0.2)
16
+ i18n (~> 0.7)
17
+ minitest (~> 5.1)
18
+ tzinfo (~> 1.1)
19
+ amq-protocol (2.0.1)
20
+ asynk (0.0.2)
21
+ activesupport (>= 4.2)
22
+ bunny (~> 2.3)
23
+ celluloid (~> 0.17)
24
+ celluloid-io (~> 0.17)
25
+ connection_pool (~> 2.2)
26
+ json (~> 1.0)
27
+ bunny (2.5.0)
28
+ amq-protocol (>= 2.0.1)
29
+ celluloid (0.17.3)
30
+ celluloid-essentials
31
+ celluloid-extras
32
+ celluloid-fsm
33
+ celluloid-pool
34
+ celluloid-supervision
35
+ timers (>= 4.1.1)
36
+ celluloid-essentials (0.20.5)
37
+ timers (>= 4.1.1)
38
+ celluloid-extras (0.20.5)
39
+ timers (>= 4.1.1)
40
+ celluloid-fsm (0.20.5)
41
+ timers (>= 4.1.1)
42
+ celluloid-io (0.17.3)
43
+ celluloid (>= 0.17.2)
44
+ nio4r (>= 1.1)
45
+ timers (>= 4.1.1)
46
+ celluloid-pool (0.20.5)
47
+ timers (>= 4.1.1)
48
+ celluloid-supervision (0.20.6)
49
+ timers (>= 4.1.1)
50
+ concurrent-ruby (1.0.2)
51
+ connection_pool (2.2.0)
52
+ faraday (0.9.2)
53
+ multipart-post (>= 1.2, < 3)
54
+ hitimes (1.2.4)
55
+ i18n (0.7.0)
56
+ json (1.8.3)
57
+ mimemagic (0.3.1)
58
+ minitest (5.9.0)
59
+ multipart-post (2.0.0)
60
+ nio4r (1.2.1)
61
+ parallel (1.9.0)
62
+ rake (10.5.0)
63
+ simple_file_uploader (0.0.1)
64
+ bunny
65
+ thread_safe (0.3.5)
66
+ timers (4.1.1)
67
+ hitimes
68
+ tzinfo (1.2.2)
69
+ thread_safe (~> 0.1)
70
+
71
+ PLATFORMS
72
+ ruby
73
+
74
+ DEPENDENCIES
75
+ bundler (~> 1.11)
76
+ minitest (~> 5.0)
77
+ rake (~> 10.0)
78
+ s3_media_server_api!
79
+
80
+ BUNDLED WITH
81
+ 1.11.2
@@ -5,8 +5,11 @@ require "s3_media_server_api/config"
5
5
  require "s3_media_server_api/uploader"
6
6
  require "s3_media_server_api/file_part"
7
7
  require "s3_media_server_api/aws_file"
8
+ require "s3_media_server_api/mocked"
8
9
  require "s3_media_server_api/media"
9
10
  require "s3_media_server_api/asynk_request"
10
-
11
+ require "s3_media_server_api/services"
12
+ require "s3_media_server_api/simple_uploaders_repository"
13
+ require 's3_media_server_api/consumers'
11
14
  module S3MediaServerApi
12
15
  end
@@ -8,7 +8,8 @@ module S3MediaServerApi
8
8
  # params - parametes that will be passed to consumer
9
9
  #
10
10
  def async_request(path, action, params)
11
- Asynk::Publisher.publish("#{server}.#{path}.#{action}", params)
11
+ consumer = "#{server}.#{path}.#{action}"
12
+ S3MediaServerApi::Config.mocked ? Mocked::Request.publish(consumer, params) : Asynk::Publisher.publish(consumer, params)
12
13
  end
13
14
  #
14
15
  # sends synchronous request using Asynk gem - https://github.com/konalegi/asynk
@@ -17,7 +18,8 @@ module S3MediaServerApi
17
18
  # params - parametes that will be passed to consumer
18
19
  #
19
20
  def sync_request(path, action, params)
20
- Asynk::Publisher.sync_publish("#{server}.#{path}.#{action}", params)
21
+ consumer = "#{server}.#{path}.#{action}"
22
+ S3MediaServerApi::Config.mocked ? Mocked::Request.sync_publish(consumer, params) : Asynk::Publisher.sync_publish(consumer, params)
21
23
  end
22
24
 
23
25
  private
@@ -91,6 +91,10 @@ module S3MediaServerApi
91
91
  AwsFile.new(response)
92
92
  end
93
93
 
94
+ def file_exists(uuid)
95
+ AsynkRequest.async_request(base_path, :file_exists, uuid: uuid)
96
+ end
97
+
94
98
  private
95
99
 
96
100
  def file_mime_type(file_source_path)
@@ -33,7 +33,8 @@ module S3MediaServerApi
33
33
 
34
34
  add_config :cache_class, S3MediaServerApi::Cache
35
35
  add_config :upload_thread_count, 4
36
+ add_config :mocked, false
36
37
 
37
- required :cache_class, :upload_thread_count
38
+ required :cache_class, :upload_thread_count, :mocked
38
39
  end
39
40
  end
@@ -0,0 +1,6 @@
1
+ require 's3_media_server_api/consumers/consumer_helper'
2
+ require 's3_media_server_api/consumers/s3_media_server_consumer'
3
+ module S3MediaServerApi
4
+ module Consumers
5
+ end
6
+ end
@@ -0,0 +1,14 @@
1
+ module S3MediaServerApi
2
+ module Consumers
3
+ module ConsumerHelper
4
+ def handle_exception(ex)
5
+ bc = ActiveSupport::BacktraceCleaner.new
6
+ bc.add_filter { |line| line.gsub(Rails.root.to_s, '') } # strip the Rails.root prefix
7
+ bc.add_silencer { |line| line =~ /mongrel|gems|minitest/ } # skip any lines from mongrel or rubygems
8
+ array_of_trace = bc.clean(ex.backtrace).map{|line| [" ", line].join }
9
+ array_of_trace.unshift("#{ex.class}: #{ex.message}")
10
+ logger.error array_of_trace.join("\n")
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,23 @@
1
+ module S3MediaServerApi
2
+ module Consumers
3
+ class S3MediaServerConsumer
4
+ include Asynk::Consumer
5
+ include ConsumerHelper
6
+
7
+ set_consume 'broadcast.server.s3_media_server.aws_file.garbage_collect'
8
+
9
+ set_queue_options ack: true
10
+ set_subscribe_arguments manual_ack: true
11
+ set_concurrency 1
12
+ set_route_ending_as_action true
13
+ rescue_from Exception, with: :handle_exception
14
+
15
+
16
+ def garbage_collect(params)
17
+ S3MediaServerApi::Services::UploaderExistenceService.check(params[:uuid])
18
+ ensure
19
+ ack!
20
+ end
21
+ end
22
+ end
23
+ end
@@ -11,10 +11,6 @@ module S3MediaServerApi
11
11
  @params[:url]
12
12
  end
13
13
 
14
- def sample_url
15
- @params[:sample_url]
16
- end
17
-
18
14
  def duration
19
15
  @params[:duration]
20
16
  end
@@ -38,7 +34,7 @@ module S3MediaServerApi
38
34
  # duration - duration of audio file
39
35
  # start_position - position where cut wil be made
40
36
  #
41
- def cut(uuid, audio_url: audio_url, duration: duration, start_position: start_position)
37
+ def cut(uuid, audio_url:, duration:, start_position:)
42
38
  params = {
43
39
  uuid: uuid,
44
40
  audio_url: audio_url,
@@ -41,7 +41,7 @@ module S3MediaServerApi
41
41
  # returns: response with created AwsFile information
42
42
  #
43
43
  def create(path)
44
- aws_file = Uploader.upload(path)
44
+ aws_file = S3MediaServerApi::Config.mocked ? Mocked::Uploader.upload(path) : Uploader.upload(path)
45
45
  uuid = aws_file.uuid
46
46
  params = (media_type == 'video') ? { uuid: uuid } : { aws_file_uuid: uuid }
47
47
  response = AsynkRequest.sync_request(base_path, :create, params)
@@ -0,0 +1,8 @@
1
+ require 's3_media_server_api/mocked/uploader'
2
+ require 's3_media_server_api/mocked/request'
3
+
4
+
5
+ module S3MediaServerApi
6
+ module Mocked
7
+ end
8
+ end
@@ -0,0 +1,145 @@
1
+ module S3MediaServerApi
2
+ module Mocked
3
+ class Request
4
+
5
+ def initialize(hash)
6
+ @body = hash
7
+ end
8
+
9
+ def success?
10
+ true
11
+ end
12
+
13
+ def [](key)
14
+ @body[key]
15
+ end
16
+
17
+ class << self
18
+ def sync_publish(path, params)
19
+ case path
20
+ when /s3_media_server.media.(audio).(\.*)/
21
+ mocked_audio_sync_request(params)
22
+ when /s3_media_server.media.(video).(\.*)/
23
+ mocked_video_sync_request(params)
24
+ when /s3_media_server.media.(image).(\.*)/
25
+ mocked_image_sync_request(params)
26
+ when /s3_media_server.media.(document).(\.*)/
27
+ mocked_document_sync_request(params)
28
+ end
29
+ end
30
+
31
+ def publish(path, params)
32
+ true
33
+ end
34
+
35
+ private
36
+
37
+
38
+ def mocked_audio_sync_request(params)
39
+ uuid = params[:aws_file_uuid] ? params[:aws_file_uuid] : params[:uuid]
40
+ response = {data: { url: "https://storage-nginx.stage.govermedia.com/test-bucket/test_files/#{SecureRandom.uuid}.mp3",
41
+ sample_url: "https://storage-nginx.stage.govermedia.com/test-bucket/test_files/#{SecureRandom.uuid}.mp3",
42
+ uuid: uuid,
43
+ size: 704512,
44
+ sample_uploaded: true,
45
+ name: "music_test.mp3",
46
+ duration: 87.891875,
47
+ sample_duration: 19.983673}}
48
+ Request.new(response)
49
+ end
50
+
51
+ def mocked_video_sync_request(params)
52
+ response = {:data=>{:duration=>6.037,
53
+ :transcoded=>true,
54
+ :uuid=>params[:uuid],
55
+ :versions=>[{ :url=>"https://storage-nginx.stage.govermedia.com/test-bucket/test_files/18e776ab-c4ca-40cd-9ecb-a605664ce118.mp4",
56
+ :format=>"mp4",
57
+ :size=>326089,
58
+ :resolution=>"r240p"},
59
+ { :url=>"https://storage-nginx.stage.govermedia.com/test-bucket/test_files/c5c9bf51-76c7-42e3-b2ce-4d55d41df815.mp4",
60
+ :format=>"mp4",
61
+ :size=>602906,
62
+ :resolution=>"r360p"},
63
+ { :url=>"https://storage-nginx.stage.govermedia.com/test-bucket/test_files/475a37b9-50de-472f-a7f4-949774fb46b4.mp4",
64
+ :format=>"mp4",
65
+ :size=>3188011,
66
+ :resolution=>"source"},
67
+ { :url=>"https://storage-nginx.stage.govermedia.com/test-bucket/test_files/5db270ce-966a-4caa-a4ca-c2dd57ad3b8b.webm",
68
+ :format=>"webm",
69
+ :size=>382660,
70
+ :resolution=>"r240p"},
71
+ { :url=>"https://storage-nginx.stage.govermedia.com/test-bucket/test_files/1597fcb9-5a54-449d-9b99-fc87564e1113.webm",
72
+ :format=>"webm",
73
+ :size=>704246,
74
+ :resolution=>"r360p"},
75
+ { :url=>"https://storage-nginx.stage.govermedia.com/test-bucket/test_files/a5519a7d-1e03-4b99-8446-eb04273ada83.webm",
76
+ :format=>"webm",
77
+ :size=>4292789,
78
+ :resolution=>"source"}],
79
+ :preview=>{:uuid=>"c13ed468-55ee-4281-bf4b-9a2115203c86",
80
+ :size=>33884,
81
+ :name=>nil,
82
+ :source=>{:url=>"https://storage-nginx.stage.govermedia.com/test-bucket/test_files/a203e4e2-1ca3-4d62-a361-4ca5033fe45c.jpeg",
83
+ :width=>720,
84
+ :height=>1280},
85
+ :thumb=>{:url=>"https://storage-nginx.stage.govermedia.com/test-bucket/test_files/91133554-1e86-4034-92ac-3b42d28f1aae.jpeg",
86
+ :width=>158,
87
+ :height=>280}},
88
+ :screenshots=>[{ :uuid=>"c6509e64-7191-4f3d-a1fe-c8abc8d9b669",
89
+ :size=>33914,
90
+ :name=>nil,
91
+ :source=> {:url=>"https://storage-nginx.stage.govermedia.com/test-bucket/test_files/9ba7a208-5ab1-47ce-8f86-220fb89ed237.jpeg",
92
+ :width=>720,
93
+ :height=>1280},
94
+ :thumb=> {:url=>"https://storage-nginx.stage.govermedia.com/test-bucket/test_files/c398defd-b770-4acd-b1ae-9cabb0b3ad75.jpeg",
95
+ :width=>158,
96
+ :height=>280}},
97
+ { :uuid=>"c13ed468-55ee-4281-bf4b-9a2115203c86",
98
+ :size=>33884,
99
+ :name=>nil,
100
+ :source=>{:url=>"https://storage-nginx.stage.govermedia.com/test-bucket/test_files/a203e4e2-1ca3-4d62-a361-4ca5033fe45c.jpeg",
101
+ :width=>720,
102
+ :height=>1280},
103
+ :thumb=>{:url=>"https://storage-nginx.stage.govermedia.com/test-bucket/test_files/91133554-1e86-4034-92ac-3b42d28f1aae.jpeg",
104
+ :width=>158,
105
+ :height=>280}},
106
+ { :uuid=>"32c1f326-33fe-477e-aeba-8c5bf2a85ded",
107
+ :size=>29856,
108
+ :name=>nil,
109
+ :source=>{:url=>"https://storage-nginx.stage.govermedia.com/test-bucket/test_files/b513908d-b4ea-484d-823c-8ed49cf2415c.jpeg",
110
+ :width=>720,
111
+ :height=>1280},
112
+ :thumb=>{:url=>"https://storage-nginx.stage.govermedia.com/test-bucket/test_files/e6839727-9e61-41e8-a1a5-c190f5343cb0.jpeg",
113
+ :width=>158,
114
+ :height=>280}}],
115
+ :name=>nil,
116
+ :embed_url=>"https://govermedia.com/embed_video/?uuid=0e4d7d8c-a8f5-49da-94cd-d9811ec01d78", :provider=>"govermedia"}}
117
+ Request.new(response)
118
+ end
119
+
120
+ def mocked_image_sync_request(params)
121
+ uuid = params[:aws_file_uuid] ? params[:aws_file_uuid] : params[:uuid]
122
+ response = {data: {uuid: uuid,
123
+ size: 12254,
124
+ name: "test_image.jpg",
125
+ source: { url: "https://storage-nginx.stage.govermedia.com/test-bucket/test_files/7f7e7aa3-5ed7-4120-b843-45d19f65bee6.jpeg",
126
+ width: 313,
127
+ height: 315},
128
+ thumb: { url: "https://storage-nginx.stage.govermedia.com/test-bucket/test_files/2523c7ca-cdaa-4599-8a46-e949335738a3.jpeg",
129
+ width: 278,
130
+ height: 280}}}
131
+ Request.new(response)
132
+ end
133
+
134
+ def mocked_document_sync_request(params)
135
+ uuid = params[:aws_file_uuid] ? params[:aws_file_uuid] : params[:uuid]
136
+ response = {data: {url: "https://storage-nginx.stage.govermedia.com/test-bucket/test_files/95d5edfe-1f17-422d-85c7-69f63e00c3fe.mp4",
137
+ uuid: "c147f0aa-f0e3-42da-ab0e-28895dc21ea1",
138
+ size: 245779,
139
+ name: "document.pdf"}}
140
+ Request.new(response)
141
+ end
142
+ end
143
+ end
144
+ end
145
+ end
@@ -0,0 +1,38 @@
1
+ module S3MediaServerApi
2
+ module Mocked
3
+ module Uploader
4
+ class << self
5
+ def upload(file_path)
6
+ uuid = SecureRandom.uuid
7
+ part_size = 5*1024*1024
8
+ response = {data: {uuid: uuid,
9
+ size: File.size(file_path),
10
+ mime_type: file_mime_type(file_path),
11
+ uploads_count: parts_count(file_path, part_size),
12
+ default_part_size: part_size,
13
+ state: "uploaded",
14
+ public_url: "https://storage-nginx.stage.govermedia.com/test-bucket/test_files/#{uuid}.mp3",
15
+ name: File.basename(file_path)}}
16
+ AwsFile.new(response)
17
+ end
18
+
19
+ private
20
+
21
+ def file_mime_type(file_source_path)
22
+ mime_magic = MimeMagic.by_magic(File.open(file_source_path))
23
+ mime_magic ? mime_magic.type : 'application/octet-stream'
24
+ end
25
+
26
+ def parts_count(source, default_part_size)
27
+ size = File.size(source)
28
+ offset, part_number = 0, 1
29
+ while offset < size
30
+ part_number += 1
31
+ offset += default_part_size
32
+ end
33
+ part_number
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,5 @@
1
+ require 's3_media_server_api/services/uploader_existence_service'
2
+ module S3MediaServerApi
3
+ module Services
4
+ end
5
+ end
@@ -0,0 +1,18 @@
1
+ module S3MediaServerApi
2
+ module Services
3
+ class UploaderExistenceService
4
+ class << self
5
+
6
+ def check(aws_file_uuid)
7
+ return unless aws_file_uuid
8
+
9
+ S3MediaServerApi::SimpleUploadersRepository.uploader_classes.each do |uploader_class|
10
+ uploader = uploader_class.find_uploader_by_uuid(aws_file_uuid)
11
+ S3MediaServerApi::AwsFile.file_exists(aws_file_uuid) and return if uploader.present?
12
+ end
13
+ end
14
+
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,10 @@
1
+ module S3MediaServerApi
2
+ class SimpleUploadersRepository
3
+ class << self
4
+ def uploader_classes
5
+ @uploader_classes ||= SimpleFileUploader::BaseUploader.descendants
6
+ end
7
+ end
8
+ end
9
+
10
+ end
@@ -1,3 +1,3 @@
1
1
  module S3MediaServerApi
2
- VERSION = "0.1.0.5"
2
+ VERSION = "0.1.0.7"
3
3
  end
@@ -24,4 +24,5 @@ Gem::Specification.new do |spec|
24
24
  spec.add_dependency 'parallel'
25
25
  spec.add_dependency 'mimemagic'
26
26
  spec.add_dependency 'faraday'
27
+ spec.add_dependency 'simple_file_uploader'
27
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: s3_media_server_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.5
4
+ version: 0.1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ayrat Badykov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-07-15 00:00:00.000000000 Z
11
+ date: 2016-07-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: simple_file_uploader
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
111
125
  description:
112
126
  email:
113
127
  - ayratin555@gmail.com
@@ -116,6 +130,7 @@ extensions: []
116
130
  extra_rdoc_files: []
117
131
  files:
118
132
  - Gemfile
133
+ - Gemfile.lock
119
134
  - LICENSE.txt
120
135
  - README.md
121
136
  - Rakefile
@@ -124,6 +139,9 @@ files:
124
139
  - lib/s3_media_server_api/aws_file.rb
125
140
  - lib/s3_media_server_api/cache.rb
126
141
  - lib/s3_media_server_api/config.rb
142
+ - lib/s3_media_server_api/consumers.rb
143
+ - lib/s3_media_server_api/consumers/consumer_helper.rb
144
+ - lib/s3_media_server_api/consumers/s3_media_server_consumer.rb
127
145
  - lib/s3_media_server_api/error.rb
128
146
  - lib/s3_media_server_api/file_part.rb
129
147
  - lib/s3_media_server_api/media.rb
@@ -132,6 +150,12 @@ files:
132
150
  - lib/s3_media_server_api/media/document.rb
133
151
  - lib/s3_media_server_api/media/image.rb
134
152
  - lib/s3_media_server_api/media/video.rb
153
+ - lib/s3_media_server_api/mocked.rb
154
+ - lib/s3_media_server_api/mocked/request.rb
155
+ - lib/s3_media_server_api/mocked/uploader.rb
156
+ - lib/s3_media_server_api/services.rb
157
+ - lib/s3_media_server_api/services/uploader_existence_service.rb
158
+ - lib/s3_media_server_api/simple_uploaders_repository.rb
135
159
  - lib/s3_media_server_api/uploader.rb
136
160
  - lib/s3_media_server_api/version.rb
137
161
  - s3_media_server_api-0.1.0.gem