module StrongStruct::Core

Public Instance Methods

new(*args) click to toggle source
# File lib/strong_struct.rb, line 63
def new(*args)
  name = name_from_params(args)

  if name && const_defined?(name)
    raise Error::ClassInUseError.new("Class already in use: #{name}")
  end

  klass = build_class(args)

  name ? Object.const_set(name, klass) : klass
end

Private Instance Methods

build_class(attribute_names) click to toggle source
# File lib/strong_struct.rb, line 77
def build_class(attribute_names)
  Class.new do
    extend ClassMethods
    include InstanceMethods

    attribute_names.each { |attr| add_accessor(attr) }

    add_accessors
  end
end
name_from_params(params) click to toggle source
# File lib/strong_struct.rb, line 88
def name_from_params(params)
  params.first.to_s.match(/^[A-Z]/) ? params.shift : nil
end