Module: Vapid::Controllers::ProjectController

Extended by:
Sinatra::Extension
Defined in:
lib/vapid/controllers/project_controller.rb

Overview

Project routes

Class Method Summary collapse

Class Method Details

.registered(app) ⇒ Object

rubocop:disable Metrics/AbcSize, MethodLength



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/vapid/controllers/project_controller.rb', line 8

def self.registered(app)
  app.configure do
    app.set :layouts, File.join(app.settings.project_views, "layouts")
  end

  # rubocop:disable Lint/NestedMethodDefinition
  app.helpers do
    def dynamic_layout(path)
      path_layout = path.split("/")[1]
      if path_layout && Dir.glob(File.join(settings.layouts, "#{path_layout}.*")).any?
        "layouts/#{path_layout}"
      else
        :default
      end
    end

    def render_or_index(path)
      render path, views: settings.project_views, layout: dynamic_layout(path)
    rescue
      render "#{path.chomp('/')}/index", views: settings.project_views, layout: dynamic_layout(path)
    end
  end
  # rubocop:enable Lint/NestedMethodDefinition

  app.get "*" do
    path = params[:splat].first.to_s
    html = render_or_index(path)
    Template.new(html).render
  end
end