magiclabs-userstamp 2.0.2

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 (53) hide show
  1. data/CHANGELOG +26 -0
  2. data/Gemfile +11 -0
  3. data/Gemfile.lock +55 -0
  4. data/LICENSE +20 -0
  5. data/Rakefile +38 -0
  6. data/Readme.rdoc +163 -0
  7. data/VERSION +1 -0
  8. data/init.rb +1 -0
  9. data/lib/migration_helper.rb +19 -0
  10. data/lib/stampable.rb +154 -0
  11. data/lib/stamper.rb +43 -0
  12. data/lib/userstamp.rb +52 -0
  13. data/magiclabs-userstamp.gemspec +85 -0
  14. data/rdoc/classes/Ddb/Controller.html +111 -0
  15. data/rdoc/classes/Ddb/Controller/Userstamp.html +125 -0
  16. data/rdoc/classes/Ddb/Controller/Userstamp/InstanceMethods.html +105 -0
  17. data/rdoc/classes/Ddb/Userstamp.html +121 -0
  18. data/rdoc/classes/Ddb/Userstamp/MigrationHelper.html +111 -0
  19. data/rdoc/classes/Ddb/Userstamp/MigrationHelper/InstanceMethods.html +142 -0
  20. data/rdoc/classes/Ddb/Userstamp/Stampable.html +128 -0
  21. data/rdoc/classes/Ddb/Userstamp/Stampable/ClassMethods.html +225 -0
  22. data/rdoc/classes/Ddb/Userstamp/Stamper.html +112 -0
  23. data/rdoc/classes/Ddb/Userstamp/Stamper/ClassMethods.html +142 -0
  24. data/rdoc/classes/Ddb/Userstamp/Stamper/InstanceMethods.html +207 -0
  25. data/rdoc/classes/Userstamp.html +118 -0
  26. data/rdoc/created.rid +1 -0
  27. data/rdoc/files/CHANGELOG.html +137 -0
  28. data/rdoc/files/LICENSE.html +129 -0
  29. data/rdoc/files/Readme_rdoc.html +301 -0
  30. data/rdoc/files/lib/migration_helper_rb.html +101 -0
  31. data/rdoc/files/lib/stampable_rb.html +101 -0
  32. data/rdoc/files/lib/stamper_rb.html +101 -0
  33. data/rdoc/files/lib/userstamp_rb.html +110 -0
  34. data/rdoc/fr_class_index.html +38 -0
  35. data/rdoc/fr_file_index.html +33 -0
  36. data/rdoc/fr_method_index.html +33 -0
  37. data/rdoc/index.html +24 -0
  38. data/rdoc/rdoc-style.css +208 -0
  39. data/test/compatibility_stamping_test.rb +69 -0
  40. data/test/controllers/posts_controller.rb +26 -0
  41. data/test/controllers/users_controller.rb +12 -0
  42. data/test/controllers/userstamp_controller.rb +9 -0
  43. data/test/helper.rb +61 -0
  44. data/test/models/comment.rb +5 -0
  45. data/test/models/foo.rb +3 -0
  46. data/test/models/person.rb +3 -0
  47. data/test/models/post.rb +13 -0
  48. data/test/models/user.rb +3 -0
  49. data/test/schema.rb +54 -0
  50. data/test/stamping_test.rb +138 -0
  51. data/test/userstamp_controller_test.rb +103 -0
  52. data/test/userstamp_test.rb +7 -0
  53. metadata +105 -0
@@ -0,0 +1,43 @@
1
+ module Ddb #:nodoc:
2
+ module Userstamp
3
+ module Stamper
4
+ def self.included(base) # :nodoc:
5
+ base.extend(ClassMethods)
6
+ end
7
+
8
+ module ClassMethods
9
+ def model_stamper
10
+ # don't allow multiple calls
11
+ return if self.included_modules.include?(Ddb::Userstamp::Stamper::InstanceMethods)
12
+ send(:extend, Ddb::Userstamp::Stamper::InstanceMethods)
13
+ end
14
+ end
15
+
16
+ module InstanceMethods
17
+ # Used to set the stamper for a particular request. See the Userstamp module for more
18
+ # details on how to use this method.
19
+ def stamper=(object)
20
+ object_stamper = if object.is_a?(ActiveRecord::Base)
21
+ object.send("#{object.class.primary_key}".to_sym)
22
+ else
23
+ object
24
+ end
25
+
26
+ Thread.current["#{self.to_s.downcase}_#{self.object_id}_stamper"] = object_stamper
27
+ end
28
+
29
+ # Retrieves the existing stamper for the current request.
30
+ def stamper
31
+ Thread.current["#{self.to_s.downcase}_#{self.object_id}_stamper"]
32
+ end
33
+
34
+ # Sets the stamper back to +nil+ to prepare for the next request.
35
+ def reset_stamper
36
+ Thread.current["#{self.to_s.downcase}_#{self.object_id}_stamper"] = nil
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ ActiveRecord::Base.send(:include, Ddb::Userstamp::Stamper) if defined?(ActiveRecord)
@@ -0,0 +1,52 @@
1
+ require 'stamper'
2
+ require 'stampable'
3
+ require 'migration_helper'
4
+
5
+ module Userstamp
6
+ VERSION = File.read( File.join(File.dirname(__FILE__),'..','VERSION') ).strip
7
+ end
8
+
9
+ module Ddb
10
+ module Controller
11
+ # The Userstamp module, when included into a controller, adds a before filter
12
+ # (named <tt>set_stamper</tt>) and an after filter (name <tt>reset_stamper</tt>).
13
+ # These methods assume a couple of things, but can be re-implemented in your
14
+ # controller to better suite your application.
15
+ #
16
+ # See the documentation for <tt>set_stamper</tt> and <tt>reset_stamper</tt> for
17
+ # specific implementation details.
18
+ module Userstamp
19
+ def self.included(base) # :nodoc:
20
+ base.send :include, InstanceMethods
21
+ base.before_filter :set_stamper
22
+ base.after_filter :reset_stamper
23
+ end
24
+
25
+ module InstanceMethods
26
+ private
27
+ # The <tt>set_stamper</tt> method as implemented here assumes a couple
28
+ # of things. First, that you are using a +User+ model as the stamper
29
+ # and second that your controller has a <tt>current_user</tt> method
30
+ # that contains the currently logged in stamper. If either of these
31
+ # are not the case in your application you will want to manually add
32
+ # your own implementation of this method to the private section of
33
+ # the controller where you are including the Userstamp module.
34
+ def set_stamper
35
+ User.stamper = self.current_user
36
+ end
37
+
38
+ # The <tt>reset_stamper</tt> method as implemented here assumes that a
39
+ # +User+ model is being used as the stamper. If this is not the case then
40
+ # you will need to manually add your own implementation of this method to
41
+ # the private section of the controller where you are including the
42
+ # Userstamp module.
43
+ def reset_stamper
44
+ User.reset_stamper
45
+ end
46
+ #end private
47
+ end
48
+ end
49
+ end
50
+ end
51
+
52
+ ActionController::Base.send(:include, Ddb::Controller) if defined?(ActionController)
@@ -0,0 +1,85 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "magiclabs-userstamp"
8
+ s.version = "2.0.2"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["DeLynn Berry"]
12
+ s.date = "2011-11-07"
13
+ s.email = "delynn@gmail.com"
14
+ s.extra_rdoc_files = [
15
+ "LICENSE"
16
+ ]
17
+ s.files = [
18
+ "CHANGELOG",
19
+ "Gemfile",
20
+ "Gemfile.lock",
21
+ "LICENSE",
22
+ "Rakefile",
23
+ "Readme.rdoc",
24
+ "VERSION",
25
+ "init.rb",
26
+ "lib/migration_helper.rb",
27
+ "lib/stampable.rb",
28
+ "lib/stamper.rb",
29
+ "lib/userstamp.rb",
30
+ "magiclabs-userstamp.gemspec",
31
+ "rdoc/classes/Ddb/Controller.html",
32
+ "rdoc/classes/Ddb/Controller/Userstamp.html",
33
+ "rdoc/classes/Ddb/Controller/Userstamp/InstanceMethods.html",
34
+ "rdoc/classes/Ddb/Userstamp.html",
35
+ "rdoc/classes/Ddb/Userstamp/MigrationHelper.html",
36
+ "rdoc/classes/Ddb/Userstamp/MigrationHelper/InstanceMethods.html",
37
+ "rdoc/classes/Ddb/Userstamp/Stampable.html",
38
+ "rdoc/classes/Ddb/Userstamp/Stampable/ClassMethods.html",
39
+ "rdoc/classes/Ddb/Userstamp/Stamper.html",
40
+ "rdoc/classes/Ddb/Userstamp/Stamper/ClassMethods.html",
41
+ "rdoc/classes/Ddb/Userstamp/Stamper/InstanceMethods.html",
42
+ "rdoc/classes/Userstamp.html",
43
+ "rdoc/created.rid",
44
+ "rdoc/files/CHANGELOG.html",
45
+ "rdoc/files/LICENSE.html",
46
+ "rdoc/files/Readme_rdoc.html",
47
+ "rdoc/files/lib/migration_helper_rb.html",
48
+ "rdoc/files/lib/stampable_rb.html",
49
+ "rdoc/files/lib/stamper_rb.html",
50
+ "rdoc/files/lib/userstamp_rb.html",
51
+ "rdoc/fr_class_index.html",
52
+ "rdoc/fr_file_index.html",
53
+ "rdoc/fr_method_index.html",
54
+ "rdoc/index.html",
55
+ "rdoc/rdoc-style.css",
56
+ "test/compatibility_stamping_test.rb",
57
+ "test/controllers/posts_controller.rb",
58
+ "test/controllers/users_controller.rb",
59
+ "test/controllers/userstamp_controller.rb",
60
+ "test/helper.rb",
61
+ "test/models/comment.rb",
62
+ "test/models/foo.rb",
63
+ "test/models/person.rb",
64
+ "test/models/post.rb",
65
+ "test/models/user.rb",
66
+ "test/schema.rb",
67
+ "test/stamping_test.rb",
68
+ "test/userstamp_controller_test.rb",
69
+ "test/userstamp_test.rb"
70
+ ]
71
+ s.homepage = "https://github.com/magiclabs/userstamp"
72
+ s.require_paths = ["lib"]
73
+ s.rubygems_version = "1.8.11"
74
+ s.summary = "This Rails plugin extends ActiveRecord::Base to add automatic updating of created_by and updated_by attributes of your models in much the same way that the ActiveRecord::Timestamp module updates created_(at/on) and updated_(at/on) attributes."
75
+
76
+ if s.respond_to? :specification_version then
77
+ s.specification_version = 3
78
+
79
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
80
+ else
81
+ end
82
+ else
83
+ end
84
+ end
85
+
@@ -0,0 +1,111 @@
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: Ddb::Controller</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">Ddb::Controller</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../../files/lib/userstamp_rb.html">
59
+ lib/userstamp.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
+
80
+ </div>
81
+
82
+
83
+ <!-- if includes -->
84
+
85
+ <div id="section">
86
+
87
+ <div id="class-list">
88
+ <h3 class="section-bar">Classes and Modules</h3>
89
+
90
+ Module <a href="Controller/Userstamp.html" class="link">Ddb::Controller::Userstamp</a><br />
91
+
92
+ </div>
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+ <!-- if method_list -->
101
+
102
+
103
+ </div>
104
+
105
+
106
+ <div id="validator-badges">
107
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
108
+ </div>
109
+
110
+ </body>
111
+ </html>
@@ -0,0 +1,125 @@
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: Ddb::Controller::Userstamp</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">Ddb::Controller::Userstamp</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../../../files/lib/userstamp_rb.html">
59
+ lib/userstamp.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
+ <div id="description">
76
+ <p>
77
+ The <a href="Userstamp.html">Userstamp</a> module, when included into a
78
+ controller, adds a before filter (named <tt>set_stamper</tt>) and an after
79
+ filter (name <tt>reset_stamper</tt>). These methods assume a couple of
80
+ things, but can be re-implemented in your controller to better suite your
81
+ application.
82
+ </p>
83
+ <p>
84
+ See the documentation for <tt>set_stamper</tt> and <tt>reset_stamper</tt>
85
+ for specific implementation details.
86
+ </p>
87
+
88
+ </div>
89
+
90
+
91
+ </div>
92
+
93
+
94
+ </div>
95
+
96
+
97
+ <!-- if includes -->
98
+
99
+ <div id="section">
100
+
101
+ <div id="class-list">
102
+ <h3 class="section-bar">Classes and Modules</h3>
103
+
104
+ Module <a href="Userstamp/InstanceMethods.html" class="link">Ddb::Controller::Userstamp::InstanceMethods</a><br />
105
+
106
+ </div>
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
+ <!-- if method_list -->
115
+
116
+
117
+ </div>
118
+
119
+
120
+ <div id="validator-badges">
121
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
122
+ </div>
123
+
124
+ </body>
125
+ </html>
@@ -0,0 +1,105 @@
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: Ddb::Controller::Userstamp::InstanceMethods</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">Ddb::Controller::Userstamp::InstanceMethods</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../../../../files/lib/userstamp_rb.html">
59
+ lib/userstamp.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
+
80
+ </div>
81
+
82
+
83
+ <!-- if includes -->
84
+
85
+ <div id="section">
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+ <!-- if method_list -->
95
+
96
+
97
+ </div>
98
+
99
+
100
+ <div id="validator-badges">
101
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
102
+ </div>
103
+
104
+ </body>
105
+ </html>