require 'smart_properties'
class A
include SmartProperties
property :a, default: :a, required: true
end
class B < A
property :b, default: :b
end
class C < B
property :c, default: :c
end
class D < C
property :d, default: :d
end
d = D.new a: nil # doesn't raise
puts d.a, d.b, d.c, d.d # prints only c and d