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

HashArrayFormatter, TextFormatter

Defined Under Namespace

Modules: Styler Classes: FormatAdvisor

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeFormatter

Returns a new instance of Formatter.



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

def initialize()
  @advisor = FormatAdvisor.new(self)
  @advice = {:list => [], :item => [], :output => []}
end

Instance Attribute Details

#adviceObject (readonly)

Returns the value of attribute advice.



132
133
134
# File 'lib/command-set/formatter/base.rb', line 132

def advice
  @advice
end

Instance Method Details

#apply_advice(item) ⇒ Object



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

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



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

def closed_begin_list(list); end

#closed_end_list(list) ⇒ Object

Presenter callback: an list closed, tree order



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

def closed_end_list(list); end

#closed_item(item) ⇒ Object

Presenter callback: an item added, tree order



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

def closed_item(item); end

#default_advice(type) ⇒ Object



138
139
140
# File 'lib/command-set/formatter/base.rb', line 138

def default_advice(type)
  {}
end

#finishObject

Presenter callback: output is done



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

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



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

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

#saw_begin_list(list) ⇒ Object

Presenter callback: a list has just started



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

def saw_begin_list(list); end

#saw_end_list(list) ⇒ Object

Presenter callback: a list has just ended



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

def saw_end_list(list); end

#saw_item(item) ⇒ Object

Presenter callback: an item has just been added



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

def saw_item(item); end

#startObject

Presenter callback: output is beginning



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

def start; end