class BrightcoveService::Video

Attributes

brightcove_video[R]
params[R]
result[R]

Public Class Methods

new(params) click to toggle source
# File lib/brightcove_service/video.rb, line 10
def initialize(params)
  @params = params
end

Public Instance Methods

call() click to toggle source
# File lib/brightcove_service/video.rb, line 14
def call
  valid? &&
    create_videos_on_brightcove &&
    set_result
rescue StandardError => e
  add_error(e)
end

Private Instance Methods

asset_title() click to toggle source
# File lib/brightcove_service/video.rb, line 44
def asset_title
  params[:title_en] || params[:title_id]
end
brightcove_video_params() click to toggle source
# File lib/brightcove_service/video.rb, line 36
def brightcove_video_params
  video_params = { name: asset_title,
                   reference_id: params[:brightcove_reference_id] }
  video_params[:geo] = geo_params if params[:restricted] == 'true'
  video_params[:schedule] = schedule_params if date_params?
  video_params
end
create_videos_on_brightcove() click to toggle source
# File lib/brightcove_service/video.rb, line 32
def create_videos_on_brightcove
  @brightcove_video = BrightcoveService::Api.instance.create_video(brightcove_video_params)
end
date_params?() click to toggle source
# File lib/brightcove_service/video.rb, line 48
def date_params?
  params[:start_date].present? || params[:end_date].present?
end
geo_params() click to toggle source
# File lib/brightcove_service/video.rb, line 52
def geo_params
  {
    restricted: params[:restricted] == 'true',
    exclude_countries: params[:exclude_countries] == 'true',
    countries: params[:countries].reject(&:blank?).map(&:downcase)
  }
end
long_form_video() click to toggle source
# File lib/brightcove_service/video.rb, line 24
def long_form_video
  return true if params['assets']&.values&.any? do |a|
    a['type'] == 'long_form_video'
  end
  errors.add(:base, 'long_form_video required')
  @result = { error: 'long_form_video required' }
end
parsed_time(time) click to toggle source
# File lib/brightcove_service/video.rb, line 67
def parsed_time(time)
  time && Time.parse(time).in_time_zone.strftime('%Y-%m-%dT%H:%M:%S.%LZ')
end
s3_client(result) click to toggle source
# File lib/brightcove_service/video.rb, line 99
def s3_client(result)
  Aws::S3::Client.new(
    region:               'us-east-1',
    access_key_id:        result['access_key_id'],
    secret_access_key:    result['secret_access_key'],
    session_token:        result['session_token']
  )
end
s3_urls() click to toggle source

rubocop:disable Metrics/AbcSize

# File lib/brightcove_service/video.rb, line 76
def s3_urls
  urls = []
  params[:assets].each do |filename, values|
    next if values['name'].blank?
    result = BrightcoveService::Api.instance.get_s3_url(brightcove_video['id'], filename)
    urls.push(video_id: brightcove_video['id'],
              presigned_url: signed_url(filename, result),
              request_url: result['api_request_url'],
              filename: filename)
  end
  urls
end
schedule_params() click to toggle source
# File lib/brightcove_service/video.rb, line 60
def schedule_params
  {
    starts_at: parsed_time(params[:start_date]),
    ends_at: parsed_time(params[:end_date])
  }
end
set_result() click to toggle source
# File lib/brightcove_service/video.rb, line 71
def set_result
  @result = s3_urls
end
signed_url(_filename, result) click to toggle source

rubocop:enable Metrics/AbcSize

# File lib/brightcove_service/video.rb, line 90
def signed_url(_filename, result)
  signer = Aws::S3::Presigner.new(client: s3_client(result))
  signer.presigned_url(
    :put_object,
    bucket: result['bucket'],
    key: result['object_key']
  )
end