dm-is-published 0.0.6 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/Gemfile +22 -0
  2. data/Guardfile +13 -0
  3. data/{LICENSE → LICENSE.txt} +1 -1
  4. data/README.rdoc +37 -5
  5. data/Rakefile +30 -56
  6. data/VERSION +1 -1
  7. data/dm-is-published.gemspec +93 -45
  8. data/docs/apple-touch-icon.png +0 -0
  9. data/docs/classes/DataMapper.html +81 -0
  10. data/docs/classes/DataMapper/Is.html +81 -0
  11. data/docs/classes/DataMapper/Is/Published.html +364 -0
  12. data/docs/classes/DataMapper/Is/Published/ClassMethods.html +237 -0
  13. data/docs/classes/DataMapper/Is/Published/InstanceMethods.html +132 -0
  14. data/docs/classes/DataMapper/Is/Published/ResourceInstanceMethods.html +133 -0
  15. data/docs/created.rid +4 -0
  16. data/docs/css/github.css +129 -0
  17. data/docs/css/main.css +333 -0
  18. data/docs/css/panel.css +384 -0
  19. data/docs/css/reset.css +48 -0
  20. data/docs/favicon.ico +0 -0
  21. data/docs/files/README_rdoc.html +226 -0
  22. data/docs/files/lib/dm-is-published_rb.html +84 -0
  23. data/docs/files/lib/is/published_rb.html +104 -0
  24. data/docs/i/arrows.png +0 -0
  25. data/docs/i/results_bg.png +0 -0
  26. data/docs/i/tree_bg.png +0 -0
  27. data/docs/index.html +13 -0
  28. data/docs/js/highlight.pack.js +1 -0
  29. data/docs/js/jquery-1.3.2.min.js +19 -0
  30. data/docs/js/jquery-effect.js +593 -0
  31. data/docs/js/main.js +24 -0
  32. data/docs/js/navigation.js +142 -0
  33. data/docs/js/search_index.js +1 -0
  34. data/docs/js/searchdoc.js +449 -0
  35. data/docs/js/searcher.js +228 -0
  36. data/docs/panel/index.html +73 -0
  37. data/docs/panel/links.html +12 -0
  38. data/docs/panel/tree.js +1 -0
  39. data/lib/dm-is-published.rb +3 -7
  40. data/lib/{dm-is-published/is → is}/published.rb +26 -10
  41. data/spec/{integration/published_spec.rb → dm-is-published_spec.rb} +48 -11
  42. data/spec/spec_helper.rb +12 -9
  43. metadata +264 -95
  44. data/.gitignore +0 -33
  45. data/History.rdoc +0 -4
  46. data/TODO +0 -0
  47. data/lib/dm-is-published/is/version.rb +0 -7
@@ -0,0 +1,81 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
3
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
+ <head>
6
+ <title>DataMapper::Is</title>
7
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
8
+ <link rel="stylesheet" href="../../css/reset.css" type="text/css" media="screen" />
9
+ <link rel="stylesheet" href="../../css/main.css" type="text/css" media="screen" />
10
+ <link rel="stylesheet" href="../../css/github.css" type="text/css" media="screen" />
11
+ <script src="../../js/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>
12
+ <script src="../../js/jquery-effect.js" type="text/javascript" charset="utf-8"></script>
13
+ <script src="../../js/main.js" type="text/javascript" charset="utf-8"></script>
14
+ <script src="../../js/highlight.pack.js" type="text/javascript" charset="utf-8"></script>
15
+
16
+ </head>
17
+
18
+ <body>
19
+ <div class="banner">
20
+
21
+ <h1>
22
+ <span class="type">Module</span>
23
+ DataMapper::Is
24
+
25
+ </h1>
26
+ <ul class="files">
27
+
28
+ <li><a href="../../files/lib/is/published_rb.html">lib/is/published.rb</a></li>
29
+
30
+ </ul>
31
+ </div>
32
+ <div id="bodyContent">
33
+ <div id="content">
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+ <!-- Namespace -->
46
+ <div class="sectiontitle">Namespace</div>
47
+ <ul>
48
+
49
+ <li>
50
+ <span class="type">MODULE</span>
51
+ <a href="Is/Published.html">DataMapper::Is::Published</a>
52
+ </li>
53
+
54
+ </ul>
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+ <!-- Methods -->
77
+ </div>
78
+
79
+ </div>
80
+ </body>
81
+ </html>
@@ -0,0 +1,364 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
3
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
+ <head>
6
+ <title>DataMapper::Is::Published</title>
7
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
8
+ <link rel="stylesheet" href="../../../css/reset.css" type="text/css" media="screen" />
9
+ <link rel="stylesheet" href="../../../css/main.css" type="text/css" media="screen" />
10
+ <link rel="stylesheet" href="../../../css/github.css" type="text/css" media="screen" />
11
+ <script src="../../../js/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>
12
+ <script src="../../../js/jquery-effect.js" type="text/javascript" charset="utf-8"></script>
13
+ <script src="../../../js/main.js" type="text/javascript" charset="utf-8"></script>
14
+ <script src="../../../js/highlight.pack.js" type="text/javascript" charset="utf-8"></script>
15
+
16
+ </head>
17
+
18
+ <body>
19
+ <div class="banner">
20
+
21
+ <h1>
22
+ <span class="type">Module</span>
23
+ DataMapper::Is::Published
24
+
25
+ </h1>
26
+ <ul class="files">
27
+
28
+ <li><a href="../../../files/lib/is/published_rb.html">lib/is/published.rb</a></li>
29
+
30
+ </ul>
31
+ </div>
32
+ <div id="bodyContent">
33
+ <div id="content">
34
+
35
+ <div class="description">
36
+
37
+ <h1 id="label-dm-is-published">dm-is-published</h1>
38
+
39
+ <p>This plugin makes it very easy to add different states to your models, like
40
+ ‘draft’ vs ‘live’. By default it also adds validations of the field value.</p>
41
+
42
+ <p>Originally inspired by the Rails plugin <code>acts_as_publishable</code> by
43
+ <strong>fr.ivolo.us</strong>.</p>
44
+
45
+ <h2 id="label-Installation">Installation</h2>
46
+
47
+ <pre>$ gem install dm-is-published</pre>
48
+
49
+ <p>Or add the gem to your Gemfile, and then run <code>bundle install</code>.</p>
50
+
51
+ <pre>gem 'dm-is-published', 'CURRENT_VERSION_NUMBER'</pre>
52
+
53
+ <h2 id="label-Getting+Started">Getting Started</h2>
54
+
55
+ <p>First of all, for a better understanding of this gem, make sure you study
56
+ the ‘<code>dm-is-published/spec/integration/published_spec.rb</code>’ file.</p>
57
+ <hr style="height: 2px">
58
+
59
+ <p>Require <code>dm-is-published</code> in your app.</p>
60
+
61
+ <pre class="ruby"><span class="ruby-identifier">require</span> <span class="ruby-string">'data_mapper'</span> <span class="ruby-comment"># must be required first</span>
62
+ <span class="ruby-identifier">require</span> <span class="ruby-string">'dm-is-published'</span>
63
+ </pre>
64
+
65
+ <p>Lets say we have an Article class, and each Article can have a current
66
+ state, ie: whether it’s Live, Draft or an Obituary awaiting the death of
67
+ someone famous (real or rumored)</p>
68
+
69
+ <pre class="ruby"><span class="ruby-keyword">class</span> <span class="ruby-constant">Article</span>
70
+ <span class="ruby-identifier">include</span> <span class="ruby-constant">DataMapper</span><span class="ruby-operator">::</span><span class="ruby-constant">Resource</span>
71
+ <span class="ruby-identifier">property</span> :<span class="ruby-identifier">id</span>, <span class="ruby-constant">Serial</span>
72
+ <span class="ruby-identifier">property</span> :<span class="ruby-identifier">title</span>, <span class="ruby-constant">String</span>
73
+ <span class="ruby-operator">...</span><span class="ruby-operator">&lt;</span><span class="ruby-identifier">snip</span><span class="ruby-operator">&gt;</span>
74
+
75
+ <span class="ruby-identifier">is</span> :<span class="ruby-identifier">published</span>
76
+
77
+ <span class="ruby-keyword">end</span>
78
+ </pre>
79
+
80
+ <p>Once you have your Article model we can create our Articles just as normal</p>
81
+
82
+ <pre class="ruby"><span class="ruby-constant">Article</span>.<span class="ruby-identifier">create</span>(:<span class="ruby-identifier">title</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-string">'Example 1'</span>)
83
+ </pre>
84
+
85
+ <p>The instance of <code>Article.get(1)</code> now has the following things
86
+ for free:</p>
87
+ <ul><li>
88
+ <p>a <code>:publish_status</code> attribute with the value
89
+ <code>'live'</code>. Default choices are <code>[ :live, :draft, :hidden
90
+ ]</code>.</p>
91
+ </li><li>
92
+ <p><code>:is_live?, :is_draft? or :is_hidden?</code> methods that returns
93
+ true/false based upon the state.</p>
94
+ </li><li>
95
+ <p><code>:save_as_live</code>, <code>:save_as_draft</code> or
96
+ <code>:save_as_hidden</code> converts the instance to the state and saves
97
+ it.</p>
98
+ </li><li>
99
+ <p><code>:publishable?</code> method that returns true for models where
100
+ <code>is :published </code> has been declared, but <strong>false</strong>
101
+ for those where it has not been declared.</p>
102
+ </li></ul>
103
+
104
+ <p>The Article class also gets a bit of new functionality:</p>
105
+
106
+ <pre class="ruby"><span class="ruby-constant">Article</span>.<span class="ruby-identifier">all</span>(:<span class="ruby-identifier">draft</span>) =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">finds</span> <span class="ruby-identifier">all</span> <span class="ruby-constant">Articles</span> <span class="ruby-identifier">with</span> :<span class="ruby-identifier">publish_status</span> = :<span class="ruby-identifier">draft</span>
107
+
108
+ <span class="ruby-constant">Article</span>.<span class="ruby-identifier">all</span>(:<span class="ruby-identifier">draft</span>, :<span class="ruby-identifier">author</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@author_joe</span> ) =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">finds</span> <span class="ruby-identifier">all</span> <span class="ruby-constant">Articles</span> <span class="ruby-identifier">with</span> :<span class="ruby-identifier">publish_status</span> = :<span class="ruby-identifier">draft</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">author</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Joe</span>
109
+ </pre>
110
+ <dl class="rdoc-list note-list"><dt>Todo
111
+ <dd>
112
+ <p>add more documentation here…</p>
113
+ </dd></dl>
114
+
115
+ <h2 id="label-Usage+Scenarios">Usage Scenarios</h2>
116
+
117
+ <p>In a Blog/Publishing scenario you could use it like this:</p>
118
+
119
+ <pre class="ruby"><span class="ruby-keyword">class</span> <span class="ruby-constant">Article</span>
120
+ <span class="ruby-operator">...</span><span class="ruby-operator">&lt;</span><span class="ruby-identifier">snip</span><span class="ruby-operator">&gt;</span><span class="ruby-operator">...</span>
121
+
122
+ <span class="ruby-identifier">is</span> :<span class="ruby-identifier">published</span> <span class="ruby-operator">:</span><span class="ruby-identifier">live</span>, :<span class="ruby-identifier">draft</span>, :<span class="ruby-identifier">hidden</span>
123
+ <span class="ruby-keyword">end</span>
124
+ </pre>
125
+
126
+ <p>Whereas in another scenario - like in a MenuItem model for a Restaurant -
127
+ you could use it like this:</p>
128
+
129
+ <pre class="ruby"><span class="ruby-keyword">class</span> <span class="ruby-constant">MenuItem</span>
130
+ <span class="ruby-operator">...</span><span class="ruby-operator">&lt;</span><span class="ruby-identifier">snip</span><span class="ruby-operator">&gt;</span><span class="ruby-operator">...</span>
131
+
132
+ <span class="ruby-identifier">is</span> :<span class="ruby-identifier">published</span> <span class="ruby-operator">:</span><span class="ruby-identifier">on</span>, :<span class="ruby-identifier">off</span> <span class="ruby-comment"># the item is either on the menu or not</span>
133
+ <span class="ruby-keyword">end</span>
134
+ </pre>
135
+
136
+ <h2 id="label-RTFM+">RTFM </h2>
137
+
138
+ <p>As I said above, for a better understanding of this gem/plugin, make sure
139
+ you study the
140
+ ‘<code>dm-is-published/spec/integration/published_spec.rb</code>’ file.</p>
141
+
142
+ <h2 id="label-Errors+%2F+Bugs">Errors / Bugs</h2>
143
+
144
+ <p>If something is not behaving intuitively, it is a bug, and should be
145
+ reported. Report it here: <a
146
+ href="http://github.com/kematzy/dm-is-published/issues">github.com/kematzy/dm-is-published/issues</a></p>
147
+
148
+ <h2 id="label-Credits">Credits</h2>
149
+
150
+ <p>Copyright © 2008 - 2013 [Kematzy at gmail]</p>
151
+
152
+ <p>Loosely based on the ActsAsPublishable plugin by [<a
153
+ href="http://fr.ivolo.us/posts/acts-as-publishable">fr.ivolo.us/posts/acts-as-publishable</a>]</p>
154
+
155
+ <h2 id="label-Licence">Licence</h2>
156
+
157
+ <p>Released under the MIT license.</p>
158
+
159
+ </div>
160
+
161
+
162
+
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+ <!-- Namespace -->
172
+ <div class="sectiontitle">Namespace</div>
173
+ <ul>
174
+
175
+ <li>
176
+ <span class="type">MODULE</span>
177
+ <a href="Published/ClassMethods.html">DataMapper::Is::Published::ClassMethods</a>
178
+ </li>
179
+
180
+ <li>
181
+ <span class="type">MODULE</span>
182
+ <a href="Published/InstanceMethods.html">DataMapper::Is::Published::InstanceMethods</a>
183
+ </li>
184
+
185
+ <li>
186
+ <span class="type">MODULE</span>
187
+ <a href="Published/ResourceInstanceMethods.html">DataMapper::Is::Published::ResourceInstanceMethods</a>
188
+ </li>
189
+
190
+ </ul>
191
+
192
+
193
+
194
+
195
+ <!-- Method ref -->
196
+ <div class="sectiontitle">Methods</div>
197
+ <dl class="methods">
198
+
199
+ <dt>I</dt>
200
+ <dd>
201
+ <ul>
202
+
203
+
204
+ <li>
205
+ <a href="#method-i-is_published">is_published</a>
206
+ </li>
207
+
208
+ </ul>
209
+ </dd>
210
+
211
+ </dl>
212
+
213
+
214
+
215
+ <!-- Includes -->
216
+ <div class="sectiontitle">Included Modules</div>
217
+ <ul>
218
+
219
+ <li>
220
+
221
+ <a href="Published/InstanceMethods.html">
222
+ DataMapper::Is::Published::InstanceMethods
223
+ </a>
224
+
225
+ </li>
226
+
227
+ </ul>
228
+
229
+
230
+
231
+
232
+
233
+
234
+
235
+
236
+
237
+
238
+
239
+ <!-- Section constants -->
240
+ <div class="sectiontitle">Constants</div>
241
+ <table border='0' cellpadding='5'>
242
+
243
+ <tr valign='top'>
244
+ <td class="attr-name">VERSION</td>
245
+ <td>=</td>
246
+ <td class="attr-value">IO.read(&quot;#{File.dirname(__FILE__)}/../../VERSION&quot;).chomp</td>
247
+ </tr>
248
+
249
+ <tr valign='top'>
250
+ <td>&nbsp;</td>
251
+ <td colspan="2" class="attr-desc"></td>
252
+ </tr>
253
+
254
+
255
+ </table>
256
+
257
+
258
+
259
+
260
+
261
+
262
+ <!-- Methods -->
263
+
264
+ <div class="sectiontitle">Instance Public methods</div>
265
+
266
+ <div class="method">
267
+ <div class="title method-title" id="method-i-is_published">
268
+
269
+ <b>is_published</b>(*args)
270
+
271
+ <a href="../../../classes/DataMapper/Is/Published.html#method-i-is_published" name="method-i-is_published" class="permalink">Link</a>
272
+ </div>
273
+
274
+
275
+ <div class="description">
276
+ <p>method that adds a basic published status attribute to your model</p>
277
+
278
+ <h2 id="method-i-is_published-label-params+">params </h2>
279
+ <ul><li>
280
+ <p><code>states</code> - an array of 'states' as symbols or strings. ie:
281
+ :live, :draft, :hidden</p>
282
+ </li></ul>
283
+
284
+ <h4 id="method-i-is_published-label-Examples">Examples</h4>
285
+
286
+ <pre>is :published :on, :off
287
+
288
+ is :published %w(a b c d)</pre>
289
+
290
+ <p>@api public</p>
291
+ </div>
292
+
293
+
294
+
295
+
296
+
297
+
298
+ <div class="sourcecode">
299
+
300
+ <p class="source-link">
301
+ Source:
302
+ <a href="javascript:toggleSource('method-i-is_published_source')" id="l_method-i-is_published_source">show</a>
303
+
304
+ </p>
305
+ <div id="method-i-is_published_source" class="dyn-source">
306
+ <pre><span class="ruby-comment"># File lib/is/published.rb, line 133</span>
307
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword ruby-title">is_published</span>(*<span class="ruby-identifier">args</span>)
308
+ <span class="ruby-comment"># set default args if none passed in</span>
309
+ <span class="ruby-identifier">args</span> = [<span class="ruby-value">:live</span>, <span class="ruby-value">:draft</span>, <span class="ruby-value">:hidden</span>] <span class="ruby-keyword">if</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">blank?</span>
310
+ <span class="ruby-identifier">args</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">first</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Array</span>)
311
+
312
+ <span class="ruby-comment"># the various publish states accepted.</span>
313
+ <span class="ruby-ivar">@publish_states</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">collect</span>{ <span class="ruby-operator">|</span><span class="ruby-identifier">state</span><span class="ruby-operator">|</span> <span class="ruby-identifier">state</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">downcase</span>.<span class="ruby-identifier">to_sym</span> }
314
+ <span class="ruby-ivar">@publish_states_for_validation</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">collect</span>{ <span class="ruby-operator">|</span><span class="ruby-identifier">state</span><span class="ruby-operator">|</span> <span class="ruby-identifier">state</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">downcase</span> }
315
+
316
+ <span class="ruby-identifier">extend</span> <span class="ruby-constant">DataMapper</span><span class="ruby-operator">::</span><span class="ruby-constant">Is</span><span class="ruby-operator">::</span><span class="ruby-constant">Published</span><span class="ruby-operator">::</span><span class="ruby-constant">ClassMethods</span>
317
+ <span class="ruby-identifier">include</span> <span class="ruby-constant">DataMapper</span><span class="ruby-operator">::</span><span class="ruby-constant">Is</span><span class="ruby-operator">::</span><span class="ruby-constant">Published</span><span class="ruby-operator">::</span><span class="ruby-constant">InstanceMethods</span>
318
+
319
+ <span class="ruby-comment"># do we have a :publish_status declared</span>
320
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">properties</span>.<span class="ruby-identifier">any?</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">name</span> <span class="ruby-operator">==</span> <span class="ruby-value">:publish_status</span> }
321
+
322
+ <span class="ruby-comment"># set default value to first value in declaration or the given value</span>
323
+ <span class="ruby-identifier">d</span> = <span class="ruby-identifier">properties</span>[<span class="ruby-value">:publish_status</span>].<span class="ruby-identifier">default</span>.<span class="ruby-identifier">blank?</span> <span class="ruby-operator">?</span> <span class="ruby-ivar">@publish_states</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">properties</span>[<span class="ruby-value">:publish_status</span>].<span class="ruby-identifier">default</span>
324
+
325
+ <span class="ruby-comment"># set the length to 10 if missing or if shorter than 5, otherwise use the given value</span>
326
+ <span class="ruby-identifier">l</span> = <span class="ruby-number">5</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">properties</span>[<span class="ruby-value">:publish_status</span>].<span class="ruby-identifier">length</span>.<span class="ruby-identifier">blank?</span>
327
+ <span class="ruby-identifier">l</span> = (<span class="ruby-identifier">properties</span>[<span class="ruby-value">:publish_status</span>].<span class="ruby-identifier">length</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-number">10</span> <span class="ruby-operator">?</span> <span class="ruby-number">10</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">properties</span>[<span class="ruby-value">:publish_status</span>].<span class="ruby-identifier">length</span>)
328
+
329
+ <span class="ruby-identifier">property</span> <span class="ruby-value">:publish_status</span>, <span class="ruby-constant">String</span>, <span class="ruby-value">:length</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">l</span>, <span class="ruby-value">:default</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">d</span>.<span class="ruby-identifier">to_s</span>
330
+ <span class="ruby-keyword">else</span>
331
+ <span class="ruby-comment"># no such property, so adding it with default values</span>
332
+ <span class="ruby-identifier">property</span> <span class="ruby-value">:publish_status</span>, <span class="ruby-constant">String</span>, <span class="ruby-value">:length</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-number">10</span>, <span class="ruby-value">:default</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@publish_states</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">to_s</span>
333
+ <span class="ruby-keyword">end</span>
334
+
335
+ <span class="ruby-comment"># create the state specific instance methods</span>
336
+ <span class="ruby-keyword">self</span>.<span class="ruby-identifier">publish_states</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">state</span><span class="ruby-operator">|</span>
337
+ <span class="ruby-identifier">define_method</span>(<span class="ruby-node">&quot;is_#{state}?&quot;</span>) <span class="ruby-keyword">do</span>
338
+ <span class="ruby-keyword">self</span>.<span class="ruby-identifier">publish_status</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">state</span>.<span class="ruby-identifier">to_s</span>
339
+ <span class="ruby-keyword">end</span>
340
+ <span class="ruby-identifier">define_method</span>(<span class="ruby-node">&quot;save_as_#{state}&quot;</span>) <span class="ruby-keyword">do</span>
341
+ <span class="ruby-keyword">self</span>.<span class="ruby-identifier">publish_status</span> = <span class="ruby-identifier">state</span>.<span class="ruby-identifier">to_s</span>
342
+ <span class="ruby-identifier">save</span>
343
+ <span class="ruby-keyword">end</span>
344
+ <span class="ruby-keyword">end</span>
345
+
346
+ <span class="ruby-comment"># ensure we are always saving publish_status values as strings</span>
347
+ <span class="ruby-identifier">before</span> <span class="ruby-value">:valid?</span> <span class="ruby-keyword">do</span>
348
+ <span class="ruby-keyword">self</span>.<span class="ruby-identifier">publish_status</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">publish_status</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-value">:publish_status</span>)
349
+ <span class="ruby-keyword">end</span>
350
+
351
+ <span class="ruby-identifier">validates_within</span> <span class="ruby-value">:publish_status</span>,
352
+ <span class="ruby-value">:set</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@publish_states_for_validation</span>,
353
+ <span class="ruby-value">:message</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;The publish_status value can only be one of these values: [ #{@publish_states_for_validation.join(', ')} ]&quot;</span>
354
+
355
+ <span class="ruby-keyword">end</span></pre>
356
+ </div>
357
+ </div>
358
+
359
+ </div>
360
+ </div>
361
+
362
+ </div>
363
+ </body>
364
+ </html>
@@ -0,0 +1,237 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
3
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
+ <head>
6
+ <title>DataMapper::Is::Published::ClassMethods</title>
7
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
8
+ <link rel="stylesheet" href="../../../../css/reset.css" type="text/css" media="screen" />
9
+ <link rel="stylesheet" href="../../../../css/main.css" type="text/css" media="screen" />
10
+ <link rel="stylesheet" href="../../../../css/github.css" type="text/css" media="screen" />
11
+ <script src="../../../../js/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>
12
+ <script src="../../../../js/jquery-effect.js" type="text/javascript" charset="utf-8"></script>
13
+ <script src="../../../../js/main.js" type="text/javascript" charset="utf-8"></script>
14
+ <script src="../../../../js/highlight.pack.js" type="text/javascript" charset="utf-8"></script>
15
+
16
+ </head>
17
+
18
+ <body>
19
+ <div class="banner">
20
+
21
+ <h1>
22
+ <span class="type">Module</span>
23
+ DataMapper::Is::Published::ClassMethods
24
+
25
+ </h1>
26
+ <ul class="files">
27
+
28
+ <li><a href="../../../../files/lib/is/published_rb.html">lib/is/published.rb</a></li>
29
+
30
+ </ul>
31
+ </div>
32
+ <div id="bodyContent">
33
+ <div id="content">
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+ <!-- Method ref -->
49
+ <div class="sectiontitle">Methods</div>
50
+ <dl class="methods">
51
+
52
+ <dt>A</dt>
53
+ <dd>
54
+ <ul>
55
+
56
+
57
+ <li>
58
+ <a href="#method-i-all">all</a>
59
+ </li>
60
+
61
+ </ul>
62
+ </dd>
63
+
64
+ <dt>P</dt>
65
+ <dd>
66
+ <ul>
67
+
68
+
69
+ <li>
70
+ <a href="#method-i-publish_states_as_json">publish_states_as_json</a>
71
+ </li>
72
+
73
+ </ul>
74
+ </dd>
75
+
76
+ </dl>
77
+
78
+
79
+
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+ <!-- Section attributes -->
94
+ <div class="sectiontitle">Attributes</div>
95
+ <table border='0' cellpadding='5'>
96
+
97
+ <tr valign='top'>
98
+ <td class='attr-rw'>
99
+ [R]
100
+ </td>
101
+ <td class='attr-name'>publish_states</td>
102
+ <td class='attr-desc'></td>
103
+ </tr>
104
+
105
+ <tr valign='top'>
106
+ <td class='attr-rw'>
107
+ [R]
108
+ </td>
109
+ <td class='attr-name'>publish_states_for_validation</td>
110
+ <td class='attr-desc'></td>
111
+ </tr>
112
+
113
+ </table>
114
+
115
+
116
+
117
+ <!-- Methods -->
118
+
119
+ <div class="sectiontitle">Instance Public methods</div>
120
+
121
+ <div class="method">
122
+ <div class="title method-title" id="method-i-all">
123
+
124
+ <b>all</b>(*args)
125
+
126
+ <a href="../../../../classes/DataMapper/Is/Published/ClassMethods.html#method-i-all" name="method-i-all" class="permalink">Link</a>
127
+ </div>
128
+
129
+
130
+ <div class="description">
131
+ <p>Overriding the normal <a href="ClassMethods.html#method-i-all">all</a>
132
+ method to add some extra sugar.</p>
133
+
134
+ <h4 id="method-i-all-label-Examples">Examples</h4>
135
+
136
+ <pre class="ruby"><span class="ruby-constant">Article</span>.<span class="ruby-identifier">all</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">returns</span> <span class="ruby-identifier">all</span> <span class="ruby-constant">Articles</span> <span class="ruby-identifier">as</span> <span class="ruby-identifier">usual</span>
137
+
138
+ <span class="ruby-constant">Article</span>.<span class="ruby-identifier">all</span>( :<span class="ruby-identifier">publish_status</span> =<span class="ruby-operator">&gt;</span> :<span class="ruby-identifier">live</span> ) =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">returns</span> <span class="ruby-identifier">all</span> <span class="ruby-constant">Articles</span> <span class="ruby-identifier">with</span> :<span class="ruby-identifier">publish_status</span> <span class="ruby-operator">==</span> :<span class="ruby-identifier">lve</span>
139
+
140
+ <span class="ruby-constant">Article</span>.<span class="ruby-identifier">all</span>(:<span class="ruby-identifier">draft</span>) =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">returns</span> <span class="ruby-identifier">all</span> <span class="ruby-constant">Articles</span> <span class="ruby-identifier">with</span> :<span class="ruby-identifier">publish_status</span> <span class="ruby-operator">==</span> :<span class="ruby-identifier">draft</span>
141
+
142
+ <span class="ruby-constant">Article</span>.<span class="ruby-identifier">all</span>(:<span class="ruby-identifier">draft</span>, :<span class="ruby-identifier">author</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-ivar">@author_joe</span> ) =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">finds</span> <span class="ruby-identifier">all</span> <span class="ruby-constant">Articles</span> <span class="ruby-identifier">with</span> :<span class="ruby-identifier">publish_status</span> = :<span class="ruby-identifier">draft</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">author</span> <span class="ruby-operator">==</span> <span class="ruby-constant">Joe</span>
143
+ </pre>
144
+
145
+ <p>@api public/private</p>
146
+ </div>
147
+
148
+
149
+
150
+
151
+
152
+
153
+ <div class="sourcecode">
154
+
155
+ <p class="source-link">
156
+ Source:
157
+ <a href="javascript:toggleSource('method-i-all_source')" id="l_method-i-all_source">show</a>
158
+
159
+ </p>
160
+ <div id="method-i-all_source" class="dyn-source">
161
+ <pre><span class="ruby-comment"># File lib/is/published.rb, line 216</span>
162
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword ruby-title">all</span>(*<span class="ruby-identifier">args</span>)
163
+ <span class="ruby-comment"># incoming can either be: </span>
164
+ <span class="ruby-comment"># -- nil (nothing passed in, so just use super )</span>
165
+ <span class="ruby-comment"># -- (Hash) =&gt; all(:key =&gt; &quot;value&quot;) ( normal operations, so just pass on the Hash ) </span>
166
+ <span class="ruby-comment"># -- (Symbol) =&gt; all(:draft) ( just get the symbol, )</span>
167
+ <span class="ruby-comment"># -- (Symbol, Hash ) =&gt; :draft, { extra options }</span>
168
+ <span class="ruby-comment"># -- (DataMapper somethings) =&gt; leave it alone</span>
169
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">empty?</span>
170
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">super</span>
171
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Symbol</span>)
172
+ <span class="ruby-comment"># set the from args Array, remove first item if Symbol, and then check for 2nd item's presence</span>
173
+ <span class="ruby-identifier">state</span>, <span class="ruby-identifier">options</span> = <span class="ruby-identifier">args</span>.<span class="ruby-identifier">shift</span>.<span class="ruby-identifier">to_s</span>, (<span class="ruby-identifier">args</span>.<span class="ruby-identifier">blank?</span> <span class="ruby-operator">?</span> {} <span class="ruby-operator">:</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">first</span>)
174
+ <span class="ruby-comment"># puts &quot; and state=[#{state}] and options=[#{options.class}] options.inspect=[#{options.inspect}] [#{__FILE__}:#{__LINE__}]&quot;</span>
175
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">super</span>({ <span class="ruby-value">:publish_status</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">state</span> }.<span class="ruby-identifier">merge</span>(<span class="ruby-identifier">options</span>) )
176
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">args</span>.<span class="ruby-identifier">first</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Hash</span>)
177
+ <span class="ruby-comment"># puts &quot;dm-is-published args.first was a HASH ] [#{__FILE__}:#{__LINE__}]&quot;</span>
178
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">super</span>(<span class="ruby-identifier">args</span>.<span class="ruby-identifier">first</span>)
179
+ <span class="ruby-keyword">else</span>
180
+ <span class="ruby-comment"># puts &quot;dm-is-published (ELSE) [#{__FILE__}:#{__LINE__}]&quot;</span>
181
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">super</span>
182
+ <span class="ruby-keyword">end</span>
183
+ <span class="ruby-keyword">end</span></pre>
184
+ </div>
185
+ </div>
186
+
187
+ </div>
188
+
189
+ <div class="method">
190
+ <div class="title method-title" id="method-i-publish_states_as_json">
191
+
192
+ <b>publish_states_as_json</b>()
193
+
194
+ <a href="../../../../classes/DataMapper/Is/Published/ClassMethods.html#method-i-publish_states_as_json" name="method-i-publish_states_as_json" class="permalink">Link</a>
195
+ </div>
196
+
197
+
198
+ <div class="description">
199
+ <p>Returns a JSON representation of the publish states, where each state is
200
+ represented as a lowercase key and an uppercase value.</p>
201
+
202
+ <h4 id="method-i-publish_states_as_json-label-Examples">Examples</h4>
203
+
204
+ <pre class="ruby"><span class="ruby-constant">Model</span>.<span class="ruby-identifier">publish_states_as_json</span>
205
+
206
+ =<span class="ruby-operator">&gt;</span> { <span class="ruby-string">'live'</span><span class="ruby-operator">:</span> <span class="ruby-string">'LIVE'</span>,<span class="ruby-string">'draft'</span><span class="ruby-operator">:</span> <span class="ruby-string">'DRAFT'</span>,<span class="ruby-string">'hidden'</span><span class="ruby-operator">:</span> <span class="ruby-string">'HIDDEN'</span> }
207
+ </pre>
208
+
209
+ <p>@api public</p>
210
+ </div>
211
+
212
+
213
+
214
+
215
+
216
+
217
+ <div class="sourcecode">
218
+
219
+ <p class="source-link">
220
+ Source:
221
+ <a href="javascript:toggleSource('method-i-publish_states_as_json_source')" id="l_method-i-publish_states_as_json_source">show</a>
222
+
223
+ </p>
224
+ <div id="method-i-publish_states_as_json_source" class="dyn-source">
225
+ <pre><span class="ruby-comment"># File lib/is/published.rb, line 197</span>
226
+ <span class="ruby-keyword">def</span> <span class="ruby-keyword ruby-title">publish_states_as_json</span>
227
+ <span class="ruby-node">%Q[{ #{self.publish_states_for_validation.collect{ |state| &quot;'#{state.to_s.downcase}': '#{state.to_s.upcase}'&quot; }.join(',')} }]</span>
228
+ <span class="ruby-keyword">end</span></pre>
229
+ </div>
230
+ </div>
231
+
232
+ </div>
233
+ </div>
234
+
235
+ </div>
236
+ </body>
237
+ </html>