Class: WikiAnnotate
- Inherits:
-
Object
- Object
- WikiAnnotate
- Defined in:
- app/models/wiki_page.rb
Instance Attribute Summary collapse
-
#content ⇒ Object
readonly
Returns the value of attribute content.
-
#lines ⇒ Object
readonly
Returns the value of attribute lines.
Instance Method Summary collapse
-
#initialize(content) ⇒ WikiAnnotate
constructor
A new instance of WikiAnnotate.
Constructor Details
#initialize(content) ⇒ WikiAnnotate
Returns a new instance of WikiAnnotate
261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 |
# File 'app/models/wiki_page.rb', line 261 def initialize(content) @content = content current = content current_lines = current.text.split(/\r?\n/) @lines = current_lines.collect {|t| [nil, nil, t]} positions = [] current_lines.size.times {|i| positions << i} while (current.previous) d = current.previous.text.split(/\r?\n/).diff(current.text.split(/\r?\n/)).diffs.flatten d.each_slice(3) do |s| sign, line = s[0], s[1] if sign == '+' && positions[line] && positions[line] != -1 if @lines[positions[line]][0].nil? @lines[positions[line]][0] = current.version @lines[positions[line]][1] = current. end end end d.each_slice(3) do |s| sign, line = s[0], s[1] if sign == '-' positions.insert(line, -1) else positions[line] = nil end end positions.compact! # Stop if every line is annotated break unless @lines.detect { |line| line[0].nil? } current = current.previous end @lines.each { |line| line[0] ||= current.version # if the last known version is > 1 (eg. history was cleared), we don't know the author line[1] ||= current. if current.version == 1 } end |
Instance Attribute Details
#content ⇒ Object (readonly)
Returns the value of attribute content
259 260 261 |
# File 'app/models/wiki_page.rb', line 259 def content @content end |
#lines ⇒ Object (readonly)
Returns the value of attribute lines
259 260 261 |
# File 'app/models/wiki_page.rb', line 259 def lines @lines end |