diff --git a/Gemfile b/Gemfile
index 13d40d95e..01985fb6a 100644
--- a/Gemfile
+++ b/Gemfile
@@ -58,6 +58,7 @@ gem "jquery-rails", "~> 4.3"
gem "kaminari", "~> 1.1"
gem "libhoney", "~> 1.11"
gem "liquid", "~> 4.0"
+gem "ffprober", "~> 0.5"
gem "nokogiri", "~> 1.10"
gem "octokit", "~> 4.13"
gem "omniauth", "~> 1.9"
diff --git a/Gemfile.lock b/Gemfile.lock
index a91dd3422..5f3cf6495 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -311,6 +311,7 @@ GEM
loofah (>= 2.0)
sax-machine (>= 1.0)
ffi (1.9.25)
+ ffprober (0.5.3)
figaro (1.1.1)
thor (~> 0.14)
fission (0.5.0)
@@ -979,6 +980,7 @@ DEPENDENCIES
fastly (~> 1.15)
fastly-rails (~> 0.8)
feedjira (~> 2.2)
+ ffprober (~> 0.5)
figaro (~> 1.1)
fix-db-schema-conflicts!
fog (~> 1.41)
diff --git a/app/assets/images/video-camera.svg b/app/assets/images/video-camera.svg
new file mode 100644
index 000000000..12af84124
--- /dev/null
+++ b/app/assets/images/video-camera.svg
@@ -0,0 +1,77 @@
+
+
+
diff --git a/app/assets/javascripts/utilities/buildArticleHTML.js.erb b/app/assets/javascripts/utilities/buildArticleHTML.js.erb
index a625dd09e..b2c374514 100644
--- a/app/assets/javascripts/utilities/buildArticleHTML.js.erb
+++ b/app/assets/javascripts/utilities/buildArticleHTML.js.erb
@@ -98,7 +98,12 @@ function buildArticleHTML(article) {
} else if (article.class_name === "Article") {
readingTimeHTML = '3 min read'
}
+ var videoHTML = '';
+ if (article.cloudinary_video_url) {
+ videoHTML = '" />'+article.video_duration_in_minutes+'
Add Trusted Role (Community Moderator) <%= f.check_box :trusted_user, checked: @user.trusted %>
-Allow Video Uploads - <%= f.check_box :video_permission, checked: @user.has_role?(:video_permission) %>
<%= f.submit "Update Privileges" %> <% end %> <% else %> diff --git a/app/views/videos/new.html.erb b/app/views/videos/new.html.erb index c35072870..1278b103c 100644 --- a/app/views/videos/new.html.erb +++ b/app/views/videos/new.html.erb @@ -18,7 +18,7 @@ key: "video-upload__#{SecureRandom.hex}", key_starts_with: "video-upload__", acl: "public-read", - max_file_size: (current_user.has_role?(:super_admin) ? 15000 : 3500).megabytes, + max_file_size: (current_user.has_role?(:super_admin) ? 20000 : 6000).megabytes, id: "s3-uploader", class: "upload-form", data: {:key => :val} do %> diff --git a/db/migrate/20190216185753_add_video_duration_in_seconds_to_articles.rb b/db/migrate/20190216185753_add_video_duration_in_seconds_to_articles.rb new file mode 100644 index 000000000..a311e1ed3 --- /dev/null +++ b/db/migrate/20190216185753_add_video_duration_in_seconds_to_articles.rb @@ -0,0 +1,5 @@ +class AddVideoDurationInSecondsToArticles < ActiveRecord::Migration[5.1] + def change + add_column :articles, :video_duration_in_seconds, :float, default: 0 + end +end diff --git a/db/schema.rb b/db/schema.rb index 967122266..9b0bc7a46 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20190206222055) do +ActiveRecord::Schema.define(version: 20190216185753) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -117,6 +117,7 @@ ActiveRecord::Schema.define(version: 20190206222055) do t.string "video" t.string "video_closed_caption_track_url" t.string "video_code" + t.float "video_duration_in_seconds", default: 0.0 t.string "video_source_url" t.string "video_state" t.string "video_thumbnail_url" diff --git a/spec/factories/articles.rb b/spec/factories/articles.rb index d8381fcd5..377ba44c1 100644 --- a/spec/factories/articles.rb +++ b/spec/factories/articles.rb @@ -37,8 +37,7 @@ FactoryBot.define do trait :video do after(:build) do |article| - article.video = "https://video.com" - article.user.add_role :video_permission + article.video = "https://s3.amazonaws.com/dev-to-input-v0/video-upload__2d7dc29e39a40c7059572bca75bb646b" article.save end end diff --git a/spec/factories/users.rb b/spec/factories/users.rb index d532d18db..18bf58d84 100644 --- a/spec/factories/users.rb +++ b/spec/factories/users.rb @@ -39,7 +39,7 @@ FactoryBot.define do end trait :video_permission do - after(:build) { |user| user.add_role :video_permission } + after(:build) { |user| user.created_at = 3.weeks.ago } end trait :ignore_after_callback do diff --git a/spec/models/article_spec.rb b/spec/models/article_spec.rb index bc1b6c532..28b39655e 100644 --- a/spec/models/article_spec.rb +++ b/spec/models/article_spec.rb @@ -206,7 +206,7 @@ RSpec.describe Article, type: :model do describe "#video" do it "must be a url" do - article.user.add_role(:video_permission) + article.user.created_at = 3.weeks.ago article.video = "hey" expect(article).not_to be_valid article.video = "http://hey.com" @@ -216,7 +216,14 @@ RSpec.describe Article, type: :model do it "must belong to permissioned user" do article.video = "http://hey.com" expect(article).not_to be_valid - article.user.add_role(:video_permission) + article.user.created_at = 3.weeks.ago + expect(article).to be_valid + end + + it "saves with video" do + article.user.created_at = 3.weeks.ago + article.video = "https://s3.amazonaws.com/dev-to-input-v0/video-upload__2d7dc29e39a40c7059572bca75bb646b" + article.save expect(article).to be_valid end end diff --git a/spec/models/comment_spec.rb b/spec/models/comment_spec.rb index 5fc514a74..c8da15c9a 100644 --- a/spec/models/comment_spec.rb +++ b/spec/models/comment_spec.rb @@ -1,7 +1,7 @@ require "rails_helper" RSpec.describe Comment, type: :model do - let(:user) { create(:user) } + let(:user) { create(:user, created_at: 3.weeks.ago) } let(:user2) { create(:user) } let(:article) { create(:article, user_id: user.id, published: true) } let(:article_with_video) { create(:article, :video, user_id: user.id, published: true) } diff --git a/spec/policies/video_policy_spec.rb b/spec/policies/video_policy_spec.rb index 2343e29f2..b0ba3e2cf 100644 --- a/spec/policies/video_policy_spec.rb +++ b/spec/policies/video_policy_spec.rb @@ -17,10 +17,10 @@ RSpec.describe VideoPolicy do it { is_expected.to forbid_actions(%i[new create]) } end - context "when user does not have video permission" do + context "when does have video permission" do let(:user) { build(:user) } - before { user.add_role :video_permission } + before { user.created_at = 3.weeks.ago } it { is_expected.to permit_actions(%i[new create]) } end