Sha256: 3ca90d0dd3383360d5a59d41931101b69735f4000666dc7fbf5046a566f3a518

Contents?: true

Size: 1.79 KB

Versions: 1

Compression:

Stored size: 1.79 KB

Contents

require 'sinatra/base'
require 'tilt/erb'
require 'erb'
require 'goatmail/message'
module Goatmail
  class App < Sinatra::Base

    set :root,          File.expand_path(File.dirname(__FILE__))
    set :public_folder, Proc.new { "#{root}/assets" }
    set :views,         Proc.new { "#{root}/views" }

    enable :method_override

    if defined?(Padrino) && Padrino.version < '0.13.0'
      def self.setup_application!; end
      def self.dependencies; []; end
      def self.reload!; end
      set :app_name, :letter_opener
      if Padrino.version < '0.12.0'
        set :erb, engine_class: Padrino::Erubis::SafeBufferTemplate
      end
    end

    helpers do
      def h(text)
        Rack::Utils.escape_html(text)
      end
    end

    def root_path
      "#{env['SCRIPT_NAME']}/"
    end

    get '/' do
      @messages = Goatmail::Message.load_all
      erb :index
    end

    get '/:id.?:format?' do
      @message = Goatmail::Message.find(params[:id])
      halt 404 unless @message
      begin
        @message.render(params[:format]).to_s.
          gsub(/"plain\.html"/, %Q("#{root_path + @message.id}")).
          gsub(/"rich\.html"/,  %Q("#{root_path + @message.id}.html")).
          gsub(/"attachments\//, %Q("#{root_path + @message.id}/attachments/))
      rescue ArgumentError
        halt 404
      end
    end

    get '/:id/attachments/:file' do
      @message = Goatmail::Message.find(params[:id])
      halt 404 unless @message
      halt 404 unless attachment = @message.attachments[params[:file]]
      send_file attachment, disposition: 'attachment', type: 'application/octet-stream'
    end

    delete '/' do
      Goatmail::Message.bulk_delete(params[:message_ids].split(',').map(&:strip)) if params[:message_ids]
      redirect root_path
    end

    error 404 do
      'Not Found'
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
goatmail-1.1.0 lib/goatmail/app.rb