Sha256: d7269c874cf613660d3b6585c48d212f862744b5d58d2aa7bff7e52aebb11fd7

Contents?: true

Size: 1021 Bytes

Versions: 1

Compression:

Stored size: 1021 Bytes

Contents

module Liquidum
  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: -> { Logger.new($stdout).tap { |l| l.level = Logger::INFO } }
    option :liquidum_file_system, default: "Liquidum::LiquidumFileSystem"
    option :i18n_store, default: ->(context, block) {}

    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

1 entries across 1 versions & 1 rubygems

Version Path
liquidum-1.1.0 lib/liquidum/configuration.rb