Sha256: c31eeb136b7b05f8c78f0abcf4b2092ae452af5eb772b7ca7b7189c76d4403ae

Contents?: true

Size: 1.21 KB

Versions: 3

Compression:

Stored size: 1.21 KB

Contents

module Vapid
  module Controllers
    # Project routes
    module ProjectController
      extend Sinatra::Extension

      # rubocop:disable Metrics/AbcSize, MethodLength
      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
      # rubocop:enable Metrics/AbcSize, MethodLength
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
vapid-0.1.2 lib/vapid/controllers/project_controller.rb
vapid-0.1.1 lib/vapid/controllers/project_controller.rb
vapid-0.1.0 lib/vapid/controllers/project_controller.rb