mux-rails 0.2.0 → 1.0.2

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
  SHA256:
3
- metadata.gz: 9daf9dfa3ace722030cdfa1020cb3682771167ef24cbb91394fa59b6007a3243
4
- data.tar.gz: d2f33afce8d1b13649bbee69e38912dc59cbbd82ccae9f7d926178e83b62180f
3
+ metadata.gz: e8eed39bcc85b931de2c1fc0c0fccc991e6c9b4805f17c2ab9d96cd2b27f499f
4
+ data.tar.gz: a6a72d700e704f56da45e85bc4abde6d2cf31a410cecd14e2f96c67883cdadd5
5
5
  SHA512:
6
- metadata.gz: cd03523ecd957b317f4f7cc5cd2ce8cf2e07d3068124347b283f2ed1432cd3aa2b026cfec68621d5c1569431aaf52c6c798c50e0361e6119ecccead2067c3da9
7
- data.tar.gz: 6a725b3b197c054f75abc3e7114b243d6058b6d1b395925099d00e7e372b537c3eb9145ff9b7432503812266b28d49707258a989aac87147ba6d5f05c0096ebd
6
+ metadata.gz: 9fb4bde3eb8575396f39ffd03b017702391928b937e3adf1fb8c46a3f499660e0af3196d00420f13bb64a57c5f2184f9df5cfd8f10f151241ac30225ef0865e6
7
+ data.tar.gz: 7e4ab93b4e0211599cb3c57d70f65e9f7c87787816081e4b1080c3a1d6c4a4f431e5fd3eb87c17bf0c190699413394ac727cf888389d6a01ab76c0f797480744
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # Mux::Rails
2
2
 
3
+ ![Gem Version](https://badge.fury.io/rb/mux-rails.svg)
3
4
  ![Ruby](https://github.com/asgerb/mux-rails/workflows/Ruby/badge.svg)
4
5
 
5
6
  A Rails Engine for working with [Mux](https://mux.com/).
@@ -8,17 +9,30 @@ Use `Mux::Client` to create assets and `Mux::Notifications` (built on the
8
9
  `ActiveSupport::Notifications` API) to handle incoming webhook requests.
9
10
 
10
11
  ## Installation
11
- Add this line to your application's Gemfile:
12
+
13
+ Run
14
+
15
+ ```bash
16
+ bundle add mux-rails
17
+ ```
18
+
19
+ or add this line to your application's Gemfile:
12
20
 
13
21
  ```ruby
14
22
  gem 'mux-rails'
15
23
  ```
16
24
 
25
+ and run `bundle install`.
26
+
27
+ Then mount the engine in your routes:
28
+
17
29
  ```ruby
18
30
  # config/routes.rb
19
31
  mount Mux::Engine, at: "/mux" # provide a custom path
20
32
  ```
21
33
 
34
+ Remember to configure the webhooks at mux.com to point to `https://yourwebsite.com/mux/events`.
35
+
22
36
  ## Usage
23
37
 
24
38
  ### Setup Mux tokens
@@ -71,25 +85,23 @@ Using a subscriber with a block we can listen to incoming events from Mux and do
71
85
 
72
86
  Mux::Notifications.subscribe "video.asset.created" do |event|
73
87
  # handle asset created
74
- # event.object.id == mux_asset_id
75
- # event.data.playback_ids.first.id
88
+ # event.id == mux_asset_id
76
89
  end
77
90
 
78
91
  Mux::Notifications.subscribe "video.asset.ready" do |event|
79
92
  # handle asset ready
80
- # event.object.id == mux_asset_id
81
- # event.data.playback_ids.first.id
93
+ # event.id == mux_asset_id
82
94
  end
83
95
 
84
96
  Mux::Notifications.subscribe "video.asset.deleted" do |event|
85
97
  # handle asset deleted
86
- # event.object.id == mux_asset_id
87
- # event.data.playback_ids.first.id
98
+ # event.id == mux_asset_id
88
99
  end
89
100
  ```
90
101
 
91
102
  The block is passed an event which is simply the incoming JSON (take a peek
92
- in [fixtures](test/fixtures) for examples) wrapped in an OpenStruct for ease of access.
103
+ in [fixtures](test/fixtures) for examples) wrapped in [`Mux::Event`](lib/mux/event.rb) class based on
104
+ `Dry::Struct`.
93
105
 
94
106
  ## License
95
107
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile CHANGED
@@ -1,31 +1,33 @@
1
+ # frozen_string_literal: true
2
+
1
3
  begin
2
- require 'bundler/setup'
4
+ require "bundler/setup"
3
5
  rescue LoadError
4
- puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ puts "You must `gem install bundler` and `bundle install` to run rake tasks"
5
7
  end
6
8
 
7
- require 'rdoc/task'
9
+ require "rdoc/task"
8
10
 
9
11
  RDoc::Task.new(:rdoc) do |rdoc|
10
- rdoc.rdoc_dir = 'rdoc'
11
- rdoc.title = 'Mux::Rails'
12
- rdoc.options << '--line-numbers'
13
- rdoc.rdoc_files.include('README.md')
14
- rdoc.rdoc_files.include('lib/**/*.rb')
12
+ rdoc.rdoc_dir = "rdoc"
13
+ rdoc.title = "Mux::Rails"
14
+ rdoc.options << "--line-numbers"
15
+ rdoc.rdoc_files.include("README.md")
16
+ rdoc.rdoc_files.include("lib/**/*.rb")
15
17
  end
16
18
 
17
19
  APP_RAKEFILE = File.expand_path("test/dummy/Rakefile", __dir__)
18
- load 'rails/tasks/engine.rake'
20
+ load "rails/tasks/engine.rake"
19
21
 
20
- load 'rails/tasks/statistics.rake'
22
+ load "rails/tasks/statistics.rake"
21
23
 
22
- require 'bundler/gem_tasks'
24
+ require "bundler/gem_tasks"
23
25
 
24
- require 'rake/testtask'
26
+ require "rake/testtask"
25
27
 
26
28
  Rake::TestTask.new(:test) do |t|
27
- t.libs << 'test'
28
- t.pattern = 'test/**/*_test.rb'
29
+ t.libs << "test"
30
+ t.pattern = "test/**/*_test.rb"
29
31
  t.verbose = false
30
32
  end
31
33
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mux
2
4
  class ApplicationController < ActionController::Base
3
5
  protect_from_forgery with: :exception
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mux
2
4
  class EventsController < ActionController::Base
3
5
  # QUESTION: Is this the right way to handle it?
@@ -11,10 +13,10 @@ module Mux
11
13
  end
12
14
 
13
15
  private
14
-
15
- def event
16
- event = JSON.parse(request.body.read, object_class: OpenStruct)
17
- Mux::Event.new(event)
18
- end
16
+ def event
17
+ Mux::Event.new(
18
+ JSON.parse(request.body.read)
19
+ )
20
+ end
19
21
  end
20
22
  end
data/lib/mux/client.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "mux_ruby"
2
4
 
3
5
  module Mux
@@ -9,7 +11,7 @@ module Mux
9
11
  request.input = url
10
12
  request.playback_policy = MuxRuby::PlaybackPolicy.build_from_hash(playback_policy)
11
13
  response = assets_api.create_asset(request)
12
- return response.data.id
14
+ response.data.id
13
15
  end
14
16
 
15
17
  def destroy_asset(asset_id, options = {})
@@ -22,10 +24,9 @@ module Mux
22
24
  end
23
25
 
24
26
  private
25
-
26
- def assets_api
27
- @assets_api ||= MuxRuby::AssetsApi.new
28
- end
27
+ def assets_api
28
+ @assets_api ||= MuxRuby::AssetsApi.new
29
+ end
29
30
  end
30
31
  end
31
32
  end
data/lib/mux/engine.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mux
2
4
  class Engine < ::Rails::Engine
3
5
  isolate_namespace Mux
data/lib/mux/event.rb CHANGED
@@ -1,12 +1,63 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mux
2
- class Event
3
- # QUESTION: Is there security concerns here? This implementation seems very naive ;-)
4
- def initialize(payload)
5
- @event = OpenStruct.new(payload)
4
+ class Event < Dry::Struct
5
+ module Types
6
+ include Dry.Types()
7
+ end
8
+
9
+ transform_keys(&:to_sym)
10
+
11
+ attribute :id, Types::String
12
+ attribute :type, Types::String
13
+ attribute :created_at, Types::JSON::Time
14
+
15
+ attribute :object do
16
+ attribute :id, Types::Coercible::String
17
+ attribute :type, Types::Coercible::String
18
+ end
19
+
20
+ attribute :environment do
21
+ attribute :id, Types::Coercible::String
22
+ attribute :name, Types::Coercible::String
6
23
  end
7
24
 
8
- def method_missing(method, *args, &block)
9
- @event.send(method, *args, &block)
25
+ attribute :data do
26
+ attribute :id, Types::Coercible::String
27
+ attribute :status, Types::Coercible::String
28
+ attribute :created_at, Types::Coercible::Integer
29
+
30
+ attribute? :aspect_ratio, Types::Coercible::String
31
+ attribute? :duration, Types::Coercible::Float
32
+ attribute? :master_access, Types::Coercible::String
33
+ attribute? :max_stored_frame_rate, Types::Coercible::Float
34
+ attribute? :max_stored_resolution, Types::Coercible::String
35
+ attribute? :mp4_support, Types::Coercible::String
36
+
37
+ attribute? :stream_key, Types::Coercible::String
38
+ attribute? :reconnect_window, Types::Coercible::Integer
39
+ attribute? :latency_mode, Types::Coercible::String
40
+
41
+ attribute? :playback_ids, Types::Array do
42
+ attribute :id, Types::Coercible::String
43
+ attribute :policy, Types::Coercible::String
44
+ end
45
+
46
+ attribute? :tracks, Types::Array do
47
+ attribute? :id, Types::Coercible::String
48
+ attribute? :type, Types::Coercible::String
49
+
50
+ attribute? :duration, Types::Coercible::Float
51
+
52
+ # when type = "video"
53
+ attribute? :max_width, Types::Coercible::Integer
54
+ attribute? :max_height, Types::Coercible::Integer
55
+ attribute? :max_frame_rate, Types::Coercible::Float
56
+
57
+ # when type = "audio"
58
+ attribute? :max_channels, Types::Coercible::Integer
59
+ attribute? :max_channel_layout, Types::Coercible::String
60
+ end
10
61
  end
11
62
  end
12
63
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "active_support/notifications"
2
4
 
3
5
  module Mux
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Mux
2
4
  module Rails
3
- VERSION = "0.2.0"
5
+ VERSION = "1.0.2"
4
6
  end
5
7
  end
data/lib/mux/rails.rb CHANGED
@@ -1,5 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dry-struct"
4
+ require "dry-types"
5
+ require "mux_ruby"
6
+
1
7
  require "mux/engine"
8
+ require "mux/rails/version"
9
+
10
+ module Mux
11
+ end
2
12
 
3
- require "mux/notifications"
4
- require "mux/event"
5
13
  require "mux/client"
14
+ require "mux/event"
15
+ require "mux/notifications"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mux-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Asger Behncke Jacobsen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-19 00:00:00.000000000 Z
11
+ date: 2022-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -24,20 +24,48 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '5.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: dry-struct
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.4'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.4'
41
+ - !ruby/object:Gem::Dependency
42
+ name: dry-types
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.5'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.5'
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: mux_ruby
29
57
  requirement: !ruby/object:Gem::Requirement
30
58
  requirements:
31
59
  - - "~>"
32
60
  - !ruby/object:Gem::Version
33
- version: 1.8.0
61
+ version: '3.0'
34
62
  type: :runtime
35
63
  prerelease: false
36
64
  version_requirements: !ruby/object:Gem::Requirement
37
65
  requirements:
38
66
  - - "~>"
39
67
  - !ruby/object:Gem::Version
40
- version: 1.8.0
68
+ version: '3.0'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: minitest
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +108,20 @@ dependencies:
80
108
  - - ">="
81
109
  - !ruby/object:Gem::Version
82
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop-rails_config
113
+ requirement: !ruby/object:Gem::Requirement
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
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
83
125
  description: A Rails Engine for integrating with Mux.
84
126
  email:
85
127
  - a@asgerbehnckejacobsen.dk
@@ -118,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
160
  - !ruby/object:Gem::Version
119
161
  version: '0'
120
162
  requirements: []
121
- rubygems_version: 3.1.2
163
+ rubygems_version: 3.1.4
122
164
  signing_key:
123
165
  specification_version: 4
124
166
  summary: A Rails Engine for integrating with Mux.