module Sinatra::Videoman::Middleware

Public Class Methods

registered(app) click to toggle source
# File lib/sinatra/videoman/middleware.rb, line 12
def self.registered(app)
  app.register Sinatra::Partial
  app.set :partial_template_engine, :erb

  app.get '/videos/upload/?' do
    erb 'videos/upload'.to_sym
  end

  app.post '/videos/upload' do
    video = Video.new(params[:video])
    params[:video_files].each do |file|
      file = VideoFile.new(:file => file, :content_type => file[:type])
      if file.valid?
        video.video_files << file
        file.save!
        Manager.call :after_file_upload, [file]
      else
        Manager.call :after_file_upload_failure, [request, response]
        flash[:error] = file.errors.messages
        redirect '/videos/upload'
      end
    end
    if video.valid? && video.video_files.size >= 1
      video.save!
      Manager.call :after_video_save, [video, request, response]
      flash[:notice] = I18n.t 'video_uploaded'
      redirect Manager.config[:after_video_save_path]
    else
      Manager.call :after_video_save_failure, [request, response]
      flash[:error] = video.errors.messages
      redirect '/videos/upload'
    end
  end

  app.get '/videos/watch/:id/?' do
    @video = Video.find_by(id: params[:id])
    if @video
      erb 'videos/watch'.to_sym
    else
      I18n.t 'video_not_found'
    end
  end

  app.get '/videos/edit/:id/?' do
    @video = Video.find_by(id: params[:id])
    if @video
      erb 'videos/edit'.to_sym
    else
      I18n.t 'video_not_found'
    end
  end

  app.post '/videos/edit/:id' do
    video = Video.find(params[:id])
    if video.update_attributes(params[:video])
      video.save!
      Manager.call :after_video_update, [video, request, response]
      flash[:notice] = I18n.t 'video_edited'
      redirect Manager.config[:after_video_update_path]
    else
      Manager.call :after_video_update_failure, [video, request, response]
      flash[:error] = video.errors.messages
      redirect "/videos/edit/#{video.id}"
    end
  end

  app.post '/videos/delete/:id' do
    video = Video.find_by(id: params[:id])
    if video
      Manager.call :before_video_delete, [video, request, response]
      video.thumbnail.remove!
      video.video_files.each  do |file|
        file.file.remove!
        file.destroy!
      end
      video.destroy!
      Manager.call :after_video_delete, [request, response]
      flash[:notice] = I18n.t 'video_deleted'
    end
    redirect Manager.config[:after_video_delete_path]
  end

  app.get '/videos/?' do
    @video_links = Video.all
    erb 'videos/list'.to_sym
  end
end