standup_md 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ruby.yml +24 -0
  3. data/.gitignore +1 -0
  4. data/Gemfile +10 -0
  5. data/Gemfile.lock +23 -0
  6. data/LICENSE +21 -0
  7. data/README.md +252 -0
  8. data/Rakefile +36 -0
  9. data/_config.yml +1 -0
  10. data/bin/standup +5 -0
  11. data/doc/README_md.html +290 -0
  12. data/doc/StandupMD/Cli.html +898 -0
  13. data/doc/StandupMD.html +1453 -0
  14. data/doc/TestHelper.html +282 -0
  15. data/doc/TestStandupMD.html +1938 -0
  16. data/doc/created.rid +8 -0
  17. data/doc/css/fonts.css +167 -0
  18. data/doc/css/rdoc.css +611 -0
  19. data/doc/fonts/Lato-Light.ttf +0 -0
  20. data/doc/fonts/Lato-LightItalic.ttf +0 -0
  21. data/doc/fonts/Lato-Regular.ttf +0 -0
  22. data/doc/fonts/Lato-RegularItalic.ttf +0 -0
  23. data/doc/fonts/SourceCodePro-Bold.ttf +0 -0
  24. data/doc/fonts/SourceCodePro-Regular.ttf +0 -0
  25. data/doc/images/add.png +0 -0
  26. data/doc/images/arrow_up.png +0 -0
  27. data/doc/images/brick.png +0 -0
  28. data/doc/images/brick_link.png +0 -0
  29. data/doc/images/bug.png +0 -0
  30. data/doc/images/bullet_black.png +0 -0
  31. data/doc/images/bullet_toggle_minus.png +0 -0
  32. data/doc/images/bullet_toggle_plus.png +0 -0
  33. data/doc/images/date.png +0 -0
  34. data/doc/images/delete.png +0 -0
  35. data/doc/images/find.png +0 -0
  36. data/doc/images/loadingAnimation.gif +0 -0
  37. data/doc/images/macFFBgHack.png +0 -0
  38. data/doc/images/package.png +0 -0
  39. data/doc/images/page_green.png +0 -0
  40. data/doc/images/page_white_text.png +0 -0
  41. data/doc/images/page_white_width.png +0 -0
  42. data/doc/images/plugin.png +0 -0
  43. data/doc/images/ruby.png +0 -0
  44. data/doc/images/tag_blue.png +0 -0
  45. data/doc/images/tag_green.png +0 -0
  46. data/doc/images/transparent.png +0 -0
  47. data/doc/images/wrench.png +0 -0
  48. data/doc/images/wrench_orange.png +0 -0
  49. data/doc/images/zoom.png +0 -0
  50. data/doc/index.html +286 -0
  51. data/doc/js/darkfish.js +84 -0
  52. data/doc/js/navigation.js +105 -0
  53. data/doc/js/navigation.js.gz +0 -0
  54. data/doc/js/search.js +110 -0
  55. data/doc/js/search_index.js +1 -0
  56. data/doc/js/search_index.js.gz +0 -0
  57. data/doc/js/searcher.js +229 -0
  58. data/doc/js/searcher.js.gz +0 -0
  59. data/doc/table_of_contents.html +551 -0
  60. data/lib/standup_md/cli.rb +301 -0
  61. data/lib/standup_md/version.rb +9 -0
  62. data/lib/standup_md.rb +530 -0
  63. data/standup_md.gemspec +36 -0
  64. metadata +108 -0
data/doc/index.html ADDED
@@ -0,0 +1,286 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta charset="UTF-8">
6
+
7
+ <title>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="file">
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
+
42
+ <div id="search-section" role="search" class="project-section initially-hidden">
43
+ <form action="#" method="get" accept-charset="utf-8">
44
+ <div id="search-field-wrapper">
45
+ <input id="search-field" role="combobox" aria-label="Search"
46
+ aria-autocomplete="list" aria-controls="search-results"
47
+ type="text" name="search" placeholder="Search" spellcheck="false"
48
+ title="Type to search, Up and Down to navigate, Enter to load">
49
+ </div>
50
+
51
+ <ul id="search-results" aria-label="Search Results"
52
+ aria-busy="false" aria-expanded="false"
53
+ aria-atomic="false" class="initially-hidden"></ul>
54
+ </form>
55
+ </div>
56
+
57
+ </div>
58
+
59
+ <div id="project-metadata">
60
+ <div id="fileindex-section" class="nav-section">
61
+ <h3>Pages</h3>
62
+
63
+ <ul class="link-list">
64
+
65
+ <li><a href="./README_md.html">README</a>
66
+
67
+ </ul>
68
+ </div>
69
+
70
+ <div id="classindex-section" class="nav-section">
71
+ <h3>Class and Module Index</h3>
72
+
73
+ <ul class="link-list">
74
+
75
+ <li><a href="./StandupMD.html">StandupMD</a>
76
+
77
+ <li><a href="./StandupMD/CLI.html">StandupMD::CLI</a>
78
+
79
+ <li><a href="./TestHelper.html">TestHelper</a>
80
+
81
+ <li><a href="./TestStandupMD.html">TestStandupMD</a>
82
+
83
+ </ul>
84
+ </div>
85
+
86
+ </div>
87
+ </nav>
88
+
89
+ <main role="main">
90
+
91
+
92
+ <h1 id="label-The+Standup+Doctor"><a href="https://evanthegrayt.github.io/standup_md/">The Standup Doctor</a><span><a href="#label-The+Standup+Doctor">&para;</a> <a href="#top">&uarr;</a></span></h1>
93
+
94
+ <blockquote>
95
+ <p>The cure for all your standup woes.</p>
96
+ </blockquote>
97
+
98
+ <p>A highly customizable and automated way to keep track of daily standups in markdown files.</p>
99
+
100
+ <h2 id="label-Table+of+Contents">Table of Contents<span><a href="#label-Table+of+Contents">&para;</a> <a href="#top">&uarr;</a></span></h2>
101
+ <ul><li>
102
+ <p><a href="#about">About</a></p>
103
+ </li><li>
104
+ <p><a href="#Installation">Installation</a></p>
105
+ </li><li>
106
+ <p><a href="#via-rubygems">Via RubyGems</a></p>
107
+ </li><li>
108
+ <p><a href="#manual-installation">Manual Installation</a></p>
109
+ </li><li>
110
+ <p><a href="#usage">Usage</a></p>
111
+ </li><li>
112
+ <p><a href="#example">Example</a></p>
113
+ </li><li>
114
+ <p><a href="#customization-and-runtime-options">Customization and Runtime Options</a></p>
115
+ </li><li>
116
+ <p><a href="#api">API</a></p>
117
+ </li><li>
118
+ <p><a href="https://evanthegrayt.github.io/standup_md/doc/index.html">Documentation</a></p>
119
+ </li><li>
120
+ <p><a href="#reporting-bugs-and-requesting-features">Reporting Bugs and Requesting Features</a></p>
121
+ </li><li>
122
+ <p><a href="#self-promotion">Self-Promotion</a></p>
123
+ </li></ul>
124
+
125
+ <h2 id="label-About">About<span><a href="#label-About">&para;</a> <a href="#top">&uarr;</a></span></h2>
126
+
127
+ <p>I&#39;ve now been at two separate companies where we post our daily standups in a chat client, such as Slack, Mattermost, or Riot. Typing out my standup every day became tedious, as I&#39;d have to look up what I did the day before, copy and paste yesterday&#39;s work into a new entry, and add today&#39;s tasks. This gem automates most of this process, along with providing means of opening the file in your editor, and displaying entries from the command line.</p>
128
+
129
+ <p>I wasn&#39;t sure that others would find this useful, but then the pandemic happened, which I assume made doing standups via chat much more common.</p>
130
+
131
+ <p>In a nutshell, calling <code>standup</code> from the command line will open a standup file for the current month in your preferred editor. If an entry for today is already present, no text will be generated. If an entry for today doesn&#39;t exist, one will be generated, and if a previous entry exists, it will be added to today&#39;s entry as what your previous day&#39;s work. See <a href="#example">example</a>. There&#39;s also an API if you&#39;d like to use this in your own code somehow.</p>
132
+
133
+ <p>This is a new project, and I have a lot of <a href="https://github.com/evanthegrayt/standup_md/issues">updates planned</a>, but I won&#39;t push to <code>master</code> unless all <a href="https://github.com/evanthegrayt/standup_md/blob/master/test/standup_md_test.rb">tests</a> are passing and the gem is working as expected. The first official release will be once <a href="https://github.com/evanthegrayt/standup_md/milestone/1">this milestone</a> is complete. Until then, consider this gem to be in alpha, and the version will remain <code>&lt; 0.1.0</code>.</p>
134
+
135
+ <h2 id="label-Installation">Installation<span><a href="#label-Installation">&para;</a> <a href="#top">&uarr;</a></span></h2>
136
+
137
+ <h3 id="label-Via+RubyGems">Via RubyGems<span><a href="#label-Via+RubyGems">&para;</a> <a href="#top">&uarr;</a></span></h3>
138
+
139
+ <p><em>COMING SOON. For now, please use the <a href="#manual-installation">manual installation instructions</a>. The gem will be officially released once <a href="https://github.com/evanthegrayt/standup_md/milestone/1">this milestone</a> is completed</em>.</p>
140
+ <!-- Just install the gem! --><!-- ```sh --><!-- gem install standup_md --><!-- ``` --><!-- If you don't have permission on your system to install ruby or gems, I recommend --><!-- using [rvm](https://rvm.io/) or --><!-- [rbenv](http://www.rubyinside.com/rbenv-a-simple-new-ruby-version-management-tool-5302.html), --><!-- or you can try to use a manual method below. -->
141
+ <h3 id="label-Manual+Installation">Manual Installation<span><a href="#label-Manual+Installation">&para;</a> <a href="#top">&uarr;</a></span></h3>
142
+
143
+ <p>From your terminal, clone the repository where you want it. From there, you have a couple of installation options.</p>
144
+
145
+ <pre>git clone https://github.com/evanthegrayt/standup_md.git
146
+ cd standup_md
147
+
148
+ # Use rake to build and install the gem.
149
+ rake install
150
+
151
+ # OR manually link the executable somewhere. If you use this method, you cannot
152
+ # move the repository after you link it!
153
+ ln -s $PWD/bin/standup /usr/local/bin</pre>
154
+
155
+ <h2 id="label-Usage">Usage<span><a href="#label-Usage">&para;</a> <a href="#top">&uarr;</a></span></h2>
156
+
157
+ <p>Call the executable.</p>
158
+
159
+ <pre class="ruby"><span class="ruby-identifier">standup</span>
160
+ </pre>
161
+
162
+ <p>This opens the current month&#39;s standup file. If an entry already exists for today, nothing is added. If no entry exists for today, the previous “Current” is placed in the “Previous” section of a new entry. The format of this file is very important; do not change anything, except for adding entries for today.</p>
163
+
164
+ <h3 id="label-Example">Example<span><a href="#label-Example">&para;</a> <a href="#top">&uarr;</a></span></h3>
165
+
166
+ <p>For example, if the standup entry from yesterday reads as follows:</p>
167
+
168
+ <pre># 2020-04-13
169
+ ## Previous
170
+ - Did something else.
171
+ ## Current
172
+ - Write new feature for `standup_md`
173
+ - Fix bug in `standup_md`
174
+ ## Impediments
175
+ - None</pre>
176
+
177
+ <p>The following scaffolding will be added for current entry at the top of the file: <code>markdown # 2020-04-14 ## Previous - Write new feature for `standup_md` - Fix bug in `standup_md` ## Current - &lt;!-- ADD TODAY&#39;S WORK HERE --&gt; ## Impediments - None </code></p>
178
+
179
+ <p>There are also flags that will print entries to the command line. There&#39;s a full list of features below, but as a quick example, you can copy today&#39;s entry to your clipboard without even opening your editor.</p>
180
+
181
+ <pre class="ruby"><span class="ruby-identifier">standup</span> <span class="ruby-operator">-</span><span class="ruby-identifier">c</span> <span class="ruby-operator">|</span> <span class="ruby-identifier">pbcopy</span>
182
+ </pre>
183
+
184
+ <h2 id="label-Customization+and+Runtime+Options">Customization and Runtime Options<span><a href="#label-Customization+and+Runtime+Options">&para;</a> <a href="#top">&uarr;</a></span></h2>
185
+
186
+ <p>You can create a file in your home directory called <code>~/.standup_md.yml</code>. Settings located in this file will override default behavior. This file can also have settings overwritten at runtime by the use of options. You can view <a href="https://github.com/evanthegrayt/dotfiles/blob/master/dotfiles/standup_md.yml">my config file</a> as an example. Any setting in this file can still be overridden at runtime by passing flags to the executable.</p>
187
+
188
+ <p>You&#39;ll notice, a lot of settings don&#39;t have the ability to be changed at runtime when calling the executable. This is because the file structure is very important, and changing values that affect formatting will cause problems with the file parser. If you don&#39;t want to use a default, make the change in your config file before you start editing standups. There is an <a href="https://github.com/evanthegrayt/standup_md/issues/16">open issue</a> for handling this for the user, but they&#39;re not available yet.</p>
189
+
190
+ <p>There are no options to change the headers at runtime because it uses the headers to detect tasks from previous entries. If changed at runtime, this would cause errors. For this reason, if you don&#39;t like the default headers, change them in your configuration file after installation, and then try to not change them again.</p>
191
+
192
+ <h3 id="label-Available+Config+File+Keys+and+Defaults">Available Config File Keys and Defaults<span><a href="#label-Available+Config+File+Keys+and+Defaults">&para;</a> <a href="#top">&uarr;</a></span></h3>
193
+
194
+ <pre># Key: Default
195
+ header_depth: 1
196
+ header_date_format: &#39;%Y-%m-%d&#39;
197
+ sub_header_depth: 2
198
+ current_header: &#39;Current&#39;
199
+ previous_header: &#39;Previous&#39;
200
+ impediments_header: &#39;Impediments&#39;
201
+ file_name_format: &#39;%Y_%m.md&#39;
202
+ bullet_character: &#39;-&#39; # (dash)
203
+ directory: &#39;~/.cache/standup_md&#39;
204
+ editor: # $VISUAL, $EDITOR or vim, in that order
205
+ current_entry_tasks:
206
+ - &quot;&lt;!-- ADD TODAY&#39;S WORK HERE --&gt;&quot;
207
+ previous_entry_tasks: # An array of the tasks from the previous entry
208
+ impediments:
209
+ - &#39;None&#39;
210
+ notes: null # If not null, must be array
211
+ sub_header_order:
212
+ - &#39;previous&#39;
213
+ - &#39;current&#39;
214
+ - &#39;impediments&#39;
215
+ - &#39;notes&#39;</pre>
216
+
217
+ <h3 id="label-Executable+Flags">Executable Flags<span><a href="#label-Executable+Flags">&para;</a> <a href="#top">&uarr;</a></span></h3>
218
+
219
+ <pre>The Standup Doctor
220
+ --current-entry-tasks=ARRAY List of current entry&#39;s tasks
221
+ --previous-entry-tasks=ARRAY List of yesterday&#39;s tasks
222
+ --impediments=ARRAY List of impediments for current entry
223
+ --notes=ARRAY List of notes for current entry
224
+ --sub-header-order=ARRAY The order of the sub-headers when writing the file
225
+ --[no-]append-previous Append previous tasks? Default is true
226
+ -f, --file-name-format=STRING Date-formattable string to use for standup file name
227
+ -e, --editor=EDITOR Editor to use for opening standup files
228
+ -d, --directory=DIRECTORY The directories where standup files are located
229
+ --[no-]write Write current entry if it doesn&#39;t exist. Default is true
230
+ --[no-]edit Open the file in the editor. Default is true
231
+ -j, --[no-]json Print output as formatted json. Default is false.
232
+ -v, --[no-]verbose Verbose output. Default is false.
233
+ -c, --current Print current entry. Disables editing
234
+ -a, --all Print all previous entries. Disables editing</pre>
235
+
236
+ <p>Any options not set in this file will retain their default values. Note that if you change <code>file_name_format</code>, and don&#39;t use a month or year, there will only ever be one standup file. This could cause issues long-term, as the files will get large over time and possibly cause performance issues.</p>
237
+
238
+ <p>If you wanted to add some tasks at runtime, and without opening the file in an editor, you could use the following:</p>
239
+
240
+ <pre>standup --no-edit --current-entry-tasks=&quot;Work on this thing&quot;,&quot;And another thing!&quot;</pre>
241
+
242
+ <h2 id="label-API">API<span><a href="#label-API">&para;</a> <a href="#top">&uarr;</a></span></h2>
243
+
244
+ <p>Below are some quick examples, but the API is fully documented in the <a href="https://evanthegrayt.github.io/standup_md/doc/index.html">documentation</a>.</p>
245
+
246
+ <p>This was mainly written as a command line utility, but I made the API available for scripting. There are attribute accessors for most of the settings in the <a href="#customization-and-runtime-options">customization table</a> above. To view all available methods, read the comments in the <a href="lib/standup_md.rb">source</a>. A quick-and-dirty example of how to write a new entry via code could look like the following:</p>
247
+
248
+ <pre class="ruby"><span class="ruby-identifier">require</span> <span class="ruby-string">&#39;standup_md&#39;</span>
249
+
250
+ <span class="ruby-identifier">standup</span> = <span class="ruby-constant">StandupMD</span>.<span class="ruby-identifier">load</span>(
251
+ <span class="ruby-value">current_header:</span> <span class="ruby-string">&#39;Today&#39;</span>,
252
+ <span class="ruby-value">current_entry_tasks:</span> [<span class="ruby-string">&#39;Thing to do today&#39;</span>, <span class="ruby-string">&#39;Another thing to do today&#39;</span>],
253
+ <span class="ruby-value">impediments:</span> [<span class="ruby-string">&#39;Not enough time in the day&#39;</span>]
254
+ )
255
+
256
+ <span class="ruby-identifier">standup</span>.<span class="ruby-identifier">write</span>
257
+ </pre>
258
+
259
+ <p>Entries are just hashes, so you can easily transform them to <code>json</code> objects.</p>
260
+
261
+ <pre class="ruby"><span class="ruby-identifier">require</span> <span class="ruby-string">&#39;standup_md&#39;</span>
262
+ <span class="ruby-identifier">require</span> <span class="ruby-string">&#39;json&#39;</span>
263
+
264
+ <span class="ruby-identifier">standup</span> = <span class="ruby-constant">StandupMD</span>.<span class="ruby-identifier">load</span>
265
+ <span class="ruby-identifier">standup_entries_as_json</span> = <span class="ruby-identifier">standup</span>.<span class="ruby-identifier">all_entries</span>.<span class="ruby-identifier">to_json</span>
266
+ </pre>
267
+
268
+ <h2 id="label-Reporting+Bugs+and+Requesting+Features">Reporting Bugs and Requesting Features<span><a href="#label-Reporting+Bugs+and+Requesting+Features">&para;</a> <a href="#top">&uarr;</a></span></h2>
269
+
270
+ <p>If you have an idea or find a bug, please <a href="https://github.com/evanthegrayt/standup_md/issues/new">create an issue</a>. Just make sure the topic doesn&#39;t already exist. Better yet, you can always submit a Pull Request.</p>
271
+
272
+ <h2 id="label-Self-Promotion">Self-Promotion<span><a href="#label-Self-Promotion">&para;</a> <a href="#top">&uarr;</a></span></h2>
273
+
274
+ <p>I do these projects for fun, and I enjoy knowing that they&#39;re helpful to people. Consider starring <a href="https://github.com/evanthegrayt/standup_md">the repository</a> if you like it! If you love it, follow me <a href="https://github.com/evanthegrayt">on Github</a>!</p>
275
+
276
+
277
+ </main>
278
+
279
+
280
+
281
+ <footer id="validator-badges" role="contentinfo">
282
+ <p><a href="https://validator.w3.org/check/referer">Validate</a>
283
+ <p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.1.2.
284
+ <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
285
+ </footer>
286
+
@@ -0,0 +1,84 @@
1
+ /**
2
+ *
3
+ * Darkfish Page Functions
4
+ * $Id: darkfish.js 53 2009-01-07 02:52:03Z deveiant $
5
+ *
6
+ * Author: Michael Granger <mgranger@laika.com>
7
+ *
8
+ */
9
+
10
+ /* Provide console simulation for firebug-less environments */
11
+ /*
12
+ if (!("console" in window) || !("firebug" in console)) {
13
+ var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
14
+ "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
15
+
16
+ window.console = {};
17
+ for (var i = 0; i < names.length; ++i)
18
+ window.console[names[i]] = function() {};
19
+ };
20
+ */
21
+
22
+
23
+ function showSource( e ) {
24
+ var target = e.target;
25
+ while (!target.classList.contains('method-detail')) {
26
+ target = target.parentNode;
27
+ }
28
+ if (typeof target !== "undefined" && target !== null) {
29
+ target = target.querySelector('.method-source-code');
30
+ }
31
+ if (typeof target !== "undefined" && target !== null) {
32
+ target.classList.toggle('active-menu')
33
+ }
34
+ };
35
+
36
+ function hookSourceViews() {
37
+ document.querySelectorAll('.method-heading').forEach(function (codeObject) {
38
+ codeObject.addEventListener('click', showSource);
39
+ });
40
+ };
41
+
42
+ function hookSearch() {
43
+ var input = document.querySelector('#search-field');
44
+ var result = document.querySelector('#search-results');
45
+ result.classList.remove("initially-hidden");
46
+
47
+ var search_section = document.querySelector('#search-section');
48
+ search_section.classList.remove("initially-hidden");
49
+
50
+ var search = new Search(search_data, input, result);
51
+
52
+ search.renderItem = function(result) {
53
+ var li = document.createElement('li');
54
+ var html = '';
55
+
56
+ // TODO add relative path to <script> per-page
57
+ html += '<p class="search-match"><a href="' + index_rel_prefix + result.path + '">' + this.hlt(result.title);
58
+ if (result.params)
59
+ html += '<span class="params">' + result.params + '</span>';
60
+ html += '</a>';
61
+
62
+
63
+ if (result.namespace)
64
+ html += '<p class="search-namespace">' + this.hlt(result.namespace);
65
+
66
+ if (result.snippet)
67
+ html += '<div class="search-snippet">' + result.snippet + '</div>';
68
+
69
+ li.innerHTML = html;
70
+
71
+ return li;
72
+ }
73
+
74
+ search.select = function(result) {
75
+ window.location.href = result.firstChild.firstChild.href;
76
+ }
77
+
78
+ search.scrollIntoView = search.scrollInWindow;
79
+ };
80
+
81
+ document.addEventListener('DOMContentLoaded', function() {
82
+ hookSourceViews();
83
+ hookSearch();
84
+ });
@@ -0,0 +1,105 @@
1
+ /*
2
+ * Navigation allows movement using the arrow keys through the search results.
3
+ *
4
+ * When using this library you will need to set scrollIntoView to the
5
+ * appropriate function for your layout. Use scrollInWindow if the container
6
+ * is not scrollable and scrollInElement if the container is a separate
7
+ * scrolling region.
8
+ */
9
+ Navigation = new function() {
10
+ this.initNavigation = function() {
11
+ var _this = this;
12
+
13
+ document.addEventListener('keydown', function(e) {
14
+ _this.onkeydown(e);
15
+ });
16
+
17
+ this.navigationActive = true;
18
+ }
19
+
20
+ this.setNavigationActive = function(state) {
21
+ this.navigationActive = state;
22
+ }
23
+
24
+ this.onkeydown = function(e) {
25
+ if (!this.navigationActive) return;
26
+ switch(e.keyCode) {
27
+ case 37: //Event.KEY_LEFT:
28
+ if (this.moveLeft()) e.preventDefault();
29
+ break;
30
+ case 38: //Event.KEY_UP:
31
+ if (e.keyCode == 38 || e.ctrlKey) {
32
+ if (this.moveUp()) e.preventDefault();
33
+ }
34
+ break;
35
+ case 39: //Event.KEY_RIGHT:
36
+ if (this.moveRight()) e.preventDefault();
37
+ break;
38
+ case 40: //Event.KEY_DOWN:
39
+ if (e.keyCode == 40 || e.ctrlKey) {
40
+ if (this.moveDown()) e.preventDefault();
41
+ }
42
+ break;
43
+ case 13: //Event.KEY_RETURN:
44
+ if (this.current) e.preventDefault();
45
+ this.select(this.current);
46
+ break;
47
+ }
48
+ if (e.ctrlKey && e.shiftKey) this.select(this.current);
49
+ }
50
+
51
+ this.moveRight = function() {
52
+ }
53
+
54
+ this.moveLeft = function() {
55
+ }
56
+
57
+ this.move = function(isDown) {
58
+ }
59
+
60
+ this.moveUp = function() {
61
+ return this.move(false);
62
+ }
63
+
64
+ this.moveDown = function() {
65
+ return this.move(true);
66
+ }
67
+
68
+ /*
69
+ * Scrolls to the given element in the scrollable element view.
70
+ */
71
+ this.scrollInElement = function(element, view) {
72
+ var offset, viewHeight, viewScroll, height;
73
+ offset = element.offsetTop;
74
+ height = element.offsetHeight;
75
+ viewHeight = view.offsetHeight;
76
+ viewScroll = view.scrollTop;
77
+
78
+ if (offset - viewScroll + height > viewHeight) {
79
+ view.scrollTop = offset - viewHeight + height;
80
+ }
81
+ if (offset < viewScroll) {
82
+ view.scrollTop = offset;
83
+ }
84
+ }
85
+
86
+ /*
87
+ * Scrolls to the given element in the window. The second argument is
88
+ * ignored
89
+ */
90
+ this.scrollInWindow = function(element, ignored) {
91
+ var offset, viewHeight, viewScroll, height;
92
+ offset = element.offsetTop;
93
+ height = element.offsetHeight;
94
+ viewHeight = window.innerHeight;
95
+ viewScroll = window.scrollY;
96
+
97
+ if (offset - viewScroll + height > viewHeight) {
98
+ window.scrollTo(window.scrollX, offset - viewHeight + height);
99
+ }
100
+ if (offset < viewScroll) {
101
+ window.scrollTo(window.scrollX, offset);
102
+ }
103
+ }
104
+ }
105
+
Binary file
data/doc/js/search.js ADDED
@@ -0,0 +1,110 @@
1
+ Search = function(data, input, result) {
2
+ this.data = data;
3
+ this.input = input;
4
+ this.result = result;
5
+
6
+ this.current = null;
7
+ this.view = this.result.parentNode;
8
+ this.searcher = new Searcher(data.index);
9
+ this.init();
10
+ }
11
+
12
+ Search.prototype = Object.assign({}, Navigation, new function() {
13
+ var suid = 1;
14
+
15
+ this.init = function() {
16
+ var _this = this;
17
+ var observer = function(e) {
18
+ switch(e.keyCode) {
19
+ case 38: // Event.KEY_UP
20
+ case 40: // Event.KEY_DOWN
21
+ return;
22
+ }
23
+ _this.search(_this.input.value);
24
+ };
25
+ this.input.addEventListener('keyup', observer);
26
+ this.input.addEventListener('click', observer); // mac's clear field
27
+
28
+ this.searcher.ready(function(results, isLast) {
29
+ _this.addResults(results, isLast);
30
+ })
31
+
32
+ this.initNavigation();
33
+ this.setNavigationActive(false);
34
+ }
35
+
36
+ this.search = function(value, selectFirstMatch) {
37
+ value = value.trim().toLowerCase();
38
+ if (value) {
39
+ this.setNavigationActive(true);
40
+ } else {
41
+ this.setNavigationActive(false);
42
+ }
43
+
44
+ if (value == '') {
45
+ this.lastQuery = value;
46
+ this.result.innerHTML = '';
47
+ this.result.setAttribute('aria-expanded', 'false');
48
+ this.setNavigationActive(false);
49
+ } else if (value != this.lastQuery) {
50
+ this.lastQuery = value;
51
+ this.result.setAttribute('aria-busy', 'true');
52
+ this.result.setAttribute('aria-expanded', 'true');
53
+ this.firstRun = true;
54
+ this.searcher.find(value);
55
+ }
56
+ }
57
+
58
+ this.addResults = function(results, isLast) {
59
+ var target = this.result;
60
+ if (this.firstRun && (results.length > 0 || isLast)) {
61
+ this.current = null;
62
+ this.result.innerHTML = '';
63
+ }
64
+
65
+ for (var i=0, l = results.length; i < l; i++) {
66
+ var item = this.renderItem.call(this, results[i]);
67
+ item.setAttribute('id', 'search-result-' + target.childElementCount);
68
+ target.appendChild(item);
69
+ };
70
+
71
+ if (this.firstRun && results.length > 0) {
72
+ this.firstRun = false;
73
+ this.current = target.firstChild;
74
+ this.current.classList.add('search-selected');
75
+ }
76
+ //TODO: ECMAScript
77
+ //if (jQuery.browser.msie) this.$element[0].className += '';
78
+
79
+ if (isLast) this.result.setAttribute('aria-busy', 'false');
80
+ }
81
+
82
+ this.move = function(isDown) {
83
+ if (!this.current) return;
84
+ var next = isDown ? this.current.nextElementSibling : this.current.previousElementSibling;
85
+ if (next) {
86
+ this.current.classList.remove('search-selected');
87
+ next.classList.add('search-selected');
88
+ this.input.setAttribute('aria-activedescendant', next.getAttribute('id'));
89
+ this.scrollIntoView(next, this.view);
90
+ this.current = next;
91
+ this.input.value = next.firstChild.firstChild.text;
92
+ this.input.select();
93
+ }
94
+ return true;
95
+ }
96
+
97
+ this.hlt = function(html) {
98
+ return this.escapeHTML(html).
99
+ replace(/\u0001/g, '<em>').
100
+ replace(/\u0002/g, '</em>');
101
+ }
102
+
103
+ this.escapeHTML = function(html) {
104
+ return html.replace(/[&<>]/g, function(c) {
105
+ return '&#' + c.charCodeAt(0) + ';';
106
+ });
107
+ }
108
+
109
+ });
110
+
@@ -0,0 +1 @@
1
+ var search_data = {"index":{"searchIndex":["standupmd","cli","testhelper","teststandupmd","append_previous?()","append_to_previous_entry_tasks()","bullet_character=()","cli()","create_standup_file()","current_entry_tasks=()","directory=()","echo()","edit()","edit?()","editor()","entry_previously_added?()","execute()","file_written?()","fixtures()","header_depth=()","impediments=()","json?()","load()","load()","new()","new()","notes=()","previous_entry_tasks=()","print_all_entries()","print_all_entries?()","print_current_entry()","print_current_entry?()","reload()","setup()","should_append?()","should_append?()","standup()","standup()","sub_header_depth=()","sub_header_order()","sub_header_order=()","teardown()","test_preference_file()","test_version()","test_all_previous_entries()","test_append_previous?()","test_bullet_character()","test_class_load()","test_current_entry()","test_current_entry_tasks()","test_current_header()","test_directory()","test_edit?()","test_editor()","test_entry_previously_added?()","test_file()","test_file_name_format()","test_file_written?()","test_header_date_format()","test_header_depth()","test_impediments()","test_impediments_header()","test_initialize()","test_json?()","test_load()","test_notes()","test_notes_header()","test_options()","test_preferences()","test_previous_entry_tasks()","test_previous_file_when_current_and_previous_month_do_not_exist()","test_previous_file_when_current_month_file_does_not_exist_but_previous_does()","test_previous_file_when_entry_exists_for_today()","test_previous_header()","test_print_all_entries?()","test_print_current_empty?()","test_reload()","test_self_execute()","test_setting_attributes_via_block()","test_standup()","test_sub_header_depth()","test_sub_header_order()","test_verbose?()","test_write()","test_write?()","verbose?()","write()","write?()","write_file()","readme"],"longSearchIndex":["standupmd","standupmd::cli","testhelper","teststandupmd","standupmd::cli#append_previous?()","standupmd::cli#append_to_previous_entry_tasks()","standupmd#bullet_character=()","testhelper#cli()","testhelper#create_standup_file()","standupmd#current_entry_tasks=()","standupmd#directory=()","standupmd::cli#echo()","standupmd::cli#edit()","standupmd::cli#edit?()","standupmd::cli#editor()","standupmd#entry_previously_added?()","standupmd::cli::execute()","standupmd#file_written?()","testhelper#fixtures()","standupmd#header_depth=()","standupmd#impediments=()","standupmd::cli#json?()","standupmd::load()","standupmd#load()","standupmd::new()","standupmd::cli::new()","standupmd#notes=()","standupmd#previous_entry_tasks=()","standupmd::cli#print_all_entries()","standupmd::cli#print_all_entries?()","standupmd::cli#print_current_entry()","standupmd::cli#print_current_entry?()","standupmd#reload()","teststandupmd#setup()","standupmd::cli#should_append?()","teststandupmd#should_append?()","standupmd::cli#standup()","testhelper#standup()","standupmd#sub_header_depth=()","standupmd#sub_header_order()","standupmd#sub_header_order=()","teststandupmd#teardown()","teststandupmd#test_preference_file()","teststandupmd#test_version()","teststandupmd#test_all_previous_entries()","teststandupmd#test_append_previous?()","teststandupmd#test_bullet_character()","teststandupmd#test_class_load()","teststandupmd#test_current_entry()","teststandupmd#test_current_entry_tasks()","teststandupmd#test_current_header()","teststandupmd#test_directory()","teststandupmd#test_edit?()","teststandupmd#test_editor()","teststandupmd#test_entry_previously_added?()","teststandupmd#test_file()","teststandupmd#test_file_name_format()","teststandupmd#test_file_written?()","teststandupmd#test_header_date_format()","teststandupmd#test_header_depth()","teststandupmd#test_impediments()","teststandupmd#test_impediments_header()","teststandupmd#test_initialize()","teststandupmd#test_json?()","teststandupmd#test_load()","teststandupmd#test_notes()","teststandupmd#test_notes_header()","teststandupmd#test_options()","teststandupmd#test_preferences()","teststandupmd#test_previous_entry_tasks()","teststandupmd#test_previous_file_when_current_and_previous_month_do_not_exist()","teststandupmd#test_previous_file_when_current_month_file_does_not_exist_but_previous_does()","teststandupmd#test_previous_file_when_entry_exists_for_today()","teststandupmd#test_previous_header()","teststandupmd#test_print_all_entries?()","teststandupmd#test_print_current_empty?()","teststandupmd#test_reload()","teststandupmd#test_self_execute()","teststandupmd#test_setting_attributes_via_block()","teststandupmd#test_standup()","teststandupmd#test_sub_header_depth()","teststandupmd#test_sub_header_order()","teststandupmd#test_verbose?()","teststandupmd#test_write()","teststandupmd#test_write?()","standupmd::cli#verbose?()","standupmd#write()","standupmd::cli#write?()","standupmd::cli#write_file()",""],"info":[["StandupMD","","StandupMD.html","","<p>The class for handing reading/writing of entries.\n<p>@example\n\n<pre class=\"ruby\"><span class=\"ruby-identifier\">su</span> = <span class=\"ruby-constant\">StandupMD</span>.<span class=\"ruby-identifier\">new</span>\n</pre>\n"],["StandupMD::CLI","","StandupMD/CLI.html","","<p>Class for handing the command-line interface.\n"],["TestHelper","","TestHelper.html","","<p>Module to include in tests that provides helper functions.\n"],["TestStandupMD","","TestStandupMD.html","","<p>The test suite for <code>CLI</code>.\n<p>The test suite for <code>StandupMD</code>.\n"],["append_previous?","StandupMD::CLI","StandupMD/CLI.html#method-i-append_previous-3F","()","<p>Should `previous_entry_tasks` be appended? If false, <code>previous_entry_tasks</code> will be overwritten.\n<p>@return …\n"],["append_to_previous_entry_tasks","StandupMD::CLI","StandupMD/CLI.html#method-i-append_to_previous_entry_tasks","()","<p>Appends entries passed at runtime to existing previous entries.\n<p>@return [Hash]\n"],["bullet_character=","StandupMD","StandupMD.html#method-i-bullet_character-3D","(character)","<p>Setter for bullet_character. Must be * (asterisk) or - (dash).\n<p>@param [String] character\n<p>@return [String] …\n"],["cli","TestHelper","TestHelper.html#method-i-cli","(options = [])","<p>Creates instance of <code>CLI</code>.\n<p>@param [Array] options Parsed by <code>getopts</code>\n<p>@return [StandupMD::CLI]\n"],["create_standup_file","TestHelper","TestHelper.html#method-i-create_standup_file","(file, fixture = 'previous_entry')","<p>Creates the standup file with entries.\n<p>@param [String] file The name of the file to create\n<p>@param [String] …\n"],["current_entry_tasks=","StandupMD","StandupMD.html#method-i-current_entry_tasks-3D","(tasks)","<p>Setter for current entry tasks.\n<p>@param [Array] tasks\n<p>@return [Array]\n"],["directory=","StandupMD","StandupMD.html#method-i-directory-3D","(directory)","<p>Setter for directory. Must be expanded in case the user uses `~` for home. If the directory doesn&#39;t …\n"],["echo","StandupMD::CLI","StandupMD/CLI.html#method-i-echo","(msg)","<p>Prints output if <code>verbose</code> is true.\n<p>@return [nil]\n"],["edit","StandupMD::CLI","StandupMD/CLI.html#method-i-edit","()","<p>Opens the file in an editor. Abandons the script.\n"],["edit?","StandupMD::CLI","StandupMD/CLI.html#method-i-edit-3F","()","<p>Should the standup file be opened in the editor?\n<p>@return [Boolean] Default is true\n"],["editor","StandupMD::CLI","StandupMD/CLI.html#method-i-editor","()","<p>Tries to determine the editor, first by checking if the user has one set in their preferences. If not, …\n"],["entry_previously_added?","StandupMD","StandupMD.html#method-i-entry_previously_added-3F","()","<p>Was today&#39;s entry already in the file?\n<p>@return [boolean] true if today&#39;s entry was already in …\n"],["execute","StandupMD::CLI","StandupMD/CLI.html#method-c-execute","(options = [])","<p>Creates an instance of <code>StandupMD</code> and runs what the user requested.\n"],["file_written?","StandupMD","StandupMD.html#method-i-file_written-3F","()","<p>Has the file been written since instantiated?\n<p>@return [boolean]\n<p>@example\n"],["fixtures","TestHelper","TestHelper.html#method-i-fixtures","()","<p>Reads the fixtures in as a hash.\n<p>@return [Hash]\n"],["header_depth=","StandupMD","StandupMD.html#method-i-header_depth-3D","(depth)","<p>Number of octothorps (#) to use before the main header.\n<p>@param [Integer] depth\n<p>@return [Integer]\n"],["impediments=","StandupMD","StandupMD.html#method-i-impediments-3D","(tasks)","<p>Setter for impediments.\n<p>@param [Array] tasks\n<p>@return [Array]\n"],["json?","StandupMD::CLI","StandupMD/CLI.html#method-i-json-3F","()","<p>If printing an entry, should it be printed as json?\n<p>@return [Boolean] Default is false\n"],["load","StandupMD","StandupMD.html#method-c-load","(attributes = {})","<p>Convenience method for calling <code>new</code> + <code>load</code>\n<p>@param [Hash] attributes Attributes to set before loading.\n<p>@example …\n"],["load","StandupMD","StandupMD.html#method-i-load","()","<p>Sets internal instance variables. Called when first instantiated, or after directory is set.\n<p>@return [self] …\n"],["new","StandupMD","StandupMD.html#method-c-new","()","<p>Constructor. Yields the instance so you can pass a block to access setters.\n<p>@return [self]\n<p>@example\n"],["new","StandupMD::CLI","StandupMD/CLI.html#method-c-new","(options)","<p>Constructor. Sets defaults.\n<p>@param [Array] options\n"],["notes=","StandupMD","StandupMD.html#method-i-notes-3D","(tasks)","<p>Setter for notes.\n<p>@param [Array] notes\n<p>@return [Array]\n"],["previous_entry_tasks=","StandupMD","StandupMD.html#method-i-previous_entry_tasks-3D","(tasks)","<p>Setter for current entry tasks.\n<p>@param [Array] tasks\n<p>@return [Array]\n"],["print_all_entries","StandupMD::CLI","StandupMD/CLI.html#method-i-print_all_entries","()","<p>Prints all entries to the command line.\n<p>@return [nil]\n"],["print_all_entries?","StandupMD::CLI","StandupMD/CLI.html#method-i-print_all_entries-3F","()","<p>Should all entries be printed? If true, disables editing.\n<p>@return [Boolean] Default is false\n"],["print_current_entry","StandupMD::CLI","StandupMD/CLI.html#method-i-print_current_entry","()","<p>Prints the current entry to the command line.\n<p>@return [nil]\n"],["print_current_entry?","StandupMD::CLI","StandupMD/CLI.html#method-i-print_current_entry-3F","()","<p>Should current entry be printed? If true, disables editing.\n<p>@return [Boolean] Default is false\n"],["reload","StandupMD","StandupMD.html#method-i-reload","()","<p>Alias of <code>load</code>\n<p>@return [self]\n"],["setup","TestStandupMD","TestStandupMD.html#method-i-setup","()","<p>Set working directory, current month&#39;s file, and last month&#39;s file, which will be created and …\n"],["should_append?","StandupMD::CLI","StandupMD/CLI.html#method-i-should_append-3F","()","<p>Did the user pass <code>previous_entry_tasks</code>, and should we append?\n<p>@return [Boolean]\n"],["should_append?","TestStandupMD","TestStandupMD.html#method-i-should_append-3F","()","<p>True only if <code>--no-append</code> and <code>--previous-entry-tasks</code> are passed.\n"],["standup","StandupMD::CLI","StandupMD/CLI.html#method-i-standup","()","<p>Sets up an instance of <code>StandupMD</code> and passes all user preferences.\n<p>@return [StandupMD]\n"],["standup","TestHelper","TestHelper.html#method-i-standup","(directory, args = {})","<p>Creates <code>StandupUP</code> instance. Directory must be passed, usually a subdirectory of <code>test</code>, so we don&#39;t …\n"],["sub_header_depth=","StandupMD","StandupMD.html#method-i-sub_header_depth-3D","(depth)","<p>Number of octothorps (#) to use before sub headers (Current, Previous, etc).\n<p>@param [Integer] depth\n<p>@return …\n"],["sub_header_order","StandupMD","StandupMD.html#method-i-sub_header_order","()","<p>Return a copy of the sub-header order so the user can&#39;t modify the array.\n<p>@return [Array]\n"],["sub_header_order=","StandupMD","StandupMD.html#method-i-sub_header_order-3D","(array)","<p>Preferred order for sub-headers.\n<p>@param [Array] Values must be %w[previous current impediment notes]\n<p>@return …\n"],["teardown","TestStandupMD","TestStandupMD.html#method-i-teardown","()","<p>Destroy the working directory and its contents.\n"],["test_PREFERENCE_FILE","TestStandupMD","TestStandupMD.html#method-i-test_PREFERENCE_FILE","()","<p>The user&#39;s preference file is a string.\n"],["test_VERSION","TestStandupMD","TestStandupMD.html#method-i-test_VERSION","()","<p><code>StandupMD::VERSION</code> should consist of three integers separated by dots.\n"],["test_all_previous_entries","TestStandupMD","TestStandupMD.html#method-i-test_all_previous_entries","()","<p>Should be all entries before the current entry.\n"],["test_append_previous?","TestStandupMD","TestStandupMD.html#method-i-test_append_previous-3F","()","<p>True by default. False if flag is passed.\n"],["test_bullet_character","TestStandupMD","TestStandupMD.html#method-i-test_bullet_character","()","<p>Should be able to change the bullet character but should raise if not * or -\n"],["test_class_load","TestStandupMD","TestStandupMD.html#method-i-test_class_load","()","<p>Make sure load accepts a hash of attributes, sets them, and returns an instance of itself.\n"],["test_current_entry","TestStandupMD","TestStandupMD.html#method-i-test_current_entry","()","<p><code>current_entry</code> should be a hash. If <code>file</code> already has an entry for today, it will be read and used as …\n"],["test_current_entry_tasks","TestStandupMD","TestStandupMD.html#method-i-test_current_entry_tasks","()","<p>Should be able to add tasks for current_entry.\n"],["test_current_header","TestStandupMD","TestStandupMD.html#method-i-test_current_header","()","<p>Should be changeable and used as the header for <code>current_entry</code>\n"],["test_directory","TestStandupMD","TestStandupMD.html#method-i-test_directory","()","<p>Directory should default be settable, and where standup files are read from.\n"],["test_edit?","TestStandupMD","TestStandupMD.html#method-i-test_edit-3F","()","<p>True by default. False if flag is passed.\n"],["test_editor","TestStandupMD","TestStandupMD.html#method-i-test_editor","()","<p>The editor should be set by preferences, or env, or set to &#39;vim&#39;.\n"],["test_entry_previously_added?","TestStandupMD","TestStandupMD.html#method-i-test_entry_previously_added-3F","()","<p>Should be true if <code>current_entry</code> was in the file at the time it was read.\n"],["test_file","TestStandupMD","TestStandupMD.html#method-i-test_file","()","<p>The file name should equal file_name_format parsed by Date.strftime. The default is Date.today.strftime(&#39;%Y_%m.md&#39;) …\n"],["test_file_name_format","TestStandupMD","TestStandupMD.html#method-i-test_file_name_format","()","<p>Should be changeable, and return a string parsed by <code>strftime</code>.\n"],["test_file_written?","TestStandupMD","TestStandupMD.html#method-i-test_file_written-3F","()","<p>Should be false when first instantiated, true after <code>write</code> is called.\n"],["test_header_date_format","TestStandupMD","TestStandupMD.html#method-i-test_header_date_format","()","<p>Should be changeable, and return a string parsed by <code>strftime</code>.\n"],["test_header_depth","TestStandupMD","TestStandupMD.html#method-i-test_header_depth","()","<p>Should be an integer between <code>1..5</code>, but not higher than <code>sub_header_depth</code>.\n"],["test_impediments","TestStandupMD","TestStandupMD.html#method-i-test_impediments","()","<p>Should be able to add impediments to the array.\n"],["test_impediments_header","TestStandupMD","TestStandupMD.html#method-i-test_impediments_header","()","<p>Should be changeable and used as the header for <code>impediments</code>\n"],["test_initialize","TestStandupMD","TestStandupMD.html#method-i-test_initialize","()","<p>The <code>initialize</code> method should accept the same parameters as <code>exectute</code>.\n"],["test_json?","TestStandupMD","TestStandupMD.html#method-i-test_json-3F","()","<p>False by default. True if flag is passed.\n"],["test_load","TestStandupMD","TestStandupMD.html#method-i-test_load","()","<p>Should load instance variables.\n"],["test_notes","TestStandupMD","TestStandupMD.html#method-i-test_notes","()","<p>Should be able to add notes to the array.\n"],["test_notes_header","TestStandupMD","TestStandupMD.html#method-i-test_notes_header","()","<p>Should be changeable and used as the header for <code>notes</code>\n"],["test_options","TestStandupMD","TestStandupMD.html#method-i-test_options","()","<p>The <code>options</code> should be an array of options passed from the command line.\n"],["test_preferences","TestStandupMD","TestStandupMD.html#method-i-test_preferences","()","<p>The <code>preferences</code> are the settings after <code>options</code> are parsed.\n"],["test_previous_entry_tasks","TestStandupMD","TestStandupMD.html#method-i-test_previous_entry_tasks","()","<p>Should be an array of previous entry&#39;s current entry.\n"],["test_previous_file_when_current_and_previous_month_do_not_exist","TestStandupMD","TestStandupMD.html#method-i-test_previous_file_when_current_and_previous_month_do_not_exist","()","<p>When neither last month&#39;s file, nor this month&#39;s file exist, previous_file should be an empty …\n"],["test_previous_file_when_current_month_file_does_not_exist_but_previous_does","TestStandupMD","TestStandupMD.html#method-i-test_previous_file_when_current_month_file_does_not_exist_but_previous_does","()","<p>When last month&#39;s file exists, but this month&#39;s doesn&#39;t or is empty, previous_file should …\n"],["test_previous_file_when_entry_exists_for_today","TestStandupMD","TestStandupMD.html#method-i-test_previous_file_when_entry_exists_for_today","()","<p>If there are previous entries for this month, previous file will be this month&#39;s file.\n"],["test_previous_header","TestStandupMD","TestStandupMD.html#method-i-test_previous_header","()","<p>Should be changeable and used as the header for <code>previous_entry</code>\n"],["test_print_all_entries?","TestStandupMD","TestStandupMD.html#method-i-test_print_all_entries-3F","()","<p>False by default. True if flag is passed.\n"],["test_print_current_empty?","TestStandupMD","TestStandupMD.html#method-i-test_print_current_empty-3F","()","<p>False by default. True if flag is passed.\n"],["test_reload","TestStandupMD","TestStandupMD.html#method-i-test_reload","()","<p>The reload method should exist, and is an alias of <code>load</code>.\n"],["test_self_execute","TestStandupMD","TestStandupMD.html#method-i-test_self_execute","()","<p>The <code>execute</code> method is the entry point for the CLI. It&#39;s parameter is an array of command-line flags …\n"],["test_setting_attributes_via_block","TestStandupMD","TestStandupMD.html#method-i-test_setting_attributes_via_block","()","<p>Attributes should be able to be set if you pass a block at instantiation.\n"],["test_standup","TestStandupMD","TestStandupMD.html#method-i-test_standup","()","<p>Creates the instance of <code>StandupMD</code>.\n"],["test_sub_header_depth","TestStandupMD","TestStandupMD.html#method-i-test_sub_header_depth","()","<p>Should be an integer between <code>2..6</code>, but not lower than <code>header_depth</code>.\n"],["test_sub_header_order","TestStandupMD","TestStandupMD.html#method-i-test_sub_header_order","()","<p>The order of the subheaders is changeable, but all elements must exist.\n"],["test_verbose?","TestStandupMD","TestStandupMD.html#method-i-test_verbose-3F","()","<p>False by default. True if flag is passed.\n"],["test_write","TestStandupMD","TestStandupMD.html#method-i-test_write","()","<p>Should write the file.\n"],["test_write?","TestStandupMD","TestStandupMD.html#method-i-test_write-3F","()","<p>True by default. False if flag is passed.\n"],["verbose?","StandupMD::CLI","StandupMD/CLI.html#method-i-verbose-3F","()","<p>Should debug info be printed?\n<p>@return [Boolean] Default is false\n"],["write","StandupMD","StandupMD.html#method-i-write","()","<p>Writes a new entry to the file if the first entry in the file isn&#39;t today.\n<p>@return [Boolean]\n"],["write?","StandupMD::CLI","StandupMD/CLI.html#method-i-write-3F","()","<p>Should the file be written?\n<p>@return [Boolean] Default is true\n"],["write_file","StandupMD::CLI","StandupMD/CLI.html#method-i-write_file","()","<p>Writes entries to the file.\n<p>@return [Boolean] true if file was written\n"],["README","","README_md.html","","<p>The Standup Doctor\n\n<blockquote><p>The cure for all your standup woes.\n</blockquote>\n<p>A highly customizable and automated way to keep …\n"]]}}
Binary file