lib/alf/command/main.rb in alf-0.10.0 vs lib/alf/command/main.rb in alf-0.10.1
- old
+ new
@@ -51,28 +51,32 @@
# The reader to use when stdin is used as operand
attr_accessor :stdin_reader
# Output renderer
- attr_accessor :renderer
-
+ attr_accessor :renderer_class
+
+ # Rendering options
+ attr_reader :rendering_options
+
# Creates a command instance
def initialize(env = Environment.default)
@environment = env
+ @rendering_options = {}
end
# Install options
options do |opt|
@execute = false
opt.on("-e", "--execute", "Execute one line of script (Lispy API)") do
@execute = true
end
- @renderer = nil
+ @renderer_class = nil
Renderer.each_renderer do |name,descr,clazz|
opt.on("--#{name}", "Render output #{descr}"){
- @renderer = clazz.new
+ @renderer_class = clazz
}
end
opt.on('--env=ENV',
"Set the environment to use") do |value|
@@ -95,10 +99,15 @@
opt.on('-rlibrary',
"Require the library, before executing alf") do |value|
require(value)
end
+ opt.on("--[no-]pretty",
+ "Enable/disable pretty print best effort") do |val|
+ self.pretty = val
+ end
+
opt.on_tail('-h', "--help", "Show help") do
raise Quickl::Help
end
opt.on_tail('-v', "--version", "Show version") do
@@ -132,14 +141,37 @@
end
# 3) if there is a requester, then we do the job (assuming bin/alf)
# with the renderer to use. Otherwise, we simply return built operator
if operator && requester
- renderer = self.renderer ||= Renderer::Rash.new
+ renderer_class = self.renderer_class ||= Renderer::Rash
+ renderer = renderer_class.new(rendering_options)
renderer.pipe(operator, environment).execute($stdout)
else
operator
end
+ end
+
+ #
+ # Returns rendering options
+ #
+ def pretty=(val)
+ @rendering_options[:pretty] = val
+ if val && (hl = highline)
+ @rendering_options[:trim_at] = hl.output_cols
+ @rendering_options[:page_at] = hl.output_rows
+ end
+ val
+ end
+
+ #
+ # Returns a highline instance
+ #
+ def highline
+ require 'highline'
+ HighLine.new($stdin, $stdout)
+ rescue LoadError => ex
+ nil
end
end # class Main
end # module Command
end # module Alf