Sha256: 02f8269dd9595e537e1019d41b637394fa17abae00240daae830a65331eac4d9

Contents?: true

Size: 1.76 KB

Versions: 2

Compression:

Stored size: 1.76 KB

Contents

require "sinatra"
require "sinatra/reloader"
require "sass"
require "almanack"

module Almanack
  class Server < Sinatra::Base
    require "almanack/server/helpers"

    configure :development do
      register Sinatra::Reloader
    end

    set :root, -> { Almanack.config.theme_root }
    set :protection, except: :frame_options
    set :feed_path, "feed.ics"

    not_found do
      status 404
      erb :error
    end

    error do
      status 500
      erb :error
    end

    def basename(file)
      Pathname(file).split.last.to_s.split(".", 2).first
    end

    def locate_asset(name, within: path)
      name = basename(name)
      path = settings.root.join(within)
      available = Pathname.glob(path.join("*"))
      asset = available.find { |path| basename(path) == name }
      raise "Could not find stylesheet #{name} inside #{available}" if asset.nil?
      asset
    end

    def auto_render_template(asset)
      renderer = asset.extname.split(".").last
      content = asset.read
      respond_to?(renderer) ? send(renderer, content) : content
    end

    def auto_render_asset(*args)
      auto_render_template locate_asset(*args)
    end

    def theme_stylesheet_path
      settings.root.join('stylesheets')
    end

    before do
      if !Sass.load_paths.include?(theme_stylesheet_path)
        Sass.load_paths << theme_stylesheet_path
      end
    end

    get "/" do
      erb :events
    end

    get "/#{settings.feed_path}" do
      content_type "text/calendar"
      Almanack.calendar.ical_feed
    end

    get "/stylesheets/:name" do
      content_type :css
      auto_render_asset params[:name], within: "stylesheets"
    end

    get "/javascripts/:name" do
      content_type :js
      auto_render_asset params[:name], within: "javascripts"
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
almanack-1.0.5 lib/almanack/server.rb
almanack-1.0.4 lib/almanack/server.rb