hobix 0.6

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.
Files changed (156) hide show
  1. data/COPYING +18 -0
  2. data/README +18 -0
  3. data/Rakefile +96 -0
  4. data/bin/hobix +94 -0
  5. data/contrib/blosxom-to-hobix.rb +253 -0
  6. data/contrib/txp-to-hobix.rb +56 -0
  7. data/contrib/webrick-all-mine.rb +20 -0
  8. data/doc/CHANGELOG +285 -0
  9. data/doc/rdoc/classes/Hobix/API.html +382 -0
  10. data/doc/rdoc/classes/Hobix/Article.html +111 -0
  11. data/doc/rdoc/classes/Hobix/BaseContent.html +692 -0
  12. data/doc/rdoc/classes/Hobix/BaseEntry.html +218 -0
  13. data/doc/rdoc/classes/Hobix/BaseFacet.html +205 -0
  14. data/doc/rdoc/classes/Hobix/BaseOutput.html +122 -0
  15. data/doc/rdoc/classes/Hobix/BasePlugin.html +201 -0
  16. data/doc/rdoc/classes/Hobix/BaseProperties/ClassMethods.html +243 -0
  17. data/doc/rdoc/classes/Hobix/BaseProperties.html +218 -0
  18. data/doc/rdoc/classes/Hobix/BasePublish.html +157 -0
  19. data/doc/rdoc/classes/Hobix/BaseStorage.html +417 -0
  20. data/doc/rdoc/classes/Hobix/BixWik/Entry.html +196 -0
  21. data/doc/rdoc/classes/Hobix/BixWik/IndexEntry.html +170 -0
  22. data/doc/rdoc/classes/Hobix/BixWik/WikiRedCloth.html +111 -0
  23. data/doc/rdoc/classes/Hobix/BixWik.html +418 -0
  24. data/doc/rdoc/classes/Hobix/BixWikPlugin.html +158 -0
  25. data/doc/rdoc/classes/Hobix/CommandLine.html +1970 -0
  26. data/doc/rdoc/classes/Hobix/Comment.html +113 -0
  27. data/doc/rdoc/classes/Hobix/Config.html +212 -0
  28. data/doc/rdoc/classes/Hobix/DataMarsh.html +667 -0
  29. data/doc/rdoc/classes/Hobix/Entry.html +178 -0
  30. data/doc/rdoc/classes/Hobix/EntryEnum.html +162 -0
  31. data/doc/rdoc/classes/Hobix/Enumerable.html +170 -0
  32. data/doc/rdoc/classes/Hobix/Facets/WikiEdit.html +180 -0
  33. data/doc/rdoc/classes/Hobix/Facets.html +111 -0
  34. data/doc/rdoc/classes/Hobix/LinkList.html +182 -0
  35. data/doc/rdoc/classes/Hobix/Out/Quick.html +412 -0
  36. data/doc/rdoc/classes/Hobix/Out.html +119 -0
  37. data/doc/rdoc/classes/Hobix/Page.html +381 -0
  38. data/doc/rdoc/classes/Hobix/Trackback.html +113 -0
  39. data/doc/rdoc/classes/Hobix/UriStr.html +198 -0
  40. data/doc/rdoc/classes/Hobix/WebApp/QueryString.html +207 -0
  41. data/doc/rdoc/classes/Hobix/WebApp/QueryValidationFailure.html +111 -0
  42. data/doc/rdoc/classes/Hobix/WebApp.html +1383 -0
  43. data/doc/rdoc/classes/Hobix/Weblog/AuthorNotFound.html +111 -0
  44. data/doc/rdoc/classes/Hobix/Weblog.html +2082 -0
  45. data/doc/rdoc/classes/Hobix.html +399 -0
  46. data/doc/rdoc/classes/Kernel.html +139 -0
  47. data/doc/rdoc/classes/Regexp.html +154 -0
  48. data/doc/rdoc/classes/YAML/Omap.html +144 -0
  49. data/doc/rdoc/classes/YAML.html +111 -0
  50. data/doc/rdoc/created.rid +1 -0
  51. data/doc/rdoc/files/COPYING.html +129 -0
  52. data/doc/rdoc/files/README.html +131 -0
  53. data/doc/rdoc/files/doc/CHANGELOG.html +101 -0
  54. data/doc/rdoc/files/lib/hobix/api_rb.html +119 -0
  55. data/doc/rdoc/files/lib/hobix/article_rb.html +126 -0
  56. data/doc/rdoc/files/lib/hobix/base_rb.html +128 -0
  57. data/doc/rdoc/files/lib/hobix/bixwik_rb.html +126 -0
  58. data/doc/rdoc/files/lib/hobix/commandline_rb.html +140 -0
  59. data/doc/rdoc/files/lib/hobix/comments_rb.html +126 -0
  60. data/doc/rdoc/files/lib/hobix/config_rb.html +125 -0
  61. data/doc/rdoc/files/lib/hobix/datamarsh_rb.html +108 -0
  62. data/doc/rdoc/files/lib/hobix/entry_rb.html +118 -0
  63. data/doc/rdoc/files/lib/hobix/linklist_rb.html +127 -0
  64. data/doc/rdoc/files/lib/hobix/publisher_rb.html +126 -0
  65. data/doc/rdoc/files/lib/hobix/trackbacks_rb.html +128 -0
  66. data/doc/rdoc/files/lib/hobix/webapp_rb.html +127 -0
  67. data/doc/rdoc/files/lib/hobix/weblog_rb.html +135 -0
  68. data/doc/rdoc/files/lib/hobix_rb.html +127 -0
  69. data/doc/rdoc/fr_class_index.html +67 -0
  70. data/doc/rdoc/fr_file_index.html +44 -0
  71. data/doc/rdoc/fr_method_index.html +307 -0
  72. data/doc/rdoc/index.html +24 -0
  73. data/doc/rdoc/rdoc-style.css +208 -0
  74. data/git_hobix_update.php +13 -0
  75. data/lib/hobix/api.rb +91 -0
  76. data/lib/hobix/article.rb +22 -0
  77. data/lib/hobix/base.rb +480 -0
  78. data/lib/hobix/bixwik.rb +200 -0
  79. data/lib/hobix/commandline.rb +677 -0
  80. data/lib/hobix/comments.rb +98 -0
  81. data/lib/hobix/config.rb +39 -0
  82. data/lib/hobix/datamarsh.rb +110 -0
  83. data/lib/hobix/entry.rb +84 -0
  84. data/lib/hobix/facets/comments.rb +99 -0
  85. data/lib/hobix/facets/publisher.rb +314 -0
  86. data/lib/hobix/facets/trackbacks.rb +80 -0
  87. data/lib/hobix/linklist.rb +81 -0
  88. data/lib/hobix/out/atom.rb +101 -0
  89. data/lib/hobix/out/erb.rb +64 -0
  90. data/lib/hobix/out/okaynews.rb +55 -0
  91. data/lib/hobix/out/quick.rb +314 -0
  92. data/lib/hobix/out/rdf.rb +97 -0
  93. data/lib/hobix/out/redrum.rb +26 -0
  94. data/lib/hobix/out/rss.rb +128 -0
  95. data/lib/hobix/plugin/akismet.rb +196 -0
  96. data/lib/hobix/plugin/bloglines.rb +73 -0
  97. data/lib/hobix/plugin/calendar.rb +212 -0
  98. data/lib/hobix/plugin/flickr.rb +110 -0
  99. data/lib/hobix/plugin/recent_comments.rb +84 -0
  100. data/lib/hobix/plugin/sections.rb +91 -0
  101. data/lib/hobix/plugin/tags.rb +60 -0
  102. data/lib/hobix/publish/ping.rb +53 -0
  103. data/lib/hobix/publish/replicate.rb +283 -0
  104. data/lib/hobix/publisher.rb +18 -0
  105. data/lib/hobix/search/dictionary.rb +141 -0
  106. data/lib/hobix/search/porter_stemmer.rb +203 -0
  107. data/lib/hobix/search/simple.rb +209 -0
  108. data/lib/hobix/search/vector.rb +100 -0
  109. data/lib/hobix/storage/filesys.rb +408 -0
  110. data/lib/hobix/trackbacks.rb +93 -0
  111. data/lib/hobix/util/objedit.rb +193 -0
  112. data/lib/hobix/util/patcher.rb +155 -0
  113. data/lib/hobix/webapp/cli.rb +195 -0
  114. data/lib/hobix/webapp/htmlform.rb +107 -0
  115. data/lib/hobix/webapp/message.rb +177 -0
  116. data/lib/hobix/webapp/urigen.rb +141 -0
  117. data/lib/hobix/webapp/webrick-servlet.rb +90 -0
  118. data/lib/hobix/webapp.rb +723 -0
  119. data/lib/hobix/weblog.rb +893 -0
  120. data/lib/hobix.rb +230 -0
  121. data/share/default-blog/hobix.yaml +16 -0
  122. data/share/default-blog/htdocs/site.css +174 -0
  123. data/share/default-blog/skel/entry.html.quick +0 -0
  124. data/share/default-blog/skel/index.atom.atom +0 -0
  125. data/share/default-blog/skel/index.html.quick-summary +0 -0
  126. data/share/default-blog/skel/index.xml.rss +0 -0
  127. data/share/default-blog/skel/index.yaml.okaynews +0 -0
  128. data/share/default-blog/skel/monthly.html.quick-archive +0 -0
  129. data/share/default-blog/skel/section.html.quick-archive +0 -0
  130. data/share/default-blog/skel/yearly.html.quick-archive +0 -0
  131. data/share/default-blog-modes.yaml +7 -0
  132. data/share/default-blog.apache-cgi.patch +8 -0
  133. data/share/default-blog.apache-ssi.patch +38 -0
  134. data/share/default-blog.apache2-ssi.patch +3 -0
  135. data/share/default-blog.cgi.patch +8 -0
  136. data/share/default-blog.comments.patch +5 -0
  137. data/share/default-blog.prototype.patch +766 -0
  138. data/share/default-blog.publisher.patch +5 -0
  139. data/share/default-blog.wiki.patch +29 -0
  140. data/share/publisher/css/control.css +90 -0
  141. data/share/publisher/css/form.css +238 -0
  142. data/share/publisher/css/form.import.css +72 -0
  143. data/share/publisher/css/main-menu.css +134 -0
  144. data/share/publisher/i/hobix-emblazen-1.png +0 -0
  145. data/share/publisher/i/hobix-emblazen-2.png +0 -0
  146. data/share/publisher/i/hobix-emblazen-3.png +0 -0
  147. data/share/publisher/i/hobix-emblazen-4.png +0 -0
  148. data/share/publisher/i/hobix-emblazen-5.png +0 -0
  149. data/share/publisher/i/hobix-emblazen-6.png +0 -0
  150. data/share/publisher/i/hobix-emblazen-7.png +0 -0
  151. data/share/publisher/index.erb +66 -0
  152. data/share/publisher/js/controls.js +261 -0
  153. data/share/publisher/js/dragdrop.js +476 -0
  154. data/share/publisher/js/effects.js +570 -0
  155. data/share/publisher/js/prototype.js +1011 -0
  156. metadata +230 -0
@@ -0,0 +1,2082 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Class: Hobix::Weblog</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td><strong>Class</strong></td>
53
+ <td class="class-name-in-header">Hobix::Weblog</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../../files/lib/hobix/base_rb.html">
59
+ lib/hobix/base.rb
60
+ </a>
61
+ <br />
62
+ <a href="../../files/lib/hobix/weblog_rb.html">
63
+ lib/hobix/weblog.rb
64
+ </a>
65
+ <br />
66
+ </td>
67
+ </tr>
68
+
69
+ <tr class="top-aligned-row">
70
+ <td><strong>Parent:</strong></td>
71
+ <td>
72
+ Object
73
+ </td>
74
+ </tr>
75
+ </table>
76
+ </div>
77
+ <!-- banner header -->
78
+
79
+ <div id="bodyContent">
80
+
81
+
82
+
83
+ <div id="contextContent">
84
+
85
+ <div id="description">
86
+ <p>
87
+ The <a href="Weblog.html">Weblog</a> class is the core of <a
88
+ href="../Hobix.html">Hobix</a> scripting. Although often you use it&#8216;s
89
+ <tt><a href="Weblog.html#M000232">storage</a></tt> accessor to get to
90
+ entries, the <a href="Weblog.html">Weblog</a> class itself contains weblog
91
+ configuration information and methods for managing the weblog.
92
+ </p>
93
+ <h2>Properties</h2>
94
+ <p>
95
+ The following accessors are available for retrieving configuration data,
96
+ all of which is stored in hobix.yaml.
97
+ </p>
98
+ <table>
99
+ <tr><td valign="top">title:</td><td>The title of the weblog.
100
+
101
+ </td></tr>
102
+ <tr><td valign="top"><a href="Weblog.html#M000225">link</a>:</td><td>The absolute url to the weblog. (When accessed through the class &#8212;
103
+ weblog.link &#8212; this is returned as a URI.)
104
+
105
+ </td></tr>
106
+ <tr><td valign="top">authors:</td><td>A hash, in which keys are author&#8216;s abbreviated names, paired with
107
+ hashes of `name&#8217;, `url&#8217; and `email&#8217; information.
108
+
109
+ </td></tr>
110
+ <tr><td valign="top">contributors:</td><td>Same structure as the authors hash. For storing information on third-party
111
+ contributors.
112
+
113
+ </td></tr>
114
+ <tr><td valign="top">tagline:</td><td>The short catchphrase associated with the weblog.
115
+
116
+ </td></tr>
117
+ <tr><td valign="top">copyright:</td><td>Brief copyright information.
118
+
119
+ </td></tr>
120
+ <tr><td valign="top">period:</td><td>How often is the weblog updated? Frequency in seconds.
121
+
122
+ </td></tr>
123
+ <tr><td valign="top">path:</td><td>Complete system path to the directory containing hobix.yaml.
124
+
125
+ </td></tr>
126
+ <tr><td valign="top"><a href="Weblog.html#M000249">sections</a>:</td><td>Specially tagged directories which act as independent subsites or hidden
127
+ categories.
128
+
129
+ </td></tr>
130
+ <tr><td valign="top">requires:</td><td>A list of required libraries, paired with possible configuration data for a
131
+ library.
132
+
133
+ </td></tr>
134
+ <tr><td valign="top"><a href="Weblog.html#M000217">entry_path</a>:</td><td>Path to entry <a href="Weblog.html#M000232">storage</a>.
135
+
136
+ </td></tr>
137
+ <tr><td valign="top"><a href="Weblog.html#M000218">skel_path</a>:</td><td>Path to template&#8216;s directory.
138
+
139
+ </td></tr>
140
+ <tr><td valign="top"><a href="Weblog.html#M000219">output_path</a>:</td><td>Path to output directory.
141
+
142
+ </td></tr>
143
+ <tr><td valign="top"><a href="Weblog.html#M000220">lib_path</a>:</td><td>Path to extension library directory.
144
+
145
+ </td></tr>
146
+ <tr><td valign="top">git:</td><td>If true, regenerations will commit to git and push the site to the blahg
147
+ remote.
148
+
149
+ </td></tr>
150
+ </table>
151
+ <h2>Regeneration</h2>
152
+ <p>
153
+ One of the primary uses of the <a href="Weblog.html">Weblog</a> class is to
154
+ coordinate regenerations of the site. More about regeneration can be found
155
+ in the documentation for the <tt><a
156
+ href="Weblog.html#M000240">regenerate</a></tt> method.
157
+ </p>
158
+ <h2>Skel Methods</h2>
159
+ <p>
160
+ The <a href="Weblog.html">Weblog</a> class also contains handlers for
161
+ template prefixes. (Templates are usually contained in `skel&#8217;).
162
+ </p>
163
+ <p>
164
+ Each `prefix&#8217; has its accompanying skel_prefix method. So, for
165
+ `index&#8217; templates (such as index.html.erb), the <a
166
+ href="Weblog.html#M000243">skel_index</a> method is executed and passed a
167
+ block which is supplied a hash by the skel method.
168
+ </p>
169
+ <p>
170
+ Usually this hash only needs to contain :page and :entries (or :entry)
171
+ items. Any other items will simply be added to the vars hash.
172
+ </p>
173
+ <p>
174
+ To give you a general idea, <a href="Weblog.html#M000243">skel_index</a>
175
+ looks something like this:
176
+ </p>
177
+ <pre>
178
+ def skel_index( path_storage, section_path )
179
+ index_entries = path_storage.lastn( @lastn )
180
+ page = Page.new( 'index', section_path )
181
+ page.prev = index_entries.last.created.strftime( &quot;%Y/%m/index&quot; )
182
+ page.timestamp = index_entries.first.created
183
+ page.updated = path_storage.last_updated( index_entries )
184
+ yield :page =&gt; page, :entries =&gt; index_entries
185
+ end
186
+ </pre>
187
+ <p>
188
+ The page object is instantiated, describing where output will go. The
189
+ entries list, describing which entries qualify for this prefix, is queried
190
+ from <a href="Weblog.html#M000232">storage</a>. We then yield back to the
191
+ regeneration system with our hash.
192
+ </p>
193
+ <p>
194
+ Creating your own template prefixes is simply a matter of adding a new skel
195
+ method for that prefix to the <a href="Weblog.html">Weblog</a> class.
196
+ </p>
197
+ <h1>Examples</h1>
198
+ <h2>Example 1: Viewing Configuration</h2>
199
+ <p>
200
+ Since configuration is stored in <a href="../YAML.html">YAML</a>, you can
201
+ generate the hobix.yaml configuration file by simply running
202
+ <tt>to_yaml</tt> on a weblog.
203
+ </p>
204
+ <pre>
205
+ require 'hobix/weblog'
206
+ weblog = Hobix::Weblog.load( '/my/blahhg/hobix.yaml' )
207
+ puts weblog.to_yaml
208
+ #=&gt; --- # prints YAML configuration
209
+ </pre>
210
+ <h2>Example 2: Adding a Template Prefix</h2>
211
+ <p>
212
+ On Hobix.com, only news entries are shown on the front page. The site also
213
+ has `about&#8217; and `learn&#8217; entry paths for storing the faqs and
214
+ tutorials. Although I didn&#8216;t want to display the complete text of
215
+ these items, I did want a sidebar to contain links to them.
216
+ </p>
217
+ <p>
218
+ So I added a `sidebar&#8217; prefix, which loads from these entry paths. I
219
+ have a sidebar.html.erb, which is included using Apache SSIs. The advantage
220
+ to this approach is that when an update occurs in either of these paths,
221
+ the sidebar will be updated in the next regeneration. Rather than having to
222
+ <a href="Weblog.html#M000240">regenerate</a> every page in the site to see
223
+ the change reflected.
224
+ </p>
225
+ <p>
226
+ I added a `lib/hobix.com.rb&#8217; to the site&#8216;s `lib&#8217;
227
+ directory. And in hobix.yaml, I included a line requiring this file. The
228
+ file simply contains the new skel method.
229
+ </p>
230
+ <pre>
231
+ module Hobix
232
+ class Weblog
233
+ def skel_sidebar( path_storage, section_path )
234
+ ## Load `about' and `learn' entries
235
+ abouts = path_storage.find( :all =&gt; true, :inpath =&gt; 'about' ).reverse
236
+ learns = path_storage.find( :all =&gt; true, :inpath =&gt; 'learn' ).reverse
237
+
238
+ ## Create page data
239
+ page = Page.new( 'sidebar', section_path )
240
+ page.updated = path_storage.last_updated( abouts + learns )
241
+ yield :page =&gt; page,
242
+ :about_entries =&gt; abouts, :learn_entries =&gt; learns
243
+ end
244
+ end
245
+ end
246
+ </pre>
247
+ <p>
248
+ There is a lot going on here. I&#8216;ll try to explain the most vital
249
+ parts and leave the rest up to you.
250
+ </p>
251
+ <p>
252
+ First, <a href="Weblog.html#M000232">storage</a> queries don&#8216;t return
253
+ full <a href="Entry.html">Entry</a> objects. You can read more about this
254
+ in the +<a href="BaseStorage.html">Hobix::BaseStorage</a>+ class docs. The
255
+ <a href="Weblog.html#M000232">storage</a> query returns Arrays which
256
+ contain each entry&#8216;s id (a String) and the entry&#8216;s modification
257
+ time (a Time object).
258
+ </p>
259
+ <p>
260
+ See, the regeneration system will do the business of loading the full
261
+ entries. The skel method&#8216;s job is just to report which entries
262
+ <b>qualify</b> for a template. The regeneration system will only <a
263
+ href="Weblog.html#M000228">load</a> those entries if an update is needed.
264
+ </p>
265
+ <p>
266
+ We create a <a href="Page.html">Page</a> object, which dictates that the
267
+ output will be saved to /sidebar.ext. A modification time is discovered by
268
+ passing a combined list to +Hobix::BaseStorage#last_updated+. The
269
+ <tt>updated</tt> property is being set to the latest timestamp among the
270
+ about and learn entries.
271
+ </p>
272
+ <p>
273
+ PLEASE NOTE: The <tt>updated</tt> property is very important. The
274
+ regeneration system will use this timestamp to determine what pages need
275
+ updating. See +<a href="Weblog.html#M000240">Hobix::Weblog#regenerate</a>+
276
+ for more.
277
+ </p>
278
+ <p>
279
+ We then yield to the regeneration system. Note that any hash key which ends
280
+ with `entries&#8217; will have its contents loaded as full <a
281
+ href="Entry.html">Entry</a> objects, should the prefix qualify for
282
+ regeneration.
283
+ </p>
284
+ <h2>The page_storage variable</h2>
285
+ <p>
286
+ The <tt>page_storage</tt> variable passed into the method is a trimmed copy
287
+ of the +<a href="Weblog.html#M000232">Weblog#storage</a>+ variable. Whereas
288
+ +<a href="Weblog.html#M000232">Weblog#storage</a>+ gives you access to all
289
+ stored entries, <tt>page_storage</tt> only gives you access to entries
290
+ within a certain path.
291
+ </p>
292
+ <p>
293
+ So, if you have a template skel/index.html.quick, then this template will
294
+ be passed a <tt>path_storage</tt> variable which encompasses all entries.
295
+ However, for template skel/friends/eric/index.html.quick will be given a
296
+ <tt>path_storage</tt> which includes only entries in the
297
+ `friends/eric&#8217; path.
298
+ </p>
299
+ <p>
300
+ The simple rule is: if you want to have access to <a
301
+ href="Weblog.html#M000228">load</a> from the entire weblog <a
302
+ href="Weblog.html#M000232">storage</a>, use <tt><a
303
+ href="Weblog.html#M000232">storage</a></tt>. If you want your template to
304
+ honor its path, use <tt>path_storage</tt>. Both are +<a
305
+ href="BaseStorage.html">Hobix::BaseStorage</a>+ objects and respond to the
306
+ same methods.
307
+ </p>
308
+
309
+ </div>
310
+
311
+
312
+ </div>
313
+
314
+ <div id="method-list">
315
+ <h3 class="section-bar">Methods</h3>
316
+
317
+ <div class="name-list">
318
+ <a href="#M000207">add_entry_class</a>&nbsp;&nbsp;
319
+ <a href="#M000255">authorize</a>&nbsp;&nbsp;
320
+ <a href="#M000230">build_pages</a>&nbsp;&nbsp;
321
+ <a href="#M000222">central_ext</a>&nbsp;&nbsp;
322
+ <a href="#M000221">central_prefix</a>&nbsp;&nbsp;
323
+ <a href="#M000242">commit_to_git</a>&nbsp;&nbsp;
324
+ <a href="#M000214">default_central_ext</a>&nbsp;&nbsp;
325
+ <a href="#M000213">default_central_prefix</a>&nbsp;&nbsp;
326
+ <a href="#M000215">default_entry_class</a>&nbsp;&nbsp;
327
+ <a href="#M000209">default_entry_path</a>&nbsp;&nbsp;
328
+ <a href="#M000216">default_index_class</a>&nbsp;&nbsp;
329
+ <a href="#M000212">default_lib_path</a>&nbsp;&nbsp;
330
+ <a href="#M000211">default_output_path</a>&nbsp;&nbsp;
331
+ <a href="#M000210">default_skel_path</a>&nbsp;&nbsp;
332
+ <a href="#M000223">entry_class</a>&nbsp;&nbsp;
333
+ <a href="#M000217">entry_path</a>&nbsp;&nbsp;
334
+ <a href="#M000227">expand_path</a>&nbsp;&nbsp;
335
+ <a href="#M000236">facet_for</a>&nbsp;&nbsp;
336
+ <a href="#M000235">facets</a>&nbsp;&nbsp;
337
+ <a href="#M000224">index_class</a>&nbsp;&nbsp;
338
+ <a href="#M000253">join_path</a>&nbsp;&nbsp;
339
+ <a href="#M000220">lib_path</a>&nbsp;&nbsp;
340
+ <a href="#M000225">link</a>&nbsp;&nbsp;
341
+ <a href="#M000226">linklist</a>&nbsp;&nbsp;
342
+ <a href="#M000228">load</a>&nbsp;&nbsp;
343
+ <a href="#M000254">load_and_validate_entry</a>&nbsp;&nbsp;
344
+ <a href="#M000256">method_missing</a>&nbsp;&nbsp;
345
+ <a href="#M000239">output_entry_map</a>&nbsp;&nbsp;
346
+ <a href="#M000238">output_map</a>&nbsp;&nbsp;
347
+ <a href="#M000219">output_path</a>&nbsp;&nbsp;
348
+ <a href="#M000233">outputs</a>&nbsp;&nbsp;
349
+ <a href="#M000257">p_publish</a>&nbsp;&nbsp;
350
+ <a href="#M000234">publishers</a>&nbsp;&nbsp;
351
+ <a href="#M000240">regenerate</a>&nbsp;&nbsp;
352
+ <a href="#M000237">reset_output_map</a>&nbsp;&nbsp;
353
+ <a href="#M000241">retouch</a>&nbsp;&nbsp;
354
+ <a href="#M000229">save</a>&nbsp;&nbsp;
355
+ <a href="#M000249">sections</a>&nbsp;&nbsp;
356
+ <a href="#M000251">sections_ignored</a>&nbsp;&nbsp;
357
+ <a href="#M000250">sections_sorts</a>&nbsp;&nbsp;
358
+ <a href="#M000231">setup</a>&nbsp;&nbsp;
359
+ <a href="#M000244">skel_daily</a>&nbsp;&nbsp;
360
+ <a href="#M000247">skel_entry</a>&nbsp;&nbsp;
361
+ <a href="#M000243">skel_index</a>&nbsp;&nbsp;
362
+ <a href="#M000245">skel_monthly</a>&nbsp;&nbsp;
363
+ <a href="#M000218">skel_path</a>&nbsp;&nbsp;
364
+ <a href="#M000248">skel_section</a>&nbsp;&nbsp;
365
+ <a href="#M000252">skel_tags</a>&nbsp;&nbsp;
366
+ <a href="#M000246">skel_yearly</a>&nbsp;&nbsp;
367
+ <a href="#M000208">start</a>&nbsp;&nbsp;
368
+ <a href="#M000232">storage</a>&nbsp;&nbsp;
369
+ <a href="#M000258">to_yaml_type</a>&nbsp;&nbsp;
370
+ </div>
371
+ </div>
372
+
373
+ </div>
374
+
375
+
376
+ <!-- if includes -->
377
+ <div id="includes">
378
+ <h3 class="section-bar">Included Modules</h3>
379
+
380
+ <div id="includes-list">
381
+ <span class="include-name"><a href="BaseProperties.html">BaseProperties</a></span>
382
+ </div>
383
+ </div>
384
+
385
+ <div id="section">
386
+
387
+ <div id="class-list">
388
+ <h3 class="section-bar">Classes and Modules</h3>
389
+
390
+ Class <a href="Weblog/AuthorNotFound.html" class="link">Hobix::Weblog::AuthorNotFound</a><br />
391
+
392
+ </div>
393
+
394
+
395
+
396
+
397
+ <div id="attribute-list">
398
+ <h3 class="section-bar">Attributes</h3>
399
+
400
+ <div class="name-list">
401
+ <table>
402
+ <tr class="top-aligned-row context-row">
403
+ <td class="context-item-name">hobix_yaml</td>
404
+ <td class="context-item-value">&nbsp;[R]&nbsp;</td>
405
+ <td class="context-item-desc"></td>
406
+ </tr>
407
+ <tr class="top-aligned-row context-row">
408
+ <td class="context-item-name">path</td>
409
+ <td class="context-item-value">&nbsp;[RW]&nbsp;</td>
410
+ <td class="context-item-desc"></td>
411
+ </tr>
412
+ </table>
413
+ </div>
414
+ </div>
415
+
416
+
417
+
418
+ <!-- if method_list -->
419
+ <div id="methods">
420
+ <h3 class="section-bar">Public Class methods</h3>
421
+
422
+ <div id="method-M000207" class="method-detail">
423
+ <a name="M000207"></a>
424
+
425
+ <div class="method-heading">
426
+ <a href="#M000207" class="method-signature">
427
+ <span class="method-name">add_entry_class</span><span class="method-args">( c )</span>
428
+ </a>
429
+ </div>
430
+
431
+ <div class="method-description">
432
+ <p><a class="source-toggle" href="#"
433
+ onclick="toggleCode('M000207-source');return false;">[Source]</a></p>
434
+ <div class="method-source-code" id="M000207-source">
435
+ <pre>
436
+ <span class="ruby-comment cmt"># File lib/hobix/base.rb, line 295</span>
437
+ 295: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">add_entry_class</span>( <span class="ruby-identifier">c</span> )
438
+ 296: <span class="ruby-ivar">@@entry_classes</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
439
+ 297: <span class="ruby-keyword kw">end</span>
440
+ </pre>
441
+ </div>
442
+ </div>
443
+ </div>
444
+
445
+ <div id="method-M000228" class="method-detail">
446
+ <a name="M000228"></a>
447
+
448
+ <div class="method-heading">
449
+ <a href="#M000228" class="method-signature">
450
+ <span class="method-name">load</span><span class="method-args">( hobix_yaml )</span>
451
+ </a>
452
+ </div>
453
+
454
+ <div class="method-description">
455
+ <p>
456
+ Load the weblog information from a <a href="../YAML.html">YAML</a> file and
457
+ <tt><a href="Weblog.html#M000208">start</a></tt> the <a
458
+ href="Weblog.html">Weblog</a>.
459
+ </p>
460
+ <p><a class="source-toggle" href="#"
461
+ onclick="toggleCode('M000228-source');return false;">[Source]</a></p>
462
+ <div class="method-source-code" id="M000228-source">
463
+ <pre>
464
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 411</span>
465
+ 411: <span class="ruby-keyword kw">def</span> <span class="ruby-constant">Weblog</span><span class="ruby-operator">::</span><span class="ruby-identifier">load</span>( <span class="ruby-identifier">hobix_yaml</span> )
466
+ 412: <span class="ruby-identifier">hobix_yaml</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>( <span class="ruby-identifier">hobix_yaml</span> )
467
+ 413: <span class="ruby-identifier">weblog</span> = <span class="ruby-constant">YAML</span><span class="ruby-operator">::</span><span class="ruby-identifier">load</span>( <span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">open</span>( <span class="ruby-identifier">hobix_yaml</span> ) )
468
+ 414: <span class="ruby-identifier">weblog</span>.<span class="ruby-identifier">start</span>( <span class="ruby-identifier">hobix_yaml</span> )
469
+ 415: <span class="ruby-identifier">weblog</span>
470
+ 416: <span class="ruby-keyword kw">end</span>
471
+ </pre>
472
+ </div>
473
+ </div>
474
+ </div>
475
+
476
+ <h3 class="section-bar">Public Instance methods</h3>
477
+
478
+ <div id="method-M000255" class="method-detail">
479
+ <a name="M000255"></a>
480
+
481
+ <div class="method-heading">
482
+ <a href="#M000255" class="method-signature">
483
+ <span class="method-name">authorize</span><span class="method-args">( user, pass )</span>
484
+ </a>
485
+ </div>
486
+
487
+ <div class="method-description">
488
+ <p><a class="source-toggle" href="#"
489
+ onclick="toggleCode('M000255-source');return false;">[Source]</a></p>
490
+ <div class="method-source-code" id="M000255-source">
491
+ <pre>
492
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 853</span>
493
+ 853: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">authorize</span>( <span class="ruby-identifier">user</span>, <span class="ruby-identifier">pass</span> )
494
+ 854: <span class="ruby-identifier">require</span> <span class="ruby-value str">'digest/sha1'</span>
495
+ 855: <span class="ruby-identifier">authors</span>[<span class="ruby-identifier">user</span>][<span class="ruby-value str">'password'</span>] <span class="ruby-operator">==</span> <span class="ruby-constant">Digest</span><span class="ruby-operator">::</span><span class="ruby-constant">SHA1</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">pass</span> )
496
+ 856: <span class="ruby-keyword kw">end</span>
497
+ </pre>
498
+ </div>
499
+ </div>
500
+ </div>
501
+
502
+ <div id="method-M000230" class="method-detail">
503
+ <a name="M000230"></a>
504
+
505
+ <div class="method-heading">
506
+ <a href="#M000230" class="method-signature">
507
+ <span class="method-name">build_pages</span><span class="method-args">( page_name ) {|vars| ...}</span>
508
+ </a>
509
+ </div>
510
+
511
+ <div class="method-description">
512
+ <p>
513
+ Used by <tt><a href="Weblog.html#M000240">regenerate</a></tt> to construct
514
+ the vars hash by calling the appropriate skel method for each page.
515
+ </p>
516
+ <p><a class="source-toggle" href="#"
517
+ onclick="toggleCode('M000230-source');return false;">[Source]</a></p>
518
+ <div class="method-source-code" id="M000230-source">
519
+ <pre>
520
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 432</span>
521
+ 432: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">build_pages</span>( <span class="ruby-identifier">page_name</span> )
522
+ 433: <span class="ruby-identifier">vars</span> = {}
523
+ 434: <span class="ruby-identifier">paths</span> = <span class="ruby-identifier">page_name</span>.<span class="ruby-identifier">split</span>( <span class="ruby-value str">'/'</span> )
524
+ 435: <span class="ruby-identifier">loop</span> <span class="ruby-keyword kw">do</span>
525
+ 436: <span class="ruby-identifier">try_page</span> = <span class="ruby-identifier">paths</span>.<span class="ruby-identifier">join</span>( <span class="ruby-value str">'_'</span> ).<span class="ruby-identifier">gsub</span>(<span class="ruby-value str">'-'</span>,<span class="ruby-value str">'_'</span>)
526
+ 437: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">respond_to?</span> <span class="ruby-node">&quot;skel_#{ try_page }&quot;</span>
527
+ 438: <span class="ruby-identifier">section_path</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>( <span class="ruby-identifier">page_name</span> )
528
+ 439: <span class="ruby-identifier">path_storage</span> = <span class="ruby-identifier">storage</span>.<span class="ruby-identifier">path_storage</span>( <span class="ruby-identifier">section_path</span> )
529
+ 440: <span class="ruby-identifier">method</span>( <span class="ruby-node">&quot;skel_#{ try_page }&quot;</span> ).<span class="ruby-identifier">call</span>( <span class="ruby-identifier">path_storage</span>, <span class="ruby-identifier">section_path</span> ) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">vars</span><span class="ruby-operator">|</span>
530
+ 441: <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">:weblog</span>] = <span class="ruby-keyword kw">self</span>
531
+ 442: <span class="ruby-identifier">raise</span> <span class="ruby-constant">TypeError</span>, <span class="ruby-node">&quot;No `page' variable returned from skel_#{ try_page }.&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">:page</span>]
532
+ 443: <span class="ruby-keyword kw">yield</span> <span class="ruby-identifier">vars</span>
533
+ 444: <span class="ruby-keyword kw">end</span>
534
+ 445: <span class="ruby-keyword kw">return</span>
535
+ 446: <span class="ruby-keyword kw">end</span>
536
+ 447: <span class="ruby-keyword kw">break</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">paths</span>.<span class="ruby-identifier">slice!</span>( <span class="ruby-value">-2</span> ) <span class="ruby-comment cmt">## go up a directory</span>
537
+ 448: <span class="ruby-keyword kw">end</span>
538
+ 449: <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">:weblog</span>] = <span class="ruby-keyword kw">self</span>
539
+ 450: <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">:page</span>] = <span class="ruby-constant">Page</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">page_name</span> )
540
+ 451: <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">:page</span>].<span class="ruby-identifier">timestamp</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>
541
+ 452: <span class="ruby-keyword kw">yield</span> <span class="ruby-identifier">vars</span>
542
+ 453: <span class="ruby-keyword kw">end</span>
543
+ </pre>
544
+ </div>
545
+ </div>
546
+ </div>
547
+
548
+ <div id="method-M000222" class="method-detail">
549
+ <a name="M000222"></a>
550
+
551
+ <div class="method-heading">
552
+ <a href="#M000222" class="method-signature">
553
+ <span class="method-name">central_ext</span><span class="method-args">()</span>
554
+ </a>
555
+ </div>
556
+
557
+ <div class="method-description">
558
+ <p><a class="source-toggle" href="#"
559
+ onclick="toggleCode('M000222-source');return false;">[Source]</a></p>
560
+ <div class="method-source-code" id="M000222-source">
561
+ <pre>
562
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 364</span>
563
+ 364: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">central_ext</span>; <span class="ruby-ivar">@central_ext</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^\w*$/</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@central_ext</span>.<span class="ruby-identifier">untaint</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">default_central_ext</span>; <span class="ruby-keyword kw">end</span>
564
+ </pre>
565
+ </div>
566
+ </div>
567
+ </div>
568
+
569
+ <div id="method-M000221" class="method-detail">
570
+ <a name="M000221"></a>
571
+
572
+ <div class="method-heading">
573
+ <a href="#M000221" class="method-signature">
574
+ <span class="method-name">central_prefix</span><span class="method-args">()</span>
575
+ </a>
576
+ </div>
577
+
578
+ <div class="method-description">
579
+ <p><a class="source-toggle" href="#"
580
+ onclick="toggleCode('M000221-source');return false;">[Source]</a></p>
581
+ <div class="method-source-code" id="M000221-source">
582
+ <pre>
583
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 363</span>
584
+ 363: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">central_prefix</span>; <span class="ruby-ivar">@central_prefix</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^[\w\.]+$/</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@central_prefix</span>.<span class="ruby-identifier">untaint</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">default_central_prefix</span>; <span class="ruby-keyword kw">end</span>
585
+ </pre>
586
+ </div>
587
+ </div>
588
+ </div>
589
+
590
+ <div id="method-M000242" class="method-detail">
591
+ <a name="M000242"></a>
592
+
593
+ <div class="method-heading">
594
+ <a href="#M000242" class="method-signature">
595
+ <span class="method-name">commit_to_git</span><span class="method-args">()</span>
596
+ </a>
597
+ </div>
598
+
599
+ <div class="method-description">
600
+ <p>
601
+ Method to commit to the local git repo and push pure happiness to the
602
+ remote server named blahg (which should be of webserving character and a
603
+ pleasant demeanor).
604
+ </p>
605
+ <p><a class="source-toggle" href="#"
606
+ onclick="toggleCode('M000242-source');return false;">[Source]</a></p>
607
+ <div class="method-source-code" id="M000242-source">
608
+ <pre>
609
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 661</span>
610
+ 661: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">commit_to_git</span>
611
+ 662: <span class="ruby-identifier">puts</span> <span class="ruby-value">`git add .`</span>
612
+ 663: <span class="ruby-identifier">puts</span> <span class="ruby-value">`git commit -a -m &quot;New poshts for the syhtt&quot;`</span>
613
+ 664: <span class="ruby-identifier">puts</span> <span class="ruby-value">`git push blahg master`</span>
614
+ 665: <span class="ruby-keyword kw">end</span>
615
+ </pre>
616
+ </div>
617
+ </div>
618
+ </div>
619
+
620
+ <div id="method-M000214" class="method-detail">
621
+ <a name="M000214"></a>
622
+
623
+ <div class="method-heading">
624
+ <a href="#M000214" class="method-signature">
625
+ <span class="method-name">default_central_ext</span><span class="method-args">()</span>
626
+ </a>
627
+ </div>
628
+
629
+ <div class="method-description">
630
+ <p><a class="source-toggle" href="#"
631
+ onclick="toggleCode('M000214-source');return false;">[Source]</a></p>
632
+ <div class="method-source-code" id="M000214-source">
633
+ <pre>
634
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 355</span>
635
+ 355: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">default_central_ext</span>; <span class="ruby-value str">&quot;html&quot;</span>; <span class="ruby-keyword kw">end</span>
636
+ </pre>
637
+ </div>
638
+ </div>
639
+ </div>
640
+
641
+ <div id="method-M000213" class="method-detail">
642
+ <a name="M000213"></a>
643
+
644
+ <div class="method-heading">
645
+ <a href="#M000213" class="method-signature">
646
+ <span class="method-name">default_central_prefix</span><span class="method-args">()</span>
647
+ </a>
648
+ </div>
649
+
650
+ <div class="method-description">
651
+ <p><a class="source-toggle" href="#"
652
+ onclick="toggleCode('M000213-source');return false;">[Source]</a></p>
653
+ <div class="method-source-code" id="M000213-source">
654
+ <pre>
655
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 354</span>
656
+ 354: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">default_central_prefix</span>; <span class="ruby-value str">&quot;entry&quot;</span>; <span class="ruby-keyword kw">end</span>
657
+ </pre>
658
+ </div>
659
+ </div>
660
+ </div>
661
+
662
+ <div id="method-M000215" class="method-detail">
663
+ <a name="M000215"></a>
664
+
665
+ <div class="method-heading">
666
+ <a href="#M000215" class="method-signature">
667
+ <span class="method-name">default_entry_class</span><span class="method-args">()</span>
668
+ </a>
669
+ </div>
670
+
671
+ <div class="method-description">
672
+ <p><a class="source-toggle" href="#"
673
+ onclick="toggleCode('M000215-source');return false;">[Source]</a></p>
674
+ <div class="method-source-code" id="M000215-source">
675
+ <pre>
676
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 356</span>
677
+ 356: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">default_entry_class</span>; <span class="ruby-value str">&quot;Hobix::Entry&quot;</span>; <span class="ruby-keyword kw">end</span>
678
+ </pre>
679
+ </div>
680
+ </div>
681
+ </div>
682
+
683
+ <div id="method-M000209" class="method-detail">
684
+ <a name="M000209"></a>
685
+
686
+ <div class="method-heading">
687
+ <a href="#M000209" class="method-signature">
688
+ <span class="method-name">default_entry_path</span><span class="method-args">()</span>
689
+ </a>
690
+ </div>
691
+
692
+ <div class="method-description">
693
+ <p><a class="source-toggle" href="#"
694
+ onclick="toggleCode('M000209-source');return false;">[Source]</a></p>
695
+ <div class="method-source-code" id="M000209-source">
696
+ <pre>
697
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 350</span>
698
+ 350: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">default_entry_path</span>; <span class="ruby-value str">&quot;entries&quot;</span>; <span class="ruby-keyword kw">end</span>
699
+ </pre>
700
+ </div>
701
+ </div>
702
+ </div>
703
+
704
+ <div id="method-M000216" class="method-detail">
705
+ <a name="M000216"></a>
706
+
707
+ <div class="method-heading">
708
+ <a href="#M000216" class="method-signature">
709
+ <span class="method-name">default_index_class</span><span class="method-args">()</span>
710
+ </a>
711
+ </div>
712
+
713
+ <div class="method-description">
714
+ <p><a class="source-toggle" href="#"
715
+ onclick="toggleCode('M000216-source');return false;">[Source]</a></p>
716
+ <div class="method-source-code" id="M000216-source">
717
+ <pre>
718
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 357</span>
719
+ 357: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">default_index_class</span>; <span class="ruby-value str">&quot;Hobix::IndexEntry&quot;</span>; <span class="ruby-keyword kw">end</span>
720
+ </pre>
721
+ </div>
722
+ </div>
723
+ </div>
724
+
725
+ <div id="method-M000212" class="method-detail">
726
+ <a name="M000212"></a>
727
+
728
+ <div class="method-heading">
729
+ <a href="#M000212" class="method-signature">
730
+ <span class="method-name">default_lib_path</span><span class="method-args">()</span>
731
+ </a>
732
+ </div>
733
+
734
+ <div class="method-description">
735
+ <p><a class="source-toggle" href="#"
736
+ onclick="toggleCode('M000212-source');return false;">[Source]</a></p>
737
+ <div class="method-source-code" id="M000212-source">
738
+ <pre>
739
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 353</span>
740
+ 353: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">default_lib_path</span>; <span class="ruby-value str">&quot;lib&quot;</span>; <span class="ruby-keyword kw">end</span>
741
+ </pre>
742
+ </div>
743
+ </div>
744
+ </div>
745
+
746
+ <div id="method-M000211" class="method-detail">
747
+ <a name="M000211"></a>
748
+
749
+ <div class="method-heading">
750
+ <a href="#M000211" class="method-signature">
751
+ <span class="method-name">default_output_path</span><span class="method-args">()</span>
752
+ </a>
753
+ </div>
754
+
755
+ <div class="method-description">
756
+ <p><a class="source-toggle" href="#"
757
+ onclick="toggleCode('M000211-source');return false;">[Source]</a></p>
758
+ <div class="method-source-code" id="M000211-source">
759
+ <pre>
760
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 352</span>
761
+ 352: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">default_output_path</span>; <span class="ruby-value str">&quot;htdocs&quot;</span>; <span class="ruby-keyword kw">end</span>
762
+ </pre>
763
+ </div>
764
+ </div>
765
+ </div>
766
+
767
+ <div id="method-M000210" class="method-detail">
768
+ <a name="M000210"></a>
769
+
770
+ <div class="method-heading">
771
+ <a href="#M000210" class="method-signature">
772
+ <span class="method-name">default_skel_path</span><span class="method-args">()</span>
773
+ </a>
774
+ </div>
775
+
776
+ <div class="method-description">
777
+ <p><a class="source-toggle" href="#"
778
+ onclick="toggleCode('M000210-source');return false;">[Source]</a></p>
779
+ <div class="method-source-code" id="M000210-source">
780
+ <pre>
781
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 351</span>
782
+ 351: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">default_skel_path</span>; <span class="ruby-value str">&quot;skel&quot;</span>; <span class="ruby-keyword kw">end</span>
783
+ </pre>
784
+ </div>
785
+ </div>
786
+ </div>
787
+
788
+ <div id="method-M000223" class="method-detail">
789
+ <a name="M000223"></a>
790
+
791
+ <div class="method-heading">
792
+ <a href="#M000223" class="method-signature">
793
+ <span class="method-name">entry_class</span><span class="method-args">( tag = nil )</span>
794
+ </a>
795
+ </div>
796
+
797
+ <div class="method-description">
798
+ <p><a class="source-toggle" href="#"
799
+ onclick="toggleCode('M000223-source');return false;">[Source]</a></p>
800
+ <div class="method-source-code" id="M000223-source">
801
+ <pre>
802
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 365</span>
803
+ 365: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">entry_class</span>( <span class="ruby-identifier">tag</span> = <span class="ruby-keyword kw">nil</span> )
804
+ 366: <span class="ruby-identifier">tag</span> = <span class="ruby-ivar">@entry_class</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^[\w:]+$/</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@entry_class</span>.<span class="ruby-identifier">untaint</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">default_entry_class</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">tag</span>
805
+ 367:
806
+ 368: <span class="ruby-identifier">found_class</span> = <span class="ruby-keyword kw">nil</span>
807
+ 369: <span class="ruby-identifier">raise</span> <span class="ruby-ivar">@@entry_classes</span>.<span class="ruby-identifier">inspect</span>
808
+ 370: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@@entry_classes</span>
809
+ 371:
810
+ 372: <span class="ruby-identifier">found_class</span> = <span class="ruby-ivar">@@entry_classes</span>.<span class="ruby-identifier">find</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span>
811
+ 373: <span class="ruby-identifier">tag</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">c</span>.<span class="ruby-identifier">name</span>.<span class="ruby-identifier">split</span>( <span class="ruby-value str">'::'</span> ).<span class="ruby-identifier">last</span>.<span class="ruby-identifier">downcase</span>
812
+ 374: <span class="ruby-keyword kw">end</span>
813
+ 375: <span class="ruby-keyword kw">end</span>
814
+ 376:
815
+ 377: <span class="ruby-keyword kw">begin</span>
816
+ 378: <span class="ruby-identifier">found_class</span> <span class="ruby-operator">||</span> <span class="ruby-constant">Hobix</span>.<span class="ruby-identifier">const_find</span>( <span class="ruby-identifier">tag</span> )
817
+ 379: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">NameError</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
818
+ 380: <span class="ruby-identifier">raise</span> <span class="ruby-constant">NameError</span>, <span class="ruby-node">&quot;No such entry class #{ tag }&quot;</span>
819
+ 381: <span class="ruby-keyword kw">end</span>
820
+ 382: <span class="ruby-keyword kw">end</span>
821
+ </pre>
822
+ </div>
823
+ </div>
824
+ </div>
825
+
826
+ <div id="method-M000217" class="method-detail">
827
+ <a name="M000217"></a>
828
+
829
+ <div class="method-heading">
830
+ <a href="#M000217" class="method-signature">
831
+ <span class="method-name">entry_path</span><span class="method-args">()</span>
832
+ </a>
833
+ </div>
834
+
835
+ <div class="method-description">
836
+ <p><a class="source-toggle" href="#"
837
+ onclick="toggleCode('M000217-source');return false;">[Source]</a></p>
838
+ <div class="method-source-code" id="M000217-source">
839
+ <pre>
840
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 359</span>
841
+ 359: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">entry_path</span>; <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>( <span class="ruby-ivar">@entry_path</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">default_entry_path</span>, <span class="ruby-ivar">@path</span> ).<span class="ruby-identifier">untaint</span>; <span class="ruby-keyword kw">end</span>
842
+ </pre>
843
+ </div>
844
+ </div>
845
+ </div>
846
+
847
+ <div id="method-M000227" class="method-detail">
848
+ <a name="M000227"></a>
849
+
850
+ <div class="method-heading">
851
+ <a href="#M000227" class="method-signature">
852
+ <span class="method-name">expand_path</span><span class="method-args">( path )</span>
853
+ </a>
854
+ </div>
855
+
856
+ <div class="method-description">
857
+ <p>
858
+ Translate paths relative to the weblahhg&#8216;s URL. This is especially
859
+ important if a weblog isn&#8216;t at the root directory for a domain.
860
+ </p>
861
+ <p><a class="source-toggle" href="#"
862
+ onclick="toggleCode('M000227-source');return false;">[Source]</a></p>
863
+ <div class="method-source-code" id="M000227-source">
864
+ <pre>
865
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 406</span>
866
+ 406: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">expand_path</span>( <span class="ruby-identifier">path</span> )
867
+ 407: <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>( <span class="ruby-identifier">path</span>.<span class="ruby-identifier">gsub</span>( <span class="ruby-regexp re">/^\/+/</span>, <span class="ruby-value str">''</span> ), <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">link</span>.<span class="ruby-identifier">path</span>.<span class="ruby-identifier">gsub</span>( <span class="ruby-regexp re">/\/*$/</span>, <span class="ruby-value str">'/'</span> ) ).<span class="ruby-identifier">gsub</span>( <span class="ruby-regexp re">/^C:/</span>, <span class="ruby-value str">''</span>)
868
+ 408: <span class="ruby-keyword kw">end</span>
869
+ </pre>
870
+ </div>
871
+ </div>
872
+ </div>
873
+
874
+ <div id="method-M000236" class="method-detail">
875
+ <a name="M000236"></a>
876
+
877
+ <div class="method-heading">
878
+ <a href="#M000236" class="method-signature">
879
+ <span class="method-name">facet_for</span><span class="method-args">( app )</span>
880
+ </a>
881
+ </div>
882
+
883
+ <div class="method-description">
884
+ <p><a class="source-toggle" href="#"
885
+ onclick="toggleCode('M000236-source');return false;">[Source]</a></p>
886
+ <div class="method-source-code" id="M000236-source">
887
+ <pre>
888
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 489</span>
889
+ 489: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">facet_for</span>( <span class="ruby-identifier">app</span> )
890
+ 490: <span class="ruby-identifier">facets</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span> <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">get</span> <span class="ruby-identifier">app</span> }
891
+ 491: <span class="ruby-constant">Hobix</span><span class="ruby-operator">::</span><span class="ruby-constant">BaseFacet</span>.<span class="ruby-identifier">not_found</span> <span class="ruby-identifier">app</span>
892
+ 492: <span class="ruby-keyword kw">end</span>
893
+ </pre>
894
+ </div>
895
+ </div>
896
+ </div>
897
+
898
+ <div id="method-M000235" class="method-detail">
899
+ <a name="M000235"></a>
900
+
901
+ <div class="method-heading">
902
+ <a href="#M000235" class="method-signature">
903
+ <span class="method-name">facets</span><span class="method-args">()</span>
904
+ </a>
905
+ </div>
906
+
907
+ <div class="method-description">
908
+ <p>
909
+ Returns an Array of all facet plugins in use. (There can be many.)
910
+ </p>
911
+ <p><a class="source-toggle" href="#"
912
+ onclick="toggleCode('M000235-source');return false;">[Source]</a></p>
913
+ <div class="method-source-code" id="M000235-source">
914
+ <pre>
915
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 485</span>
916
+ 485: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">facets</span>
917
+ 486: <span class="ruby-ivar">@plugins</span>.<span class="ruby-identifier">find_all</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">BaseFacet</span> }
918
+ 487: <span class="ruby-keyword kw">end</span>
919
+ </pre>
920
+ </div>
921
+ </div>
922
+ </div>
923
+
924
+ <div id="method-M000224" class="method-detail">
925
+ <a name="M000224"></a>
926
+
927
+ <div class="method-heading">
928
+ <a href="#M000224" class="method-signature">
929
+ <span class="method-name">index_class</span><span class="method-args">( tag = nil )</span>
930
+ </a>
931
+ </div>
932
+
933
+ <div class="method-description">
934
+ <p><a class="source-toggle" href="#"
935
+ onclick="toggleCode('M000224-source');return false;">[Source]</a></p>
936
+ <div class="method-source-code" id="M000224-source">
937
+ <pre>
938
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 383</span>
939
+ 383: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">index_class</span>( <span class="ruby-identifier">tag</span> = <span class="ruby-keyword kw">nil</span> )
940
+ 384: <span class="ruby-identifier">tag</span> = <span class="ruby-ivar">@index_class</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^[\w:]+$/</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@index_class</span>.<span class="ruby-identifier">untaint</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">default_index_class</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">tag</span>
941
+ 385: <span class="ruby-keyword kw">begin</span>
942
+ 386: <span class="ruby-constant">Hobix</span>.<span class="ruby-identifier">const_find</span>( <span class="ruby-identifier">tag</span> )
943
+ 387: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">NameError</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
944
+ 388: <span class="ruby-identifier">raise</span> <span class="ruby-constant">NameError</span>, <span class="ruby-node">&quot;No such index class #{ tag }&quot;</span>
945
+ 389: <span class="ruby-keyword kw">end</span>
946
+ 390: <span class="ruby-keyword kw">end</span>
947
+ </pre>
948
+ </div>
949
+ </div>
950
+ </div>
951
+
952
+ <div id="method-M000253" class="method-detail">
953
+ <a name="M000253"></a>
954
+
955
+ <div class="method-heading">
956
+ <a href="#M000253" class="method-signature">
957
+ <span class="method-name">join_path</span><span class="method-args">( prefix, suffix )</span>
958
+ </a>
959
+ </div>
960
+
961
+ <div class="method-description">
962
+ <p><a class="source-toggle" href="#"
963
+ onclick="toggleCode('M000253-source');return false;">[Source]</a></p>
964
+ <div class="method-source-code" id="M000253-source">
965
+ <pre>
966
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 832</span>
967
+ 832: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">join_path</span>( <span class="ruby-identifier">prefix</span>, <span class="ruby-identifier">suffix</span> )
968
+ 833: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">prefix</span>
969
+ 834: <span class="ruby-keyword kw">when</span> <span class="ruby-value str">''</span>, <span class="ruby-value str">'.'</span>
970
+ 835: <span class="ruby-identifier">suffix</span>
971
+ 836: <span class="ruby-keyword kw">else</span>
972
+ 837: <span class="ruby-node">&quot;#{ prefix }/#{ suffix }&quot;</span>
973
+ 838: <span class="ruby-keyword kw">end</span>
974
+ 839: <span class="ruby-keyword kw">end</span>
975
+ </pre>
976
+ </div>
977
+ </div>
978
+ </div>
979
+
980
+ <div id="method-M000220" class="method-detail">
981
+ <a name="M000220"></a>
982
+
983
+ <div class="method-heading">
984
+ <a href="#M000220" class="method-signature">
985
+ <span class="method-name">lib_path</span><span class="method-args">()</span>
986
+ </a>
987
+ </div>
988
+
989
+ <div class="method-description">
990
+ <p><a class="source-toggle" href="#"
991
+ onclick="toggleCode('M000220-source');return false;">[Source]</a></p>
992
+ <div class="method-source-code" id="M000220-source">
993
+ <pre>
994
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 362</span>
995
+ 362: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">lib_path</span>; <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>( <span class="ruby-ivar">@lib_path</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">default_lib_path</span>, <span class="ruby-ivar">@path</span> ).<span class="ruby-identifier">untaint</span>; <span class="ruby-keyword kw">end</span>
996
+ </pre>
997
+ </div>
998
+ </div>
999
+ </div>
1000
+
1001
+ <div id="method-M000225" class="method-detail">
1002
+ <a name="M000225"></a>
1003
+
1004
+ <div class="method-heading">
1005
+ <a href="#M000225" class="method-signature">
1006
+ <span class="method-name">link</span><span class="method-args">()</span>
1007
+ </a>
1008
+ </div>
1009
+
1010
+ <div class="method-description">
1011
+ <p><a class="source-toggle" href="#"
1012
+ onclick="toggleCode('M000225-source');return false;">[Source]</a></p>
1013
+ <div class="method-source-code" id="M000225-source">
1014
+ <pre>
1015
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 392</span>
1016
+ 392: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">link</span>
1017
+ 393: <span class="ruby-constant">URI</span><span class="ruby-operator">::</span><span class="ruby-identifier">parse</span>( <span class="ruby-ivar">@link</span>.<span class="ruby-identifier">gsub</span>( <span class="ruby-regexp re">/\/$/</span>, <span class="ruby-value str">''</span> ) ).<span class="ruby-identifier">extend</span> <span class="ruby-constant">Hobix</span><span class="ruby-operator">::</span><span class="ruby-constant">UriStr</span>
1018
+ 394: <span class="ruby-keyword kw">end</span>
1019
+ </pre>
1020
+ </div>
1021
+ </div>
1022
+ </div>
1023
+
1024
+ <div id="method-M000226" class="method-detail">
1025
+ <a name="M000226"></a>
1026
+
1027
+ <div class="method-heading">
1028
+ <a href="#M000226" class="method-signature">
1029
+ <span class="method-name">linklist</span><span class="method-args">()</span>
1030
+ </a>
1031
+ </div>
1032
+
1033
+ <div class="method-description">
1034
+ <p><a class="source-toggle" href="#"
1035
+ onclick="toggleCode('M000226-source');return false;">[Source]</a></p>
1036
+ <div class="method-source-code" id="M000226-source">
1037
+ <pre>
1038
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 396</span>
1039
+ 396: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">linklist</span>
1040
+ 397: <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@linklist</span>.<span class="ruby-identifier">class</span> <span class="ruby-operator">==</span> <span class="ruby-operator">::</span><span class="ruby-constant">Array</span>
1041
+ 398: <span class="ruby-constant">YAML</span><span class="ruby-operator">::</span><span class="ruby-identifier">transfer</span>( <span class="ruby-value str">'hobix.com,2004/linklist'</span>, {<span class="ruby-value str">'links'</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@linklist</span>} )
1042
+ 399: <span class="ruby-keyword kw">else</span>
1043
+ 400: <span class="ruby-ivar">@linklist</span>
1044
+ 401: <span class="ruby-keyword kw">end</span>
1045
+ 402: <span class="ruby-keyword kw">end</span>
1046
+ </pre>
1047
+ </div>
1048
+ </div>
1049
+ </div>
1050
+
1051
+ <div id="method-M000254" class="method-detail">
1052
+ <a name="M000254"></a>
1053
+
1054
+ <div class="method-heading">
1055
+ <a href="#M000254" class="method-signature">
1056
+ <span class="method-name">load_and_validate_entry</span><span class="method-args">( entry_id )</span>
1057
+ </a>
1058
+ </div>
1059
+
1060
+ <div class="method-description">
1061
+ <p>
1062
+ Loads an entry from <tt><a href="Weblog.html#M000232">storage</a></tt>,
1063
+ first validating that the author is listed in the weblog config.
1064
+ </p>
1065
+ <p><a class="source-toggle" href="#"
1066
+ onclick="toggleCode('M000254-source');return false;">[Source]</a></p>
1067
+ <div class="method-source-code" id="M000254-source">
1068
+ <pre>
1069
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 845</span>
1070
+ 845: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">load_and_validate_entry</span>( <span class="ruby-identifier">entry_id</span> )
1071
+ 846: <span class="ruby-identifier">entry</span> = <span class="ruby-identifier">storage</span>.<span class="ruby-identifier">load_entry</span>( <span class="ruby-identifier">entry_id</span> )
1072
+ 847: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">authors</span>.<span class="ruby-identifier">has_key?</span>( <span class="ruby-identifier">entry</span>.<span class="ruby-identifier">author</span> )
1073
+ 848: <span class="ruby-identifier">raise</span> <span class="ruby-constant">AuthorNotFound</span>, <span class="ruby-node">&quot;Invalid author '#{ entry.author }' found in entry #{ entry_id }&quot;</span>
1074
+ 849: <span class="ruby-keyword kw">end</span>
1075
+ 850: <span class="ruby-identifier">entry</span>
1076
+ 851: <span class="ruby-keyword kw">end</span>
1077
+ </pre>
1078
+ </div>
1079
+ </div>
1080
+ </div>
1081
+
1082
+ <div id="method-M000256" class="method-detail">
1083
+ <a name="M000256"></a>
1084
+
1085
+ <div class="method-heading">
1086
+ <a href="#M000256" class="method-signature">
1087
+ <span class="method-name">method_missing</span><span class="method-args">( methId, *args )</span>
1088
+ </a>
1089
+ </div>
1090
+
1091
+ <div class="method-description">
1092
+ <p>
1093
+ For convenience, <a href="Weblog.html#M000232">storage</a> queries can be
1094
+ made through the <a href="Weblog.html">Weblog</a> class. Queries will
1095
+ return the full <a href="Entry.html">Entry</a> data, though, so it&#8216;s
1096
+ best to use this only when you&#8216;re scripting and need data quick.
1097
+ </p>
1098
+ <p><a class="source-toggle" href="#"
1099
+ onclick="toggleCode('M000256-source');return false;">[Source]</a></p>
1100
+ <div class="method-source-code" id="M000256-source">
1101
+ <pre>
1102
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 861</span>
1103
+ 861: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">method_missing</span>( <span class="ruby-identifier">methId</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">args</span> )
1104
+ 862: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">storage</span>.<span class="ruby-identifier">respond_to?</span> <span class="ruby-identifier">methId</span>
1105
+ 863: <span class="ruby-identifier">storage</span>.<span class="ruby-identifier">method</span>( <span class="ruby-identifier">methId</span> ).<span class="ruby-identifier">call</span>( <span class="ruby-operator">*</span><span class="ruby-identifier">args</span> ).<span class="ruby-identifier">collect</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">e</span><span class="ruby-operator">|</span>
1106
+ 864: <span class="ruby-identifier">load_and_validate_entry</span>( <span class="ruby-identifier">e</span>.<span class="ruby-identifier">id</span> )
1107
+ 865: <span class="ruby-keyword kw">end</span>
1108
+ 866: <span class="ruby-keyword kw">end</span>
1109
+ 867: <span class="ruby-keyword kw">end</span>
1110
+ </pre>
1111
+ </div>
1112
+ </div>
1113
+ </div>
1114
+
1115
+ <div id="method-M000239" class="method-detail">
1116
+ <a name="M000239"></a>
1117
+
1118
+ <div class="method-heading">
1119
+ <a href="#M000239" class="method-signature">
1120
+ <span class="method-name">output_entry_map</span><span class="method-args">()</span>
1121
+ </a>
1122
+ </div>
1123
+
1124
+ <div class="method-description">
1125
+ <p>
1126
+ Built from the map of output destinations described by <tt><a
1127
+ href="Weblog.html#M000238">output_map</a></tt>, this map pairs entry IDs
1128
+ against their canonical destinations. The @<a
1129
+ href="Weblog.html#M000221">central_prefix</a> and @<a
1130
+ href="Weblog.html#M000222">central_ext</a> variables determine what output
1131
+ is canonical.
1132
+ </p>
1133
+ <p><a class="source-toggle" href="#"
1134
+ onclick="toggleCode('M000239-source');return false;">[Source]</a></p>
1135
+ <div class="method-source-code" id="M000239-source">
1136
+ <pre>
1137
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 552</span>
1138
+ 552: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">output_entry_map</span>
1139
+ 553: <span class="ruby-identifier">output_map</span>
1140
+ 554: <span class="ruby-ivar">@output_entry_map</span>
1141
+ 555: <span class="ruby-keyword kw">end</span>
1142
+ </pre>
1143
+ </div>
1144
+ </div>
1145
+ </div>
1146
+
1147
+ <div id="method-M000238" class="method-detail">
1148
+ <a name="M000238"></a>
1149
+
1150
+ <div class="method-heading">
1151
+ <a href="#M000238" class="method-signature">
1152
+ <span class="method-name">output_map</span><span class="method-args">()</span>
1153
+ </a>
1154
+ </div>
1155
+
1156
+ <div class="method-description">
1157
+ <p>
1158
+ Reads <tt><a href="Weblog.html#M000218">skel_path</a></tt> for templates
1159
+ and builds a hash of all the various output files which will be generated.
1160
+ This method will cache the <a href="Weblog.html#M000238">output_map</a>
1161
+ once. Subsequent calls to <tt><a
1162
+ href="Weblog.html#M000238">output_map</a></tt> will quickly return the
1163
+ cached hash. To reset the cache, use <tt><a
1164
+ href="Weblog.html#M000237">reset_output_map</a></tt>.
1165
+ </p>
1166
+ <p><a class="source-toggle" href="#"
1167
+ onclick="toggleCode('M000238-source');return false;">[Source]</a></p>
1168
+ <div class="method-source-code" id="M000238-source">
1169
+ <pre>
1170
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 501</span>
1171
+ 501: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">output_map</span>
1172
+ 502: <span class="ruby-ivar">@output_map</span> <span class="ruby-operator">||=</span> <span class="ruby-keyword kw">nil</span>
1173
+ 503: <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@output_map</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@output_map</span>
1174
+ 504: <span class="ruby-identifier">path_watch</span> = {}
1175
+ 505: <span class="ruby-ivar">@output_entry_map</span> = {}
1176
+ 506: <span class="ruby-constant">Find</span><span class="ruby-operator">::</span><span class="ruby-identifier">find</span>( <span class="ruby-identifier">skel_path</span> ) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">path</span><span class="ruby-operator">|</span>
1177
+ 507: <span class="ruby-identifier">path</span>.<span class="ruby-identifier">untaint</span>
1178
+ 508: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">path</span>)[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-value">?.</span>
1179
+ 509: <span class="ruby-constant">Find</span>.<span class="ruby-identifier">prune</span>
1180
+ 510: <span class="ruby-keyword kw">elsif</span> <span class="ruby-keyword kw">not</span> <span class="ruby-constant">FileTest</span>.<span class="ruby-identifier">directory?</span> <span class="ruby-identifier">path</span>
1181
+ 511: <span class="ruby-identifier">tpl_path</span> = <span class="ruby-identifier">path</span>.<span class="ruby-identifier">gsub</span>( <span class="ruby-node">/^#{ Regexp::quote( skel_path ) }\/?/</span>, <span class="ruby-value str">''</span> )
1182
+ 512: <span class="ruby-identifier">output</span> = <span class="ruby-identifier">outputs</span>.<span class="ruby-identifier">detect</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">tpl_path</span> <span class="ruby-operator">=~</span> <span class="ruby-node">/\.#{ p.extension }$/</span>; <span class="ruby-identifier">tpl_path</span> = <span class="ruby-identifier">$`</span>; <span class="ruby-keyword kw">end</span> }
1183
+ 513: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">output</span>
1184
+ 514: <span class="ruby-comment cmt">## Figure out template extension and output filename</span>
1185
+ 515: <span class="ruby-identifier">page_name</span>, <span class="ruby-identifier">tpl_ext</span> = <span class="ruby-identifier">tpl_path</span>.<span class="ruby-identifier">dup</span>, <span class="ruby-value str">''</span>
1186
+ 516: <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">page_name</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/\.\w+$/</span>; <span class="ruby-identifier">page_name</span> = <span class="ruby-identifier">$`</span>; <span class="ruby-identifier">tpl_ext</span> = <span class="ruby-identifier">$&amp;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">tpl_ext</span>; <span class="ruby-keyword kw">end</span>
1187
+ 517: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">tpl_ext</span>.<span class="ruby-identifier">empty?</span>
1188
+ 518: <span class="ruby-comment cmt">## Build the output pages</span>
1189
+ 519: <span class="ruby-identifier">build_pages</span>( <span class="ruby-identifier">page_name</span> ) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">vars</span><span class="ruby-operator">|</span>
1190
+ 520: <span class="ruby-comment cmt">## Extension and Path</span>
1191
+ 521: <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">:page</span>].<span class="ruby-identifier">add_ext</span>( <span class="ruby-identifier">tpl_ext</span> )
1192
+ 522: <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">:template</span>] = <span class="ruby-identifier">path</span>
1193
+ 523: <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">:output</span>] = <span class="ruby-identifier">output</span>
1194
+ 524: <span class="ruby-identifier">eid</span> = ( <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">:entry</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">:entry</span>].<span class="ruby-identifier">id</span> ) <span class="ruby-operator">||</span> <span class="ruby-identifier">page_name</span>
1195
+ 525: <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">not</span> <span class="ruby-ivar">@output_entry_map</span>[ <span class="ruby-identifier">eid</span> ]
1196
+ 526: <span class="ruby-ivar">@output_entry_map</span>[ <span class="ruby-identifier">eid</span> ] = <span class="ruby-identifier">vars</span>
1197
+ 527: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">tpl_ext</span>.<span class="ruby-identifier">split</span>( <span class="ruby-value str">'.'</span> )[<span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">central_ext</span>
1198
+ 528: <span class="ruby-ivar">@output_entry_map</span>[ <span class="ruby-identifier">eid</span> ] = <span class="ruby-identifier">vars</span>
1199
+ 529: <span class="ruby-keyword kw">end</span>
1200
+ 530:
1201
+ 531: <span class="ruby-comment cmt">## If output by a deeper page, skip</span>
1202
+ 532: <span class="ruby-identifier">pub_name</span>, = <span class="ruby-identifier">path_watch</span>[<span class="ruby-identifier">vars</span>[<span class="ruby-identifier">:page</span>].<span class="ruby-identifier">link</span>]
1203
+ 533: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">pub_name</span> <span class="ruby-keyword kw">and</span> <span class="ruby-operator">!</span>( <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">:page</span>].<span class="ruby-identifier">link</span>.<span class="ruby-identifier">index</span>( <span class="ruby-identifier">page_name</span> ) <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-keyword kw">and</span>
1204
+ 534: <span class="ruby-identifier">page_name</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">pub_name</span>.<span class="ruby-identifier">length</span> )
1205
+ 535:
1206
+ 536: <span class="ruby-identifier">path_watch</span>[<span class="ruby-identifier">vars</span>[<span class="ruby-identifier">:page</span>].<span class="ruby-identifier">link</span>] = [<span class="ruby-identifier">page_name</span>, <span class="ruby-identifier">vars</span>]
1207
+ 537: <span class="ruby-keyword kw">end</span>
1208
+ 538: <span class="ruby-keyword kw">end</span>
1209
+ 539: <span class="ruby-keyword kw">end</span>
1210
+ 540: <span class="ruby-keyword kw">end</span>
1211
+ 541: <span class="ruby-ivar">@output_map</span> = {}
1212
+ 542: <span class="ruby-identifier">path_watch</span>.<span class="ruby-identifier">each_value</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">page_name</span>, <span class="ruby-identifier">vars</span><span class="ruby-operator">|</span>
1213
+ 543: <span class="ruby-ivar">@output_map</span>[<span class="ruby-identifier">page_name</span>] <span class="ruby-operator">||=</span> []
1214
+ 544: <span class="ruby-ivar">@output_map</span>[<span class="ruby-identifier">page_name</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">vars</span>
1215
+ 545: <span class="ruby-keyword kw">end</span>
1216
+ 546: <span class="ruby-ivar">@output_map</span>
1217
+ 547: <span class="ruby-keyword kw">end</span>
1218
+ </pre>
1219
+ </div>
1220
+ </div>
1221
+ </div>
1222
+
1223
+ <div id="method-M000219" class="method-detail">
1224
+ <a name="M000219"></a>
1225
+
1226
+ <div class="method-heading">
1227
+ <a href="#M000219" class="method-signature">
1228
+ <span class="method-name">output_path</span><span class="method-args">()</span>
1229
+ </a>
1230
+ </div>
1231
+
1232
+ <div class="method-description">
1233
+ <p><a class="source-toggle" href="#"
1234
+ onclick="toggleCode('M000219-source');return false;">[Source]</a></p>
1235
+ <div class="method-source-code" id="M000219-source">
1236
+ <pre>
1237
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 361</span>
1238
+ 361: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">output_path</span>; <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>( <span class="ruby-ivar">@output_path</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">default_output_path</span>, <span class="ruby-ivar">@path</span> ).<span class="ruby-identifier">untaint</span>; <span class="ruby-keyword kw">end</span>
1239
+ </pre>
1240
+ </div>
1241
+ </div>
1242
+ </div>
1243
+
1244
+ <div id="method-M000233" class="method-detail">
1245
+ <a name="M000233"></a>
1246
+
1247
+ <div class="method-heading">
1248
+ <a href="#M000233" class="method-signature">
1249
+ <span class="method-name">outputs</span><span class="method-args">()</span>
1250
+ </a>
1251
+ </div>
1252
+
1253
+ <div class="method-description">
1254
+ <p>
1255
+ Returns an Array of all output plugins in use. (There can be many.)
1256
+ </p>
1257
+ <p><a class="source-toggle" href="#"
1258
+ onclick="toggleCode('M000233-source');return false;">[Source]</a></p>
1259
+ <div class="method-source-code" id="M000233-source">
1260
+ <pre>
1261
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 473</span>
1262
+ 473: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">outputs</span>
1263
+ 474: <span class="ruby-ivar">@plugins</span>.<span class="ruby-identifier">find_all</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">BaseOutput</span> }
1264
+ 475: <span class="ruby-keyword kw">end</span>
1265
+ </pre>
1266
+ </div>
1267
+ </div>
1268
+ </div>
1269
+
1270
+ <div id="method-M000257" class="method-detail">
1271
+ <a name="M000257"></a>
1272
+
1273
+ <div class="method-heading">
1274
+ <a href="#M000257" class="method-signature">
1275
+ <span class="method-name">p_publish</span><span class="method-args">( obj )</span>
1276
+ </a>
1277
+ </div>
1278
+
1279
+ <div class="method-description">
1280
+ <p>
1281
+ Prints publication information the screen. Override this if you want to
1282
+ suppress output or change the display.
1283
+ </p>
1284
+ <p><a class="source-toggle" href="#"
1285
+ onclick="toggleCode('M000257-source');return false;">[Source]</a></p>
1286
+ <div class="method-source-code" id="M000257-source">
1287
+ <pre>
1288
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 871</span>
1289
+ 871: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">p_publish</span>( <span class="ruby-identifier">obj</span> )
1290
+ 872: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;## Page: #{ obj.link }, updated #{ obj.updated }&quot;</span>
1291
+ 873: <span class="ruby-keyword kw">end</span>
1292
+ </pre>
1293
+ </div>
1294
+ </div>
1295
+ </div>
1296
+
1297
+ <div id="method-M000234" class="method-detail">
1298
+ <a name="M000234"></a>
1299
+
1300
+ <div class="method-heading">
1301
+ <a href="#M000234" class="method-signature">
1302
+ <span class="method-name">publishers</span><span class="method-args">()</span>
1303
+ </a>
1304
+ </div>
1305
+
1306
+ <div class="method-description">
1307
+ <p>
1308
+ Returns an Array of all publisher plugins in use. (There can be many.)
1309
+ </p>
1310
+ <p><a class="source-toggle" href="#"
1311
+ onclick="toggleCode('M000234-source');return false;">[Source]</a></p>
1312
+ <div class="method-source-code" id="M000234-source">
1313
+ <pre>
1314
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 479</span>
1315
+ 479: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">publishers</span>
1316
+ 480: <span class="ruby-ivar">@plugins</span>.<span class="ruby-identifier">find_all</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">BasePublish</span> }
1317
+ 481: <span class="ruby-keyword kw">end</span>
1318
+ </pre>
1319
+ </div>
1320
+ </div>
1321
+ </div>
1322
+
1323
+ <div id="method-M000240" class="method-detail">
1324
+ <a name="M000240"></a>
1325
+
1326
+ <div class="method-heading">
1327
+ <a href="#M000240" class="method-signature">
1328
+ <span class="method-name">regenerate</span><span class="method-args">( how = nil )</span>
1329
+ </a>
1330
+ </div>
1331
+
1332
+ <div class="method-description">
1333
+ <p>
1334
+ Regenerates the weblog, processing templates in <tt><a
1335
+ href="Weblog.html#M000218">skel_path</a></tt> with the data found in <tt><a
1336
+ href="Weblog.html#M000217">entry_path</a></tt>, storing output in <tt><a
1337
+ href="Weblog.html#M000219">output_path</a></tt>.
1338
+ </p>
1339
+ <p>
1340
+ The <em>how</em> parameter dictates how this is done, Currently, if
1341
+ <em>how</em> is nil the weblog is completely regen&#8216;d. If it is
1342
+ :update, the weblog is only upgen&#8216;d.
1343
+ </p>
1344
+ <h2>How Updates Work</h2>
1345
+ <p>
1346
+ It&#8216;s very important to know how updates work, especially if you are
1347
+ writing custom skel methods or devious new kinds of templates. When
1348
+ performing an update, this method will skip pages if the following
1349
+ conditions are met:
1350
+ </p>
1351
+ <ol>
1352
+ <li>The <a href="Page.html">Page</a> object for a given output page must have
1353
+ its <tt>updated</tt> timestamp set.
1354
+
1355
+ </li>
1356
+ <li>The output file pointed to by the <a href="Page.html">Page</a> object must
1357
+ already exist.
1358
+
1359
+ </li>
1360
+ <li>The <tt>updated</tt> timestamp must be older than than the modification
1361
+ time of the output file.
1362
+
1363
+ </li>
1364
+ <li>The modification time of the input template must be older than than the
1365
+ modification time of the output file.
1366
+
1367
+ </li>
1368
+ </ol>
1369
+ <p>
1370
+ To ensure that your custom methods and templates are qualifying to be
1371
+ skipped on an upgen, be sure to set the <tt>updated</tt> timestamp of the
1372
+ <a href="Page.html">Page</a> object to the latest date of the
1373
+ content&#8216;s modification.
1374
+ </p>
1375
+ <p><a class="source-toggle" href="#"
1376
+ onclick="toggleCode('M000240-source');return false;">[Source]</a></p>
1377
+ <div class="method-source-code" id="M000240-source">
1378
+ <pre>
1379
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 585</span>
1380
+ 585: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">regenerate</span>( <span class="ruby-identifier">how</span> = <span class="ruby-keyword kw">nil</span> )
1381
+ 586: <span class="ruby-identifier">retouch</span> <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">how</span>
1382
+ 587: <span class="ruby-keyword kw">end</span>
1383
+ </pre>
1384
+ </div>
1385
+ </div>
1386
+ </div>
1387
+
1388
+ <div id="method-M000237" class="method-detail">
1389
+ <a name="M000237"></a>
1390
+
1391
+ <div class="method-heading">
1392
+ <a href="#M000237" class="method-signature">
1393
+ <span class="method-name">reset_output_map</span><span class="method-args">()</span>
1394
+ </a>
1395
+ </div>
1396
+
1397
+ <div class="method-description">
1398
+ <p>
1399
+ Clears the hash used to cache the results of <tt><a
1400
+ href="Weblog.html#M000238">output_map</a></tt>.
1401
+ </p>
1402
+ <p><a class="source-toggle" href="#"
1403
+ onclick="toggleCode('M000237-source');return false;">[Source]</a></p>
1404
+ <div class="method-source-code" id="M000237-source">
1405
+ <pre>
1406
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 495</span>
1407
+ 495: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">reset_output_map</span>; <span class="ruby-ivar">@output_map</span> = <span class="ruby-keyword kw">nil</span>; <span class="ruby-keyword kw">end</span>
1408
+ </pre>
1409
+ </div>
1410
+ </div>
1411
+ </div>
1412
+
1413
+ <div id="method-M000241" class="method-detail">
1414
+ <a name="M000241"></a>
1415
+
1416
+ <div class="method-heading">
1417
+ <a href="#M000241" class="method-signature">
1418
+ <span class="method-name">retouch</span><span class="method-args">( only_path = nil, how = nil )</span>
1419
+ </a>
1420
+ </div>
1421
+
1422
+ <div class="method-description">
1423
+ <p><a class="source-toggle" href="#"
1424
+ onclick="toggleCode('M000241-source');return false;">[Source]</a></p>
1425
+ <div class="method-source-code" id="M000241-source">
1426
+ <pre>
1427
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 588</span>
1428
+ 588: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">retouch</span>( <span class="ruby-identifier">only_path</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">how</span> = <span class="ruby-keyword kw">nil</span> )
1429
+ 589: <span class="ruby-identifier">published</span> = {}
1430
+ 590: <span class="ruby-identifier">published_types</span> = []
1431
+ 591: <span class="ruby-identifier">output_map</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">page_name</span>, <span class="ruby-identifier">outputs</span><span class="ruby-operator">|</span>
1432
+ 592: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;[Building #{ page_name } pages]&quot;</span>
1433
+ 593: <span class="ruby-identifier">outputs</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">vars</span><span class="ruby-operator">|</span>
1434
+ 594: <span class="ruby-identifier">full_out_path</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>( <span class="ruby-identifier">output_path</span>, <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">:page</span>].<span class="ruby-identifier">link</span>.<span class="ruby-identifier">split</span>( <span class="ruby-value str">'/'</span> ) )
1435
+ 595: <span class="ruby-comment cmt">## If retouching, skip pages outside of path</span>
1436
+ 596: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">only_path</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">:page</span>].<span class="ruby-identifier">link</span>.<span class="ruby-identifier">index</span>( <span class="ruby-value str">&quot;/&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">only_path</span> ) <span class="ruby-operator">!=</span> <span class="ruby-value">0</span>
1437
+ 597:
1438
+ 598: <span class="ruby-comment cmt">## If updating, skip any that are unchanged</span>
1439
+ 599: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">how</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:update</span> <span class="ruby-keyword kw">and</span>
1440
+ 600: <span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span>( <span class="ruby-identifier">full_out_path</span> ) <span class="ruby-keyword kw">and</span>
1441
+ 601: <span class="ruby-constant">File</span>.<span class="ruby-identifier">mtime</span>( <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">:template</span>] ) <span class="ruby-operator">&lt;</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">mtime</span>( <span class="ruby-identifier">full_out_path</span> ) <span class="ruby-keyword kw">and</span>
1442
+ 602: ( <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">:page</span>].<span class="ruby-identifier">updated</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword kw">or</span>
1443
+ 603: <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">:page</span>].<span class="ruby-identifier">updated</span> <span class="ruby-operator">&lt;</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">mtime</span>( <span class="ruby-identifier">full_out_path</span> ) )
1444
+ 604:
1445
+ 605: <span class="ruby-identifier">p_publish</span> <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">:page</span>]
1446
+ 606: <span class="ruby-identifier">vars</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">var_name</span><span class="ruby-operator">|</span>
1447
+ 607: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">var_name</span>.<span class="ruby-identifier">to_s</span>
1448
+ 608: <span class="ruby-keyword kw">when</span> <span class="ruby-regexp re">/entry$/</span>
1449
+ 609: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">:no_load</span>]
1450
+ 610: <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">var_name</span>] = <span class="ruby-identifier">load_and_validate_entry</span>( <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">var_name</span>].<span class="ruby-identifier">id</span> )
1451
+ 611: <span class="ruby-keyword kw">end</span>
1452
+ 612: <span class="ruby-keyword kw">when</span> <span class="ruby-regexp re">/entries$/</span>
1453
+ 613: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">:no_load</span>]
1454
+ 614: <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">var_name</span>].<span class="ruby-identifier">collect!</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">e</span><span class="ruby-operator">|</span>
1455
+ 615: <span class="ruby-identifier">load_and_validate_entry</span>( <span class="ruby-identifier">e</span>.<span class="ruby-identifier">id</span> )
1456
+ 616: <span class="ruby-keyword kw">end</span>
1457
+ 617: <span class="ruby-keyword kw">end</span>
1458
+ 618: <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">var_name</span>].<span class="ruby-identifier">extend</span> <span class="ruby-constant">Hobix</span><span class="ruby-operator">::</span><span class="ruby-constant">EntryEnum</span>
1459
+ 619: <span class="ruby-keyword kw">end</span>
1460
+ 620: <span class="ruby-keyword kw">end</span>
1461
+ 621:
1462
+ 622: <span class="ruby-comment cmt">## Publish the page</span>
1463
+ 623: <span class="ruby-identifier">vars</span> = <span class="ruby-identifier">vars</span>.<span class="ruby-identifier">dup</span>
1464
+ 624: <span class="ruby-identifier">output</span> = <span class="ruby-identifier">vars</span>.<span class="ruby-identifier">delete</span>( <span class="ruby-identifier">:output</span> )
1465
+ 625: <span class="ruby-identifier">template</span> = <span class="ruby-identifier">vars</span>.<span class="ruby-identifier">delete</span>( <span class="ruby-identifier">:template</span> )
1466
+ 626: <span class="ruby-identifier">txt</span> = <span class="ruby-identifier">output</span>.<span class="ruby-identifier">load</span>( <span class="ruby-identifier">template</span>, <span class="ruby-identifier">vars</span> )
1467
+ 627: <span class="ruby-comment cmt">## A plugin perhaps needs to change the output page name</span>
1468
+ 628: <span class="ruby-identifier">full_out_path</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>( <span class="ruby-identifier">output_path</span>, <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">:page</span>].<span class="ruby-identifier">link</span>.<span class="ruby-identifier">split</span>( <span class="ruby-value str">'/'</span> ) )
1469
+ 629: <span class="ruby-identifier">saved_umask</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">umask</span>( <span class="ruby-value">0002</span> ) <span class="ruby-keyword kw">rescue</span> <span class="ruby-keyword kw">nil</span>
1470
+ 630: <span class="ruby-keyword kw">begin</span>
1471
+ 631: <span class="ruby-constant">File</span>.<span class="ruby-identifier">makedirs</span>( <span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>( <span class="ruby-identifier">full_out_path</span> ) )
1472
+ 632: <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>( <span class="ruby-identifier">full_out_path</span>, <span class="ruby-value str">'w'</span> ) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
1473
+ 633: <span class="ruby-identifier">f</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">txt</span>
1474
+ 634: <span class="ruby-keyword kw">end</span>
1475
+ 635: <span class="ruby-keyword kw">ensure</span>
1476
+ 636: <span class="ruby-constant">File</span>.<span class="ruby-identifier">umask</span>( <span class="ruby-identifier">saved_umask</span> ) <span class="ruby-keyword kw">rescue</span> <span class="ruby-keyword kw">nil</span>
1477
+ 637: <span class="ruby-keyword kw">end</span>
1478
+ 638: <span class="ruby-identifier">published</span>[<span class="ruby-identifier">vars</span>[<span class="ruby-identifier">:page</span>].<span class="ruby-identifier">link</span>] = <span class="ruby-identifier">vars</span>[<span class="ruby-identifier">:page</span>]
1479
+ 639: <span class="ruby-identifier">published_types</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">page_name</span>
1480
+ 640: <span class="ruby-keyword kw">end</span>
1481
+ 641: <span class="ruby-keyword kw">end</span>
1482
+ 642: <span class="ruby-identifier">published_types</span>.<span class="ruby-identifier">uniq!</span>
1483
+ 643: <span class="ruby-identifier">publishers</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
1484
+ 644: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">respond_to?</span> <span class="ruby-identifier">:watch</span>
1485
+ 645: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">watch</span> <span class="ruby-operator">&amp;</span> <span class="ruby-identifier">published_types</span> <span class="ruby-operator">!=</span> []
1486
+ 646: <span class="ruby-identifier">p</span>.<span class="ruby-identifier">publish</span>( <span class="ruby-identifier">published</span> )
1487
+ 647: <span class="ruby-keyword kw">end</span>
1488
+ 648: <span class="ruby-keyword kw">else</span>
1489
+ 649: <span class="ruby-identifier">p</span>.<span class="ruby-identifier">publish</span>( <span class="ruby-identifier">published</span> )
1490
+ 650: <span class="ruby-keyword kw">end</span>
1491
+ 651: <span class="ruby-keyword kw">end</span>
1492
+ 652:
1493
+ 653: <span class="ruby-identifier">commit_to_git</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@git</span>
1494
+ 654:
1495
+ 655: <span class="ruby-identifier">reset_output_map</span>
1496
+ 656: <span class="ruby-keyword kw">end</span>
1497
+ </pre>
1498
+ </div>
1499
+ </div>
1500
+ </div>
1501
+
1502
+ <div id="method-M000229" class="method-detail">
1503
+ <a name="M000229"></a>
1504
+
1505
+ <div class="method-heading">
1506
+ <a href="#M000229" class="method-signature">
1507
+ <span class="method-name">save</span><span class="method-args">( file = @hobix_yaml )</span>
1508
+ </a>
1509
+ </div>
1510
+
1511
+ <div class="method-description">
1512
+ <p>
1513
+ Save the weblog configuration to its hobix.yaml (or optionally provide a
1514
+ path where you would like to <a href="Weblog.html#M000229">save</a>.)
1515
+ </p>
1516
+ <p><a class="source-toggle" href="#"
1517
+ onclick="toggleCode('M000229-source');return false;">[Source]</a></p>
1518
+ <div class="method-source-code" id="M000229-source">
1519
+ <pre>
1520
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 420</span>
1521
+ 420: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">save</span>( <span class="ruby-identifier">file</span> = <span class="ruby-ivar">@hobix_yaml</span> )
1522
+ 421: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">file</span>
1523
+ 422: <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">&quot;Missing argument: path to save configuration (0 of 1)&quot;</span>
1524
+ 423: <span class="ruby-keyword kw">end</span>
1525
+ 424: <span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">open</span>( <span class="ruby-identifier">file</span>, <span class="ruby-value str">'w'</span> ) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
1526
+ 425: <span class="ruby-constant">YAML</span><span class="ruby-operator">::</span><span class="ruby-identifier">dump</span>( <span class="ruby-keyword kw">self</span>, <span class="ruby-identifier">f</span> )
1527
+ 426: <span class="ruby-keyword kw">end</span>
1528
+ 427: <span class="ruby-keyword kw">self</span>
1529
+ 428: <span class="ruby-keyword kw">end</span>
1530
+ </pre>
1531
+ </div>
1532
+ </div>
1533
+ </div>
1534
+
1535
+ <div id="method-M000249" class="method-detail">
1536
+ <a name="M000249"></a>
1537
+
1538
+ <div class="method-heading">
1539
+ <a href="#M000249" class="method-signature">
1540
+ <span class="method-name">sections</span><span class="method-args">( opts = nil )</span>
1541
+ </a>
1542
+ </div>
1543
+
1544
+ <div class="method-description">
1545
+ <p>
1546
+ Receive a Hash pairing all section ids with the options for that section.
1547
+ </p>
1548
+ <p><a class="source-toggle" href="#"
1549
+ onclick="toggleCode('M000249-source');return false;">[Source]</a></p>
1550
+ <div class="method-source-code" id="M000249-source">
1551
+ <pre>
1552
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 786</span>
1553
+ 786: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sections</span>( <span class="ruby-identifier">opts</span> = <span class="ruby-keyword kw">nil</span> )
1554
+ 787: <span class="ruby-identifier">sections</span> = <span class="ruby-constant">Marshal</span><span class="ruby-operator">::</span><span class="ruby-identifier">load</span>( <span class="ruby-constant">Marshal</span><span class="ruby-operator">::</span><span class="ruby-identifier">dump</span>( <span class="ruby-ivar">@sections</span> ) )
1555
+ 788: <span class="ruby-identifier">observes</span> = <span class="ruby-operator">!</span><span class="ruby-identifier">sections</span>.<span class="ruby-identifier">values</span>.<span class="ruby-identifier">detect</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span>[<span class="ruby-value str">'observe'</span>] }
1556
+ 789: <span class="ruby-identifier">storage</span>.<span class="ruby-identifier">sections</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
1557
+ 790: <span class="ruby-identifier">sections</span>[<span class="ruby-identifier">s</span>] <span class="ruby-operator">||=</span> {}
1558
+ 791: <span class="ruby-identifier">sections</span>[<span class="ruby-identifier">s</span>][<span class="ruby-value str">'observe'</span>] <span class="ruby-operator">||=</span> <span class="ruby-identifier">sections</span>[<span class="ruby-identifier">s</span>].<span class="ruby-identifier">has_key?</span>( <span class="ruby-value str">'ignore'</span> ) <span class="ruby-operator">?</span> <span class="ruby-operator">!</span><span class="ruby-identifier">sections</span>[<span class="ruby-identifier">s</span>][<span class="ruby-value str">'ignore'</span>] <span class="ruby-operator">:</span> <span class="ruby-identifier">observes</span>
1559
+ 792: <span class="ruby-identifier">sections</span>[<span class="ruby-identifier">s</span>][<span class="ruby-value str">'ignore'</span>] <span class="ruby-operator">||=</span> <span class="ruby-operator">!</span><span class="ruby-identifier">sections</span>[<span class="ruby-identifier">s</span>][<span class="ruby-value str">'observe'</span>]
1560
+ 793: <span class="ruby-keyword kw">end</span>
1561
+ 794: <span class="ruby-identifier">sections</span>
1562
+ 795: <span class="ruby-keyword kw">end</span>
1563
+ </pre>
1564
+ </div>
1565
+ </div>
1566
+ </div>
1567
+
1568
+ <div id="method-M000251" class="method-detail">
1569
+ <a name="M000251"></a>
1570
+
1571
+ <div class="method-heading">
1572
+ <a href="#M000251" class="method-signature">
1573
+ <span class="method-name">sections_ignored</span><span class="method-args">()</span>
1574
+ </a>
1575
+ </div>
1576
+
1577
+ <div class="method-description">
1578
+ <p>
1579
+ Returns an Array of entry paths ignored by general querying. Storage
1580
+ plugins must withhold these entries from queries, unless the :all =&gt;
1581
+ true setting is passed to the query.
1582
+ </p>
1583
+ <p><a class="source-toggle" href="#"
1584
+ onclick="toggleCode('M000251-source');return false;">[Source]</a></p>
1585
+ <div class="method-source-code" id="M000251-source">
1586
+ <pre>
1587
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 811</span>
1588
+ 811: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sections_ignored</span>
1589
+ 812: <span class="ruby-identifier">sections</span>.<span class="ruby-identifier">collect</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">k</span>, <span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
1590
+ 813: <span class="ruby-identifier">k</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">v</span>[<span class="ruby-value str">'ignore'</span>]
1591
+ 814: <span class="ruby-keyword kw">end</span>.<span class="ruby-identifier">compact</span>
1592
+ 815: <span class="ruby-keyword kw">end</span>
1593
+ </pre>
1594
+ </div>
1595
+ </div>
1596
+ </div>
1597
+
1598
+ <div id="method-M000250" class="method-detail">
1599
+ <a name="M000250"></a>
1600
+
1601
+ <div class="method-heading">
1602
+ <a href="#M000250" class="method-signature">
1603
+ <span class="method-name">sections_sorts</span><span class="method-args">()</span>
1604
+ </a>
1605
+ </div>
1606
+
1607
+ <div class="method-description">
1608
+ <p>
1609
+ Returns a hash of special sorting cases. Key is the entry path, value is
1610
+ the sorting method. Storage plugins must honor these default sorts.
1611
+ </p>
1612
+ <p><a class="source-toggle" href="#"
1613
+ onclick="toggleCode('M000250-source');return false;">[Source]</a></p>
1614
+ <div class="method-source-code" id="M000250-source">
1615
+ <pre>
1616
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 800</span>
1617
+ 800: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">sections_sorts</span>
1618
+ 801: <span class="ruby-ivar">@sections</span>.<span class="ruby-identifier">inject</span>( {} ) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">sorts</span>, <span class="ruby-identifier">set</span><span class="ruby-operator">|</span>
1619
+ 802: <span class="ruby-identifier">k</span>, <span class="ruby-identifier">v</span> = <span class="ruby-identifier">set</span>
1620
+ 803: <span class="ruby-identifier">sorts</span>[<span class="ruby-identifier">k</span>] = <span class="ruby-identifier">v</span>[<span class="ruby-value str">'sort_by'</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">v</span>[<span class="ruby-value str">'sort_by'</span>]
1621
+ 804: <span class="ruby-identifier">sorts</span>
1622
+ 805: <span class="ruby-keyword kw">end</span>
1623
+ 806: <span class="ruby-keyword kw">end</span>
1624
+ </pre>
1625
+ </div>
1626
+ </div>
1627
+ </div>
1628
+
1629
+ <div id="method-M000231" class="method-detail">
1630
+ <a name="M000231"></a>
1631
+
1632
+ <div class="method-heading">
1633
+ <a href="#M000231" class="method-signature">
1634
+ <span class="method-name">setup</span><span class="method-args">()</span>
1635
+ </a>
1636
+ </div>
1637
+
1638
+ <div class="method-description">
1639
+ <p>
1640
+ Sets up a weblog. Should only be run once (which <a
1641
+ href="../Hobix.html">Hobix</a> performs automatically upon blog creation).
1642
+ </p>
1643
+ <p><a class="source-toggle" href="#"
1644
+ onclick="toggleCode('M000231-source');return false;">[Source]</a></p>
1645
+ <div class="method-source-code" id="M000231-source">
1646
+ <pre>
1647
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 457</span>
1648
+ 457: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">setup</span>
1649
+ 458: <span class="ruby-ivar">@plugins</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
1650
+ 459: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">respond_to?</span> <span class="ruby-identifier">:setup</span>
1651
+ 460: <span class="ruby-identifier">p</span>.<span class="ruby-identifier">setup</span>
1652
+ 461: <span class="ruby-keyword kw">end</span>
1653
+ 462: <span class="ruby-keyword kw">end</span>
1654
+ 463: <span class="ruby-keyword kw">end</span>
1655
+ </pre>
1656
+ </div>
1657
+ </div>
1658
+ </div>
1659
+
1660
+ <div id="method-M000244" class="method-detail">
1661
+ <a name="M000244"></a>
1662
+
1663
+ <div class="method-heading">
1664
+ <a href="#M000244" class="method-signature">
1665
+ <span class="method-name">skel_daily</span><span class="method-args">( path_storage, section_path ) {|:page =&gt; page, :entries =&gt; curr[1]| ...}</span>
1666
+ </a>
1667
+ </div>
1668
+
1669
+ <div class="method-description">
1670
+ <p>
1671
+ Handler for templates with `daily&#8217; prefix. These templates will
1672
+ receive a list of entries for each day that has at least one entry created
1673
+ in its time period. This handler requests daily pages to be output as
1674
+ `/%Y/%m/%d.ext&#8217;.
1675
+ </p>
1676
+ <p><a class="source-toggle" href="#"
1677
+ onclick="toggleCode('M000244-source');return false;">[Source]</a></p>
1678
+ <div class="method-source-code" id="M000244-source">
1679
+ <pre>
1680
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 683</span>
1681
+ 683: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">skel_daily</span>( <span class="ruby-identifier">path_storage</span>, <span class="ruby-identifier">section_path</span> )
1682
+ 684: <span class="ruby-identifier">entry_range</span> = <span class="ruby-identifier">path_storage</span>.<span class="ruby-identifier">find</span>
1683
+ 685: <span class="ruby-identifier">first_time</span>, <span class="ruby-identifier">last_time</span> = <span class="ruby-identifier">entry_range</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">created</span>, <span class="ruby-identifier">entry_range</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">created</span>
1684
+ 686: <span class="ruby-identifier">start</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">mktime</span>( <span class="ruby-identifier">first_time</span>.<span class="ruby-identifier">year</span>, <span class="ruby-identifier">first_time</span>.<span class="ruby-identifier">month</span>, <span class="ruby-identifier">first_time</span>.<span class="ruby-identifier">day</span>, <span class="ruby-value">0</span>, <span class="ruby-value">0</span>, <span class="ruby-value">0</span> ) <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
1685
+ 687: <span class="ruby-identifier">stop</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">mktime</span>( <span class="ruby-identifier">last_time</span>.<span class="ruby-identifier">year</span>, <span class="ruby-identifier">last_time</span>.<span class="ruby-identifier">month</span>, <span class="ruby-identifier">last_time</span>.<span class="ruby-identifier">day</span>, <span class="ruby-value">23</span>, <span class="ruby-value">59</span>, <span class="ruby-value">59</span> )
1686
+ 688: <span class="ruby-identifier">days</span> = []
1687
+ 689: <span class="ruby-identifier">one_day</span> = <span class="ruby-value">24</span> <span class="ruby-operator">*</span> <span class="ruby-value">60</span> <span class="ruby-operator">*</span> <span class="ruby-value">60</span>
1688
+ 690: <span class="ruby-keyword kw">until</span> <span class="ruby-identifier">start</span> <span class="ruby-operator">&gt;</span> <span class="ruby-identifier">stop</span>
1689
+ 691: <span class="ruby-identifier">day_entries</span> = <span class="ruby-identifier">path_storage</span>.<span class="ruby-identifier">within</span>( <span class="ruby-identifier">start</span>, <span class="ruby-identifier">start</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">one_day</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span> )
1690
+ 692: <span class="ruby-identifier">days</span> <span class="ruby-operator">&lt;&lt;</span> [<span class="ruby-identifier">day_entries</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">created</span>, <span class="ruby-identifier">day_entries</span>] <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">day_entries</span>.<span class="ruby-identifier">empty?</span>
1691
+ 693: <span class="ruby-identifier">start</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">one_day</span>
1692
+ 694: <span class="ruby-keyword kw">end</span>
1693
+ 695: <span class="ruby-identifier">days</span>.<span class="ruby-identifier">extend</span> <span class="ruby-constant">Hobix</span><span class="ruby-operator">::</span><span class="ruby-constant">Enumerable</span>
1694
+ 696: <span class="ruby-identifier">days</span>.<span class="ruby-identifier">each_with_neighbors</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">prev</span>, <span class="ruby-identifier">curr</span>, <span class="ruby-identifier">nextd</span><span class="ruby-operator">|</span>
1695
+ 697: <span class="ruby-identifier">page</span> = <span class="ruby-constant">Page</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">curr</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">strftime</span>( <span class="ruby-value str">&quot;%Y/%m/%d&quot;</span> ), <span class="ruby-identifier">section_path</span> )
1696
+ 698: <span class="ruby-identifier">page</span>.<span class="ruby-identifier">prev</span> = <span class="ruby-identifier">prev</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">strftime</span>( <span class="ruby-value str">&quot;%Y/%m/%d&quot;</span> ) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">prev</span>
1697
+ 699: <span class="ruby-identifier">page</span>.<span class="ruby-identifier">next</span> = <span class="ruby-identifier">nextd</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">strftime</span>( <span class="ruby-value str">&quot;%Y/%m/%d&quot;</span> ) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">nextd</span>
1698
+ 700: <span class="ruby-identifier">page</span>.<span class="ruby-identifier">timestamp</span> = <span class="ruby-identifier">curr</span>[<span class="ruby-value">0</span>]
1699
+ 701: <span class="ruby-identifier">page</span>.<span class="ruby-identifier">updated</span> = <span class="ruby-identifier">path_storage</span>.<span class="ruby-identifier">last_updated</span>( <span class="ruby-identifier">curr</span>[<span class="ruby-value">1</span>] )
1700
+ 702: <span class="ruby-keyword kw">yield</span> <span class="ruby-operator">:</span><span class="ruby-identifier">page</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">page</span>, <span class="ruby-identifier">:entries</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">curr</span>[<span class="ruby-value">1</span>]
1701
+ 703: <span class="ruby-keyword kw">end</span>
1702
+ 704: <span class="ruby-keyword kw">end</span>
1703
+ </pre>
1704
+ </div>
1705
+ </div>
1706
+ </div>
1707
+
1708
+ <div id="method-M000247" class="method-detail">
1709
+ <a name="M000247"></a>
1710
+
1711
+ <div class="method-heading">
1712
+ <a href="#M000247" class="method-signature">
1713
+ <span class="method-name">skel_entry</span><span class="method-args">( path_storage, section_path ) {|:page =&gt; page, :entry =&gt; entry| ...}</span>
1714
+ </a>
1715
+ </div>
1716
+
1717
+ <div class="method-description">
1718
+ <p>
1719
+ Handler for templates with `entry&#8217; prefix. These templates will
1720
+ receive one entry for each entry in the weblog. The handler requests entry
1721
+ pages to be output as `/shortName.ext&#8217;.
1722
+ </p>
1723
+ <p><a class="source-toggle" href="#"
1724
+ onclick="toggleCode('M000247-source');return false;">[Source]</a></p>
1725
+ <div class="method-source-code" id="M000247-source">
1726
+ <pre>
1727
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 749</span>
1728
+ 749: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">skel_entry</span>( <span class="ruby-identifier">path_storage</span>, <span class="ruby-identifier">section_path</span> )
1729
+ 750: <span class="ruby-identifier">all_entries</span> = [<span class="ruby-identifier">path_storage</span>.<span class="ruby-identifier">find</span>]
1730
+ 751: <span class="ruby-identifier">all_entries</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">sections_ignored</span>.<span class="ruby-identifier">collect</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">ign</span><span class="ruby-operator">|</span> <span class="ruby-identifier">path_storage</span>.<span class="ruby-identifier">find</span>( <span class="ruby-identifier">:all</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">true</span>, <span class="ruby-identifier">:inpath</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">ign</span> ) }
1731
+ 752: <span class="ruby-identifier">all_entries</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">entry_set</span><span class="ruby-operator">|</span>
1732
+ 753: <span class="ruby-identifier">entry_set</span>.<span class="ruby-identifier">extend</span> <span class="ruby-constant">Hobix</span><span class="ruby-operator">::</span><span class="ruby-constant">Enumerable</span>
1733
+ 754: <span class="ruby-identifier">entry_set</span>.<span class="ruby-identifier">each_with_neighbors</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">nexte</span>, <span class="ruby-identifier">entry</span>, <span class="ruby-identifier">prev</span><span class="ruby-operator">|</span>
1734
+ 755: <span class="ruby-identifier">page</span> = <span class="ruby-constant">Page</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">entry</span>.<span class="ruby-identifier">id</span> )
1735
+ 756: <span class="ruby-identifier">page</span>.<span class="ruby-identifier">prev</span> = <span class="ruby-identifier">prev</span>.<span class="ruby-identifier">id</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">prev</span>
1736
+ 757: <span class="ruby-identifier">page</span>.<span class="ruby-identifier">next</span> = <span class="ruby-identifier">nexte</span>.<span class="ruby-identifier">id</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">nexte</span>
1737
+ 758: <span class="ruby-identifier">page</span>.<span class="ruby-identifier">timestamp</span> = <span class="ruby-identifier">entry</span>.<span class="ruby-identifier">created</span>
1738
+ 759: <span class="ruby-identifier">page</span>.<span class="ruby-identifier">updated</span> = <span class="ruby-identifier">path_storage</span>.<span class="ruby-identifier">updated</span>( <span class="ruby-identifier">entry</span>.<span class="ruby-identifier">id</span> )
1739
+ 760: <span class="ruby-keyword kw">yield</span> <span class="ruby-operator">:</span><span class="ruby-identifier">page</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">page</span>, <span class="ruby-identifier">:entry</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">entry</span>
1740
+ 761: <span class="ruby-keyword kw">end</span>
1741
+ 762: <span class="ruby-keyword kw">end</span>
1742
+ 763: <span class="ruby-keyword kw">end</span>
1743
+ </pre>
1744
+ </div>
1745
+ </div>
1746
+ </div>
1747
+
1748
+ <div id="method-M000243" class="method-detail">
1749
+ <a name="M000243"></a>
1750
+
1751
+ <div class="method-heading">
1752
+ <a href="#M000243" class="method-signature">
1753
+ <span class="method-name">skel_index</span><span class="method-args">( path_storage, section_path ) {|:page =&gt; page, :entries =&gt; index_entries| ...}</span>
1754
+ </a>
1755
+ </div>
1756
+
1757
+ <div class="method-description">
1758
+ <p>
1759
+ Handler for templates with `index&#8217; prefix. These templates will
1760
+ receive entries loaded by +<a
1761
+ href="BaseStorage.html#M000121">Hobix::BaseStorage#lastn</a>+. Only one
1762
+ index page is requested by this handler.
1763
+ </p>
1764
+ <p><a class="source-toggle" href="#"
1765
+ onclick="toggleCode('M000243-source');return false;">[Source]</a></p>
1766
+ <div class="method-source-code" id="M000243-source">
1767
+ <pre>
1768
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 670</span>
1769
+ 670: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">skel_index</span>( <span class="ruby-identifier">path_storage</span>, <span class="ruby-identifier">section_path</span> )
1770
+ 671: <span class="ruby-identifier">index_entries</span> = <span class="ruby-identifier">path_storage</span>.<span class="ruby-identifier">lastn</span>( <span class="ruby-ivar">@lastn</span> )
1771
+ 672: <span class="ruby-identifier">page</span> = <span class="ruby-constant">Page</span>.<span class="ruby-identifier">new</span>( <span class="ruby-value str">'index'</span>, <span class="ruby-identifier">section_path</span> )
1772
+ 673: <span class="ruby-identifier">page</span>.<span class="ruby-identifier">prev</span> = <span class="ruby-identifier">index_entries</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">created</span>.<span class="ruby-identifier">strftime</span>( <span class="ruby-value str">&quot;%Y/%m/index&quot;</span> )
1773
+ 674: <span class="ruby-identifier">page</span>.<span class="ruby-identifier">timestamp</span> = <span class="ruby-identifier">index_entries</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">created</span>
1774
+ 675: <span class="ruby-identifier">page</span>.<span class="ruby-identifier">updated</span> = <span class="ruby-identifier">path_storage</span>.<span class="ruby-identifier">last_updated</span>( <span class="ruby-identifier">index_entries</span> )
1775
+ 676: <span class="ruby-keyword kw">yield</span> <span class="ruby-operator">:</span><span class="ruby-identifier">page</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">page</span>, <span class="ruby-identifier">:entries</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">index_entries</span>
1776
+ 677: <span class="ruby-keyword kw">end</span>
1777
+ </pre>
1778
+ </div>
1779
+ </div>
1780
+ </div>
1781
+
1782
+ <div id="method-M000245" class="method-detail">
1783
+ <a name="M000245"></a>
1784
+
1785
+ <div class="method-heading">
1786
+ <a href="#M000245" class="method-signature">
1787
+ <span class="method-name">skel_monthly</span><span class="method-args">( path_storage, section_path ) {|:page =&gt; page, :entries =&gt; entries| ...}</span>
1788
+ </a>
1789
+ </div>
1790
+
1791
+ <div class="method-description">
1792
+ <p>
1793
+ Handler for templates with `monthly&#8217; prefix. These templates will
1794
+ receive a list of entries for each month that has at least one entry
1795
+ created in its time period. This handler requests monthly pages to be
1796
+ output as `/%Y/%m/index.ext&#8217;.
1797
+ </p>
1798
+ <p><a class="source-toggle" href="#"
1799
+ onclick="toggleCode('M000245-source');return false;">[Source]</a></p>
1800
+ <div class="method-source-code" id="M000245-source">
1801
+ <pre>
1802
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 710</span>
1803
+ 710: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">skel_monthly</span>( <span class="ruby-identifier">path_storage</span>, <span class="ruby-identifier">section_path</span> )
1804
+ 711: <span class="ruby-identifier">months</span> = <span class="ruby-identifier">path_storage</span>.<span class="ruby-identifier">get_months</span>( <span class="ruby-identifier">path_storage</span>.<span class="ruby-identifier">find</span> )
1805
+ 712: <span class="ruby-identifier">months</span>.<span class="ruby-identifier">extend</span> <span class="ruby-constant">Hobix</span><span class="ruby-operator">::</span><span class="ruby-constant">Enumerable</span>
1806
+ 713: <span class="ruby-identifier">months</span>.<span class="ruby-identifier">each_with_neighbors</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">prev</span>, <span class="ruby-identifier">curr</span>, <span class="ruby-identifier">nextm</span><span class="ruby-operator">|</span>
1807
+ 714: <span class="ruby-identifier">entries</span> = <span class="ruby-identifier">path_storage</span>.<span class="ruby-identifier">within</span>( <span class="ruby-identifier">curr</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">curr</span>[<span class="ruby-value">1</span>] )
1808
+ 715: <span class="ruby-identifier">page</span> = <span class="ruby-constant">Page</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">curr</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">strftime</span>( <span class="ruby-value str">&quot;%Y/%m/index&quot;</span> ), <span class="ruby-identifier">section_path</span> )
1809
+ 716: <span class="ruby-identifier">page</span>.<span class="ruby-identifier">prev</span> = <span class="ruby-identifier">prev</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">strftime</span>( <span class="ruby-value str">&quot;%Y/%m/index&quot;</span> ) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">prev</span>
1810
+ 717: <span class="ruby-identifier">page</span>.<span class="ruby-identifier">next</span> = <span class="ruby-identifier">nextm</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">strftime</span>( <span class="ruby-value str">&quot;%Y/%m/index&quot;</span> ) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">nextm</span>
1811
+ 718: <span class="ruby-identifier">page</span>.<span class="ruby-identifier">timestamp</span> = <span class="ruby-identifier">curr</span>[<span class="ruby-value">1</span>]
1812
+ 719: <span class="ruby-identifier">page</span>.<span class="ruby-identifier">updated</span> = <span class="ruby-identifier">path_storage</span>.<span class="ruby-identifier">last_updated</span>( <span class="ruby-identifier">entries</span> )
1813
+ 720: <span class="ruby-keyword kw">yield</span> <span class="ruby-operator">:</span><span class="ruby-identifier">page</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">page</span>, <span class="ruby-identifier">:entries</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">entries</span>
1814
+ 721: <span class="ruby-keyword kw">end</span>
1815
+ 722: <span class="ruby-keyword kw">end</span>
1816
+ </pre>
1817
+ </div>
1818
+ </div>
1819
+ </div>
1820
+
1821
+ <div id="method-M000218" class="method-detail">
1822
+ <a name="M000218"></a>
1823
+
1824
+ <div class="method-heading">
1825
+ <a href="#M000218" class="method-signature">
1826
+ <span class="method-name">skel_path</span><span class="method-args">()</span>
1827
+ </a>
1828
+ </div>
1829
+
1830
+ <div class="method-description">
1831
+ <p><a class="source-toggle" href="#"
1832
+ onclick="toggleCode('M000218-source');return false;">[Source]</a></p>
1833
+ <div class="method-source-code" id="M000218-source">
1834
+ <pre>
1835
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 360</span>
1836
+ 360: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">skel_path</span>; <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>( <span class="ruby-ivar">@skel_path</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">default_skel_path</span>, <span class="ruby-ivar">@path</span> ).<span class="ruby-identifier">untaint</span>; <span class="ruby-keyword kw">end</span>
1837
+ </pre>
1838
+ </div>
1839
+ </div>
1840
+ </div>
1841
+
1842
+ <div id="method-M000248" class="method-detail">
1843
+ <a name="M000248"></a>
1844
+
1845
+ <div class="method-heading">
1846
+ <a href="#M000248" class="method-signature">
1847
+ <span class="method-name">skel_section</span><span class="method-args">( path_storage, section_path ) {|:page =&gt; page, :entries =&gt; entries| ...}</span>
1848
+ </a>
1849
+ </div>
1850
+
1851
+ <div class="method-description">
1852
+ <p>
1853
+ Handler for templates with `section&#8217; prefix. These templates will
1854
+ receive all entries below a given directory. The handler requests will be
1855
+ output as `/section/index.ext&#8217;.
1856
+ </p>
1857
+ <p><a class="source-toggle" href="#"
1858
+ onclick="toggleCode('M000248-source');return false;">[Source]</a></p>
1859
+ <div class="method-source-code" id="M000248-source">
1860
+ <pre>
1861
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 768</span>
1862
+ 768: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">skel_section</span>( <span class="ruby-identifier">path_storage</span>, <span class="ruby-identifier">section_path</span> )
1863
+ 769: <span class="ruby-identifier">section_map</span> = {}
1864
+ 770: <span class="ruby-identifier">path_storage</span>.<span class="ruby-identifier">all</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">entry</span><span class="ruby-operator">|</span>
1865
+ 771: <span class="ruby-identifier">dirs</span> = <span class="ruby-identifier">entry</span>.<span class="ruby-identifier">id</span>.<span class="ruby-identifier">split</span>( <span class="ruby-value str">'/'</span> )
1866
+ 772: <span class="ruby-keyword kw">while</span> ( <span class="ruby-identifier">dirs</span>.<span class="ruby-identifier">pop</span>; <span class="ruby-identifier">dirs</span>.<span class="ruby-identifier">first</span> )
1867
+ 773: <span class="ruby-identifier">section</span> = <span class="ruby-identifier">dirs</span>.<span class="ruby-identifier">join</span>( <span class="ruby-value str">'/'</span> )
1868
+ 774: <span class="ruby-identifier">section_map</span>[ <span class="ruby-identifier">section</span> ] <span class="ruby-operator">||=</span> []
1869
+ 775: <span class="ruby-identifier">section_map</span>[ <span class="ruby-identifier">section</span> ] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">entry</span>
1870
+ 776: <span class="ruby-keyword kw">end</span>
1871
+ 777: <span class="ruby-keyword kw">end</span>
1872
+ 778: <span class="ruby-identifier">section_map</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">section</span>, <span class="ruby-identifier">entries</span><span class="ruby-operator">|</span>
1873
+ 779: <span class="ruby-identifier">page</span> = <span class="ruby-constant">Page</span>.<span class="ruby-identifier">new</span>( <span class="ruby-node">&quot;/#{ section }/index&quot;</span> )
1874
+ 780: <span class="ruby-identifier">page</span>.<span class="ruby-identifier">updated</span> = <span class="ruby-identifier">path_storage</span>.<span class="ruby-identifier">last_updated</span>( <span class="ruby-identifier">entries</span> )
1875
+ 781: <span class="ruby-keyword kw">yield</span> <span class="ruby-operator">:</span><span class="ruby-identifier">page</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">page</span>, <span class="ruby-identifier">:entries</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">entries</span>
1876
+ 782: <span class="ruby-keyword kw">end</span>
1877
+ 783: <span class="ruby-keyword kw">end</span>
1878
+ </pre>
1879
+ </div>
1880
+ </div>
1881
+ </div>
1882
+
1883
+ <div id="method-M000252" class="method-detail">
1884
+ <a name="M000252"></a>
1885
+
1886
+ <div class="method-heading">
1887
+ <a href="#M000252" class="method-signature">
1888
+ <span class="method-name">skel_tags</span><span class="method-args">( path_storage, section_path ) {|:page =&gt; page, :entries =&gt; entries| ...}</span>
1889
+ </a>
1890
+ </div>
1891
+
1892
+ <div class="method-description">
1893
+ <p>
1894
+ Handler for templates with `tags&#8217; prefix. These templates will
1895
+ receive a tag with all entries tagged with it. The handler requests will be
1896
+ output as `/tags/&lt;tag&gt;/index.ext&#8217;.
1897
+ </p>
1898
+ <p><a class="source-toggle" href="#"
1899
+ onclick="toggleCode('M000252-source');return false;">[Source]</a></p>
1900
+ <div class="method-source-code" id="M000252-source">
1901
+ <pre>
1902
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 820</span>
1903
+ 820: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">skel_tags</span>( <span class="ruby-identifier">path_storage</span>, <span class="ruby-identifier">section_path</span> )
1904
+ 821: <span class="ruby-comment cmt"># Get a list of all known tags</span>
1905
+ 822: <span class="ruby-identifier">tags</span> = <span class="ruby-identifier">path_storage</span>.<span class="ruby-identifier">find</span>( <span class="ruby-identifier">:all</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">true</span> ).<span class="ruby-identifier">map</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">e</span><span class="ruby-operator">|</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">tags</span> }.<span class="ruby-identifier">flatten</span>.<span class="ruby-identifier">uniq</span>
1906
+ 823:
1907
+ 824: <span class="ruby-identifier">tags</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">tag</span><span class="ruby-operator">|</span>
1908
+ 825: <span class="ruby-identifier">entries</span> = <span class="ruby-identifier">path_storage</span>.<span class="ruby-identifier">find</span>.<span class="ruby-identifier">find_all</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">e</span><span class="ruby-operator">|</span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">tags</span>.<span class="ruby-identifier">member?</span> <span class="ruby-identifier">tag</span> }
1909
+ 826: <span class="ruby-identifier">page</span> = <span class="ruby-constant">Page</span>.<span class="ruby-identifier">new</span>( <span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">join</span>( <span class="ruby-value str">'tags'</span>,<span class="ruby-identifier">tag</span>,<span class="ruby-value str">'index'</span> ), <span class="ruby-identifier">section_path</span> )
1910
+ 827: <span class="ruby-identifier">page</span>.<span class="ruby-identifier">updated</span> = <span class="ruby-identifier">path_storage</span>.<span class="ruby-identifier">last_updated</span>( <span class="ruby-identifier">entries</span> )
1911
+ 828: <span class="ruby-keyword kw">yield</span> <span class="ruby-operator">:</span><span class="ruby-identifier">page</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">page</span>, <span class="ruby-identifier">:entries</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">entries</span>
1912
+ 829: <span class="ruby-keyword kw">end</span>
1913
+ 830: <span class="ruby-keyword kw">end</span>
1914
+ </pre>
1915
+ </div>
1916
+ </div>
1917
+ </div>
1918
+
1919
+ <div id="method-M000246" class="method-detail">
1920
+ <a name="M000246"></a>
1921
+
1922
+ <div class="method-heading">
1923
+ <a href="#M000246" class="method-signature">
1924
+ <span class="method-name">skel_yearly</span><span class="method-args">( path_storage, section_path ) {|:page =&gt; page, :entries =&gt; entries| ...}</span>
1925
+ </a>
1926
+ </div>
1927
+
1928
+ <div class="method-description">
1929
+ <p>
1930
+ Handler for templates with `yearly&#8217; prefix. These templates will
1931
+ receive a list of entries for each month that has at least one entry
1932
+ created in its time period. This handler requests yearly pages to be output
1933
+ as `/%Y/index.ext&#8217;.
1934
+ </p>
1935
+ <p><a class="source-toggle" href="#"
1936
+ onclick="toggleCode('M000246-source');return false;">[Source]</a></p>
1937
+ <div class="method-source-code" id="M000246-source">
1938
+ <pre>
1939
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 728</span>
1940
+ 728: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">skel_yearly</span>( <span class="ruby-identifier">path_storage</span>, <span class="ruby-identifier">section_path</span> )
1941
+ 729: <span class="ruby-identifier">entry_range</span> = <span class="ruby-identifier">path_storage</span>.<span class="ruby-identifier">find</span>
1942
+ 730: <span class="ruby-identifier">first_time</span>, <span class="ruby-identifier">last_time</span> = <span class="ruby-identifier">entry_range</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">created</span>, <span class="ruby-identifier">entry_range</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">created</span>
1943
+ 731: <span class="ruby-identifier">years</span> = (<span class="ruby-identifier">first_time</span>.<span class="ruby-identifier">year</span><span class="ruby-operator">..</span><span class="ruby-identifier">last_time</span>.<span class="ruby-identifier">year</span>).<span class="ruby-identifier">collect</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">y</span><span class="ruby-operator">|</span>
1944
+ 732: [ <span class="ruby-constant">Time</span>.<span class="ruby-identifier">mktime</span>( <span class="ruby-identifier">y</span>, <span class="ruby-value">1</span>, <span class="ruby-value">1</span> ), <span class="ruby-constant">Time</span>.<span class="ruby-identifier">mktime</span>( <span class="ruby-identifier">y</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>, <span class="ruby-value">1</span>, <span class="ruby-value">1</span> ) <span class="ruby-operator">-</span> <span class="ruby-value">1</span> ]
1945
+ 733: <span class="ruby-keyword kw">end</span>
1946
+ 734: <span class="ruby-identifier">years</span>.<span class="ruby-identifier">extend</span> <span class="ruby-constant">Hobix</span><span class="ruby-operator">::</span><span class="ruby-constant">Enumerable</span>
1947
+ 735: <span class="ruby-identifier">years</span>.<span class="ruby-identifier">each_with_neighbors</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">prev</span>, <span class="ruby-identifier">curr</span>, <span class="ruby-identifier">nextm</span><span class="ruby-operator">|</span>
1948
+ 736: <span class="ruby-identifier">entries</span> = <span class="ruby-identifier">path_storage</span>.<span class="ruby-identifier">within</span>( <span class="ruby-identifier">curr</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">curr</span>[<span class="ruby-value">1</span>] )
1949
+ 737: <span class="ruby-identifier">page</span> = <span class="ruby-constant">Page</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">curr</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">strftime</span>( <span class="ruby-value str">&quot;%Y/index&quot;</span> ), <span class="ruby-identifier">section_path</span> )
1950
+ 738: <span class="ruby-identifier">page</span>.<span class="ruby-identifier">prev</span> = <span class="ruby-identifier">prev</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">strftime</span>( <span class="ruby-value str">&quot;%Y/index&quot;</span> ) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">prev</span>
1951
+ 739: <span class="ruby-identifier">page</span>.<span class="ruby-identifier">next</span> = <span class="ruby-identifier">nextm</span>[<span class="ruby-value">0</span>].<span class="ruby-identifier">strftime</span>( <span class="ruby-value str">&quot;%Y/index&quot;</span> ) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">nextm</span>
1952
+ 740: <span class="ruby-identifier">page</span>.<span class="ruby-identifier">timestamp</span> = <span class="ruby-identifier">curr</span>[<span class="ruby-value">1</span>]
1953
+ 741: <span class="ruby-identifier">page</span>.<span class="ruby-identifier">updated</span> = <span class="ruby-identifier">path_storage</span>.<span class="ruby-identifier">last_updated</span>( <span class="ruby-identifier">entries</span> )
1954
+ 742: <span class="ruby-keyword kw">yield</span> <span class="ruby-operator">:</span><span class="ruby-identifier">page</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">page</span>, <span class="ruby-identifier">:entries</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">entries</span>
1955
+ 743: <span class="ruby-keyword kw">end</span>
1956
+ 744: <span class="ruby-keyword kw">end</span>
1957
+ </pre>
1958
+ </div>
1959
+ </div>
1960
+ </div>
1961
+
1962
+ <div id="method-M000208" class="method-detail">
1963
+ <a name="M000208"></a>
1964
+
1965
+ <div class="method-heading">
1966
+ <a href="#M000208" class="method-signature">
1967
+ <span class="method-name">start</span><span class="method-args">( hobix_yaml )</span>
1968
+ </a>
1969
+ </div>
1970
+
1971
+ <div class="method-description">
1972
+ <p>
1973
+ After the weblog is initialize, the <tt><a
1974
+ href="Weblog.html#M000208">start</a></tt> method is called with the full
1975
+ system path to the directory containing the configuration.
1976
+ </p>
1977
+ <p>
1978
+ This method sets up all the paths and loads the plugins.
1979
+ </p>
1980
+ <p><a class="source-toggle" href="#"
1981
+ onclick="toggleCode('M000208-source');return false;">[Source]</a></p>
1982
+ <div class="method-source-code" id="M000208-source">
1983
+ <pre>
1984
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 323</span>
1985
+ 323: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">start</span>( <span class="ruby-identifier">hobix_yaml</span> )
1986
+ 324: <span class="ruby-ivar">@hobix_yaml</span> = <span class="ruby-identifier">hobix_yaml</span>
1987
+ 325: <span class="ruby-ivar">@path</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>( <span class="ruby-identifier">hobix_yaml</span> )
1988
+ 326: <span class="ruby-ivar">@sections</span> <span class="ruby-operator">||=</span> {}
1989
+ 327: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span>( <span class="ruby-identifier">lib_path</span> )
1990
+ 328: <span class="ruby-identifier">$LOAD_PATH</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">lib_path</span>
1991
+ 329: <span class="ruby-keyword kw">end</span>
1992
+ 330: <span class="ruby-ivar">@plugins</span> = []
1993
+ 331: <span class="ruby-ivar">@requires</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">req</span><span class="ruby-operator">|</span>
1994
+ 332: <span class="ruby-identifier">opts</span> = <span class="ruby-keyword kw">nil</span>
1995
+ 333: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">req</span>.<span class="ruby-identifier">respond_to?</span> <span class="ruby-identifier">:to_str</span>
1996
+ 334: <span class="ruby-identifier">req</span>, <span class="ruby-identifier">opts</span> = <span class="ruby-identifier">req</span>.<span class="ruby-identifier">to_a</span>.<span class="ruby-identifier">first</span>
1997
+ 335: <span class="ruby-keyword kw">end</span>
1998
+ 336: <span class="ruby-identifier">plugin_conf</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>( <span class="ruby-ivar">@path</span>, <span class="ruby-identifier">req</span>.<span class="ruby-identifier">gsub</span>( <span class="ruby-regexp re">/\W+/</span>, <span class="ruby-value str">'.'</span> ) )
1999
+ 337: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span> <span class="ruby-identifier">plugin_conf</span>
2000
+ 338: <span class="ruby-identifier">puts</span> <span class="ruby-node">&quot;*** Loading #{ plugin_conf }&quot;</span>
2001
+ 339: <span class="ruby-identifier">plugin_conf</span> = <span class="ruby-constant">YAML</span><span class="ruby-operator">::</span><span class="ruby-identifier">load_file</span> <span class="ruby-identifier">plugin_conf</span>
2002
+ 340: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">opts</span>
2003
+ 341: <span class="ruby-identifier">opts</span>.<span class="ruby-identifier">merge!</span> <span class="ruby-identifier">plugin_conf</span>
2004
+ 342: <span class="ruby-keyword kw">else</span>
2005
+ 343: <span class="ruby-identifier">opts</span> = <span class="ruby-identifier">plugin_conf</span>
2006
+ 344: <span class="ruby-keyword kw">end</span>
2007
+ 345: <span class="ruby-keyword kw">end</span>
2008
+ 346: <span class="ruby-ivar">@plugins</span> <span class="ruby-operator">+=</span> <span class="ruby-constant">Hobix</span><span class="ruby-operator">::</span><span class="ruby-constant">BasePlugin</span><span class="ruby-operator">::</span><span class="ruby-identifier">start</span>( <span class="ruby-identifier">req</span>, <span class="ruby-identifier">opts</span>, <span class="ruby-keyword kw">self</span> )
2009
+ 347: <span class="ruby-keyword kw">end</span>
2010
+ 348: <span class="ruby-keyword kw">end</span>
2011
+ </pre>
2012
+ </div>
2013
+ </div>
2014
+ </div>
2015
+
2016
+ <div id="method-M000232" class="method-detail">
2017
+ <a name="M000232"></a>
2018
+
2019
+ <div class="method-heading">
2020
+ <a href="#M000232" class="method-signature">
2021
+ <span class="method-name">storage</span><span class="method-args">()</span>
2022
+ </a>
2023
+ </div>
2024
+
2025
+ <div class="method-description">
2026
+ <p>
2027
+ Returns the <a href="Weblog.html#M000232">storage</a> plugin currently in
2028
+ use. (There can be only one per weblog.)
2029
+ </p>
2030
+ <p><a class="source-toggle" href="#"
2031
+ onclick="toggleCode('M000232-source');return false;">[Source]</a></p>
2032
+ <div class="method-source-code" id="M000232-source">
2033
+ <pre>
2034
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 467</span>
2035
+ 467: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">storage</span>
2036
+ 468: <span class="ruby-ivar">@plugins</span>.<span class="ruby-identifier">detect</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span> <span class="ruby-identifier">p</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">BaseStorage</span> }
2037
+ 469: <span class="ruby-keyword kw">end</span>
2038
+ </pre>
2039
+ </div>
2040
+ </div>
2041
+ </div>
2042
+
2043
+ <div id="method-M000258" class="method-detail">
2044
+ <a name="M000258"></a>
2045
+
2046
+ <div class="method-heading">
2047
+ <a href="#M000258" class="method-signature">
2048
+ <span class="method-name">to_yaml_type</span><span class="method-args">()</span>
2049
+ </a>
2050
+ </div>
2051
+
2052
+ <div class="method-description">
2053
+ <p>
2054
+ Returns the <a href="../YAML.html">YAML</a> type information, which expands
2055
+ to tag:hobix.com,2004:weblog.
2056
+ </p>
2057
+ <p><a class="source-toggle" href="#"
2058
+ onclick="toggleCode('M000258-source');return false;">[Source]</a></p>
2059
+ <div class="method-source-code" id="M000258-source">
2060
+ <pre>
2061
+ <span class="ruby-comment cmt"># File lib/hobix/weblog.rb, line 879</span>
2062
+ 879: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_yaml_type</span>
2063
+ 880: <span class="ruby-value str">&quot;!hobix.com,2004/weblog&quot;</span>
2064
+ 881: <span class="ruby-keyword kw">end</span>
2065
+ </pre>
2066
+ </div>
2067
+ </div>
2068
+ </div>
2069
+
2070
+
2071
+ </div>
2072
+
2073
+
2074
+ </div>
2075
+
2076
+
2077
+ <div id="validator-badges">
2078
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
2079
+ </div>
2080
+
2081
+ </body>
2082
+ </html>