Class: Redwood::Container
Overview
recursive structure used internally to represent message trees as described by reply-to: and references: headers.
the ‘id’ field is the same as the message id. but the message might be empty, in the case that we represent a message that was referenced by another message (as an ancestor) but never received.
Instance Attribute Summary collapse
-
#children ⇒ Object
Returns the value of attribute children.
-
#id ⇒ Object
Returns the value of attribute id.
-
#message ⇒ Object
Returns the value of attribute message.
-
#parent ⇒ Object
Returns the value of attribute parent.
-
#thread ⇒ Object
Returns the value of attribute thread.
Instance Method Summary collapse
- #==(o) ⇒ Object
- #date ⇒ Object
- #descendant_of?(o) ⇒ Boolean
- #dump_recursive(f = $stdout, indent = 0, root = true, parent = nil) ⇒ Object
- #each_with_stuff(parent = nil) {|_self, 0, parent| ... } ⇒ Object
- #empty? ⇒ Boolean
- #find_attr(attr) ⇒ Object
- #first_useful_descendant ⇒ Object
-
#initialize(id) ⇒ Container
constructor
A new instance of Container.
- #is_reply? ⇒ Boolean
- #root ⇒ Object
- #root? ⇒ Boolean
- #subj ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize(id) ⇒ Container
Returns a new instance of Container.
160 161 162 163 164 165 |
# File 'lib/sup/thread.rb', line 160 def initialize id raise "non-String #{id.inspect}" unless id.is_a? String @id = id @message, @parent, @thread = nil, nil, nil @children = [] end |
Instance Attribute Details
#children ⇒ Object
Returns the value of attribute children.
158 159 160 |
# File 'lib/sup/thread.rb', line 158 def children @children end |
#id ⇒ Object
Returns the value of attribute id.
158 159 160 |
# File 'lib/sup/thread.rb', line 158 def id @id end |
#message ⇒ Object
Returns the value of attribute message.
158 159 160 |
# File 'lib/sup/thread.rb', line 158 def @message end |
#parent ⇒ Object
Returns the value of attribute parent.
158 159 160 |
# File 'lib/sup/thread.rb', line 158 def parent @parent end |
#thread ⇒ Object
Returns the value of attribute thread.
158 159 160 |
# File 'lib/sup/thread.rb', line 158 def thread @thread end |
Instance Method Details
#==(o) ⇒ Object
182 |
# File 'lib/sup/thread.rb', line 182 def == o; Container === o && id == o.id; end |
#date ⇒ Object
204 |
# File 'lib/sup/thread.rb', line 204 def date; find_attr :date; end |
#descendant_of?(o) ⇒ Boolean
174 175 176 177 178 179 180 |
# File 'lib/sup/thread.rb', line 174 def descendant_of? o if o == self true else @parent && @parent.descendant_of?(o) end end |
#dump_recursive(f = $stdout, indent = 0, root = true, parent = nil) ⇒ Object
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 |
# File 'lib/sup/thread.rb', line 215 def dump_recursive f=$stdout, indent=0, root=true, parent=nil raise "inconsistency" unless parent.nil? || parent.children.include?(self) unless root f.print " " * indent f.print "+->" end line = #"[#{useful? ? 'U' : ' '}] " + if @message "[#{thread}] #{@message.subj} " ##{@message.refs.inspect} / #{@message.replytos.inspect}" else "<no message>" end f.puts "#{id} #{line}"#[0 .. (105 - indent)] indent += 3 @children.each { |c| c.dump_recursive f, indent, false, self } end |
#each_with_stuff(parent = nil) {|_self, 0, parent| ... } ⇒ Object
167 168 169 170 171 172 |
# File 'lib/sup/thread.rb', line 167 def each_with_stuff parent=nil yield self, 0, parent @children.each do |c| c.each_with_stuff(self) { |cc, d, par| yield cc, d + 1, par } end end |
#empty? ⇒ Boolean
184 |
# File 'lib/sup/thread.rb', line 184 def empty?; @message.nil?; end |
#find_attr(attr) ⇒ Object
196 197 198 199 200 201 202 |
# File 'lib/sup/thread.rb', line 196 def find_attr attr if empty? @children.argfind { |c| c.find_attr attr } else @message.send attr end end |
#first_useful_descendant ⇒ Object
188 189 190 191 192 193 194 |
# File 'lib/sup/thread.rb', line 188 def first_useful_descendant if empty? && @children.size == 1 @children.first.first_useful_descendant else self end end |
#is_reply? ⇒ Boolean
206 |
# File 'lib/sup/thread.rb', line 206 def is_reply?; subj && Message.subject_is_reply?(subj); end |
#root? ⇒ Boolean
185 |
# File 'lib/sup/thread.rb', line 185 def root?; @parent.nil?; end |
#subj ⇒ Object
203 |
# File 'lib/sup/thread.rb', line 203 def subj; find_attr :subj; end |
#to_s ⇒ Object
208 209 210 211 212 213 |
# File 'lib/sup/thread.rb', line 208 def to_s [ "<#{id}", (@parent.nil? ? nil : "parent=#{@parent.id}"), (@children.empty? ? nil : "children=#{@children.map { |c| c.id }.inspect}"), ].compact.join(" ") + ">" end |