Class: Teapot::Command::List

Inherits:
Selection
  • Object
show all
Defined in:
lib/teapot/command/list.rb

Overview

A command to list project definitions and dependencies.

Instance Method Summary collapse

Methods inherited from Selection

#call, #selection, #targets

Instance Method Details

#process(selection) ⇒ Object

Process and display the selection.



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/teapot/command/list.rb', line 33

def process(selection)
	context = selection.context
	terminal = self.terminal
	
	selection.resolved.each do |package|
		terminal.puts "Package #{package.name} (from #{package.path}):"
		
		begin
			script = context.load(package)
			definitions = script.defined
			
			definitions.each do |definition|
				terminal.puts "\t#{definition}", style: :definition
				
				definition.description.each_line do |line|
					terminal.puts "\t\t#{line.chomp}", style: :description
				end if definition.description
				
				case definition
				when Project
					terminal.puts "\t\t- Summary: #{definition.summary}" if definition.summary
					terminal.puts "\t\t- License: #{definition.license}" if definition.license
					terminal.puts "\t\t- Website: #{definition.website}" if definition.website
					terminal.puts "\t\t- Version: #{definition.version}" if definition.version
					
					definition.authors.each do |author|
						contact_text = [author.email, author.website].compact.collect{|text| " <#{text}>"}.join
						terminal.puts "\t\t- Author: #{author.name}" + contact_text
					end
				when Target
					definition.dependencies.each do |dependency|
						terminal.puts "\t\t- #{dependency}", style: :dependency
					end
					
					definition.provisions.each do |name, provision|
						terminal.puts "\t\t- #{provision}", style: :provision
					end
				when Configuration
					definition.packages.each do |package|
						terminal.puts "\t\t- #{package}", style: :package
					end
					
					definition.imports.select(&:explicit).each do |import|
						terminal.puts "\t\t- import #{import.name}", style: :import
					end
				end
			end
		rescue MissingTeapotError => error
			terminal.puts "\t#{error.message}", style: :error
		rescue IncompatibleTeapotError => error
			terminal.puts "\t#{error.message}", style: :error
		end
	end
end

#terminal(output = $stdout) ⇒ Object

Create a terminal with custom styles for colorizing different definition types in output.



20
21
22
23
24
25
26
27
28
29
# File 'lib/teapot/command/list.rb', line 20

def terminal(output = $stdout)
	Console::Terminal.for(output).tap do |terminal|
		terminal[:definition] = terminal.style(nil, nil, :bright)
		terminal[:dependency] = terminal.style(:blue)
		terminal[:provision] = terminal.style(:green)
		terminal[:package] = terminal.style(:yellow)
		terminal[:import] = terminal.style(:cyan)
		terminal[:error] = terminal.style(:red)
	end
end