standup_md 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,574 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta charset="UTF-8">
6
+
7
+ <title>class StandupMD::File - RDoc Documentation</title>
8
+
9
+ <script type="text/javascript">
10
+ var rdoc_rel_prefix = "../";
11
+ var index_rel_prefix = "../";
12
+ </script>
13
+
14
+ <script src="../js/navigation.js" defer></script>
15
+ <script src="../js/search.js" defer></script>
16
+ <script src="../js/search_index.js" defer></script>
17
+ <script src="../js/searcher.js" defer></script>
18
+ <script src="../js/darkfish.js" defer></script>
19
+
20
+ <link href="../css/fonts.css" rel="stylesheet">
21
+ <link href="../css/rdoc.css" rel="stylesheet">
22
+
23
+
24
+
25
+
26
+ <body id="top" role="document" class="class">
27
+ <nav role="navigation">
28
+ <div id="project-navigation">
29
+ <div id="home-section" role="region" title="Quick navigation" class="nav-section">
30
+ <h2>
31
+ <a href="../index.html" rel="home">Home</a>
32
+ </h2>
33
+
34
+ <div id="table-of-contents-navigation">
35
+ <a href="../table_of_contents.html#pages">Pages</a>
36
+ <a href="../table_of_contents.html#classes">Classes</a>
37
+ <a href="../table_of_contents.html#methods">Methods</a>
38
+ </div>
39
+ </div>
40
+
41
+ <div id="search-section" role="search" class="project-section initially-hidden">
42
+ <form action="#" method="get" accept-charset="utf-8">
43
+ <div id="search-field-wrapper">
44
+ <input id="search-field" role="combobox" aria-label="Search"
45
+ aria-autocomplete="list" aria-controls="search-results"
46
+ type="text" name="search" placeholder="Search" spellcheck="false"
47
+ title="Type to search, Up and Down to navigate, Enter to load">
48
+ </div>
49
+
50
+ <ul id="search-results" aria-label="Search Results"
51
+ aria-busy="false" aria-expanded="false"
52
+ aria-atomic="false" class="initially-hidden"></ul>
53
+ </form>
54
+ </div>
55
+
56
+ </div>
57
+
58
+
59
+
60
+ <div id="class-metadata">
61
+
62
+ <div id="parent-class-section" class="nav-section">
63
+ <h3>Parent</h3>
64
+
65
+
66
+ <p class="link">Object
67
+
68
+ </div>
69
+
70
+
71
+
72
+ <!-- Method Quickref -->
73
+ <div id="method-list-section" class="nav-section">
74
+ <h3>Methods</h3>
75
+
76
+ <ul class="link-list" role="directory">
77
+
78
+ <li ><a href="#method-c-config">::config</a>
79
+
80
+ <li ><a href="#method-c-find">::find</a>
81
+
82
+ <li ><a href="#method-c-find_by_date">::find_by_date</a>
83
+
84
+ <li ><a href="#method-c-new">::new</a>
85
+
86
+ <li ><a href="#method-i-exist-3F">#exist?</a>
87
+
88
+ <li ><a href="#method-i-load">#load</a>
89
+
90
+ <li ><a href="#method-i-loaded-3F">#loaded?</a>
91
+
92
+ <li ><a href="#method-i-new-3F">#new?</a>
93
+
94
+ <li ><a href="#method-i-write">#write</a>
95
+
96
+ </ul>
97
+ </div>
98
+
99
+ </div>
100
+ </nav>
101
+
102
+ <main role="main" aria-labelledby="class-StandupMD::File">
103
+ <h1 id="class-StandupMD::File" class="class">
104
+ class StandupMD::File
105
+ </h1>
106
+
107
+ <section class="description">
108
+
109
+ <p>Class for handling reading and writing standup files.</p>
110
+
111
+ </section>
112
+
113
+
114
+ <section id="5Buntitled-5D" class="documentation-section">
115
+
116
+
117
+
118
+
119
+
120
+
121
+
122
+ <section class="attribute-method-details" class="method-section">
123
+ <header>
124
+ <h3>Attributes</h3>
125
+ </header>
126
+
127
+
128
+ <div id="attribute-i-entries" class="method-detail">
129
+ <div class="method-heading attribute-method-heading">
130
+ <span class="method-name">entries</span><span
131
+ class="attribute-access-type">[R]</span>
132
+ </div>
133
+
134
+ <div class="method-description">
135
+
136
+ <p>The list of entries in the file.</p>
137
+
138
+ <p>@return [StandupMP::EntryList]</p>
139
+
140
+ </div>
141
+ </div>
142
+
143
+ <div id="attribute-i-name" class="method-detail">
144
+ <div class="method-heading attribute-method-heading">
145
+ <span class="method-name">name</span><span
146
+ class="attribute-access-type">[R]</span>
147
+ </div>
148
+
149
+ <div class="method-description">
150
+
151
+ <p>The name of the file.</p>
152
+
153
+ <p>@return [String]</p>
154
+
155
+ </div>
156
+ </div>
157
+
158
+ </section>
159
+
160
+
161
+
162
+ <section id="public-class-5Buntitled-5D-method-details" class="method-section">
163
+ <header>
164
+ <h3>Public Class Methods</h3>
165
+ </header>
166
+
167
+
168
+ <div id="method-c-config" class="method-detail ">
169
+
170
+ <div class="method-heading">
171
+ <span class="method-name">config</span><span
172
+ class="method-args">()</span>
173
+
174
+ <span class="method-click-advice">click to toggle source</span>
175
+
176
+ </div>
177
+
178
+
179
+ <div class="method-description">
180
+
181
+ <p>Access to the class&#39;s configuration.</p>
182
+
183
+ <p>@return [StandupMD::Config::EntryList]</p>
184
+
185
+
186
+
187
+
188
+ <div class="method-source-code" id="config-source">
189
+ <pre><span class="ruby-comment"># File lib/standup_md/file.rb, line 18</span>
190
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier ruby-title">config</span>
191
+ <span class="ruby-ivar">@config</span> <span class="ruby-operator">||=</span> <span class="ruby-constant">StandupMD</span>.<span class="ruby-identifier">config</span>.<span class="ruby-identifier">file</span>
192
+ <span class="ruby-keyword">end</span></pre>
193
+ </div>
194
+
195
+ </div>
196
+
197
+
198
+
199
+
200
+ </div>
201
+
202
+
203
+ <div id="method-c-find" class="method-detail ">
204
+
205
+ <div class="method-heading">
206
+ <span class="method-name">find</span><span
207
+ class="method-args">(file_name)</span>
208
+
209
+ <span class="method-click-advice">click to toggle source</span>
210
+
211
+ </div>
212
+
213
+
214
+ <div class="method-description">
215
+
216
+ <p>Find standup file in directory by file name.</p>
217
+
218
+ <p>@param [String] File_naem</p>
219
+
220
+
221
+
222
+
223
+ <div class="method-source-code" id="find-source">
224
+ <pre><span class="ruby-comment"># File lib/standup_md/file.rb, line 26</span>
225
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier ruby-title">find</span>(<span class="ruby-identifier">file_name</span>)
226
+ <span class="ruby-identifier">file</span> = <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">entries</span>(<span class="ruby-identifier">config</span>.<span class="ruby-identifier">directory</span>).<span class="ruby-identifier">bsearch</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">file_name</span> }
227
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">file</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-identifier">config</span>.<span class="ruby-identifier">create</span>
228
+ <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;File #{file_name} not found.&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">config</span>.<span class="ruby-identifier">create</span>
229
+ <span class="ruby-keyword">end</span>
230
+ <span class="ruby-identifier">new</span>(<span class="ruby-identifier">file_name</span>)
231
+ <span class="ruby-keyword">end</span></pre>
232
+ </div>
233
+
234
+ </div>
235
+
236
+
237
+
238
+
239
+ </div>
240
+
241
+
242
+ <div id="method-c-find_by_date" class="method-detail ">
243
+
244
+ <div class="method-heading">
245
+ <span class="method-name">find_by_date</span><span
246
+ class="method-args">(date)</span>
247
+
248
+ <span class="method-click-advice">click to toggle source</span>
249
+
250
+ </div>
251
+
252
+
253
+ <div class="method-description">
254
+
255
+ <p>Find standup file in directory by Date object.</p>
256
+
257
+ <p>@param [Date] date</p>
258
+
259
+
260
+
261
+
262
+ <div class="method-source-code" id="find_by_date-source">
263
+ <pre><span class="ruby-comment"># File lib/standup_md/file.rb, line 38</span>
264
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier ruby-title">find_by_date</span>(<span class="ruby-identifier">date</span>)
265
+ <span class="ruby-keyword">unless</span> <span class="ruby-identifier">date</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Date</span>)
266
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-string">&quot;Argument must be a Date object&quot;</span>
267
+ <span class="ruby-keyword">end</span>
268
+ <span class="ruby-identifier">find</span>(<span class="ruby-identifier">date</span>.<span class="ruby-identifier">strftime</span>(<span class="ruby-identifier">config</span>.<span class="ruby-identifier">name_format</span>))
269
+ <span class="ruby-keyword">end</span></pre>
270
+ </div>
271
+
272
+ </div>
273
+
274
+
275
+
276
+
277
+ </div>
278
+
279
+
280
+ <div id="method-c-new" class="method-detail ">
281
+
282
+ <div class="method-heading">
283
+ <span class="method-name">new</span><span
284
+ class="method-args">(file_name)</span>
285
+
286
+ <span class="method-click-advice">click to toggle source</span>
287
+
288
+ </div>
289
+
290
+
291
+ <div class="method-description">
292
+
293
+ <p>Constructs the instance.</p>
294
+
295
+ <p>@param [String] file_name</p>
296
+
297
+ <p>@return [StandupMP::File]</p>
298
+
299
+
300
+
301
+
302
+ <div class="method-source-code" id="new-source">
303
+ <pre><span class="ruby-comment"># File lib/standup_md/file.rb, line 63</span>
304
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">initialize</span>(<span class="ruby-identifier">file_name</span>)
305
+ <span class="ruby-ivar">@config</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">config</span>
306
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">file_name</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">SEPARATOR</span>)
307
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>,
308
+ <span class="ruby-node">&quot;#{file_name} contains directory. Please use `StandupMD.config.file.directory=`&quot;</span>
309
+ <span class="ruby-keyword">end</span>
310
+
311
+ <span class="ruby-keyword">unless</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">directory?</span>(<span class="ruby-ivar">@config</span>.<span class="ruby-identifier">directory</span>)
312
+ <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Dir #{@config.directory} not found.&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@config</span>.<span class="ruby-identifier">create</span>
313
+ <span class="ruby-constant">FileUtils</span>.<span class="ruby-identifier">mkdir_p</span>(<span class="ruby-ivar">@config</span>.<span class="ruby-identifier">directory</span>)
314
+ <span class="ruby-keyword">end</span>
315
+
316
+ <span class="ruby-ivar">@name</span> = <span class="ruby-operator">::</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-operator">::</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-ivar">@config</span>.<span class="ruby-identifier">directory</span>, <span class="ruby-identifier">file_name</span>))
317
+
318
+ <span class="ruby-keyword">unless</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">file?</span>(<span class="ruby-ivar">@name</span>)
319
+ <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;File #{@name} not found.&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@config</span>.<span class="ruby-identifier">create</span>
320
+ <span class="ruby-constant">FileUtils</span>.<span class="ruby-identifier">touch</span>(<span class="ruby-ivar">@name</span>)
321
+ <span class="ruby-keyword">end</span>
322
+
323
+ <span class="ruby-ivar">@new</span> = <span class="ruby-operator">::</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">zero?</span>(<span class="ruby-ivar">@name</span>)
324
+ <span class="ruby-ivar">@loaded</span> = <span class="ruby-keyword">false</span>
325
+ <span class="ruby-keyword">end</span></pre>
326
+ </div>
327
+
328
+ </div>
329
+
330
+
331
+
332
+
333
+ </div>
334
+
335
+
336
+ </section>
337
+
338
+ <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
339
+ <header>
340
+ <h3>Public Instance Methods</h3>
341
+ </header>
342
+
343
+
344
+ <div id="method-i-exist-3F" class="method-detail ">
345
+
346
+ <div class="method-heading">
347
+ <span class="method-name">exist?</span><span
348
+ class="method-args">()</span>
349
+
350
+ <span class="method-click-advice">click to toggle source</span>
351
+
352
+ </div>
353
+
354
+
355
+ <div class="method-description">
356
+
357
+ <p>Does the file exist?</p>
358
+
359
+ <p>@return [Boolean] true if exists</p>
360
+
361
+
362
+
363
+
364
+ <div class="method-source-code" id="exist-3F-source">
365
+ <pre><span class="ruby-comment"># File lib/standup_md/file.rb, line 106</span>
366
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">exist?</span>
367
+ <span class="ruby-operator">::</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">name</span>)
368
+ <span class="ruby-keyword">end</span></pre>
369
+ </div>
370
+
371
+ </div>
372
+
373
+
374
+
375
+
376
+ </div>
377
+
378
+
379
+ <div id="method-i-load" class="method-detail ">
380
+
381
+ <div class="method-heading">
382
+ <span class="method-name">load</span><span
383
+ class="method-args">()</span>
384
+
385
+ <span class="method-click-advice">click to toggle source</span>
386
+
387
+ </div>
388
+
389
+
390
+ <div class="method-description">
391
+
392
+ <p>Loads the file&#39;s contents. TODO clean up this method.</p>
393
+
394
+ <p>@return [StandupMD::FileList]</p>
395
+
396
+
397
+
398
+
399
+ <div class="method-source-code" id="load-source">
400
+ <pre><span class="ruby-comment"># File lib/standup_md/file.rb, line 115</span>
401
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">load</span>
402
+ <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;File #{name} does not exist.&quot;</span> <span class="ruby-keyword">unless</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">file?</span>(<span class="ruby-identifier">name</span>)
403
+ <span class="ruby-identifier">entry_list</span> = <span class="ruby-constant">EntryList</span>.<span class="ruby-identifier">new</span>
404
+ <span class="ruby-identifier">record</span> = {}
405
+ <span class="ruby-identifier">section_type</span> = <span class="ruby-string">&#39;&#39;</span>
406
+ <span class="ruby-operator">::</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">foreach</span>(<span class="ruby-identifier">name</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span><span class="ruby-operator">|</span>
407
+ <span class="ruby-identifier">line</span>.<span class="ruby-identifier">chomp!</span>
408
+ <span class="ruby-keyword">next</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">line</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">empty?</span>
409
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">is_header?</span>(<span class="ruby-identifier">line</span>)
410
+ <span class="ruby-keyword">unless</span> <span class="ruby-identifier">record</span>.<span class="ruby-identifier">empty?</span>
411
+ <span class="ruby-identifier">entry_list</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">new_entry</span>(<span class="ruby-identifier">record</span>)
412
+ <span class="ruby-identifier">record</span> = {}
413
+ <span class="ruby-keyword">end</span>
414
+ <span class="ruby-identifier">record</span>[<span class="ruby-string">&#39;header&#39;</span>] = <span class="ruby-identifier">line</span>.<span class="ruby-identifier">sub</span>(<span class="ruby-regexp">%r{^\#{#{@config.header_depth}}\s*}</span>, <span class="ruby-string">&#39;&#39;</span>)
415
+ <span class="ruby-identifier">section_type</span> = <span class="ruby-ivar">@config</span>.<span class="ruby-identifier">notes_header</span>
416
+ <span class="ruby-identifier">record</span>[<span class="ruby-identifier">section_type</span>] = []
417
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">is_sub_header?</span>(<span class="ruby-identifier">line</span>)
418
+ <span class="ruby-identifier">section_type</span> = <span class="ruby-identifier">determine_section_type</span>(<span class="ruby-identifier">line</span>)
419
+ <span class="ruby-identifier">record</span>[<span class="ruby-identifier">section_type</span>] = []
420
+ <span class="ruby-keyword">else</span>
421
+ <span class="ruby-identifier">record</span>[<span class="ruby-identifier">section_type</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">line</span>.<span class="ruby-identifier">sub</span>(<span class="ruby-identifier">bullet_character_regex</span>, <span class="ruby-string">&#39;&#39;</span>)
422
+ <span class="ruby-keyword">end</span>
423
+ <span class="ruby-keyword">end</span>
424
+ <span class="ruby-identifier">entry_list</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">new_entry</span>(<span class="ruby-identifier">record</span>) <span class="ruby-keyword">unless</span> <span class="ruby-identifier">record</span>.<span class="ruby-identifier">empty?</span>
425
+ <span class="ruby-ivar">@loaded</span> = <span class="ruby-keyword">true</span>
426
+ <span class="ruby-ivar">@entries</span> = <span class="ruby-identifier">entry_list</span>.<span class="ruby-identifier">sort</span>
427
+ <span class="ruby-keyword">rescue</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">e</span>
428
+ <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;File malformation: #{e}&quot;</span>
429
+ <span class="ruby-keyword">end</span></pre>
430
+ </div>
431
+
432
+ </div>
433
+
434
+
435
+
436
+
437
+ </div>
438
+
439
+
440
+ <div id="method-i-loaded-3F" class="method-detail ">
441
+
442
+ <div class="method-heading">
443
+ <span class="method-name">loaded?</span><span
444
+ class="method-args">()</span>
445
+
446
+ <span class="method-click-advice">click to toggle source</span>
447
+
448
+ </div>
449
+
450
+
451
+ <div class="method-description">
452
+
453
+ <p>Has the file been loaded?</p>
454
+
455
+ <p>@return [Boolean] true if loaded</p>
456
+
457
+
458
+
459
+
460
+ <div class="method-source-code" id="loaded-3F-source">
461
+ <pre><span class="ruby-comment"># File lib/standup_md/file.rb, line 98</span>
462
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">loaded?</span>
463
+ <span class="ruby-ivar">@loaded</span>
464
+ <span class="ruby-keyword">end</span></pre>
465
+ </div>
466
+
467
+ </div>
468
+
469
+
470
+
471
+
472
+ </div>
473
+
474
+
475
+ <div id="method-i-new-3F" class="method-detail ">
476
+
477
+ <div class="method-heading">
478
+ <span class="method-name">new?</span><span
479
+ class="method-args">()</span>
480
+
481
+ <span class="method-click-advice">click to toggle source</span>
482
+
483
+ </div>
484
+
485
+
486
+ <div class="method-description">
487
+
488
+ <p>Was the file just now created?</p>
489
+
490
+ <p>@return [Boolean] true if new</p>
491
+
492
+
493
+
494
+
495
+ <div class="method-source-code" id="new-3F-source">
496
+ <pre><span class="ruby-comment"># File lib/standup_md/file.rb, line 90</span>
497
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">new?</span>
498
+ <span class="ruby-ivar">@new</span>
499
+ <span class="ruby-keyword">end</span></pre>
500
+ </div>
501
+
502
+ </div>
503
+
504
+
505
+
506
+
507
+ </div>
508
+
509
+
510
+ <div id="method-i-write" class="method-detail ">
511
+
512
+ <div class="method-heading">
513
+ <span class="method-name">write</span><span
514
+ class="method-args">(dates = {})</span>
515
+
516
+ <span class="method-click-advice">click to toggle source</span>
517
+
518
+ </div>
519
+
520
+
521
+ <div class="method-description">
522
+
523
+ <p>Writes a new entry to the file if the first entry in the file isn&#39;t today. This method is destructive; if a file for entries in the date range already exists, it will be clobbered with the entries in the range.</p>
524
+
525
+ <p>@param [Hash] start_and_end_date</p>
526
+
527
+ <p>@return [Boolean] true if successful</p>
528
+
529
+
530
+
531
+
532
+ <div class="method-source-code" id="write-source">
533
+ <pre><span class="ruby-comment"># File lib/standup_md/file.rb, line 153</span>
534
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">write</span>(<span class="ruby-identifier">dates</span> = {})
535
+ <span class="ruby-identifier">sorted_entries</span> = <span class="ruby-identifier">entries</span>.<span class="ruby-identifier">sort</span>
536
+ <span class="ruby-identifier">start_date</span> = <span class="ruby-identifier">dates</span>.<span class="ruby-identifier">fetch</span>(<span class="ruby-value">:start_date</span>, <span class="ruby-identifier">sorted_entries</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">date</span>)
537
+ <span class="ruby-identifier">end_date</span> = <span class="ruby-identifier">dates</span>.<span class="ruby-identifier">fetch</span>(<span class="ruby-value">:end_date</span>, <span class="ruby-identifier">sorted_entries</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">date</span>)
538
+ <span class="ruby-operator">::</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">name</span>, <span class="ruby-string">&#39;w&#39;</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
539
+ <span class="ruby-identifier">sorted_entries</span>.<span class="ruby-identifier">filter</span>(<span class="ruby-identifier">start_date</span>, <span class="ruby-identifier">end_date</span>).<span class="ruby-identifier">sort_reverse</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">entry</span><span class="ruby-operator">|</span>
540
+ <span class="ruby-identifier">f</span>.<span class="ruby-identifier">puts</span> <span class="ruby-identifier">header</span>(<span class="ruby-identifier">entry</span>.<span class="ruby-identifier">date</span>)
541
+ <span class="ruby-ivar">@config</span>.<span class="ruby-identifier">sub_header_order</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">attr</span><span class="ruby-operator">|</span>
542
+ <span class="ruby-identifier">tasks</span> = <span class="ruby-identifier">entry</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">attr</span>)
543
+ <span class="ruby-keyword">next</span> <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">tasks</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">empty?</span>
544
+ <span class="ruby-identifier">f</span>.<span class="ruby-identifier">puts</span> <span class="ruby-identifier">sub_header</span>(<span class="ruby-ivar">@config</span>.<span class="ruby-identifier">send</span>(<span class="ruby-node">&quot;#{attr}_header&quot;</span>).<span class="ruby-identifier">capitalize</span>)
545
+ <span class="ruby-identifier">tasks</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">task</span><span class="ruby-operator">|</span> <span class="ruby-identifier">f</span>.<span class="ruby-identifier">puts</span> <span class="ruby-ivar">@config</span>.<span class="ruby-identifier">bullet_character</span> <span class="ruby-operator">+</span> <span class="ruby-string">&#39; &#39;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">task</span> }
546
+ <span class="ruby-keyword">end</span>
547
+ <span class="ruby-identifier">f</span>.<span class="ruby-identifier">puts</span>
548
+ <span class="ruby-keyword">end</span>
549
+ <span class="ruby-keyword">end</span>
550
+ <span class="ruby-keyword">true</span>
551
+ <span class="ruby-keyword">end</span></pre>
552
+ </div>
553
+
554
+ </div>
555
+
556
+
557
+
558
+
559
+ </div>
560
+
561
+
562
+ </section>
563
+
564
+ </section>
565
+
566
+ </main>
567
+
568
+
569
+ <footer id="validator-badges" role="contentinfo">
570
+ <p><a href="https://validator.w3.org/check/referer">Validate</a>
571
+ <p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.2.1.
572
+ <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
573
+ </footer>
574
+