Class: Teapot::Command::List

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

Instance Method Summary collapse

Methods inherited from Selection

#invoke, #selection, #targets

Instance Method Details

#process(selection) ⇒ Object



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
87
88
89
90
91
92
93
94
95
# File 'lib/teapot/command/list.rb', line 42

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



31
32
33
34
35
36
37
38
39
40
# File 'lib/teapot/command/list.rb', line 31

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