lib/windcharger/attributes.rb
# frozen_string_literal: true
module Windcharger
module Attributes
def attributes
@__windcharger_attributes ||= []
super_attrs = superclass.respond_to?(:attributes) ? superclass.attributes : []
[*super_attrs, *@__windcharger_attributes].freeze
end
private
def __windcharger_add_attribute name
(@__windcharger_attributes ||= []) << name.to_sym
end
def attribute *attributes
if attributes.any?
attributes.each { |attribute| __windcharger_add_attribute attribute }
else
@__windcharger_next_is_attribute = true
end
end
def method_added name
super
return unless defined?(@__windcharger_next_is_attribute) && @__windcharger_next_is_attribute
__windcharger_add_attribute name
@__windcharger_next_is_attribute = false
end
end
end