activerecord-userstamp 3.0.2 → 3.0.3

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 (72) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -5
  3. data/.rspec +2 -2
  4. data/CHANGELOG.md +103 -99
  5. data/Gemfile +3 -3
  6. data/LICENSE +21 -21
  7. data/README.md +189 -189
  8. data/Rakefile +17 -17
  9. data/activerecord-userstamp.gemspec +34 -34
  10. data/lib/active_record/userstamp.rb +30 -30
  11. data/lib/active_record/userstamp/configuration.rb +49 -49
  12. data/lib/active_record/userstamp/controller_additions.rb +50 -50
  13. data/lib/active_record/userstamp/migration_additions.rb +14 -14
  14. data/lib/active_record/userstamp/model_additions.rb +10 -10
  15. data/lib/active_record/userstamp/stampable.rb +123 -123
  16. data/lib/active_record/userstamp/stamper.rb +54 -54
  17. data/lib/active_record/userstamp/utilities.rb +55 -54
  18. data/lib/active_record/userstamp/version.rb +4 -4
  19. data/lib/activerecord/userstamp.rb +1 -1
  20. data/spec/controllers/posts_controller_spec.rb +44 -44
  21. data/spec/controllers/users_controller_spec.rb +50 -50
  22. data/spec/dummy/README.rdoc +28 -28
  23. data/spec/dummy/Rakefile +6 -6
  24. data/spec/dummy/app/assets/javascripts/application.js +13 -13
  25. data/spec/dummy/app/assets/stylesheets/application.css +15 -15
  26. data/spec/dummy/app/controllers/application_controller.rb +13 -13
  27. data/spec/dummy/app/controllers/posts_controller.rb +36 -36
  28. data/spec/dummy/app/controllers/users_controller.rb +22 -22
  29. data/spec/dummy/app/helpers/application_helper.rb +2 -2
  30. data/spec/dummy/app/models/comment.rb +5 -5
  31. data/spec/dummy/app/models/person.rb +3 -3
  32. data/spec/dummy/app/models/post.rb +14 -14
  33. data/spec/dummy/app/models/tag.rb +3 -0
  34. data/spec/dummy/app/models/user.rb +3 -3
  35. data/spec/dummy/app/views/layouts/application.html.erb +14 -14
  36. data/spec/dummy/bin/bundle +3 -3
  37. data/spec/dummy/bin/rails +4 -4
  38. data/spec/dummy/bin/rake +4 -4
  39. data/spec/dummy/bin/setup +29 -29
  40. data/spec/dummy/config.ru +4 -4
  41. data/spec/dummy/config/application.rb +30 -30
  42. data/spec/dummy/config/boot.rb +5 -5
  43. data/spec/dummy/config/database.yml +23 -23
  44. data/spec/dummy/config/environment.rb +5 -5
  45. data/spec/dummy/config/environments/development.rb +41 -41
  46. data/spec/dummy/config/environments/production.rb +79 -79
  47. data/spec/dummy/config/environments/test.rb +37 -37
  48. data/spec/dummy/config/initializers/assets.rb +11 -11
  49. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -7
  50. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -3
  51. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -4
  52. data/spec/dummy/config/initializers/inflections.rb +16 -16
  53. data/spec/dummy/config/initializers/mime_types.rb +4 -4
  54. data/spec/dummy/config/initializers/session_store.rb +3 -3
  55. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -14
  56. data/spec/dummy/config/locales/en.yml +23 -23
  57. data/spec/dummy/config/routes.rb +56 -56
  58. data/spec/dummy/config/secrets.yml +22 -22
  59. data/spec/dummy/db/schema.rb +54 -45
  60. data/spec/dummy/public/404.html +67 -67
  61. data/spec/dummy/public/422.html +67 -67
  62. data/spec/dummy/public/500.html +66 -66
  63. data/spec/lib/configuration_spec.rb +20 -20
  64. data/spec/lib/migration_spec.rb +71 -71
  65. data/spec/lib/stamper_spec.rb +66 -66
  66. data/spec/lib/stamping_spec.rb +250 -238
  67. data/spec/lib/userstamp_spec.rb +7 -7
  68. data/spec/rails_helper.rb +7 -7
  69. data/spec/spec_helper.rb +97 -97
  70. data/spec/support/database_helpers.rb +22 -22
  71. data/spec/support/with_temporary_table.rb +51 -51
  72. metadata +3 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 56c177f02be82c8c7a1a66cf7b7392d862b25efa
4
- data.tar.gz: 7f8d80e37b76903dcc04125b62657355d96e0619
3
+ metadata.gz: 352c22aa4ca4d1dd7c9cc5ff0a7c3e9e2ccf9ba1
4
+ data.tar.gz: bf2df186ca39cb6ff78370ac3eca3e9e13624b64
5
5
  SHA512:
6
- metadata.gz: ff83831f18094fc7fd05d4f8396b38eae47e1b3d45a180f9909964d6d333fdd660ca420df7d79c0df1cc45c3df7ecf0b500844b84ae0d83d5ad4bfe27429a4e0
7
- data.tar.gz: 1b5a4812a59624987bd4a9201b5845ed3a23f7af40c1b7b01bf749dffc2410047e50a841d39786a40d0b50b12412d90417791cc7926ee5874b155d86cd745660
6
+ metadata.gz: cb311b3579621119fa951df7a229e67bd3593bccf3a025e0e47ca1d6fd34b906e2dad3bf74474a7beb66929940a2ad463d928776c11f9256816c40b42a5d8d7e
7
+ data.tar.gz: 4e7114880578dd234f11b25ed44c8773b44480037672b8895a8586bbfdb78c1dc269c6175c0296c3abe07bd080c57775434da4f89b41d14ad68ab38cd529479f
data/.gitignore CHANGED
@@ -1,5 +1,5 @@
1
- *.log
2
- *.sqlite3
3
- /.rdoc
4
- /spec/examples.txt
5
- /.bundle
1
+ *.log
2
+ *.sqlite3
3
+ /.rdoc
4
+ /.bundle
5
+ /spec/examples.txt
data/.rspec CHANGED
@@ -1,2 +1,2 @@
1
- --color
2
- --require spec_helper
1
+ --color
2
+ --require spec_helper
@@ -1,99 +1,103 @@
1
- # Changelog
2
- ## 3.0.2 (12-7-2015)
3
- * Joel Low - Depending on what was set to a stamper (ID or record object), the
4
- association ID or association setter is used to assign the
5
- creator/updater/deleter attributes. This only applies if the attributes
6
- end with `_id`; otherwise the attribute would be used verbatim (e.g. the
7
- compatibility mode `created_by`).
8
- * Joel Low - Provide a `with_stamper` method to specify the stamper for a given
9
- stamper class during the execution of the block.
10
- * Joel Low - Ensure that the `set_stamper` and `reset_stamper` calls from the
11
- controller are always paired so that the stamper state is always properly
12
- restored. `set_stamper` and `reset_stamper` is now deprecated and will be
13
- removed in ActiveRecord::Userstamp 3.1 and replaced with a single
14
- `with_stamper` `around_action` callback.
15
-
16
- ## 3.0.1 (11-7-2015)
17
- * Joel Low - Only declare the creator/updater/deleter associations when the table has
18
- the attribute columns. If the columns cannot be determined (e.g. if the
19
- table has not been defined, such as during tests), then the model would
20
- need to explicitly call `stampable`.
21
-
22
- ## 3.0.0 (10-7-2015)
23
- * Joel Low - Remove `compatibility_mode`. Use the `creator_attribute`,
24
- `updater_attribute`, and `deleter_attribute` configuration options instead.
25
- * Joel Low - The table definition migration helper should follow the gem configuration
26
- when generating column names.
27
- * Joel Low - When deciding whether to generate a `deleter_id` column, check the gem
28
- configuration for the `deleter_attribute` configuration option instead of
29
- relying on the user to specify in every migration.
30
- * Joel Low - Remove the `deleter` option from the `stampable` model declaration.
31
- * Joel Low - Remove the `creator_attribute`, `updater_attribute`, and `deleter_attribute`
32
- options from the `stampable` model declaration. All models will follow
33
- the gem configuration.
34
- * Joel Low - Added the `default_stamper` configuration option. The controller will
35
- automatically stamp using that model.
36
- * Joel Low - Additional attributes passed to `stampable` would be passed to the
37
- underlying `belongs_to` association.
38
- * Joel Low - Declare the creator/updater/deleter setter callbacks directly in
39
- `ActiveRecord::Base`. So now, all models will automatically be stamped
40
- when the creator/updater/deleter attributes are present. This mirrors
41
- `ActiveRecord::Timestamp` behaviour.
42
- * Joel Low - Automatically declare the creator/updater/deleter associations on every
43
- model. To add additional configuration options, simply call `stampable`.
44
- This can be called multiple times per model; the last call takes effect.
45
- * Joel Low - Remove support for `serialized_attributes`. It will be removed in Rails 5.
46
-
47
- ## 2.1.1 (9-7-2015)
48
-
49
- * Chris Hilton - Only set updater attribute if the record has changed or contains a
50
- serialized attribute.
51
- * Chris Hilton - Support `:with_deleted` in the `stampable` declaration.
52
- * Chris Hilton - Only set the creator attribute if it is blank.
53
- * Chris Branson - Fix deprecation warning in `serialized_attributes`.
54
- * Joel Low - Trigger the updater/creator stamping before saving, so that the correct
55
- users are stamped even if validation was not run.
56
- * Joel Low - Allow extra parameters to be passed to the migration helpers.
57
-
58
- ## 2.1.0 (28-3-2014)
59
- * Thomas von Deyen - Do not automatically make every class stampable.
60
-
61
- ## 2.0.2 (11-8-2011)
62
- * Chris Hilton - Set the creator/updater attributes before validation, so that they can
63
- be checked as part of validations.
64
- * Alex - Specify that the stampable class is camelized from the given symbol,
65
- not just capitalized, to follow ActiveRecord convention.
66
- ## 2.0.1 (8-10-2010)
67
- * Michael Grosser - Make stampable define the deleter association and before filter whenever
68
- a :deleter_attribute has been passed in options, or :deleter => true is
69
- passed, or Caboose::Acts::Paranoid is defined. This makes :deleter
70
- functionality useable to people who aren't use acts_as_paranoid.
71
- * Michael Grosser - do not leave record_userstamp turned on when an exception occurs inside
72
- the `without_stamps` block
73
-
74
- ## 2.0 (2-17-2008)
75
- * Ben Wyrosdick - Added a migration helper that gives migration scripts a <tt>userstamps</tt>
76
- method.
77
- * Marshall Roch - Stamping can be temporarily turned off using the 'without_stamps' class
78
- method.
79
- Example:
80
- Post.without_stamps do
81
- post = Post.find(params[:id])
82
- post.update_attributes(params[:post])
83
- post.save
84
- end
85
-
86
- * Models that should receive updates made by 'stampers' now use the acts_as_stampable class
87
- method. This sets up the belongs_to relationships and also injects private methods for use by
88
- the individual callback filter methods.
89
-
90
- * Models that are responsible for updating now use the acts_as_stamper class method. This
91
- injects the stamper= and stamper methods that are thread safe and should be updated per
92
- request by a controller.
93
-
94
- * The Userstamp module is now meant to be included with one of your project's controllers (the
95
- Application Controller is recommended). It creates a before filter called 'set_stampers' that
96
- is responsible for setting all the current Stampers.
97
-
98
- ## 1.0 (01-18-2006)
99
- * Initial Release
1
+ # Changelog
2
+ ## 3.0.3 (14-7-2015)
3
+ * Joel Low - Allow using ActiveRecord-Userstamp with generated tables (e.g.
4
+ `has_and_belongs_to_many` join tables.)
5
+
6
+ ## 3.0.2 (12-7-2015)
7
+ * Joel Low - Depending on what was set to a stamper (ID or record object), the
8
+ association ID or association setter is used to assign the
9
+ creator/updater/deleter attributes. This only applies if the attributes
10
+ end with `_id`; otherwise the attribute would be used verbatim (e.g. the
11
+ compatibility mode `created_by`).
12
+ * Joel Low - Provide a `with_stamper` method to specify the stamper for a given
13
+ stamper class during the execution of the block.
14
+ * Joel Low - Ensure that the `set_stamper` and `reset_stamper` calls from the
15
+ controller are always paired so that the stamper state is always properly
16
+ restored. `set_stamper` and `reset_stamper` is now deprecated and will be
17
+ removed in ActiveRecord::Userstamp 3.1 and replaced with a single
18
+ `with_stamper` `around_action` callback.
19
+
20
+ ## 3.0.1 (11-7-2015)
21
+ * Joel Low - Only declare the creator/updater/deleter associations when the table has
22
+ the attribute columns. If the columns cannot be determined (e.g. if the
23
+ table has not been defined, such as during tests), then the model would
24
+ need to explicitly call `stampable`.
25
+
26
+ ## 3.0.0 (10-7-2015)
27
+ * Joel Low - Remove `compatibility_mode`. Use the `creator_attribute`,
28
+ `updater_attribute`, and `deleter_attribute` configuration options instead.
29
+ * Joel Low - The table definition migration helper should follow the gem configuration
30
+ when generating column names.
31
+ * Joel Low - When deciding whether to generate a `deleter_id` column, check the gem
32
+ configuration for the `deleter_attribute` configuration option instead of
33
+ relying on the user to specify in every migration.
34
+ * Joel Low - Remove the `deleter` option from the `stampable` model declaration.
35
+ * Joel Low - Remove the `creator_attribute`, `updater_attribute`, and `deleter_attribute`
36
+ options from the `stampable` model declaration. All models will follow
37
+ the gem configuration.
38
+ * Joel Low - Added the `default_stamper` configuration option. The controller will
39
+ automatically stamp using that model.
40
+ * Joel Low - Additional attributes passed to `stampable` would be passed to the
41
+ underlying `belongs_to` association.
42
+ * Joel Low - Declare the creator/updater/deleter setter callbacks directly in
43
+ `ActiveRecord::Base`. So now, all models will automatically be stamped
44
+ when the creator/updater/deleter attributes are present. This mirrors
45
+ `ActiveRecord::Timestamp` behaviour.
46
+ * Joel Low - Automatically declare the creator/updater/deleter associations on every
47
+ model. To add additional configuration options, simply call `stampable`.
48
+ This can be called multiple times per model; the last call takes effect.
49
+ * Joel Low - Remove support for `serialized_attributes`. It will be removed in Rails 5.
50
+
51
+ ## 2.1.1 (9-7-2015)
52
+
53
+ * Chris Hilton - Only set updater attribute if the record has changed or contains a
54
+ serialized attribute.
55
+ * Chris Hilton - Support `:with_deleted` in the `stampable` declaration.
56
+ * Chris Hilton - Only set the creator attribute if it is blank.
57
+ * Chris Branson - Fix deprecation warning in `serialized_attributes`.
58
+ * Joel Low - Trigger the updater/creator stamping before saving, so that the correct
59
+ users are stamped even if validation was not run.
60
+ * Joel Low - Allow extra parameters to be passed to the migration helpers.
61
+
62
+ ## 2.1.0 (28-3-2014)
63
+ * Thomas von Deyen - Do not automatically make every class stampable.
64
+
65
+ ## 2.0.2 (11-8-2011)
66
+ * Chris Hilton - Set the creator/updater attributes before validation, so that they can
67
+ be checked as part of validations.
68
+ * Alex - Specify that the stampable class is camelized from the given symbol,
69
+ not just capitalized, to follow ActiveRecord convention.
70
+ ## 2.0.1 (8-10-2010)
71
+ * Michael Grosser - Make stampable define the deleter association and before filter whenever
72
+ a :deleter_attribute has been passed in options, or :deleter => true is
73
+ passed, or Caboose::Acts::Paranoid is defined. This makes :deleter
74
+ functionality useable to people who aren't use acts_as_paranoid.
75
+ * Michael Grosser - do not leave record_userstamp turned on when an exception occurs inside
76
+ the `without_stamps` block
77
+
78
+ ## 2.0 (2-17-2008)
79
+ * Ben Wyrosdick - Added a migration helper that gives migration scripts a <tt>userstamps</tt>
80
+ method.
81
+ * Marshall Roch - Stamping can be temporarily turned off using the 'without_stamps' class
82
+ method.
83
+ Example:
84
+ Post.without_stamps do
85
+ post = Post.find(params[:id])
86
+ post.update_attributes(params[:post])
87
+ post.save
88
+ end
89
+
90
+ * Models that should receive updates made by 'stampers' now use the acts_as_stampable class
91
+ method. This sets up the belongs_to relationships and also injects private methods for use by
92
+ the individual callback filter methods.
93
+
94
+ * Models that are responsible for updating now use the acts_as_stamper class method. This
95
+ injects the stamper= and stamper methods that are thread safe and should be updated per
96
+ request by a controller.
97
+
98
+ * The Userstamp module is now meant to be included with one of your project's controllers (the
99
+ Application Controller is recommended). It creates a before filter called 'set_stampers' that
100
+ is responsible for setting all the current Stampers.
101
+
102
+ ## 1.0 (01-18-2006)
103
+ * Initial Release
data/Gemfile CHANGED
@@ -1,3 +1,3 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- Copyright (c) 2006-2008 DeLynn Berry
2
- Copyright (c) 2014-2015 Joel Low
3
-
4
- Permission is hereby granted, free of charge, to any person obtaining
5
- a copy of this software and associated documentation files (the
6
- "Software"), to deal in the Software without restriction, including
7
- without limitation the rights to use, copy, modify, merge, publish,
8
- distribute, sublicense, and/or sell copies of the Software, and to
9
- permit persons to whom the Software is furnished to do so, subject to
10
- the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be
13
- included in all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1
+ Copyright (c) 2006-2008 DeLynn Berry
2
+ Copyright (c) 2014-2015 Joel Low
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining
5
+ a copy of this software and associated documentation files (the
6
+ "Software"), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish,
8
+ distribute, sublicense, and/or sell copies of the Software, and to
9
+ permit persons to whom the Software is furnished to do so, subject to
10
+ the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -1,189 +1,189 @@
1
- # ActiveRecord-Userstamp [![Build Status](https://travis-ci.org/lowjoel/activerecord-userstamp.svg)](https://travis-ci.org/lowjoel/activerecord-userstamp) [![Coverage Status](https://coveralls.io/repos/lowjoel/activerecord-userstamp/badge.svg?branch=master&service=github)](https://coveralls.io/github/lowjoel/activerecord-userstamp?branch=master) [![Code Climate](https://codeclimate.com/github/lowjoel/activerecord-userstamp/badges/gpa.svg)](https://codeclimate.com/github/lowjoel/activerecord-userstamp)
2
-
3
- ## Overview
4
-
5
- Userstamp extends `ActiveRecord::Base` to add automatic updating of `creator`, `updater`, and
6
- `deleter` attributes. It is based loosely on `ActiveRecord::Timestamp`.
7
-
8
- Two class methods (`model_stamper` and `stampable`) are implemented in this gem. The `model_stamper`
9
- method is used in models that are responsible for creating, updating, or deleting other objects.
10
- Typically this would be the `User` model of your application. The `stampable` method is used in
11
- models that are subject to being created, updated, or deleted by stampers.
12
-
13
- ## Forkception
14
-
15
- This is a fork of:
16
-
17
- - the [magiclabs-userstamp](https://github.com/magiclabs/userstamp) gem
18
- - which is a fork of [Michael Grosser's](https://github.com/grosser)
19
- [userstamp gem] (https://github.com/grosser/userstamp)
20
- - which is a fork of the original [userstamp plugin](https://github.com/delynn/userstamp) by
21
- [delynn](https://github.com/delynn)
22
-
23
- In addition to these, I have cherry picked ideas and changes from the following forks:
24
-
25
- - [simplificator](https://github.com/simplificator/userstamp)
26
- - [akm](https://github.com/akm/magic_userstamp)
27
- - [konvenit](https://github.com/konvenit/userstamp)
28
-
29
- Finally, this gem only supports Ruby 2.0 and above. Yes, you really should upgrade to a supported
30
- version of Ruby. This gem is tested only on Rails 4.2; but it should work with Rails 4+.
31
-
32
- ## Features
33
- ### Soft-deletes
34
- The reason for this is because the original userstamp plugin does not support databases utilising
35
- soft deletes. They are not tested explicitly within this gem, but it is expected to work with the
36
- following gems:
37
-
38
- - [acts_as_paranoid](https://github.com/ActsAsParanoid/acts_as_paranoid)
39
- - [paranoia](https://github.com/radar/paranoia)
40
-
41
- The `stampable` method has been modified to allow additional arguments to be passed to the
42
- creator/updater relations. This allows declarations like:
43
-
44
- ```ruby
45
- stampable with_deleted: true
46
- ```
47
-
48
- to result in a `belongs_to` relation which looks like:
49
-
50
- ```ruby
51
- belongs_to :creator, class_name: '::User', foreign_key: :created_by, with_deleted: true
52
- ```
53
-
54
- Do create a ticket if it is broken, with a pull-request if possible.
55
-
56
- ### Customisable column names/types
57
- While examining the userstamp gem's network on Github, it was noticed that quite a few forks were
58
- made to allow customisability in the name and type of the column with the database migration.
59
-
60
- This gem now supports customised column names. See the [usage](#usage) section on the
61
- configuration options supported.
62
-
63
- ### Saving before validation
64
- This fork includes changes to perform model stamping before validation. This allows models to
65
- enforce the presence of stamp attributes:
66
-
67
- ```ruby
68
- validates :created_by, presence: true
69
- validates :updated_by, presence: true
70
- ```
71
-
72
- Furthermore, the `creator` attribute is set only if the value is blank allowing for a manual
73
- override.
74
-
75
- ## Usage
76
- Assume that we are building a blog application, with User and Post objects. Add the following
77
- to the application's Gemfile:
78
-
79
- ```ruby
80
- gem 'activerecord-userstamp'
81
- ```
82
-
83
- Define an initializer in your Rails application to configure the gem:
84
-
85
- ```ruby
86
- ActiveRecord::Userstamp.configure do |config|
87
- # config.default_stamper = 'User'
88
- # config.creator_attribute = :creator_id
89
- # config.updater_attribute = :updater_id
90
- config.deleter_attribute = nil
91
- end
92
- ```
93
-
94
- By default, `:deleter_attribute` is set to `:deleter_id` for soft deletes. If you are not using
95
- soft deletes, you can set the attribute no `nil`.
96
-
97
- Ensure that each model has a set of columns for creators, updaters, and deleters (if applicable.)
98
-
99
- ```ruby
100
- class CreateUsers < ActiveRecord::Migration
101
- def change
102
- create_table :users do |t|
103
- ...
104
- t.userstamps
105
- end
106
- end
107
- end
108
-
109
- class CreatePosts < ActiveRecord::Migration
110
- def change
111
- create_table :posts do |t|
112
- ...
113
- t.userstamps
114
- end
115
- end
116
- end
117
- ```
118
-
119
- Declare the stamper on the User model:
120
-
121
- ```ruby
122
- class User < ActiveRecord::Base
123
- model_stamper
124
- end
125
- ```
126
-
127
- If your stamper is called `User`, that's it; you're done.
128
-
129
- ## Customisation
130
- The association which is created on each of the `creator_id`, `updater_id`, and `deleter_id` can
131
- be customised. Also, the stamper used by each class can also be customised. For this purpose, the
132
- `ActiveRecord::Base.stampable` method can be used:
133
-
134
- ```ruby
135
- class Post < ActiveRecord::Base
136
- stampable
137
- end
138
- ```
139
-
140
- The `stampable` method allows you to customize the `creator`, `updater`, and `deleter` associations.
141
- It also allows you to specify the name of the stamper for the class being declared. Any additional
142
- arguments are passed to the `belongs_to` declaration.
143
-
144
- ## Upgrading
145
- ### Upgrading from delynn's 1.x/2.x with `compatibility_mode`
146
- The major difference between 1.x and 2.x is the naming of the columns. This version of the gem
147
- allows specifying the name of the column from the gem configuration:
148
-
149
- ```ruby
150
- ActiveRecord::Userstamp.configure do |config|
151
- config.creator_attribute = :created_by
152
- config.updater_attribute = :updated_by
153
- config.deleter_attribute = :deleted_by
154
- end
155
- ```
156
-
157
- ### Upgrading from delynn's 2.x without `compatibility_mode`
158
- Within migrations, it was possible to declare `t.userstamps` within a table definition. It used
159
- to accept one argument, which declares whether the deleter column should be created. This has
160
- been changed to respect the gem configuration's `deleter_attribute`. If that is `nil`, then no
161
- deleter column would be created.
162
-
163
- There is also no need to include the `Userstamp` module in `ApplicationController`.
164
-
165
- ### Upgrading from insphire's 2.0.1, or magiclabs-userstamp 2.0.2 or 2.1.0
166
-
167
- That version of the gem allows every model to declare the name of the column containing the
168
- attribute. That also means that in a large project, every model needs to declare `stampable`,
169
- which is not very DRY.
170
-
171
- To use this gem, normalise all database columns to use a consistent set of column names.
172
- Configure the gem to use those names (as above) and remove all `stampable` declarations.
173
-
174
- There is no need to include the `Userstamp` module in `ApplicationController`.
175
-
176
- ## Tests
177
- Run
178
-
179
- $ bundle exec rspec
180
-
181
- ## Authors
182
- - [DeLynn Berry](http://delynnberry.com/): The original idea for this plugin came from the Rails
183
- Wiki article entitled
184
- [Extending ActiveRecord](http://wiki.rubyonrails.com/rails/pages/ExtendingActiveRecordExample)
185
- - [Michael Grosser](http://pragmatig.com)
186
- - [John Dell](http://blog.spovich.com/)
187
- - [Chris Hilton](https://github.com/chrismhilton)
188
- - [Thomas von Deyen](https://github.com/tvdeyen)
189
- - [Joel Low](http://joelsplace.sg)
1
+ # ActiveRecord-Userstamp [![Build Status](https://travis-ci.org/lowjoel/activerecord-userstamp.svg)](https://travis-ci.org/lowjoel/activerecord-userstamp) [![Coverage Status](https://coveralls.io/repos/lowjoel/activerecord-userstamp/badge.svg?branch=master&service=github)](https://coveralls.io/github/lowjoel/activerecord-userstamp?branch=master) [![Code Climate](https://codeclimate.com/github/lowjoel/activerecord-userstamp/badges/gpa.svg)](https://codeclimate.com/github/lowjoel/activerecord-userstamp)
2
+
3
+ ## Overview
4
+
5
+ Userstamp extends `ActiveRecord::Base` to add automatic updating of `creator`, `updater`, and
6
+ `deleter` attributes. It is based loosely on `ActiveRecord::Timestamp`.
7
+
8
+ Two class methods (`model_stamper` and `stampable`) are implemented in this gem. The `model_stamper`
9
+ method is used in models that are responsible for creating, updating, or deleting other objects.
10
+ Typically this would be the `User` model of your application. The `stampable` method is used in
11
+ models that are subject to being created, updated, or deleted by stampers.
12
+
13
+ ## Forkception
14
+
15
+ This is a fork of:
16
+
17
+ - the [magiclabs-userstamp](https://github.com/magiclabs/userstamp) gem
18
+ - which is a fork of [Michael Grosser's](https://github.com/grosser)
19
+ [userstamp gem] (https://github.com/grosser/userstamp)
20
+ - which is a fork of the original [userstamp plugin](https://github.com/delynn/userstamp) by
21
+ [delynn](https://github.com/delynn)
22
+
23
+ In addition to these, I have cherry picked ideas and changes from the following forks:
24
+
25
+ - [simplificator](https://github.com/simplificator/userstamp)
26
+ - [akm](https://github.com/akm/magic_userstamp)
27
+ - [konvenit](https://github.com/konvenit/userstamp)
28
+
29
+ Finally, this gem only supports Ruby 2.0 and above. Yes, you really should upgrade to a supported
30
+ version of Ruby. This gem is tested only on Rails 4.2; but it should work with Rails 4+.
31
+
32
+ ## Features
33
+ ### Soft-deletes
34
+ The reason for this is because the original userstamp plugin does not support databases utilising
35
+ soft deletes. They are not tested explicitly within this gem, but it is expected to work with the
36
+ following gems:
37
+
38
+ - [acts_as_paranoid](https://github.com/ActsAsParanoid/acts_as_paranoid)
39
+ - [paranoia](https://github.com/radar/paranoia)
40
+
41
+ The `stampable` method has been modified to allow additional arguments to be passed to the
42
+ creator/updater relations. This allows declarations like:
43
+
44
+ ```ruby
45
+ stampable with_deleted: true
46
+ ```
47
+
48
+ to result in a `belongs_to` relation which looks like:
49
+
50
+ ```ruby
51
+ belongs_to :creator, class_name: '::User', foreign_key: :created_by, with_deleted: true
52
+ ```
53
+
54
+ Do create a ticket if it is broken, with a pull-request if possible.
55
+
56
+ ### Customisable column names/types
57
+ While examining the userstamp gem's network on Github, it was noticed that quite a few forks were
58
+ made to allow customisability in the name and type of the column with the database migration.
59
+
60
+ This gem now supports customised column names. See the [usage](#usage) section on the
61
+ configuration options supported.
62
+
63
+ ### Saving before validation
64
+ This fork includes changes to perform model stamping before validation. This allows models to
65
+ enforce the presence of stamp attributes:
66
+
67
+ ```ruby
68
+ validates :created_by, presence: true
69
+ validates :updated_by, presence: true
70
+ ```
71
+
72
+ Furthermore, the `creator` attribute is set only if the value is blank allowing for a manual
73
+ override.
74
+
75
+ ## Usage
76
+ Assume that we are building a blog application, with User and Post objects. Add the following
77
+ to the application's Gemfile:
78
+
79
+ ```ruby
80
+ gem 'activerecord-userstamp'
81
+ ```
82
+
83
+ Define an initializer in your Rails application to configure the gem:
84
+
85
+ ```ruby
86
+ ActiveRecord::Userstamp.configure do |config|
87
+ # config.default_stamper = 'User'
88
+ # config.creator_attribute = :creator_id
89
+ # config.updater_attribute = :updater_id
90
+ config.deleter_attribute = nil
91
+ end
92
+ ```
93
+
94
+ By default, `:deleter_attribute` is set to `:deleter_id` for soft deletes. If you are not using
95
+ soft deletes, you can set the attribute no `nil`.
96
+
97
+ Ensure that each model has a set of columns for creators, updaters, and deleters (if applicable.)
98
+
99
+ ```ruby
100
+ class CreateUsers < ActiveRecord::Migration
101
+ def change
102
+ create_table :users do |t|
103
+ ...
104
+ t.userstamps
105
+ end
106
+ end
107
+ end
108
+
109
+ class CreatePosts < ActiveRecord::Migration
110
+ def change
111
+ create_table :posts do |t|
112
+ ...
113
+ t.userstamps
114
+ end
115
+ end
116
+ end
117
+ ```
118
+
119
+ Declare the stamper on the User model:
120
+
121
+ ```ruby
122
+ class User < ActiveRecord::Base
123
+ model_stamper
124
+ end
125
+ ```
126
+
127
+ If your stamper is called `User`, that's it; you're done.
128
+
129
+ ## Customisation
130
+ The association which is created on each of the `creator_id`, `updater_id`, and `deleter_id` can
131
+ be customised. Also, the stamper used by each class can also be customised. For this purpose, the
132
+ `ActiveRecord::Base.stampable` method can be used:
133
+
134
+ ```ruby
135
+ class Post < ActiveRecord::Base
136
+ stampable
137
+ end
138
+ ```
139
+
140
+ The `stampable` method allows you to customize the `creator`, `updater`, and `deleter` associations.
141
+ It also allows you to specify the name of the stamper for the class being declared. Any additional
142
+ arguments are passed to the `belongs_to` declaration.
143
+
144
+ ## Upgrading
145
+ ### Upgrading from delynn's 1.x/2.x with `compatibility_mode`
146
+ The major difference between 1.x and 2.x is the naming of the columns. This version of the gem
147
+ allows specifying the name of the column from the gem configuration:
148
+
149
+ ```ruby
150
+ ActiveRecord::Userstamp.configure do |config|
151
+ config.creator_attribute = :created_by
152
+ config.updater_attribute = :updated_by
153
+ config.deleter_attribute = :deleted_by
154
+ end
155
+ ```
156
+
157
+ ### Upgrading from delynn's 2.x without `compatibility_mode`
158
+ Within migrations, it was possible to declare `t.userstamps` within a table definition. It used
159
+ to accept one argument, which declares whether the deleter column should be created. This has
160
+ been changed to respect the gem configuration's `deleter_attribute`. If that is `nil`, then no
161
+ deleter column would be created.
162
+
163
+ There is also no need to include the `Userstamp` module in `ApplicationController`.
164
+
165
+ ### Upgrading from insphire's 2.0.1, or magiclabs-userstamp 2.0.2 or 2.1.0
166
+
167
+ That version of the gem allows every model to declare the name of the column containing the
168
+ attribute. That also means that in a large project, every model needs to declare `stampable`,
169
+ which is not very DRY.
170
+
171
+ To use this gem, normalise all database columns to use a consistent set of column names.
172
+ Configure the gem to use those names (as above) and remove all `stampable` declarations.
173
+
174
+ There is no need to include the `Userstamp` module in `ApplicationController`.
175
+
176
+ ## Tests
177
+ Run
178
+
179
+ $ bundle exec rspec
180
+
181
+ ## Authors
182
+ - [DeLynn Berry](http://delynnberry.com/): The original idea for this plugin came from the Rails
183
+ Wiki article entitled
184
+ [Extending ActiveRecord](http://wiki.rubyonrails.com/rails/pages/ExtendingActiveRecordExample)
185
+ - [Michael Grosser](http://pragmatig.com)
186
+ - [John Dell](http://blog.spovich.com/)
187
+ - [Chris Hilton](https://github.com/chrismhilton)
188
+ - [Thomas von Deyen](https://github.com/tvdeyen)
189
+ - [Joel Low](http://joelsplace.sg)