lib/brief/dsl.rb in brief-0.0.5 vs lib/brief/dsl.rb in brief-1.0.0
- old
+ new
@@ -1,41 +1,83 @@
\ No newline at end of file
+module Brief
+ module DSL
+ extend ActiveSupport::Concern
+
+ def config(options={}, &block)
+ Brief::Configuration.instance.load_options(options) unless options.nil? || options.empty?
+ 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!
+ end
+
+ def action(identifier, options={}, &block)
+ Object.class.class_eval do
+ command "#{identifier}" do |c|
+ c.syntax = "brief #{identifier}"
+ c.description = "run the #{identifier} command"
+
+ c.action do |args, opts|
+ briefcase = Brief.case
+
+ path_args = args.select {|arg| arg.is_a?(String) && arg.match(/\.md$/) }
+
+ path_args.select! do |arg|
+ path = briefcase.repository.root.join(arg)
+ path.exist?
+ end
+
+ path_args.map! {|p| briefcase.repository.root.join(p) }
+
+ models = path_args.map {|path| Brief::Document.new(path) }.map(&:to_model)
+
+ block.call(Brief.case, models, opts)
+ end
+ end rescue nil
+ end
+ end
+ end
+end