userstamp 2.0.0

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 (56) hide show
  1. data/.gitignore +2 -0
  2. data/CHANGELOG +26 -0
  3. data/LICENSE +20 -0
  4. data/README +177 -0
  5. data/Rakefile +38 -0
  6. data/VERSION +1 -0
  7. data/init.rb +1 -0
  8. data/lib/migration_helper.rb +19 -0
  9. data/lib/stampable.rb +151 -0
  10. data/lib/stamper.rb +43 -0
  11. data/lib/userstamp.rb +48 -0
  12. data/rdoc/classes/Ddb/Controller.html +111 -0
  13. data/rdoc/classes/Ddb/Controller/Userstamp.html +125 -0
  14. data/rdoc/classes/Ddb/Controller/Userstamp/InstanceMethods.html +105 -0
  15. data/rdoc/classes/Ddb/Userstamp.html +121 -0
  16. data/rdoc/classes/Ddb/Userstamp/MigrationHelper.html +111 -0
  17. data/rdoc/classes/Ddb/Userstamp/MigrationHelper/InstanceMethods.html +142 -0
  18. data/rdoc/classes/Ddb/Userstamp/Stampable.html +128 -0
  19. data/rdoc/classes/Ddb/Userstamp/Stampable/ClassMethods.html +222 -0
  20. data/rdoc/classes/Ddb/Userstamp/Stamper.html +112 -0
  21. data/rdoc/classes/Ddb/Userstamp/Stamper/ClassMethods.html +142 -0
  22. data/rdoc/classes/Ddb/Userstamp/Stamper/InstanceMethods.html +207 -0
  23. data/rdoc/created.rid +1 -0
  24. data/rdoc/files/CHANGELOG.html +137 -0
  25. data/rdoc/files/LICENSE.html +129 -0
  26. data/rdoc/files/README.html +341 -0
  27. data/rdoc/files/lib/migration_helper_rb.html +101 -0
  28. data/rdoc/files/lib/stampable_rb.html +101 -0
  29. data/rdoc/files/lib/stamper_rb.html +101 -0
  30. data/rdoc/files/lib/userstamp_rb.html +101 -0
  31. data/rdoc/fr_class_index.html +37 -0
  32. data/rdoc/fr_file_index.html +33 -0
  33. data/rdoc/fr_method_index.html +33 -0
  34. data/rdoc/index.html +24 -0
  35. data/rdoc/rdoc-style.css +208 -0
  36. data/test/compatibility_stamping_test.rb +63 -0
  37. data/test/controllers/posts_controller.rb +26 -0
  38. data/test/controllers/users_controller.rb +12 -0
  39. data/test/controllers/userstamp_controller.rb +9 -0
  40. data/test/database.yml +4 -0
  41. data/test/fixtures/comments.yml +16 -0
  42. data/test/fixtures/people.yml +11 -0
  43. data/test/fixtures/posts.yml +9 -0
  44. data/test/fixtures/users.yml +7 -0
  45. data/test/helpers/functional_test_helper.rb +37 -0
  46. data/test/helpers/unit_test_helper.rb +29 -0
  47. data/test/models/comment.rb +4 -0
  48. data/test/models/person.rb +3 -0
  49. data/test/models/ping.rb +7 -0
  50. data/test/models/post.rb +4 -0
  51. data/test/models/user.rb +3 -0
  52. data/test/schema.rb +56 -0
  53. data/test/stamping_test.rb +110 -0
  54. data/test/userstamp_controller_test.rb +118 -0
  55. data/userstamp.gemspec +107 -0
  56. metadata +123 -0
@@ -0,0 +1,33 @@
1
+
2
+ <?xml version="1.0" encoding="iso-8859-1"?>
3
+ <!DOCTYPE html
4
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
5
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6
+
7
+ <!--
8
+
9
+ Methods
10
+
11
+ -->
12
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
13
+ <head>
14
+ <title>Methods</title>
15
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
16
+ <link rel="stylesheet" href="rdoc-style.css" type="text/css" />
17
+ <base target="docwin" />
18
+ </head>
19
+ <body>
20
+ <div id="index">
21
+ <h1 class="section-bar">Methods</h1>
22
+ <div id="index-entries">
23
+ <a href="classes/Ddb/Userstamp/Stamper/ClassMethods.html#M000001">model_stamper (Ddb::Userstamp::Stamper::ClassMethods)</a><br />
24
+ <a href="classes/Ddb/Userstamp/Stamper/InstanceMethods.html#M000004">reset_stamper (Ddb::Userstamp::Stamper::InstanceMethods)</a><br />
25
+ <a href="classes/Ddb/Userstamp/Stampable/ClassMethods.html#M000005">stampable (Ddb::Userstamp::Stampable::ClassMethods)</a><br />
26
+ <a href="classes/Ddb/Userstamp/Stamper/InstanceMethods.html#M000003">stamper (Ddb::Userstamp::Stamper::InstanceMethods)</a><br />
27
+ <a href="classes/Ddb/Userstamp/Stamper/InstanceMethods.html#M000002">stamper= (Ddb::Userstamp::Stamper::InstanceMethods)</a><br />
28
+ <a href="classes/Ddb/Userstamp/MigrationHelper/InstanceMethods.html#M000007">userstamps (Ddb::Userstamp::MigrationHelper::InstanceMethods)</a><br />
29
+ <a href="classes/Ddb/Userstamp/Stampable/ClassMethods.html#M000006">without_stamps (Ddb::Userstamp::Stampable::ClassMethods)</a><br />
30
+ </div>
31
+ </div>
32
+ </body>
33
+ </html>
data/rdoc/index.html ADDED
@@ -0,0 +1,24 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
5
+
6
+ <!--
7
+
8
+ Userstamp
9
+
10
+ -->
11
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
12
+ <head>
13
+ <title>Userstamp</title>
14
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
15
+ </head>
16
+ <frameset rows="20%, 80%">
17
+ <frameset cols="25%,35%,45%">
18
+ <frame src="fr_file_index.html" title="Files" name="Files" />
19
+ <frame src="fr_class_index.html" name="Classes" />
20
+ <frame src="fr_method_index.html" name="Methods" />
21
+ </frameset>
22
+ <frame src="files/README.html" name="docwin" />
23
+ </frameset>
24
+ </html>
@@ -0,0 +1,208 @@
1
+
2
+ body {
3
+ font-family: Verdana,Arial,Helvetica,sans-serif;
4
+ font-size: 90%;
5
+ margin: 0;
6
+ margin-left: 40px;
7
+ padding: 0;
8
+ background: white;
9
+ }
10
+
11
+ h1,h2,h3,h4 { margin: 0; color: #efefef; background: transparent; }
12
+ h1 { font-size: 150%; }
13
+ h2,h3,h4 { margin-top: 1em; }
14
+
15
+ a { background: #eef; color: #039; text-decoration: none; }
16
+ a:hover { background: #039; color: #eef; }
17
+
18
+ /* Override the base stylesheet's Anchor inside a table cell */
19
+ td > a {
20
+ background: transparent;
21
+ color: #039;
22
+ text-decoration: none;
23
+ }
24
+
25
+ /* and inside a section title */
26
+ .section-title > a {
27
+ background: transparent;
28
+ color: #eee;
29
+ text-decoration: none;
30
+ }
31
+
32
+ /* === Structural elements =================================== */
33
+
34
+ div#index {
35
+ margin: 0;
36
+ margin-left: -40px;
37
+ padding: 0;
38
+ font-size: 90%;
39
+ }
40
+
41
+
42
+ div#index a {
43
+ margin-left: 0.7em;
44
+ }
45
+
46
+ div#index .section-bar {
47
+ margin-left: 0px;
48
+ padding-left: 0.7em;
49
+ background: #ccc;
50
+ font-size: small;
51
+ }
52
+
53
+
54
+ div#classHeader, div#fileHeader {
55
+ width: auto;
56
+ color: white;
57
+ padding: 0.5em 1.5em 0.5em 1.5em;
58
+ margin: 0;
59
+ margin-left: -40px;
60
+ border-bottom: 3px solid #006;
61
+ }
62
+
63
+ div#classHeader a, div#fileHeader a {
64
+ background: inherit;
65
+ color: white;
66
+ }
67
+
68
+ div#classHeader td, div#fileHeader td {
69
+ background: inherit;
70
+ color: white;
71
+ }
72
+
73
+
74
+ div#fileHeader {
75
+ background: #057;
76
+ }
77
+
78
+ div#classHeader {
79
+ background: #048;
80
+ }
81
+
82
+
83
+ .class-name-in-header {
84
+ font-size: 180%;
85
+ font-weight: bold;
86
+ }
87
+
88
+
89
+ div#bodyContent {
90
+ padding: 0 1.5em 0 1.5em;
91
+ }
92
+
93
+ div#description {
94
+ padding: 0.5em 1.5em;
95
+ background: #efefef;
96
+ border: 1px dotted #999;
97
+ }
98
+
99
+ div#description h1,h2,h3,h4,h5,h6 {
100
+ color: #125;;
101
+ background: transparent;
102
+ }
103
+
104
+ div#validator-badges {
105
+ text-align: center;
106
+ }
107
+ div#validator-badges img { border: 0; }
108
+
109
+ div#copyright {
110
+ color: #333;
111
+ background: #efefef;
112
+ font: 0.75em sans-serif;
113
+ margin-top: 5em;
114
+ margin-bottom: 0;
115
+ padding: 0.5em 2em;
116
+ }
117
+
118
+
119
+ /* === Classes =================================== */
120
+
121
+ table.header-table {
122
+ color: white;
123
+ font-size: small;
124
+ }
125
+
126
+ .type-note {
127
+ font-size: small;
128
+ color: #DEDEDE;
129
+ }
130
+
131
+ .xxsection-bar {
132
+ background: #eee;
133
+ color: #333;
134
+ padding: 3px;
135
+ }
136
+
137
+ .section-bar {
138
+ color: #333;
139
+ border-bottom: 1px solid #999;
140
+ margin-left: -20px;
141
+ }
142
+
143
+
144
+ .section-title {
145
+ background: #79a;
146
+ color: #eee;
147
+ padding: 3px;
148
+ margin-top: 2em;
149
+ margin-left: -30px;
150
+ border: 1px solid #999;
151
+ }
152
+
153
+ .top-aligned-row { vertical-align: top }
154
+ .bottom-aligned-row { vertical-align: bottom }
155
+
156
+ /* --- Context section classes ----------------------- */
157
+
158
+ .context-row { }
159
+ .context-item-name { font-family: monospace; font-weight: bold; color: black; }
160
+ .context-item-value { font-size: small; color: #448; }
161
+ .context-item-desc { color: #333; padding-left: 2em; }
162
+
163
+ /* --- Method classes -------------------------- */
164
+ .method-detail {
165
+ background: #efefef;
166
+ padding: 0;
167
+ margin-top: 0.5em;
168
+ margin-bottom: 1em;
169
+ border: 1px dotted #ccc;
170
+ }
171
+ .method-heading {
172
+ color: black;
173
+ background: #ccc;
174
+ border-bottom: 1px solid #666;
175
+ padding: 0.2em 0.5em 0 0.5em;
176
+ }
177
+ .method-signature { color: black; background: inherit; }
178
+ .method-name { font-weight: bold; }
179
+ .method-args { font-style: italic; }
180
+ .method-description { padding: 0 0.5em 0 0.5em; }
181
+
182
+ /* --- Source code sections -------------------- */
183
+
184
+ a.source-toggle { font-size: 90%; }
185
+ div.method-source-code {
186
+ background: #262626;
187
+ color: #ffdead;
188
+ margin: 1em;
189
+ padding: 0.5em;
190
+ border: 1px dashed #999;
191
+ overflow: hidden;
192
+ }
193
+
194
+ div.method-source-code pre { color: #ffdead; overflow: hidden; }
195
+
196
+ /* --- Ruby keyword styles --------------------- */
197
+
198
+ .standalone-code { background: #221111; color: #ffdead; overflow: hidden; }
199
+
200
+ .ruby-constant { color: #7fffd4; background: transparent; }
201
+ .ruby-keyword { color: #00ffff; background: transparent; }
202
+ .ruby-ivar { color: #eedd82; background: transparent; }
203
+ .ruby-operator { color: #00ffee; background: transparent; }
204
+ .ruby-identifier { color: #ffdead; background: transparent; }
205
+ .ruby-node { color: #ffa07a; background: transparent; }
206
+ .ruby-comment { color: #b22222; font-weight: bold; background: transparent; }
207
+ .ruby-regexp { color: #ffa07a; background: transparent; }
208
+ .ruby-value { color: #7fffd4; background: transparent; }
@@ -0,0 +1,63 @@
1
+ $:.unshift(File.dirname(__FILE__))
2
+
3
+ require 'helpers/unit_test_helper'
4
+ Ddb::Userstamp.compatibility_mode = true
5
+ require 'models/user'
6
+ require 'models/person'
7
+ require 'models/post'
8
+ require 'models/comment'
9
+
10
+ class CompatibilityStampingTests< Test::Unit::TestCase # :nodoc:
11
+ fixtures :people, :comments
12
+
13
+ def setup
14
+ Person.stamper = @delynn
15
+ end
16
+
17
+ def test_comment_creation_with_stamped_object
18
+ assert_equal @delynn.id, Person.stamper
19
+
20
+ comment = Comment.create(:comment => "Test Comment")
21
+ assert_equal @delynn.id, comment.created_by
22
+ assert_equal @delynn.id, comment.updated_by
23
+ assert_equal @delynn, comment.creator
24
+ assert_equal @delynn, comment.updater
25
+ end
26
+
27
+ def test_comment_creation_with_stamped_integer
28
+ Person.stamper = 2
29
+ assert_equal 2, Person.stamper
30
+
31
+ comment = Comment.create(:comment => "Test Comment - 2")
32
+ assert_equal @nicole.id, comment.created_by
33
+ assert_equal @nicole.id, comment.updated_by
34
+ assert_equal @nicole, comment.creator
35
+ assert_equal @nicole, comment.updater
36
+ end
37
+
38
+ def test_comment_updating_with_stamped_object
39
+ Person.stamper = @nicole
40
+ assert_equal @nicole.id, Person.stamper
41
+
42
+ @first_comment.comment << " - Updated"
43
+ @first_comment.save
44
+ @first_comment.reload
45
+ assert_equal @delynn.id, @first_comment.created_by
46
+ assert_equal @nicole.id, @first_comment.updated_by
47
+ assert_equal @delynn, @first_comment.creator
48
+ assert_equal @nicole, @first_comment.updater
49
+ end
50
+
51
+ def test_comment_updating_with_stamped_integer
52
+ Person.stamper = 2
53
+ assert_equal 2, Person.stamper
54
+
55
+ @first_comment.comment << " - Updated"
56
+ @first_comment.save
57
+ @first_comment.reload
58
+ assert_equal @delynn.id, @first_comment.created_by
59
+ assert_equal @nicole.id, @first_comment.updated_by
60
+ assert_equal @delynn, @first_comment.creator
61
+ assert_equal @nicole, @first_comment.updater
62
+ end
63
+ end
@@ -0,0 +1,26 @@
1
+ class PostsController < UserstampController
2
+ def edit
3
+ @post = Post.find(params[:id])
4
+ render(:inline => "<%= @post.title %>")
5
+ end
6
+
7
+ def update
8
+ @post = Post.find(params[:id])
9
+ @post.update_attributes(params[:post])
10
+ render(:inline => "<%= @post.title %>")
11
+ end
12
+
13
+ protected
14
+ def current_user
15
+ Person.find(session[:person_id])
16
+ end
17
+
18
+ def set_stamper
19
+ Person.stamper = self.current_user
20
+ end
21
+
22
+ def reset_stamper
23
+ Person.reset_stamper
24
+ end
25
+ #end
26
+ end
@@ -0,0 +1,12 @@
1
+ class UsersController < UserstampController
2
+ def edit
3
+ @user = User.find(params[:id])
4
+ render(:inline => "<%= @user.name %>")
5
+ end
6
+
7
+ def update
8
+ @user = User.find(params[:id])
9
+ @user.update_attributes(params[:user])
10
+ render(:inline => "<%= @user.name %>")
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ class UserstampController < ActionController::Base
2
+ include Ddb::Controller::Userstamp
3
+
4
+ protected
5
+ def current_user
6
+ User.find(session[:user_id])
7
+ end
8
+ #end
9
+ end
data/test/database.yml ADDED
@@ -0,0 +1,4 @@
1
+ test:
2
+ adapter: sqlite3
3
+ database: userstamp_plugin_test.sqlite3
4
+ timeout: 5000
@@ -0,0 +1,16 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+ first_comment:
3
+ id: 1
4
+ post_id: 1
5
+ comment: First Comment
6
+ created_by: 1
7
+ second_comment:
8
+ id: 2
9
+ post_id: 1
10
+ comment: Second Comment
11
+ created_by: 2
12
+ third_comment:
13
+ id: 3
14
+ post_id: 2
15
+ comment: Third Comment
16
+ created_by: 1
@@ -0,0 +1,11 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+ delynn:
3
+ id: 1
4
+ name: DeLynn
5
+ creator_id: 1
6
+ updater_id: 1
7
+ nicole:
8
+ id: 2
9
+ name: Nicole
10
+ creator_id: 2
11
+ updater_id: 2
@@ -0,0 +1,9 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+ first_post:
3
+ id: 1
4
+ title: First Post
5
+ creator_id: 1
6
+ second_post:
7
+ id: 2
8
+ title: Second Post
9
+ creator_id: 1
@@ -0,0 +1,7 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+ zeus:
3
+ id: 1
4
+ name: Zeus
5
+ hera:
6
+ id: 2
7
+ name: Hera
@@ -0,0 +1,37 @@
1
+ $:.unshift(File.dirname(__FILE__) + '/../..')
2
+ $:.unshift(File.dirname(__FILE__) + '/../../lib')
3
+ schema_file = File.join(File.dirname(__FILE__), '..', 'schema.rb')
4
+ ENV["RAILS_ENV"] = "test"
5
+ require 'rubygems'
6
+ require 'test/unit'
7
+ require 'active_support'
8
+ require 'active_support/test_case'
9
+ require 'active_record'
10
+ require 'active_record/fixtures'
11
+ require 'action_controller'
12
+ require 'action_controller/test_case'
13
+ require 'action_controller/test_process'
14
+ require 'action_controller/integration'
15
+ require 'init'
16
+
17
+ config = YAML::load(IO.read(File.join(File.dirname(__FILE__), '..', 'database.yml')))[ENV['DB'] || 'test']
18
+ ActiveRecord::Base.configurations = config
19
+ ActiveRecord::Base.establish_connection(config)
20
+
21
+ ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/models.log")
22
+ ActionController::Base.logger = Logger.new(File.dirname(__FILE__) + "/controllers.log")
23
+
24
+ load(schema_file) if File.exist?(schema_file)
25
+
26
+ Test::Unit::TestCase.fixture_path = File.join(File.dirname(__FILE__), '..', 'fixtures')
27
+ $:.unshift(Test::Unit::TestCase.fixture_path)
28
+
29
+ class Test::Unit::TestCase
30
+ # Turn off transactional fixtures if you're working with MyISAM tables in MySQL
31
+ self.use_transactional_fixtures = true
32
+
33
+ # Instantiated fixtures are slow, but give you @david where you otherwise would need people(:david)
34
+ self.use_instantiated_fixtures = true
35
+
36
+ # Add more helper methods to be used by all tests here...
37
+ end