Class: Module

Inherits:
Object show all
Defined in:
lib/cnc/core_ext/module.rb

Instance Method Summary collapse

Instance Method Details

#const_cache(name) ⇒ Object

Defines a constant of the given name using the given block if it doesn't already exist.



16
17
18
19
# File 'lib/cnc/core_ext/module.rb', line 16

def const_cache(name)
  name = name.to_s.gsub('::', ?_)
  const_defined?(name, false) ? const_get(name) : const_set(name, yield(name))
end

#define_class(name, **macros) ⇒ Object

Shorthand for const_set(name.camelize, Class.new(parent) { ... }). Useful when defining classes in macros.

Raises:



4
5
6
7
8
9
10
11
12
# File 'lib/cnc/core_ext/module.rb', line 4

def define_class(name, *, **macros, &)
  name = name.to_s.camelize
  raise NameError, "class exists: #{name}" if const_defined?(name, false)
  klass = Class.new(*) do
    macros.each {|key, value| send(key, *value) }
    class_eval(&) if block_given?
  end
  const_set name, klass
end