Module: Brief::Util

Defined in:
lib/brief/util.rb

Class Method Summary collapse

Class Method Details

.create_method_dispatcher_command_for(action, klass) ⇒ Object



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/brief/util.rb', line 2

def self.create_method_dispatcher_command_for(action, klass)
  identifier = "#{ action } #{ klass.type_alias.to_s.pluralize }"

  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)

        if models.empty?
          model_finder = c.name.to_s.split(' ').last
          models = briefcase.send(model_finder)
        end

        models.each do |model|
          model.send(action)
        end
      end
    end rescue nil
  end
end