module Spark

Allows components to easily manage their attributes

# Example component usage:

  class SomeClass
    include Spark::Component::Attribute

    # Set a :label attribute, and a :size attribute with default value :large
    attribute :label, { size: :large }

    def inialize(attributes = nil)
      initialize_attributes(attributes)
    end
  end

# When initialized like:

  some_instance = SomeClass.new(label: "Test")

The Class's instance will now have access to

  @label => "Test"
  @size  => :large

And will define access methods:

  some_instance.attribute_label
  some_instance.attribute_size

Attributes can also be accessed with a helper method

  some_instance.attribute(:label)
  some_instance.attribute(:size)

Extending a class will extend its attributes and their defaults.

This supports a common set of base attributes such as id, class, data, aria, and html.
The html attribute is meant to allow for passing along unaccounted for tag attributes.