module WhirledPeas::Component::Factory

Public Class Methods

build(name) click to toggle source
# File lib/whirled_peas/component.rb, line 9
def build(name)
  unless classes.key?(name)
    expected = classes.keys.join(', ')
    raise ArgumentError, "Unrecognized component: #{name.inspect}, expecting one of #{expected}"
  end
  @classes[name].new
end
register(name, klass) click to toggle source
# File lib/whirled_peas/component.rb, line 5
def register(name, klass)
  classes[name] = klass
end

Private Class Methods

classes() click to toggle source
# File lib/whirled_peas/component.rb, line 19
def classes
  return @classes if @classes
  @classes = {}
  Component.constants.each do |const|
    next if const == name
    klass = Component.const_get(const)
    next unless klass.is_a?(Class)
    name = const.to_s.gsub(/([a-z])([A-Z])/, '\1_\2').downcase.to_sym
    @classes[name] = klass
  end
  @classes
end