module Such::Parts

Public Class Methods

make(part, thing, *plugs) click to toggle source
# File lib/such/parts.rb, line 3
def self.make(part, thing, *plugs)
  unless thing < Such::Thing and [part,*plugs].all?{_1.is_a? Symbol}
    raise "Expected Such::Parts.make(Symbol part, Class thing < Such::Thing, *Symbol plugs)"
  end
  plugs.each do |plug|
    if /^[^\W_]+_(?<klass>[^\W_]+)$/=~plug
      next unless $VERBOSE
      unless Object.const_defined?("Such::#{klass}")
        $stderr.puts "Warning: Such::#{klass} not defined yet."
      end
    else
      raise "Plugs must have the form key_class: #{plug}"
    end
  end
  subklass = Such.subclass(part, thing, include: Such::Part, attr_accessor: plugs)
  subklass.singleton_class.class_eval{ define_method(:plugs){plugs} }
  return subklass
end