lib/brief/dsl.rb in brief-1.3.0 vs lib/brief/dsl.rb in brief-1.3.1
- old
+ new
@@ -5,12 +5,31 @@
def config(options = {}, &block)
Brief::Configuration.instance.instance_eval(&block) if block_given?
end
def define(*args, &block)
- definition = Brief::Model::Definition.new(args.first, args.extract_options!)
- definition.instance_eval(&block) if block_given?
- definition.validate!
+ options = args.dup.extract_options!
+ name = args.first
+ type_alias = options.fetch(:type_alias) { name.downcase.parameterize.gsub(/-/, '_') }
+
+ namespace = Brief.configuration.model_namespace || Brief::Model
+
+ klass = namespace.const_get(type_alias.camelize) rescue nil
+
+ if klass
+ # raise class already defined
+ end
+
+ klass ||= namespace.const_set(type_alias.camelize, Class.new).tap do |k|
+ k.send(:include, Brief::Model)
+ k.definition ||= Brief::Model::Definition.new(args.first, args.extract_options!)
+ k.name ||= name
+ k.type_alias ||= type_alias
+ Brief::Model.classes << k
+ end
+
+ klass.definition.instance_eval(&block) if block_given?
+ klass.definition.validate!
end
# defines a method on the model instance named after the identifier
# and then creates a CLI command matching that, so for example:
#