Class: Command::Results::Formatter

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/command-set/formatter/base.rb

Overview

The end of the Results train. Formatter objects are supposed to output to the user events that they receive from their presenters. To simplify this process, a number of common IO functions are delegated to an IO object - usually Command::raw_stdout.

This class in particular is pretty quiet - probably not helpful for everyday use. Of course, for some purposes, singleton methods might be very useful

Direct Known Subclasses

StrategyFormatter, TextFormatter, XMLFormatter

Defined Under Namespace

Modules: Styler Classes: FormatAdvisor

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(out = nil, err = nil) ⇒ Formatter

Returns a new instance of Formatter.



112
113
114
115
116
117
# File 'lib/command-set/formatter/base.rb', line 112

def initialize(out = nil, err = nil)
  @out_to = out || ::Command::raw_stdout
  @err_to = err || ::Command::raw_stderr
  @advisor = FormatAdvisor.new(self)
  @advice = {:list => [], :item => [], :output => []}
end

Instance Attribute Details

#adviceObject (readonly)

Returns the value of attribute advice.



134
135
136
# File 'lib/command-set/formatter/base.rb', line 134

def advice
  @advice
end

Class Method Details

.inherited(sub) ⇒ Object



146
147
148
149
150
151
# File 'lib/command-set/formatter/base.rb', line 146

def self.inherited(sub)
  sub.extend Forwardable
  sub.class_eval do
    def_delegators :@out_to, :p, :puts, :print, :printf, :putc, :write, :write_nonblock, :flush
  end
end

Instance Method Details

#apply_advice(item) ⇒ Object



119
120
121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/command-set/formatter/base.rb', line 119

def apply_advice(item)
  type = List === item ? :list : :item

  item.options[:format_advice] = 
    @advice[type].inject(default_advice(type)) do |advice, advisor|
    result = advisor[item]
    break if result == :DONE
    if Hash === result
      advice.merge(result)
    else
      advice
    end
    end
end

#closed_begin_list(list) ⇒ Object

Presenter callback: a list opened, tree order



166
# File 'lib/command-set/formatter/base.rb', line 166

def closed_begin_list(list); end

#closed_end_list(list) ⇒ Object

Presenter callback: an list closed, tree order



172
# File 'lib/command-set/formatter/base.rb', line 172

def closed_end_list(list); end

#closed_item(item) ⇒ Object

Presenter callback: an item added, tree order



169
# File 'lib/command-set/formatter/base.rb', line 169

def closed_item(item); end

#default_advice(type) ⇒ Object



140
141
142
# File 'lib/command-set/formatter/base.rb', line 140

def default_advice(type)
  {}
end

#finishObject

Presenter callback: output is done



175
# File 'lib/command-set/formatter/base.rb', line 175

def finish; end

#notify(msg, item) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/command-set/formatter/base.rb', line 79

def notify(msg, item)
  if msg == :start
    start
    return
  end
  if msg == :done
    finish
    return
  end

  apply_advice(item)

  if List === item
    case msg
    when :saw_begin
      saw_begin_list(item)
    when :saw_end
      saw_end_list(item)
    when :arrive
      closed_begin_list(item)
    when :leave
      closed_end_list(item)
    end
  else
    case msg
    when :arrive
      closed_item(item)
    when :saw
      saw_item(item)
    end
  end
end

#receive_advice(&block) ⇒ Object



136
137
138
# File 'lib/command-set/formatter/base.rb', line 136

def receive_advice(&block)
  @advisor.instance_eval(&block)
end

#saw_begin_list(list) ⇒ Object

Presenter callback: a list has just started



157
# File 'lib/command-set/formatter/base.rb', line 157

def saw_begin_list(list); end

#saw_end_list(list) ⇒ Object

Presenter callback: a list has just ended



163
# File 'lib/command-set/formatter/base.rb', line 163

def saw_end_list(list); end

#saw_item(item) ⇒ Object

Presenter callback: an item has just been added



160
# File 'lib/command-set/formatter/base.rb', line 160

def saw_item(item); end

#startObject

Presenter callback: output is beginning



154
# File 'lib/command-set/formatter/base.rb', line 154

def start; end