Sha256: aa2c2c57d84969ebcbba19b500cd6327d39e005219adc1d580d330bccbc91c4f
Contents?: true
Size: 1.22 KB
Versions: 2
Compression:
Stored size: 1.22 KB
Contents
# frozen_string_literal: true module FoxTail::Concerns::HasOptions extend ActiveSupport::Concern RESERVED_OPTIONS = [FoxTail::Theme::BASE_KEY.to_s].freeze def options @options ||= self.class.default_options end def extract_options!(options = {}) options.extract!(*registered_options.keys).each do |k, v| self.options[k.to_sym] = v end end included do class_attribute :registered_options, instance_writer: false, instance_predicate: false self.registered_options = {} end class_methods do def default_options registered_options.reject { |_,v| v[:default].blank? }.transform_values { |v| v[:default] } end def has_option(name, as: name, default: nil, type: nil) raise FoxTail::ReservedOption.new(self, as) if RESERVED_OPTIONS.include?(as.to_s) self.registered_options = registered_options.merge name => { name: name, as: as, default: default, type: type } define_method as do options[name] end define_method :"#{as}?" do if type == :boolean !!send(as) else send(as).present? end end end def extract_options(options = {}) options.slice(*registered_options.keys) end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
fox_tail-0.1.1 | app/components/fox_tail/concerns/has_options.rb |
fox_tail-0.1.0 | app/components/fox_tail/concerns/has_options.rb |