Sha256: 6cec7b15eedbe933927dbb523ead78c5b850a16572ccac70843fb896c6ed6415
Contents?: true
Size: 1.32 KB
Versions: 2
Compression:
Stored size: 1.32 KB
Contents
require 'dry/core/constants' module Dry module Core # Internal support module for class-level settings # # @api public module ClassAttributes include Constants # Specify what attirubtes a class will use # # @example # class MyClass # extend Dry::Core::ClassAttributes # # defines :one, :two # # one 1 # two 2 # end # # class OtherClass < MyClass # two 'two' # end # # MyClass.one # => 1 # MyClass.two # => 2 # # OtherClass.one # => 1 # OtherClass.two # => 'two' def defines(*args) mod = Module.new do args.each do |name| define_method(name) do |value = Undefined| ivar = "@#{name}" if value == Undefined if instance_variable_defined?(ivar) instance_variable_get(ivar) else nil end else instance_variable_set(ivar, value) end end end define_method(:inherited) do |klass| super(klass) args.each { |name| klass.public_send(name, send(name)) } end end extend(mod) end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
dry-core-0.2.4 | lib/dry/core/class_attributes.rb |
dry-core-0.2.3 | lib/dry/core/class_attributes.rb |