Sha256: 6d15b03f32c666480349ae9f4d06c620918e633e80b2d8eaf6960ca1cc21d607
Contents?: true
Size: 1.09 KB
Versions: 1
Compression:
Stored size: 1.09 KB
Contents
module AttrRequired class AttrMissing < StandardError; end def self.included(klass) klass.send :extend, ClassMethods end module ClassMethods def inherited(klass) super unless required_attributes.empty? klass.attr_required *required_attributes end end def attr_required(*keys) @required_attributes ||= [] @required_attributes += Array(keys) attr_accessor *keys end def attr_required?(key) required_attributes.include?(key) end def required_attributes Array(@required_attributes) end end def required_attributes self.class.required_attributes end def attr_required?(key) self.class.attr_required? key end def attr_missing? !attr_missing.empty? end def attr_missing! if attr_missing? raise AttrMissing.new("'#{attr_missing.join('\', \'')}' required.") end end def attr_missing required_attributes.select do |key| value = send(key) if value.respond_to?(:empty?) value.empty? else value.nil? end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
attr_required-0.0.3 | lib/attr_required.rb |