Sha256: 8dfa3a9752d279368f85a4a7b3588f99cf06ef7d5d8d5a4e9c708b613573cfc9

Contents?: true

Size: 1.68 KB

Versions: 3

Compression:

Stored size: 1.68 KB

Contents

# frozen_string_literal: true

module Signum
  module Options
    module ClassMethods
      def option(name, default: nil)
        attr_accessor(name)

        schema[name] = default
      end

      def schema
        @schema ||= {}
      end
    end

    def set_defaults!
      self.class.schema.each do |name, default|
        instance_variable_set(:"@#{name}", default)
      end
    end

    def self.included(cls)
      cls.extend(ClassMethods)
    end
  end

  class Configuration
    include Options

    option :logger, default: Rails.logger
    option :user_model_name, default: "User"
    option :hide_after, default: 3000
    option :base_controller, default: "::ApplicationController"
    option :base_service, default: "::ApplicationService"
    option :base_service_context, default: "::ApplicationContext"
    option :current_user, default: -> {}
    option :drawer_notifications_container_id, default: ->(signalable = nil, id = nil) {}
    option :balloon_notifications_container_id, default: ->(signalable = nil, id = nil) {}
    option :icons,
      default: {info: "fa-solid fa-circle-info fa-lg",
                error: "fa-solid fa-square-xmark fa-lg",
                success: "fa-solid fa-circle-check fa-lg",
                warning: "fa-solid fa-triangle-exclamation fa-lg",
                unread_main: "fa-solid fa-bell-ring",
                read_main: "fa-solid fa-bell"}

    def initialize
      set_defaults!
    end
  end

  module Configurable
    attr_writer :config

    def config
      @config ||= Configuration.new
    end

    def configure
      yield(config)
    end
    alias_method :setup, :configure

    def reset_config!
      @config = Configuration.new
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
signum-0.7.2 lib/signum/configuration.rb
signum-0.7.1 lib/signum/configuration.rb
signum-0.7.0 lib/signum/configuration.rb