Sha256: 46d5d4f0ea0572508cd7e019de1d7e299eca2c65bc4dda27a1ae16fa4842f412
Contents?: true
Size: 1.73 KB
Versions: 1
Compression:
Stored size: 1.73 KB
Contents
# frozen_string_literal: true require "micro/attributes/version" require "micro/attributes/attributes_utils" require "micro/attributes/macros" require "micro/attributes/features" module Micro module Attributes def self.included(base) base.extend(::Micro::Attributes.const_get(:Macros)) base.class_eval do private_class_method :__attributes_data, :__attributes private_class_method :__attributes_def, :__attributes_set private_class_method :__attribute_reader, :__attribute_set end def base.inherited(subclass) subclass.attributes(self.attributes_data({})) subclass.extend ::Micro::Attributes.const_get('Macros::ForSubclasses') end end def self.to_initialize(diff: false) options = [:initialize] options << :diff if diff features(*options) end def self.features(*names) Features.fetch(names) end singleton_class.send(:alias_method, :with, :features) def attributes=(arg) self.class.attributes_data(AttributesUtils.hash_argument!(arg)).each do |name, value| __attributes[name] = instance_variable_set("@#{name}", value) if attribute?(name) end __attributes.freeze end protected :attributes= def __attributes @__attributes ||= {} end private :__attributes def attributes __attributes end def attribute?(name) self.class.attribute?(name) end def attribute(name) return unless attribute?(name) value = public_send(name) block_given? ? yield(value) : value end def attribute!(name, &block) attribute(name) { |name| return block ? block[name] : name } raise NameError, "undefined attribute `#{name}" end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
u-attributes-0.10.0 | lib/micro/attributes.rb |