Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
uoy-faculty-sinatra / lib / sinatra / faculty.rb
Size: Mime:
# frozen_string_literal: true

require 'sequel'
require 'sinatra/base'
require_relative 'auth_helpers'
require_relative 'banner'
require_relative 'basic_passwordless_auth'
require_relative 'faculty/flash'
require_relative 'faculty/version'
require_relative 'form_validator'
require_relative 'http_status'
require_relative 'param_validator'

# Top-level module documentation comment goes here...
module Sinatra
  module Faculty
    # Functions for use in configure block
    module Functions
      def allow_string_web_library_version_in_test?
        test? && ENV.fetch('ALLOW_STRING_WEB_LIBRARY_VERSION', '').to_s.match?(/^[1ty]/i)
      end

      def initialise_db(config = {})
        Sequel.connect(settings.db.merge(config))
      end

      def only_versioned_web_library_in_production!
        return if development? || web_library_version_is_numeric? || allow_string_web_library_version_in_test?

        raise 'Do not use branch-based web library in production!'
      end

      def update_db_config_from_env
        params = %i[adapter host port database user password search_path]
        env_settings = params.map { |p| [p, ENV["DB_#{p.upcase}"]] }.to_h.compact
        set :db, settings.respond_to?(:db) ? settings.db.merge(env_settings) : env_settings
      end

      def web_library_version_is_numeric?
        settings.web_library[:version].to_s =~ /^[0-9.]+$/
      end
    end

    # General Helpers
    module Helpers
      def current_url?(path)
        path == request.path_info
      end

      def full_url(relative_url)
        request.base_url + rel(relative_url)
      end

      def path_with_web_root
        rel request.path_info
      end

      def rel(relative_url)
        web_root + relative_url
      end

      def web_library(resource)
        library_root = request.host == 'localhost' ? '/web-library' : settings.web_library[:root]
        "#{library_root}/#{settings.web_library[:version]}/#{resource}"
      end

      def web_root
        path = settings.path
        path.end_with?('/') ? path[0..-2] : path
      end
    end
  end

  helpers Faculty::Helpers
  register Faculty::Functions
end