lib/hammer_cli/output/formatters.rb in hammer_cli-0.18.1 vs lib/hammer_cli/output/formatters.rb in hammer_cli-0.19.0

- old
+ new

@@ -22,32 +22,41 @@ def formatter_for_type(type) @_formatters[type.name.split('::').last.to_sym] end end - # Tags: - # All the tags the formatter has, needs to be present in the addapter. - # Otherwise the formatter won't apply. Formatters with :flat tag are used first - # as we expect them to serialize the value. - # - # - by format: :flat x :data - # - by output: :file X :screen - # abstract formatter class FieldFormatter - def tags - [] + %i[] end - def match?(other_tags) - tags & other_tags == tags + def required_features + return %i[] if tags.empty? + + tags.map { |t| HammerCLI::Output::Utils.tag_to_feature(t) } end + def match?(features) + required_features & features == required_features + end + def format(data, field_params={}) data end + + def self.inherited(subclass) + subclass.define_singleton_method(:method_added) do |method_name| + if method_name == :tags + warn( + _('Method %{tags} for field formatters and output adapters is deprecated. Please use %{feat} or %{req_feat} instead.') % { + tags: 'tags', feat: 'features', req_feat: 'required_features' + } + ) + end + end + end end class FormatterContainer < FieldFormatter def initialize(*formatters) @@ -67,23 +76,27 @@ class ColorFormatter def initialize(color) @color = color end - def tags - [:screen, :flat] + def required_features + return %i[rich_text serialized] if tags.empty? + + tags.map { |t| HammerCLI::Output::Utils.tag_to_feature(t) } end def format(data, field_params={}) c = HighLine.color(data.to_s, @color) end end class DateFormatter < FieldFormatter - def tags - [:flat] + def required_features + return %i[serialized] if tags.empty? + + tags.map { |t| HammerCLI::Output::Utils.tag_to_feature(t) } end def format(string_date, field_params={}) t = DateTime.parse(string_date.to_s) t.strftime("%Y/%m/%d %H:%M:%S") @@ -93,12 +106,14 @@ end class ListFormatter < FieldFormatter INDENT = " " - def tags - [:flat] + def required_features + return %i[serialized] if tags.empty? + + tags.map { |t| HammerCLI::Output::Utils.tag_to_feature(t) } end def format(list, field_params={}) if list.is_a? Array separator = field_params.fetch(:separator, ', ') @@ -115,12 +130,14 @@ end end class KeyValueFormatter < FieldFormatter - def tags - [:screen, :flat] + def required_features + return %i[rich_text serialized] if tags.empty? + + tags.map { |t| HammerCLI::Output::Utils.tag_to_feature(t) } end def format(params, field_params={}) if params.is_a? Hash name = params[:name] || params["name"] @@ -138,24 +155,58 @@ def initialize(options = {}) @indent = options[:indent].nil? ? true : options[:indent] end - def tags - [:screen] + def required_features + return %i[rich_text] if tags.empty? + + tags.map { |t| HammerCLI::Output::Utils.tag_to_feature(t) } end def format(text, field_params={}) text = text.to_s.indent_with(INDENT) if @indent "\n#{text}" end end + class InlineTextFormatter < FieldFormatter + def required_features + return %i[serialized inline] if tags.empty? + + tags.map { |t| HammerCLI::Output::Utils.tag_to_feature(t) } + end + + def format(text, _field_params = {}) + text.to_s.tr("\r\n", ' ') + end + end + + class MultilineTextFormatter < FieldFormatter + INDENT = ' '.freeze + MAX_WIDTH = 120 + MIN_WIDTH = 60 + + def required_features + return %i[serialized multiline rich_text] if tags.empty? + + tags.map { |t| HammerCLI::Output::Utils.tag_to_feature(t) } + end + + def format(text, field_params = {}) + width = [[field_params.fetch(:width, 0), MIN_WIDTH].max, MAX_WIDTH].min + text.to_s.chars.each_slice(width).map(&:join).join("\n") + .indent_with(INDENT).prepend("\n") + end + end + class BooleanFormatter < FieldFormatter - def tags - [:flat, :screen] + def required_features + return %i[serialized rich_text] if tags.empty? + + tags.map { |t| HammerCLI::Output::Utils.tag_to_feature(t) } end def format(value, field_params={}) (value == 0 || !value || value == "") ? _("no") : _("yes") end @@ -163,12 +214,11 @@ HammerCLI::Output::Output.register_formatter(DateFormatter.new, :Date) HammerCLI::Output::Output.register_formatter(ListFormatter.new, :List) HammerCLI::Output::Output.register_formatter(KeyValueFormatter.new, :KeyValue) HammerCLI::Output::Output.register_formatter(LongTextFormatter.new, :LongText) + HammerCLI::Output::Output.register_formatter(InlineTextFormatter.new, :Text) + HammerCLI::Output::Output.register_formatter(MultilineTextFormatter.new, :Text) HammerCLI::Output::Output.register_formatter(BooleanFormatter.new, :Boolean) end end - - -