module ActiveWebhook::Configuration::Base
Public Class Methods
new()
click to toggle source
# File lib/active_webhook/configuration.rb, line 17 def initialize (self.class.instance_variable_get(:@components) || []).each do |component_name| component = "#{self.class.name.deconstantize}::#{component_name.to_s.camelize}::Configuration" component = component.constantize.new instance_variable_set "@#{component_name}", component end (self.class.instance_variable_get(:@options) || []).each do |option, option_definition| send "#{option}=", option_definition[:default] end end
Public Instance Methods
define_component(component_name)
click to toggle source
# File lib/active_webhook/configuration.rb, line 64 def define_component(component_name) @components ||= [] @components << component_name require "#{name.deconstantize.to_s.underscore}/#{component_name}/configuration" attr_reader component_name end
define_option(option, values: [], default: nil, allow_nil: false, allow_proc: false, prefixes: nil)
click to toggle source
TODO: consider changing so that all options accept a proc
q: does the proc run every time the option is asked? seems inefficent
# File lib/active_webhook/configuration.rb, line 34 def define_option(option, values: [], default: nil, allow_nil: false, allow_proc: false, prefixes: nil) attr_reader option default = values&.first if default.nil? && !allow_nil prefixes ||= name.deconstantize.underscore.delete_prefix("active_webhook").split("/") prefixes.shift if prefixes.first.blank? @options ||= {} @options[option] = { values: values, default: default, allow_proc: allow_proc, prefixes: prefixes } const_set option.to_s.pluralize.upcase, values define_method "#{option}=" do |value| unless (allow_proc && value.respond_to?(:call)) || (allow_nil && value.nil?) || values.empty? || values.include?(value) raise Configuration::InvalidOptionError.new (prefixes + [option]).compact.join("."), value, values end instance_variable_set "@#{option}", value end end