module Material::Components

Constants

CLASSES_TO_DUPLICATE

Public Instance Methods

define_component_configurator(key) click to toggle source
# File lib/material/concerns/components.rb, line 31
def define_component_configurator(key)
  define_singleton_method("define_#{key}".to_sym) do |**options, &block|
    _components[key].configure(**options, &block)
  end
end
define_component_predicate(key) click to toggle source
# File lib/material/concerns/components.rb, line 50
def define_component_predicate(key)
  method_name = "#{key}_value?".to_sym
  define_method(method_name) { public_send("#{key}_value".to_sym).present? }
  alias_method "#{key}?".to_sym, method_name
end
define_component_reader(key) click to toggle source
# File lib/material/concerns/components.rb, line 37
def define_component_reader(key)
  method_name = "#{key}_component".to_sym
  define_singleton_method(method_name) { _components[key] }
  delegate method_name, to: :class
end
define_component_value_reader(key) click to toggle source
# File lib/material/concerns/components.rb, line 43
def define_component_value_reader(key)
  method_name = "#{key}_value".to_sym
  define_method(method_name) { _components[key].value_for(self) }
  memoize method_name
  alias_method key, method_name unless method_defined?(key)
end
inherited(base) click to toggle source
Calls superclass method
# File lib/material/concerns/components.rb, line 15
def inherited(base)
  dup = _components.dup
  base._components = dup.each { |k, v| dup[k] = v.dup }
  super
end
register_component(key, **options, &block) click to toggle source
# File lib/material/concerns/components.rb, line 23
def register_component(key, **options, &block)
  _components[key] = Component.new(**options, &block)
  define_component_configurator(key)
  define_component_reader(key)
  define_component_value_reader(key)
  define_component_predicate(key)
end