Sha256: 20f6cf112d24106be369394b38e41c970df83ff83b0161b5900410cd3956b95c

Contents?: true

Size: 627 Bytes

Versions: 2

Compression:

Stored size: 627 Bytes

Contents

module FormalWear
  module ClassMethods
    def required_attrs(attrs)
      validate_attrs!(attrs)

      required = class_variable_get(:@@required_fields) || {}
      class_variable_set(:@@required_fields, required.merge(attrs))

      create_accessors(attrs.keys)
    end
    def required_attr(a); required_attrs(a); end

    def create_accessors(keys)
      keys.each { |k| self.send(:attr_accessor, k) unless method_defined?(k) }
    end

    def validate_attrs!(attrs)
      attrs.each do |a, opts|
        opts.assert_valid_keys(*ALLOWED_KEYS)
        opts.assert_required_keys(*REQUIRED_KEYS)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
formal_wear-0.1.0 lib/formal_wear/class_methods.rb
formal_wear-0.0.1 lib/formal_wear/class_methods.rb