Class: Bake::Command::List

Inherits:
Samovar::Command
  • Object
show all
Defined in:
lib/bake/command/list.rb

Constant Summary collapse

PARAMETER =
/@param\s+(?<name>.*?)\s+\[(?<type>.*?)\]\s+(?<details>.*?)\Z/

Instance Method Summary collapse

Instance Method Details

#callObject



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/bake/command/list.rb', line 76

def call
  first = true
  terminal = @parent.terminal
  context = @parent.context
  
  if scope = context.scope
    terminal.print_line(:context, context)
    
    print_scope(terminal, context.scope)
    
    terminal.print_line
  end
  
  context.loaders.each do |loader|
    terminal.print_line(:loader, loader)
    
    loader.each do |path|
      if scope = loader.scope_for(path)
        print_scope(terminal, scope)
      end
    end
    
    terminal.print_line
  end
end

#format_parameters(parameters, terminal) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/bake/command/list.rb', line 29

def format_parameters(parameters, terminal)
  parameters.each do |type, name|
    case type
    when :key
      name = "#{name}="
    when :keyreq
      name = "#{name}="
    when :keyrest
      name = "**#{name}"
    else
      name = name.to_s
    end
    
    terminal.print(:reset, " ")
    terminal.print(type, name)
  end
end

#format_recipe(recipe, terminal) ⇒ Object



47
48
49
50
51
52
53
# File 'lib/bake/command/list.rb', line 47

def format_recipe(recipe, terminal)
  terminal.print(:command, recipe.command)
  
  if parameters = recipe.parameters
    format_parameters(parameters, terminal)
  end
end


55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/bake/command/list.rb', line 55

def print_scope(terminal, scope)
  format_recipe = self.method(:format_recipe).curry
  
  scope.recipes.sort.each do |recipe|
    terminal.print_line
    terminal.print_line("\t", format_recipe[recipe])
    
    recipe.description.each do |line|
      if match = line.match(PARAMETER)
        terminal.print_line("\t\t",
          :parameter, match[:name], :reset, " [",
          :type, match[:type], :reset, "] ",
          :description, match[:details]
        )
      else
        terminal.print_line("\t\t", :description, line)
      end
    end
  end
end