blamer 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NTU4ZTNkZGIwZmZkZGNjMzRmNmNjMzUyNTliMDk5YjI2NjI2YTc2ZA==
5
+ data.tar.gz: !binary |-
6
+ NDM3MDg3MmFhYzRmOTAzYTAxZGNiZWViNTFkNjlmMjMzOTBmMmJkYw==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ OTQxZGQ1YjM2ZGM3YTM3YzA0YTRmZWRmMmEwMWFjNWEyOWY5MTY0YmEyNWRi
10
+ MTNiZDEyM2Q3ZWRjNmMxNDdlMjc1OWZmNzY4M2IzN2ZiZWZiZWRhNjc0ZDVl
11
+ N2Q0ZjNkNDY4MWJiN2VhOGJlODFhM2RhZWRkMGNjZDRjMGM4N2Q=
12
+ data.tar.gz: !binary |-
13
+ ZjEyMDA3NTJhZDNiZjE2MGZjMzI0OGNlMjI0Yzc5YzQ2NjAxNTE3YjZlNDg0
14
+ ZTFlZWE0ZDIyZTY5NDllMTdiMjkyOGE0MWNkNDczMzg4Njg1YmIzZmZkMDY3
15
+ YWI0MmExMjNhMTU0MzY3MzFjMzgzZGJhNjMzYWYwYTFkN2RiM2M=
@@ -0,0 +1,8 @@
1
+ ## 1.1.1, released 2009-01-04
2
+ - Migration helper now support custom column names
3
+
4
+ ## 1.1.0, released 2008-12-17
5
+ - Make userstamp columns configurable
6
+
7
+ ## 1.0.0, released 2008-10-28
8
+ - Initial release
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ gemspec
2
+
3
+ group :test do
4
+ gem 'sqlite3'
5
+ end
@@ -0,0 +1,30 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ blamer (2.0.0)
5
+ activerecord (> 2.3.0, < 3.2.0)
6
+
7
+ GEM
8
+ specs:
9
+ activemodel (3.0.8)
10
+ activesupport (= 3.0.8)
11
+ builder (~> 2.1.2)
12
+ i18n (~> 0.5.0)
13
+ activerecord (3.0.8)
14
+ activemodel (= 3.0.8)
15
+ activesupport (= 3.0.8)
16
+ arel (~> 2.0.10)
17
+ tzinfo (~> 0.3.23)
18
+ activesupport (3.0.8)
19
+ arel (2.0.10)
20
+ builder (2.1.2)
21
+ i18n (0.5.4)
22
+ sqlite3 (1.3.10)
23
+ tzinfo (0.3.43)
24
+
25
+ PLATFORMS
26
+ ruby
27
+
28
+ DEPENDENCIES
29
+ blamer!
30
+ sqlite3
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008-2014 Keith Morrison <keithm@infused.org>
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,83 @@
1
+ # Blamer
2
+
3
+ Automatically userstamps create and update operations if the table has columns named *created_by* and/or *updated_by*.
4
+ The Blamer plugin attempts to mirror the simplicity of ActiveRecord's timestamp module.
5
+
6
+ Blamer assumes that you are using restful-authentication and expects User.current_user to return the current user. You
7
+ can override this behavior by writing your own *userstamp_object* method in ActiveRecord::Base or any of your models. For example:
8
+
9
+ def userstamp_object
10
+ User.find(session[:user_id])
11
+ end
12
+
13
+ If you don't like created_by/updated_by you can customize the column names:
14
+
15
+ # Globally in environment.rb
16
+ ActiveRecord::Base.created_userstamp_column = :creator_id
17
+
18
+ # In a model definition
19
+ class Subscription
20
+ self.created_userstamp_column = :creator_id
21
+ self.updated_userstamp_column = :updater_id
22
+ end
23
+
24
+ Automatic userstamping can be turned off globally by setting:
25
+
26
+ ActiveRecord::Base.record_userstamps = false
27
+
28
+ Blamer adds a *userstamps* migration helper which will add the created_by and updated_by columns (or your custom column names) to your table:
29
+
30
+ create_table :widgets do |t|
31
+ t.string :name
32
+ t.timestamps
33
+ t.userstamps
34
+ end
35
+
36
+
37
+ ## Installation
38
+
39
+
40
+ ### Rails 2.x
41
+
42
+ Add a line to your environment.rb
43
+
44
+ config.gem 'blame'
45
+
46
+
47
+ ### Rails 3.x +
48
+
49
+ Add to your Gemfile
50
+
51
+ gem 'blame'
52
+
53
+
54
+ ## Credit
55
+
56
+ Thanks to DeLynn Berry <delynn@gmail.com> for writing the original Userstamp plugin
57
+ (http://github.com/delynn/userstamp/tree/master), which was the inspiration for this plugin.
58
+
59
+
60
+ ## License
61
+
62
+ Copyright (c) 2008-2014 Keith Morrison <<keithm@infused.org>>
63
+
64
+ Permission is hereby granted, free of charge, to any person
65
+ obtaining a copy of this software and associated documentation
66
+ files (the "Software"), to deal in the Software without
67
+ restriction, including without limitation the rights to use,
68
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
69
+ copies of the Software, and to permit persons to whom the
70
+ Software is furnished to do so, subject to the following
71
+ conditions:
72
+
73
+ The above copyright notice and this permission notice shall be
74
+ included in all copies or substantial portions of the Software.
75
+
76
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
77
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
78
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
79
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
80
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
81
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
82
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
83
+ OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,12 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+
4
+ desc 'Default: run unit tests.'
5
+ task :default => :test
6
+
7
+ desc 'Test the blame plugin.'
8
+ Rake::TestTask.new(:test) do |t|
9
+ t.libs << 'lib'
10
+ t.pattern = 'test/**/*_test.rb'
11
+ t.verbose = true
12
+ end
@@ -0,0 +1,52 @@
1
+ require 'active_record'
2
+
3
+ module Blamer
4
+ module Userstamp
5
+ def self.included(base)
6
+ base.alias_method_chain :create, :userstamps
7
+ base.alias_method_chain :update, :userstamps
8
+
9
+ base.class_inheritable_accessor :record_userstamps, :instance_writer => false
10
+ base.record_userstamps = true
11
+
12
+ base.class_inheritable_accessor :created_userstamp_column, :instance_writer => false
13
+ base.created_userstamp_column = :created_by
14
+
15
+ base.class_inheritable_accessor :updated_userstamp_column, :instance_writer => false
16
+ base.updated_userstamp_column = :updated_by
17
+ end
18
+
19
+ private
20
+
21
+ def userstamp_object
22
+ User.current_user
23
+ end
24
+
25
+ def create_with_userstamps
26
+ if record_userstamps && userstamp_object
27
+ write_attribute(created_userstamp_column, userstamp_object.id) if respond_to?(created_userstamp_column)
28
+ write_attribute(updated_userstamp_column, userstamp_object.id) if respond_to?(updated_userstamp_column)
29
+ end
30
+ create_without_userstamps
31
+ end
32
+
33
+ def update_with_userstamps(*args)
34
+ if record_userstamps && userstamp_object && (!partial_updates? || changed?)
35
+ write_attribute(updated_userstamp_column, userstamp_object.id) if respond_to?(updated_userstamp_column)
36
+ end
37
+ update_without_userstamps
38
+ end
39
+
40
+ end
41
+
42
+ module UserstampMigrationHelper
43
+ def userstamps
44
+ column ActiveRecord::Base.created_userstamp_column, :integer
45
+ column ActiveRecord::Base.updated_userstamp_column, :integer
46
+ end
47
+ end
48
+
49
+ end
50
+
51
+ ActiveRecord::Base.send :include, Blamer::Userstamp
52
+ ActiveRecord::ConnectionAdapters::TableDefinition.send :include, Blamer::UserstampMigrationHelper
@@ -0,0 +1,28 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class BlamerTest < Test::Unit::TestCase
4
+ def setup
5
+ ActiveRecord::Base.partial_updates = false
6
+ @user1 = User.create
7
+ @user2 = User.create
8
+ User.current_user = @user1
9
+ @widget = Widget.create :name => 'One'
10
+ end
11
+
12
+ def test_partial_updates_disabled
13
+ assert !ActiveRecord::Base.partial_updates
14
+ end
15
+
16
+ def test_create
17
+ assert_equal @user1.id, @widget.created_by
18
+ assert_equal @user1.id, @widget.updated_by
19
+ end
20
+
21
+ def test_update
22
+ User.current_user = @user2
23
+ @widget.update_attribute(:name, 'Two')
24
+ assert_equal @user1.id, @widget.created_by
25
+ assert_equal @user2.id, @widget.updated_by
26
+ end
27
+
28
+ end
@@ -0,0 +1,3 @@
1
+ class Monkey < ActiveRecord::Base
2
+ cattr_accessor :banana
3
+ end
@@ -0,0 +1,2 @@
1
+ class Sprocket < ActiveRecord::Base
2
+ end
@@ -0,0 +1,3 @@
1
+ class User < ActiveRecord::Base
2
+ cattr_accessor :current_user
3
+ end
@@ -0,0 +1,2 @@
1
+ class Widget < ActiveRecord::Base
2
+ end
@@ -0,0 +1,31 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class OverrideBlamerTest < Test::Unit::TestCase
4
+
5
+ # Override the default userstamp_object method
6
+ class Sprocket < ActiveRecord::Base
7
+ def userstamp_object
8
+ Monkey.banana
9
+ end
10
+ end
11
+
12
+ def setup
13
+ @monkey1 = Monkey.create
14
+ @monkey2 = Monkey.create
15
+ Monkey.banana = @monkey1
16
+ @sprocket = Sprocket.create :name => 'One'
17
+ end
18
+
19
+ def test_create
20
+ assert_equal @monkey1.id, @sprocket.created_by
21
+ assert_equal @monkey1.id, @sprocket.updated_by
22
+ end
23
+
24
+ def test_update
25
+ Monkey.banana = @monkey2
26
+ @sprocket.update_attribute(:name, 'Two')
27
+ assert_equal @monkey1.id, @sprocket.created_by
28
+ assert_equal @monkey2.id, @sprocket.updated_by
29
+ end
30
+
31
+ end
@@ -0,0 +1,28 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class PartialBlamerTest < Test::Unit::TestCase
4
+ def setup
5
+ ActiveRecord::Base.partial_updates = true
6
+ @user1 = User.create
7
+ @user2 = User.create
8
+ User.current_user = @user1
9
+ @widget = Widget.create :name => 'One'
10
+ end
11
+
12
+ def test_partial_updates_enabled
13
+ assert ActiveRecord::Base.partial_updates
14
+ end
15
+
16
+ def test_create
17
+ assert_equal @user1.id, @widget.created_by
18
+ assert_equal @user1.id, @widget.updated_by
19
+ end
20
+
21
+ def test_update
22
+ User.current_user = @user2
23
+ @widget.update_attribute(:name, 'Two')
24
+ assert_equal @user1.id, @widget.created_by
25
+ assert_equal @user2.id, @widget.updated_by
26
+ end
27
+
28
+ end
@@ -0,0 +1,22 @@
1
+ # Stop ActiveRecord from printing schema statements to the console
2
+ $stdout = StringIO.new
3
+
4
+ ActiveRecord::Schema.define(:version => 1) do
5
+ create_table :users do |t|
6
+ t.string :name
7
+ end
8
+
9
+ create_table :monkeys do |t|
10
+ t.string :name
11
+ end
12
+
13
+ create_table :widgets do |t|
14
+ t.string :name
15
+ t.userstamps
16
+ end
17
+
18
+ create_table :sprockets do |t|
19
+ t.string :name
20
+ t.userstamps
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ require 'bundler/setup'
2
+ Bundler.setup(:default, :test)
3
+
4
+ require 'test/unit'
5
+
6
+ # Initialize the plugin
7
+ require File.dirname(__FILE__) + '/../lib/blamer'
8
+
9
+ # Use in-memory sqlite3
10
+ ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
11
+
12
+ # Create test tables
13
+ require File.dirname(__FILE__) + '/schema'
14
+
15
+ # Load test models
16
+ require File.dirname(__FILE__) + '/models/user'
17
+ require File.dirname(__FILE__) + '/models/monkey'
18
+ require File.dirname(__FILE__) + '/models/widget'
19
+ require File.dirname(__FILE__) + '/models/sprocket'
metadata ADDED
@@ -0,0 +1,87 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: blamer
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Keith Morrison
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-02-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activerecord
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>'
18
+ - !ruby/object:Gem::Version
19
+ version: 2.3.0
20
+ - - <
21
+ - !ruby/object:Gem::Version
22
+ version: 3.2.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ! '>'
28
+ - !ruby/object:Gem::Version
29
+ version: 2.3.0
30
+ - - <
31
+ - !ruby/object:Gem::Version
32
+ version: 3.2.0
33
+ description: Automatically userstamps create and update operations if the table has
34
+ created_by and/or updated_by columns
35
+ email: keithm@infused.org
36
+ executables: []
37
+ extensions: []
38
+ extra_rdoc_files:
39
+ - README.md
40
+ - CHANGELOG.md
41
+ - LICENSE
42
+ files:
43
+ - CHANGELOG.md
44
+ - Gemfile
45
+ - Gemfile.lock
46
+ - LICENSE
47
+ - README.md
48
+ - Rakefile
49
+ - lib/blamer.rb
50
+ - test/blame_test.rb
51
+ - test/models/monkey.rb
52
+ - test/models/sprocket.rb
53
+ - test/models/user.rb
54
+ - test/models/widget.rb
55
+ - test/override_userstamp_object_test.rb
56
+ - test/partial_blame_test.rb
57
+ - test/schema.rb
58
+ - test/test_helper.rb
59
+ homepage: http://github.com/infused/blame
60
+ licenses:
61
+ - MIT
62
+ metadata: {}
63
+ post_install_message:
64
+ rdoc_options:
65
+ - --charset=UTF-8
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ! '>='
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 1.3.0
78
+ requirements: []
79
+ rubyforge_project:
80
+ rubygems_version: 2.4.5
81
+ signing_key:
82
+ specification_version: 4
83
+ summary: Userstamps for ActiveRecord
84
+ test_files:
85
+ - test/blame_test.rb
86
+ - test/override_userstamp_object_test.rb
87
+ - test/partial_blame_test.rb