s3_media_server_api 0.1.0.5 → 0.1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml 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