acts_as_audited_rails3 1.1.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. data/.gitignore +4 -0
  2. data/CHANGELOG +25 -0
  3. data/LICENSE +19 -0
  4. data/README +76 -0
  5. data/Rakefile +60 -0
  6. data/VERSION +1 -0
  7. data/acts_as_audited.gemspec +90 -0
  8. data/acts_as_audited_rails3.gemspec +90 -0
  9. data/doc/classes/Audit.html +407 -0
  10. data/doc/classes/CollectiveIdea/Acts/Audited/ClassMethods.html +226 -0
  11. data/doc/classes/CollectiveIdea/Acts/Audited/InstanceMethods.html +330 -0
  12. data/doc/classes/CollectiveIdea/Acts/Audited/SingletonMethods.html +254 -0
  13. data/doc/created.rid +1 -0
  14. data/doc/files/README.html +226 -0
  15. data/doc/files/lib/acts_as_audited/audit_rb.html +108 -0
  16. data/doc/files/lib/acts_as_audited/audit_sweeper_rb.html +101 -0
  17. data/doc/files/lib/acts_as_audited_rb.html +129 -0
  18. data/doc/fr_class_index.html +30 -0
  19. data/doc/fr_file_index.html +30 -0
  20. data/doc/fr_method_index.html +47 -0
  21. data/doc/index.html +24 -0
  22. data/doc/rdoc-style.css +208 -0
  23. data/lib/acts_as_audited/audit.rb +119 -0
  24. data/lib/acts_as_audited/audit_sweeper.rb +37 -0
  25. data/lib/acts_as_audited/base.rb +316 -0
  26. data/lib/acts_as_audited.rb +9 -0
  27. data/lib/generators/audited_migration/USAGE +7 -0
  28. data/lib/generators/audited_migration/audited_migration_generator.rb +24 -0
  29. data/lib/generators/audited_migration/templates/migration.rb +29 -0
  30. data/lib/generators/audited_migration_update/USAGE +7 -0
  31. data/lib/generators/audited_migration_update/audited_migration_update_generator.rb +24 -0
  32. data/lib/generators/audited_migration_update/templates/migration.rb +9 -0
  33. data/test/acts_as_audited_test.rb +437 -0
  34. data/test/audit_sweeper_test.rb +31 -0
  35. data/test/audit_test.rb +179 -0
  36. data/test/db/database.yml +21 -0
  37. data/test/db/schema.rb +33 -0
  38. data/test/test_helper.rb +75 -0
  39. metadata +152 -0
@@ -0,0 +1,407 @@
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: Audit</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">Audit</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../files/lib/acts_as_audited/audit_rb.html">
59
+ lib/acts_as_audited/audit.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ <tr class="top-aligned-row">
66
+ <td><strong>Parent:</strong></td>
67
+ <td>
68
+ ActiveRecord::Base
69
+ </td>
70
+ </tr>
71
+ </table>
72
+ </div>
73
+ <!-- banner header -->
74
+
75
+ <div id="bodyContent">
76
+
77
+
78
+
79
+ <div id="contextContent">
80
+
81
+ <div id="description">
82
+ <p>
83
+ <a href="Audit.html">Audit</a> saves the changes to ActiveRecord models. It
84
+ has the following attributes:
85
+ </p>
86
+ <ul>
87
+ <li><tt>auditable</tt>: the ActiveRecord model that was changed
88
+
89
+ </li>
90
+ <li><tt>user</tt>: the user that performed the change; a string or an
91
+ ActiveRecord model
92
+
93
+ </li>
94
+ <li><tt>action</tt>: one of create, update, or delete
95
+
96
+ </li>
97
+ <li><tt>audit_changes</tt>: a serialized hash of all the changes
98
+
99
+ </li>
100
+ <li><tt>created_at</tt>: Time that the change was performed
101
+
102
+ </li>
103
+ </ul>
104
+
105
+ </div>
106
+
107
+
108
+ </div>
109
+
110
+ <div id="method-list">
111
+ <h3 class="section-bar">Methods</h3>
112
+
113
+ <div class="name-list">
114
+ <a href="#M000004">ancestors</a>&nbsp;&nbsp;
115
+ <a href="#M000002">as_user</a>&nbsp;&nbsp;
116
+ <a href="#M000008">assign_revision_attributes</a>&nbsp;&nbsp;
117
+ <a href="#M000001">audited_classes</a>&nbsp;&nbsp;
118
+ <a href="#M000005">new_attributes</a>&nbsp;&nbsp;
119
+ <a href="#M000006">old_attributes</a>&nbsp;&nbsp;
120
+ <a href="#M000007">reconstruct_attributes</a>&nbsp;&nbsp;
121
+ <a href="#M000003">revision</a>&nbsp;&nbsp;
122
+ </div>
123
+ </div>
124
+
125
+ </div>
126
+
127
+
128
+ <!-- if includes -->
129
+
130
+ <div id="section">
131
+
132
+
133
+
134
+ <div id="aliases-list">
135
+ <h3 class="section-bar">External Aliases</h3>
136
+
137
+ <div class="name-list">
138
+ <table summary="aliases">
139
+ <tr class="top-aligned-row context-row">
140
+ <td class="context-item-name">user=</td>
141
+ <td>-&gt;</td>
142
+ <td class="context-item-value">user_as_model=</td>
143
+ </tr>
144
+ <tr class="top-aligned-row context-row">
145
+ <td class="context-item-name">user_as_string=</td>
146
+ <td>-&gt;</td>
147
+ <td class="context-item-value">user=</td>
148
+ </tr>
149
+ <tr class="top-aligned-row context-row">
150
+ <td class="context-item-name">user</td>
151
+ <td>-&gt;</td>
152
+ <td class="context-item-value">user_as_model</td>
153
+ </tr>
154
+ <tr class="top-aligned-row context-row">
155
+ <td class="context-item-name">user_as_string</td>
156
+ <td>-&gt;</td>
157
+ <td class="context-item-value">user</td>
158
+ </tr>
159
+ </table>
160
+ </div>
161
+ </div>
162
+
163
+
164
+
165
+
166
+
167
+ <!-- if method_list -->
168
+ <div id="methods">
169
+ <h3 class="section-bar">Public Class methods</h3>
170
+
171
+ <div id="method-M000002" class="method-detail">
172
+ <a name="M000002"></a>
173
+
174
+ <div class="method-heading">
175
+ <a href="#M000002" class="method-signature">
176
+ <span class="method-name">as_user</span><span class="method-args">(user) {|| ...}</span>
177
+ </a>
178
+ </div>
179
+
180
+ <div class="method-description">
181
+ <p>
182
+ All audits made during the block called will be recorded as made by
183
+ <tt>user</tt>. This method is hopefully threadsafe, making it ideal for
184
+ background operations that require audit information.
185
+ </p>
186
+ <p><a class="source-toggle" href="#"
187
+ onclick="toggleCode('M000002-source');return false;">[Source]</a></p>
188
+ <div class="method-source-code" id="M000002-source">
189
+ <pre>
190
+ <span class="ruby-comment cmt"># File lib/acts_as_audited/audit.rb, line 32</span>
191
+ 32: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">as_user</span>(<span class="ruby-identifier">user</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
192
+ 33: <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">current</span>[<span class="ruby-identifier">:acts_as_audited_user</span>] = <span class="ruby-identifier">user</span>
193
+ 34:
194
+ 35: <span class="ruby-keyword kw">yield</span>
195
+ 36:
196
+ 37: <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">current</span>[<span class="ruby-identifier">:acts_as_audited_user</span>] = <span class="ruby-keyword kw">nil</span>
197
+ 38: <span class="ruby-keyword kw">end</span>
198
+ </pre>
199
+ </div>
200
+ </div>
201
+ </div>
202
+
203
+ <div id="method-M000008" class="method-detail">
204
+ <a name="M000008"></a>
205
+
206
+ <div class="method-heading">
207
+ <a href="#M000008" class="method-signature">
208
+ <span class="method-name">assign_revision_attributes</span><span class="method-args">(record, attributes)</span>
209
+ </a>
210
+ </div>
211
+
212
+ <div class="method-description">
213
+ <p><a class="source-toggle" href="#"
214
+ onclick="toggleCode('M000008-source');return false;">[Source]</a></p>
215
+ <div class="method-source-code" id="M000008-source">
216
+ <pre>
217
+ <span class="ruby-comment cmt"># File lib/acts_as_audited/audit.rb, line 95</span>
218
+ 95: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">assign_revision_attributes</span>(<span class="ruby-identifier">record</span>, <span class="ruby-identifier">attributes</span>)
219
+ 96: <span class="ruby-identifier">attributes</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">attr</span>, <span class="ruby-identifier">val</span><span class="ruby-operator">|</span>
220
+ 97: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">record</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-node">&quot;#{attr}=&quot;</span>)
221
+ 98: <span class="ruby-identifier">record</span>.<span class="ruby-identifier">attributes</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">attr</span>.<span class="ruby-identifier">to_s</span>) <span class="ruby-operator">?</span>
222
+ 99: <span class="ruby-identifier">record</span>[<span class="ruby-identifier">attr</span>] = <span class="ruby-identifier">val</span> <span class="ruby-operator">:</span>
223
+ 100: <span class="ruby-identifier">record</span>.<span class="ruby-identifier">send</span>(<span class="ruby-node">&quot;#{attr}=&quot;</span>, <span class="ruby-identifier">val</span>)
224
+ 101: <span class="ruby-keyword kw">end</span>
225
+ 102: <span class="ruby-keyword kw">end</span>
226
+ 103: <span class="ruby-identifier">record</span>
227
+ 104: <span class="ruby-keyword kw">end</span>
228
+ </pre>
229
+ </div>
230
+ </div>
231
+ </div>
232
+
233
+ <div id="method-M000001" class="method-detail">
234
+ <a name="M000001"></a>
235
+
236
+ <div class="method-heading">
237
+ <a href="#M000001" class="method-signature">
238
+ <span class="method-name">audited_classes</span><span class="method-args">()</span>
239
+ </a>
240
+ </div>
241
+
242
+ <div class="method-description">
243
+ <p><a class="source-toggle" href="#"
244
+ onclick="toggleCode('M000001-source');return false;">[Source]</a></p>
245
+ <div class="method-source-code" id="M000001-source">
246
+ <pre>
247
+ <span class="ruby-comment cmt"># File lib/acts_as_audited/audit.rb, line 22</span>
248
+ 22: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">audited_classes</span>
249
+ 23: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">audited_class_names</span>.<span class="ruby-identifier">map</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">:constantize</span>)
250
+ 24: <span class="ruby-keyword kw">end</span>
251
+ </pre>
252
+ </div>
253
+ </div>
254
+ </div>
255
+
256
+ <div id="method-M000007" class="method-detail">
257
+ <a name="M000007"></a>
258
+
259
+ <div class="method-heading">
260
+ <a href="#M000007" class="method-signature">
261
+ <span class="method-name">reconstruct_attributes</span><span class="method-args">(audits) {|attributes if block_given?| ...}</span>
262
+ </a>
263
+ </div>
264
+
265
+ <div class="method-description">
266
+ <p><a class="source-toggle" href="#"
267
+ onclick="toggleCode('M000007-source');return false;">[Source]</a></p>
268
+ <div class="method-source-code" id="M000007-source">
269
+ <pre>
270
+ <span class="ruby-comment cmt"># File lib/acts_as_audited/audit.rb, line 86</span>
271
+ 86: <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">reconstruct_attributes</span>(<span class="ruby-identifier">audits</span>)
272
+ 87: <span class="ruby-identifier">attributes</span> = {}
273
+ 88: <span class="ruby-identifier">result</span> = <span class="ruby-identifier">audits</span>.<span class="ruby-identifier">collect</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">audit</span><span class="ruby-operator">|</span>
274
+ 89: <span class="ruby-identifier">attributes</span>.<span class="ruby-identifier">merge!</span>(<span class="ruby-identifier">audit</span>.<span class="ruby-identifier">new_attributes</span>).<span class="ruby-identifier">merge!</span>(<span class="ruby-identifier">:version</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">audit</span>.<span class="ruby-identifier">version</span>)
275
+ 90: <span class="ruby-keyword kw">yield</span> <span class="ruby-identifier">attributes</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span>
276
+ 91: <span class="ruby-keyword kw">end</span>
277
+ 92: <span class="ruby-identifier">block_given?</span> <span class="ruby-value">? </span><span class="ruby-identifier">result</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">attributes</span>
278
+ 93: <span class="ruby-keyword kw">end</span>
279
+ </pre>
280
+ </div>
281
+ </div>
282
+ </div>
283
+
284
+ <h3 class="section-bar">Public Instance methods</h3>
285
+
286
+ <div id="method-M000004" class="method-detail">
287
+ <a name="M000004"></a>
288
+
289
+ <div class="method-heading">
290
+ <a href="#M000004" class="method-signature">
291
+ <span class="method-name">ancestors</span><span class="method-args">()</span>
292
+ </a>
293
+ </div>
294
+
295
+ <div class="method-description">
296
+ <p><a class="source-toggle" href="#"
297
+ onclick="toggleCode('M000004-source');return false;">[Source]</a></p>
298
+ <div class="method-source-code" id="M000004-source">
299
+ <pre>
300
+ <span class="ruby-comment cmt"># File lib/acts_as_audited/audit.rb, line 64</span>
301
+ 64: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">ancestors</span>
302
+ 65: <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">:all</span>, <span class="ruby-identifier">:order</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'version'</span>,
303
+ 66: <span class="ruby-identifier">:conditions</span> =<span class="ruby-operator">&gt;</span> [<span class="ruby-value str">'auditable_id = ? and auditable_type = ? and version &lt;= ?'</span>,
304
+ 67: <span class="ruby-identifier">auditable_id</span>, <span class="ruby-identifier">auditable_type</span>, <span class="ruby-identifier">version</span>])
305
+ 68: <span class="ruby-keyword kw">end</span>
306
+ </pre>
307
+ </div>
308
+ </div>
309
+ </div>
310
+
311
+ <div id="method-M000005" class="method-detail">
312
+ <a name="M000005"></a>
313
+
314
+ <div class="method-heading">
315
+ <a href="#M000005" class="method-signature">
316
+ <span class="method-name">new_attributes</span><span class="method-args">()</span>
317
+ </a>
318
+ </div>
319
+
320
+ <div class="method-description">
321
+ <p>
322
+ Returns a hash of the changed attributes with the new values
323
+ </p>
324
+ <p><a class="source-toggle" href="#"
325
+ onclick="toggleCode('M000005-source');return false;">[Source]</a></p>
326
+ <div class="method-source-code" id="M000005-source">
327
+ <pre>
328
+ <span class="ruby-comment cmt"># File lib/acts_as_audited/audit.rb, line 71</span>
329
+ 71: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">new_attributes</span>
330
+ 72: (<span class="ruby-identifier">audit_changes</span> <span class="ruby-operator">||</span> {}).<span class="ruby-identifier">inject</span>({}.<span class="ruby-identifier">with_indifferent_access</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">attrs</span>,(<span class="ruby-identifier">attr</span>,<span class="ruby-identifier">values</span>)<span class="ruby-operator">|</span>
331
+ 73: <span class="ruby-identifier">attrs</span>[<span class="ruby-identifier">attr</span>] = <span class="ruby-constant">Array</span>(<span class="ruby-identifier">values</span>).<span class="ruby-identifier">last</span>
332
+ 74: <span class="ruby-identifier">attrs</span>
333
+ 75: <span class="ruby-keyword kw">end</span>
334
+ 76: <span class="ruby-keyword kw">end</span>
335
+ </pre>
336
+ </div>
337
+ </div>
338
+ </div>
339
+
340
+ <div id="method-M000006" class="method-detail">
341
+ <a name="M000006"></a>
342
+
343
+ <div class="method-heading">
344
+ <a href="#M000006" class="method-signature">
345
+ <span class="method-name">old_attributes</span><span class="method-args">()</span>
346
+ </a>
347
+ </div>
348
+
349
+ <div class="method-description">
350
+ <p>
351
+ Returns a hash of the changed attributes with the old values
352
+ </p>
353
+ <p><a class="source-toggle" href="#"
354
+ onclick="toggleCode('M000006-source');return false;">[Source]</a></p>
355
+ <div class="method-source-code" id="M000006-source">
356
+ <pre>
357
+ <span class="ruby-comment cmt"># File lib/acts_as_audited/audit.rb, line 79</span>
358
+ 79: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">old_attributes</span>
359
+ 80: (<span class="ruby-identifier">audit_changes</span> <span class="ruby-operator">||</span> {}).<span class="ruby-identifier">inject</span>({}.<span class="ruby-identifier">with_indifferent_access</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">attrs</span>,(<span class="ruby-identifier">attr</span>,<span class="ruby-identifier">values</span>)<span class="ruby-operator">|</span>
360
+ 81: <span class="ruby-identifier">attrs</span>[<span class="ruby-identifier">attr</span>] = <span class="ruby-constant">Array</span>(<span class="ruby-identifier">values</span>).<span class="ruby-identifier">first</span>
361
+ 82: <span class="ruby-identifier">attrs</span>
362
+ 83: <span class="ruby-keyword kw">end</span>
363
+ 84: <span class="ruby-keyword kw">end</span>
364
+ </pre>
365
+ </div>
366
+ </div>
367
+ </div>
368
+
369
+ <div id="method-M000003" class="method-detail">
370
+ <a name="M000003"></a>
371
+
372
+ <div class="method-heading">
373
+ <a href="#M000003" class="method-signature">
374
+ <span class="method-name">revision</span><span class="method-args">()</span>
375
+ </a>
376
+ </div>
377
+
378
+ <div class="method-description">
379
+ <p><a class="source-toggle" href="#"
380
+ onclick="toggleCode('M000003-source');return false;">[Source]</a></p>
381
+ <div class="method-source-code" id="M000003-source">
382
+ <pre>
383
+ <span class="ruby-comment cmt"># File lib/acts_as_audited/audit.rb, line 57</span>
384
+ 57: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">revision</span>
385
+ 58: <span class="ruby-identifier">clazz</span> = <span class="ruby-identifier">auditable_type</span>.<span class="ruby-identifier">constantize</span>
386
+ 59: <span class="ruby-identifier">returning</span> <span class="ruby-identifier">clazz</span>.<span class="ruby-identifier">find_by_id</span>(<span class="ruby-identifier">auditable_id</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">clazz</span>.<span class="ruby-identifier">new</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">m</span><span class="ruby-operator">|</span>
387
+ 60: <span class="ruby-constant">Audit</span>.<span class="ruby-identifier">assign_revision_attributes</span>(<span class="ruby-identifier">m</span>, <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">reconstruct_attributes</span>(<span class="ruby-identifier">ancestors</span>).<span class="ruby-identifier">merge</span>({<span class="ruby-identifier">:version</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">version</span>}))
388
+ 61: <span class="ruby-keyword kw">end</span>
389
+ 62: <span class="ruby-keyword kw">end</span>
390
+ </pre>
391
+ </div>
392
+ </div>
393
+ </div>
394
+
395
+
396
+ </div>
397
+
398
+
399
+ </div>
400
+
401
+
402
+ <div id="validator-badges">
403
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
404
+ </div>
405
+
406
+ </body>
407
+ </html>
@@ -0,0 +1,226 @@
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>Module: CollectiveIdea::Acts::Audited::ClassMethods</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>Module</strong></td>
53
+ <td class="class-name-in-header">CollectiveIdea::Acts::Audited::ClassMethods</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../../../../files/lib/acts_as_audited_rb.html">
59
+ lib/acts_as_audited.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ </table>
66
+ </div>
67
+ <!-- banner header -->
68
+
69
+ <div id="bodyContent">
70
+
71
+
72
+
73
+ <div id="contextContent">
74
+
75
+
76
+
77
+ </div>
78
+
79
+ <div id="method-list">
80
+ <h3 class="section-bar">Methods</h3>
81
+
82
+ <div class="name-list">
83
+ <a href="#M000009">acts_as_audited</a>&nbsp;&nbsp;
84
+ </div>
85
+ </div>
86
+
87
+ </div>
88
+
89
+
90
+ <!-- if includes -->
91
+ <div id="includes">
92
+ <h3 class="section-bar">Included Modules</h3>
93
+
94
+ <div id="includes-list">
95
+ <span class="include-name"><a href="InstanceMethods.html">CollectiveIdea::Acts::Audited::InstanceMethods</a></span>
96
+ </div>
97
+ </div>
98
+
99
+ <div id="section">
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+
108
+ <!-- if method_list -->
109
+ <div id="methods">
110
+ <h3 class="section-bar">Public Instance methods</h3>
111
+
112
+ <div id="method-M000009" class="method-detail">
113
+ <a name="M000009"></a>
114
+
115
+ <div class="method-heading">
116
+ <a href="#M000009" class="method-signature">
117
+ <span class="method-name">acts_as_audited</span><span class="method-args">(options = {})</span>
118
+ </a>
119
+ </div>
120
+
121
+ <div class="method-description">
122
+ <h2>Configuration options</h2>
123
+ <ul>
124
+ <li><tt>only</tt> - Only audit the given attributes
125
+
126
+ </li>
127
+ <li><tt>except</tt> - Excludes fields from being saved in the audit log. By
128
+ default, <a href="ClassMethods.html#M000009">acts_as_audited</a> will audit
129
+ all but these fields:
130
+
131
+ <pre>
132
+ [self.primary_key, inheritance_column, 'lock_version', 'created_at', 'updated_at']
133
+ </pre>
134
+ <p>
135
+ You can add to those by passing one or an array of fields to skip.
136
+ </p>
137
+ <pre>
138
+ class User &lt; ActiveRecord::Base
139
+ acts_as_audited :except =&gt; :password
140
+ end
141
+ </pre>
142
+ </li>
143
+ <li><tt>protect</tt> - If your model uses <tt>attr_protected</tt>, set this to
144
+ false to prevent Rails from raising an error. If you declare
145
+ <tt>attr_accessibe</tt> before calling <tt><a
146
+ href="ClassMethods.html#M000009">acts_as_audited</a></tt>, it will
147
+ automatically default to false. You only need to explicitly set this if you
148
+ are calling <tt>attr_accessible</tt> after.
149
+
150
+ </li>
151
+ <li><tt>require_comment</tt> - Ensures that audit_comment is supplied before
152
+ any create, update or destroy operation.
153
+
154
+ <pre>
155
+ class User &lt; ActiveRecord::Base
156
+ acts_as_audited :protect =&gt; false
157
+ attr_accessible :name
158
+ end
159
+ </pre>
160
+ </li>
161
+ </ul>
162
+ <p><a class="source-toggle" href="#"
163
+ onclick="toggleCode('M000009-source');return false;">[Source]</a></p>
164
+ <div class="method-source-code" id="M000009-source">
165
+ <pre>
166
+ <span class="ruby-comment cmt"># File lib/acts_as_audited.rb, line 70</span>
167
+ 70: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">acts_as_audited</span>(<span class="ruby-identifier">options</span> = {})
168
+ 71: <span class="ruby-comment cmt"># don't allow multiple calls</span>
169
+ 72: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">included_modules</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-constant">CollectiveIdea</span><span class="ruby-operator">::</span><span class="ruby-constant">Acts</span><span class="ruby-operator">::</span><span class="ruby-constant">Audited</span><span class="ruby-operator">::</span><span class="ruby-constant">InstanceMethods</span>)
170
+ 73:
171
+ 74: <span class="ruby-identifier">options</span> = {<span class="ruby-identifier">:protect</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">accessible_attributes</span>.<span class="ruby-identifier">nil?</span>}.<span class="ruby-identifier">merge</span>(<span class="ruby-identifier">options</span>)
172
+ 75:
173
+ 76: <span class="ruby-identifier">class_inheritable_reader</span> <span class="ruby-identifier">:non_audited_columns</span>
174
+ 77: <span class="ruby-identifier">class_inheritable_reader</span> <span class="ruby-identifier">:auditing_enabled</span>
175
+ 78:
176
+ 79: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:only</span>]
177
+ 80: <span class="ruby-identifier">except</span> = <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">column_names</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:only</span>].<span class="ruby-identifier">flatten</span>.<span class="ruby-identifier">map</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">:to_s</span>)
178
+ 81: <span class="ruby-keyword kw">else</span>
179
+ 82: <span class="ruby-identifier">except</span> = [<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">primary_key</span>, <span class="ruby-identifier">inheritance_column</span>, <span class="ruby-value str">'lock_version'</span>, <span class="ruby-value str">'created_at'</span>, <span class="ruby-value str">'updated_at'</span>]
180
+ 83: <span class="ruby-identifier">except</span> <span class="ruby-operator">|=</span> <span class="ruby-constant">Array</span>(<span class="ruby-identifier">options</span>[<span class="ruby-identifier">:except</span>]).<span class="ruby-identifier">collect</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">:to_s</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:except</span>]
181
+ 84: <span class="ruby-keyword kw">end</span>
182
+ 85: <span class="ruby-identifier">write_inheritable_attribute</span> <span class="ruby-identifier">:non_audited_columns</span>, <span class="ruby-identifier">except</span>
183
+ 86:
184
+ 87: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:comment_required</span>]
185
+ 88: <span class="ruby-identifier">validates_presence_of</span> <span class="ruby-identifier">:audit_comment</span>
186
+ 89: <span class="ruby-identifier">before_destroy</span> <span class="ruby-identifier">:require_comment</span>
187
+ 90: <span class="ruby-keyword kw">end</span>
188
+ 91:
189
+ 92: <span class="ruby-identifier">attr_accessor</span> <span class="ruby-identifier">:audit_comment</span>
190
+ 93: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">accessible_attributes</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:protect</span>]
191
+ 94: <span class="ruby-identifier">attr_accessible</span> <span class="ruby-identifier">:audit_comment</span>
192
+ 95: <span class="ruby-keyword kw">end</span>
193
+ 96:
194
+ 97: <span class="ruby-identifier">has_many</span> <span class="ruby-identifier">:audits</span>, <span class="ruby-identifier">:as</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">:auditable</span>, <span class="ruby-identifier">:order</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;#{Audit.quoted_table_name}.version&quot;</span>
195
+ 98: <span class="ruby-identifier">attr_protected</span> <span class="ruby-identifier">:audit_ids</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">:protect</span>]
196
+ 99: <span class="ruby-constant">Audit</span>.<span class="ruby-identifier">audited_class_names</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">to_s</span>
197
+ 100:
198
+ 101: <span class="ruby-identifier">after_create</span> <span class="ruby-identifier">:audit_create</span>
199
+ 102: <span class="ruby-identifier">before_update</span> <span class="ruby-identifier">:audit_update</span>
200
+ 103: <span class="ruby-identifier">after_destroy</span> <span class="ruby-identifier">:audit_destroy</span>
201
+ 104:
202
+ 105: <span class="ruby-identifier">attr_accessor</span> <span class="ruby-identifier">:version</span>
203
+ 106:
204
+ 107: <span class="ruby-identifier">extend</span> <span class="ruby-constant">CollectiveIdea</span><span class="ruby-operator">::</span><span class="ruby-constant">Acts</span><span class="ruby-operator">::</span><span class="ruby-constant">Audited</span><span class="ruby-operator">::</span><span class="ruby-constant">SingletonMethods</span>
205
+ 108: <span class="ruby-identifier">include</span> <span class="ruby-constant">CollectiveIdea</span><span class="ruby-operator">::</span><span class="ruby-constant">Acts</span><span class="ruby-operator">::</span><span class="ruby-constant">Audited</span><span class="ruby-operator">::</span><span class="ruby-constant">InstanceMethods</span>
206
+ 109:
207
+ 110: <span class="ruby-identifier">write_inheritable_attribute</span> <span class="ruby-identifier">:auditing_enabled</span>, <span class="ruby-keyword kw">true</span>
208
+ 111: <span class="ruby-keyword kw">end</span>
209
+ </pre>
210
+ </div>
211
+ </div>
212
+ </div>
213
+
214
+
215
+ </div>
216
+
217
+
218
+ </div>
219
+
220
+
221
+ <div id="validator-badges">
222
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
223
+ </div>
224
+
225
+ </body>
226
+ </html>