From 7b729bbf06d0249a865c96dfb388ce0efa362e89 Mon Sep 17 00:00:00 2001 From: Michael Kohl Date: Mon, 14 Sep 2020 09:47:54 +0700 Subject: [PATCH] [deploy] Move video_duration_in_minutes_integer to serializer (#10268) * Move video_duration_in_minutes_integer to serializer * Add data update script to reindex video articles --- app/models/article.rb | 4 ---- app/serializers/search/article_serializer.rb | 4 +++- .../20200911045602_reindex_articles_with_videos.rb | 8 ++++++++ spec/serializers/search/article_serializer_spec.rb | 12 ++++++++++++ 4 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 lib/data_update_scripts/20200911045602_reindex_articles_with_videos.rb diff --git a/app/models/article.rb b/app/models/article.rb index f9cddefaf..a9b80f394 100644 --- a/app/models/article.rb +++ b/app/models/article.rb @@ -360,10 +360,6 @@ class Article < ApplicationRecord "#{duration[:hours]}:#{minutes_and_seconds}" end - def video_duration_in_minutes_integer - (video_duration_in_seconds.to_i / 60) % 60 - end - def update_score new_score = reactions.sum(:points) + Reaction.where(reactable_id: user_id, reactable_type: "User").sum(:points) update_columns(score: new_score, diff --git a/app/serializers/search/article_serializer.rb b/app/serializers/search/article_serializer.rb index 54b3431a0..4e4d5744e 100644 --- a/app/serializers/search/article_serializer.rb +++ b/app/serializers/search/article_serializer.rb @@ -12,7 +12,9 @@ module Search # however, it really is a string in the format 00:00 which is why we # added an extra field to handle that string attribute :video_duration_string, &:video_duration_in_minutes - attribute :video_duration_in_minutes, &:video_duration_in_minutes_integer + attribute :video_duration_in_minutes do |article| + article.video_duration_in_seconds.to_i / 60 + end attribute :readable_publish_date_string, &:readable_publish_date diff --git a/lib/data_update_scripts/20200911045602_reindex_articles_with_videos.rb b/lib/data_update_scripts/20200911045602_reindex_articles_with_videos.rb new file mode 100644 index 000000000..1ec9484aa --- /dev/null +++ b/lib/data_update_scripts/20200911045602_reindex_articles_with_videos.rb @@ -0,0 +1,8 @@ +module DataUpdateScripts + class ReindexArticlesWithVideos + def run + articles = Article.where.not(video: nil).or(Article.where.not(video: "")) + articles.find_each(&:index_to_elasticsearch_inline) + end + end +end diff --git a/spec/serializers/search/article_serializer_spec.rb b/spec/serializers/search/article_serializer_spec.rb index 7778b6ce6..d6b2fb08d 100644 --- a/spec/serializers/search/article_serializer_spec.rb +++ b/spec/serializers/search/article_serializer_spec.rb @@ -21,4 +21,16 @@ RSpec.describe Search::ArticleSerializer do result = Article::SEARCH_CLASS.index(article.id, data_hash) expect(result["result"]).to eq("created") end + + it "correctly serializes video duration in minutes when video_duration_in_seconds is nil" do + data_hash = described_class.new(article).serializable_hash.dig(:data, :attributes) + expect(data_hash[:video_duration_in_minutes]).to eq(0) + end + + it "correctly serializes video duration in minutes when video_duration_in_seconds is not nil" do + duration = (1.hour + 1.minute).to_i + allow(article).to receive(:video_duration_in_seconds).and_return(duration) + data_hash = described_class.new(article).serializable_hash.dig(:data, :attributes) + expect(data_hash[:video_duration_in_minutes]).to eq(61) + end end