From 75ffceaa7dd333e516d135ecb1564f76866b9012 Mon Sep 17 00:00:00 2001 From: Anton Chuchkalov Date: Tue, 21 Jul 2015 20:32:41 +0400 Subject: [PATCH] simplify outputting in client --- .../handler/helpers/outputtable.rb | 10 +++---- .../lib/devops-client/handler/project.rb | 16 +++--------- .../lib/devops-client/handler/stack.rb | 2 +- .../lib/devops-client/output/base.rb | 17 ++++-------- .../lib/devops-client/output/project.rb | 10 +++---- .../lib/devops-client/output/stack.rb | 26 ++++++++++++++----- 6 files changed, 37 insertions(+), 44 deletions(-) diff --git a/devops-client/lib/devops-client/handler/helpers/outputtable.rb b/devops-client/lib/devops-client/handler/helpers/outputtable.rb index 8cb52b1..e7b948c 100644 --- a/devops-client/lib/devops-client/handler/helpers/outputtable.rb +++ b/devops-client/lib/devops-client/handler/helpers/outputtable.rb @@ -4,17 +4,13 @@ module Outputtable @list || @show end - def additional_output_options - {} - end - def outputter raise 'You should use "output_with" method to define outputter' unless defined?(outputter_class) - @outputter ||= outputter_class.new(data_to_output, options, additional_output_options) + @outputter ||= outputter_class.new(data_to_output, options.merge(current_command: current_command)) end - def output(preferred_format=nil) - outputter.output(preferred_format) + def output(options={}) + outputter.output(options) end diff --git a/devops-client/lib/devops-client/handler/project.rb b/devops-client/lib/devops-client/handler/project.rb index 30ee118..6557a9f 100644 --- a/devops-client/lib/devops-client/handler/project.rb +++ b/devops-client/lib/devops-client/handler/project.rb @@ -48,7 +48,7 @@ class Project < Handler when "servers" self.options = @options_parser.servers_options servers_handler @options_parser.args - output + output(output_type: :servers) when "set" case ARGV[2] when "run_list" @@ -61,7 +61,7 @@ class Project < Handler when "show" self.options = @options_parser.show_options show_handler @options_parser.args - output + output(output_type: :show) when "update" self.options = @options_parser.update_options update_handler @options_parser.args @@ -80,7 +80,7 @@ class Project < Handler when "test" self.options = @options_parser.test_options test_handler @options_parser.args - output + output(output_type: :test) else @options_parser.invalid_command end @@ -422,14 +422,4 @@ protected @list || @show || @servers || @test end - def additional_output_options - output_type = case ARGV[1] - when 'servers', 'test', 'show' - ARGV[1].to_sym - else - :list - end - {output_type: output_type} - end - end diff --git a/devops-client/lib/devops-client/handler/stack.rb b/devops-client/lib/devops-client/handler/stack.rb index 2625d3e..503d9f3 100644 --- a/devops-client/lib/devops-client/handler/stack.rb +++ b/devops-client/lib/devops-client/handler/stack.rb @@ -30,7 +30,7 @@ class Stack < Handler output when :resources resources_handler - output('json') + output(resource: @args[3]) end end diff --git a/devops-client/lib/devops-client/output/base.rb b/devops-client/lib/devops-client/output/base.rb index 04a1a42..d5c8e71 100644 --- a/devops-client/lib/devops-client/output/base.rb +++ b/devops-client/lib/devops-client/output/base.rb @@ -7,20 +7,13 @@ module Output attr_reader :options - # QUESTION: - # Earlier I use additional parameter "output_type". Now I use - # detecting output_type from data_to_output.class: - # Array means we are outputting list command, - # Hash or something other - we are outputting show command. - # Is this OK? - - def initialize(data_to_output, command_line_options={}, additional_options={}) - @data, @options, @additional_options = data_to_output, command_line_options, additional_options + def initialize(data_to_output, options={}) + @data, @options = data_to_output, options end - def output(format = nil) - format ||= options[:format] - case format + def output(preferred_options) + @options = @options.merge(preferred_options) + case options[:format] when CommonOptions::TABLE_FORMAT table when CommonOptions::JSON_FORMAT diff --git a/devops-client/lib/devops-client/output/project.rb b/devops-client/lib/devops-client/output/project.rb index 6c847b9..052b94b 100644 --- a/devops-client/lib/devops-client/output/project.rb +++ b/devops-client/lib/devops-client/output/project.rb @@ -9,15 +9,12 @@ module Output def table title = nil with_separator = false - headers, rows = case @additional_options[:output_type] - when :list - title = I18n.t("output.title.project.list") - create_list(@data) + headers, rows = case options[:output_type] when :show title = I18n.t("output.title.project.show", :name => @data["name"]) with_separator = true create_show(@data) - when :server + when :servers title = ARGV[2] title += " " + ARGV[3] unless ARGV[3].nil? title = I18n.t("output.title.project.servers", :title => title) @@ -25,6 +22,9 @@ module Output when :test title = I18n.t("output.title.project.test", :project => ARGV[2], :env => ARGV[3]) create_test(@data) + else + title = I18n.t("output.title.project.list") + create_list(@data) end create_table(headers, rows, title, with_num?, with_separator) end diff --git a/devops-client/lib/devops-client/output/stack.rb b/devops-client/lib/devops-client/output/stack.rb index 2cf9e09..3731412 100644 --- a/devops-client/lib/devops-client/output/stack.rb +++ b/devops-client/lib/devops-client/output/stack.rb @@ -6,13 +6,19 @@ module Output include Concerns::HasProvider def table - if outputting_list? - title = I18n.t("output.title.stack.list") - headers, rows = create_list + if options[:current_command] == :resources + if options[:resource].nil? + headers, rows = create_servers_list + end else - puts 'Details are not displayed in table view' - title = I18n.t("output.title.stack.show", id: @data["id"]) - headers, rows = create_show + if outputting_list? + title = I18n.t("output.title.stack.list") + headers, rows = create_list + else + puts 'Details are not displayed in table view' + title = I18n.t("output.title.stack.show", id: @data["id"]) + headers, rows = create_show + end end create_table(headers, rows, title, with_num?) end @@ -41,5 +47,13 @@ module Output headers_and_rows([@data], %w(id deploy_env stack_template cloud_stack_id stack_status)) end + def create_servers_list + headers = ['Logical id', 'Physical id'] + rows = @data.map do |resource| + [resource['resource_name'], resource['physical_resource_id']] + end + [headers, rows] + end + end end