Sha256: 8befea66dc09743bb923e42b1027b5b57cb1c95e11d40a10d99be6006791326a

Contents?: true

Size: 1.24 KB

Versions: 1

Compression:

Stored size: 1.24 KB

Contents

module Appt
  # Defines constants and methods related to configuration
  module Configuration
    UNKNOWN_CLASSES = {
      parent_mailer: ->{ ActionMailer::Base },
      parent_controller: ->{ ::ApplicationController },
      user_class: ->{ nil },
    }

    UNKNOWN_CLASSES.each do |key, _default|
      attr_accessor key.to_sym

      define_method(key) do
        value = instance_variable_get("@#{key}") || UNKNOWN_CLASSES[key.to_sym]
        value = value.call if value.respond_to?(:call)
        c = force_to_constant(value)
        c
      end
    end

    VALID_OPTIONS_KEYS = [
    ].freeze

    attr_accessor(*VALID_OPTIONS_KEYS)

    # When this module is extended, set all configuration options to their
    # default values
    def self.extended(base)
      base.reset
    end

    # Convenience method to allow configuration options to be set in a block
    def configure
      yield self
    end

    # Reset all configuration options to defaults
    def reset
      self
    end

  private

    def force_to_constant(value)
      if value.is_a?(Class)
        value = value.name
      elsif value.is_a?(Symbol)
        value = value.to_s
      end

      value.try(:constantize)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
appt-0.0.1.beta.3 lib/appt/configuration.rb