auditing 1.2.0 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +22 -0
- data/.rvmrc +3 -3
- data/Gemfile +2 -5
- data/Gemfile.lock +6 -19
- data/LICENSE +1 -1
- data/README.rdoc +14 -1
- data/Rakefile +2 -45
- data/auditing.gemspec +17 -71
- data/lib/auditing/version.rb +3 -0
- data/lib/auditing.rb +3 -0
- data/lib/generators/auditing/USAGE +16 -0
- data/lib/generators/auditing/install_generator.rb +48 -0
- data/lib/generators/auditing/templates/audit.rb +7 -0
- data/lib/generators/auditing/templates/audits_controller.rb +17 -0
- data/lib/generators/auditing/templates/audits_helper.rb +75 -0
- data/lib/generators/auditing/templates/index.html.erb +32 -0
- data/lib/generators/auditing/templates/initializer.rb +4 -0
- data/lib/generators/auditing/templates/migration.rb +24 -0
- metadata +23 -71
- data/VERSION +0 -1
data/.gitignore
ADDED
data/.rvmrc
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
if [[ -n "$rvm_environments_path" && -s "$rvm_environments_path/ruby-1.
|
2
|
-
\. "$rvm_environments_path/ruby-1.
|
1
|
+
if [[ -n "$rvm_environments_path" && -s "$rvm_environments_path/ruby-1.9.2-p136@auditing" ]] ; then
|
2
|
+
\. "$rvm_environments_path/ruby-1.9.2-p136@auditing"
|
3
3
|
else
|
4
|
-
rvm --create use "ruby-1.
|
4
|
+
rvm --create use "ruby-1.9.2-p136@auditing"
|
5
5
|
fi
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,20 +1,12 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
auditing (1.2.2)
|
5
|
+
|
1
6
|
GEM
|
2
7
|
remote: http://rubygems.org/
|
3
8
|
specs:
|
4
|
-
activemodel (3.0.3)
|
5
|
-
activesupport (= 3.0.3)
|
6
|
-
builder (~> 2.1.2)
|
7
|
-
i18n (~> 0.4)
|
8
|
-
activerecord (3.0.3)
|
9
|
-
activemodel (= 3.0.3)
|
10
|
-
activesupport (= 3.0.3)
|
11
|
-
arel (~> 2.0.2)
|
12
|
-
tzinfo (~> 0.3.23)
|
13
|
-
activesupport (3.0.3)
|
14
|
-
arel (2.0.7)
|
15
|
-
builder (2.1.2)
|
16
9
|
diff-lcs (1.1.2)
|
17
|
-
i18n (0.5.0)
|
18
10
|
rspec (2.4.0)
|
19
11
|
rspec-core (~> 2.4.0)
|
20
12
|
rspec-expectations (~> 2.4.0)
|
@@ -23,15 +15,10 @@ GEM
|
|
23
15
|
rspec-expectations (2.4.0)
|
24
16
|
diff-lcs (~> 1.1.2)
|
25
17
|
rspec-mocks (2.4.0)
|
26
|
-
sqlite3 (1.3.3)
|
27
|
-
sqlite3-ruby (1.3.3)
|
28
|
-
sqlite3 (>= 1.3.3)
|
29
|
-
tzinfo (0.3.24)
|
30
18
|
|
31
19
|
PLATFORMS
|
32
20
|
ruby
|
33
21
|
|
34
22
|
DEPENDENCIES
|
35
|
-
|
23
|
+
auditing!
|
36
24
|
rspec
|
37
|
-
sqlite3-ruby
|
data/LICENSE
CHANGED
data/README.rdoc
CHANGED
@@ -96,6 +96,19 @@ the audits table, you can add it in another migration
|
|
96
96
|
|
97
97
|
add_column :audits, :user_id, :integer
|
98
98
|
|
99
|
+
You will need to add the relationship to the Audit class as well
|
100
|
+
|
101
|
+
class Audit < ActiveRecord::Base
|
102
|
+
belongs_to :user
|
103
|
+
end
|
104
|
+
|
105
|
+
If you want to see all the audits for a particular user, you can
|
106
|
+
add the has_many relationship to the User model as well
|
107
|
+
|
108
|
+
class User < ActiveRecord::Base
|
109
|
+
has_many :audits
|
110
|
+
end
|
111
|
+
|
99
112
|
Your user class should respond to a class method called current_user
|
100
113
|
and current_user= (some authentication systems do this, others do not).
|
101
114
|
|
@@ -119,7 +132,7 @@ get the current user properly
|
|
119
132
|
class ApplicationController < ActionController::Base
|
120
133
|
|
121
134
|
before_filter :set_current_user
|
122
|
-
after_filter :
|
135
|
+
after_filter :unset_current_user
|
123
136
|
|
124
137
|
private
|
125
138
|
|
data/Rakefile
CHANGED
@@ -1,45 +1,2 @@
|
|
1
|
-
require '
|
2
|
-
|
3
|
-
|
4
|
-
begin
|
5
|
-
require 'jeweler'
|
6
|
-
Jeweler::Tasks.new do |gem|
|
7
|
-
gem.name = "auditing"
|
8
|
-
gem.summary = %Q{A gem to keep track of audit hisory of a record}
|
9
|
-
gem.description = %Q{acts_as_versioned is good. This allows an attribute level rollback instead}
|
10
|
-
gem.email = "brad.cantin@gmail.com"
|
11
|
-
gem.homepage = "http://github.com/bcantin/auditing"
|
12
|
-
gem.authors = ["Brad Cantin"]
|
13
|
-
gem.add_development_dependency "rspec", ">= 2.0"
|
14
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
15
|
-
end
|
16
|
-
Jeweler::GemcutterTasks.new
|
17
|
-
rescue LoadError
|
18
|
-
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
19
|
-
end
|
20
|
-
|
21
|
-
# require 'spec/rake/spectask'
|
22
|
-
# Spec::Rake::SpecTask.new(:spec) do |spec|
|
23
|
-
# spec.libs << 'lib' << 'spec'
|
24
|
-
# spec.spec_files = FileList['spec/**/*_spec.rb']
|
25
|
-
# end
|
26
|
-
#
|
27
|
-
# Spec::Rake::SpecTask.new(:rcov) do |spec|
|
28
|
-
# spec.libs << 'lib' << 'spec'
|
29
|
-
# spec.pattern = 'spec/**/*_spec.rb'
|
30
|
-
# spec.rcov = true
|
31
|
-
# end
|
32
|
-
#
|
33
|
-
# task :spec => :check_dependencies
|
34
|
-
|
35
|
-
task :default => :spec
|
36
|
-
|
37
|
-
require 'rake/rdoctask'
|
38
|
-
Rake::RDocTask.new do |rdoc|
|
39
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
40
|
-
|
41
|
-
rdoc.rdoc_dir = 'rdoc'
|
42
|
-
rdoc.title = "auditing #{version}"
|
43
|
-
rdoc.rdoc_files.include('README*')
|
44
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
45
|
-
end
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
data/auditing.gemspec
CHANGED
@@ -1,77 +1,23 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "auditing/version"
|
5
4
|
|
6
5
|
Gem::Specification.new do |s|
|
7
|
-
s.name
|
8
|
-
s.version
|
9
|
-
|
10
|
-
s.
|
11
|
-
s.
|
12
|
-
s.
|
6
|
+
s.name = %q{auditing}
|
7
|
+
s.version = Auditing::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Brad Cantin"]
|
10
|
+
s.email = ['brad.cantin@gmail.com']
|
11
|
+
s.homepage = 'https://github.com/bcantin/auditing'
|
13
12
|
s.description = %q{acts_as_versioned is good. This allows an attribute level rollback instead}
|
14
|
-
s.
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
s.files = [
|
20
|
-
".bundle/config",
|
21
|
-
".document",
|
22
|
-
".rspec",
|
23
|
-
".rvmrc",
|
24
|
-
"Gemfile",
|
25
|
-
"Gemfile.lock",
|
26
|
-
"LICENSE",
|
27
|
-
"README.rdoc",
|
28
|
-
"Rakefile",
|
29
|
-
"VERSION",
|
30
|
-
"auditing.gemspec",
|
31
|
-
"lib/auditing.rb",
|
32
|
-
"lib/auditing/audit_relationship.rb",
|
33
|
-
"lib/auditing/auditor.rb",
|
34
|
-
"lib/auditing/base.rb",
|
35
|
-
"spec/auditing/audit_relationship_spec.rb",
|
36
|
-
"spec/auditing/auditor_spec.rb",
|
37
|
-
"spec/auditing/base_spec.rb",
|
38
|
-
"spec/auditing/with_users_spec.rb",
|
39
|
-
"spec/schema.rb",
|
40
|
-
"spec/spec_helper.rb"
|
41
|
-
]
|
42
|
-
s.homepage = %q{http://github.com/bcantin/auditing}
|
43
|
-
s.require_paths = ["lib"]
|
44
|
-
s.rubygems_version = %q{1.3.7}
|
45
|
-
s.summary = %q{A gem to keep track of audit hisory of a record}
|
46
|
-
s.test_files = [
|
47
|
-
"spec/auditing/audit_relationship_spec.rb",
|
48
|
-
"spec/auditing/auditor_spec.rb",
|
49
|
-
"spec/auditing/base_spec.rb",
|
50
|
-
"spec/auditing/with_users_spec.rb",
|
51
|
-
"spec/schema.rb",
|
52
|
-
"spec/spec_helper.rb"
|
53
|
-
]
|
54
|
-
|
55
|
-
if s.respond_to? :specification_version then
|
56
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
57
|
-
s.specification_version = 3
|
13
|
+
s.summary = %q{A gem to keep track of audit hisory of a record}
|
14
|
+
|
15
|
+
s.add_development_dependency "rspec"
|
16
|
+
|
17
|
+
s.rubyforge_project = "auditing"
|
58
18
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
s.add_development_dependency(%q<rspec>, [">= 2.0"])
|
64
|
-
else
|
65
|
-
s.add_dependency(%q<activerecord>, [">= 0"])
|
66
|
-
s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
|
67
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
68
|
-
s.add_dependency(%q<rspec>, [">= 2.0"])
|
69
|
-
end
|
70
|
-
else
|
71
|
-
s.add_dependency(%q<activerecord>, [">= 0"])
|
72
|
-
s.add_dependency(%q<sqlite3-ruby>, [">= 0"])
|
73
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
74
|
-
s.add_dependency(%q<rspec>, [">= 2.0"])
|
75
|
-
end
|
19
|
+
s.files = `git ls-files`.split("\n")
|
20
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
21
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
22
|
+
s.require_paths = ["lib"]
|
76
23
|
end
|
77
|
-
|
data/lib/auditing.rb
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
Description:
|
2
|
+
Create an audit model, migration, controller, helper, and an index view
|
3
|
+
|
4
|
+
Example:
|
5
|
+
rails generate auditing:install
|
6
|
+
|
7
|
+
This will create:
|
8
|
+
app/controllers/audits_controller.rb
|
9
|
+
app/helpers/audits_helper.rb
|
10
|
+
app/models/audit.rb
|
11
|
+
app/views/audits/index.html.erb
|
12
|
+
db/migrate/#{time_stamp}_create_audits.rb
|
13
|
+
|
14
|
+
This will modify config/routes.rb with
|
15
|
+
match ':resource/:id/audits' => 'audits#index', :as => 'audits'
|
16
|
+
match 'audit/rollback/:id' => 'audits#rollback', :as => 'audit_rollback'
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'rails/generators/migration'
|
2
|
+
|
3
|
+
module Auditing
|
4
|
+
module Generators
|
5
|
+
class InstallGenerator < Rails::Generators::Base
|
6
|
+
|
7
|
+
include Rails::Generators::Migration
|
8
|
+
|
9
|
+
source_root File.expand_path("../templates", __FILE__)
|
10
|
+
|
11
|
+
def create_controller_files
|
12
|
+
template 'audits_controller.rb', 'app/controllers/audits_controller.rb'
|
13
|
+
end
|
14
|
+
|
15
|
+
def create_helper_files
|
16
|
+
template 'audits_helper.rb', 'app/helpers/audits_helper.rb'
|
17
|
+
end
|
18
|
+
|
19
|
+
def create_model_files
|
20
|
+
template 'audit.rb', 'app/models/audit.rb'
|
21
|
+
end
|
22
|
+
|
23
|
+
def create_view_files
|
24
|
+
template 'index.html.erb', 'app/views/audits/index.html.erb'
|
25
|
+
end
|
26
|
+
|
27
|
+
def create_routes
|
28
|
+
route "match ':resource/:id/audits' => 'audits#index', :as => 'audits'"
|
29
|
+
route "match 'audit/rollback/:id' => 'audits#rollback', :as => 'audit_rollback'"
|
30
|
+
end
|
31
|
+
|
32
|
+
def create_migration
|
33
|
+
migration_template 'migration.rb', "db/migrate/create_audits.rb"
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def self.next_migration_number(dirname) #:nodoc:
|
39
|
+
if ActiveRecord::Base.timestamped_migrations
|
40
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
41
|
+
else
|
42
|
+
"%.3d" % (current_migration_number(dirname) + 1)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class AuditsController < ApplicationController
|
2
|
+
|
3
|
+
def index
|
4
|
+
resource = params[:resource].classify.constantize
|
5
|
+
@resource = resource.find(params[:id])
|
6
|
+
@audits = @resource.audits
|
7
|
+
end
|
8
|
+
|
9
|
+
def rollback
|
10
|
+
audit = Audit.find(params[:id])
|
11
|
+
audit.rollback
|
12
|
+
|
13
|
+
resource = audit.auditable
|
14
|
+
redirect_to audits_path(resource.class.table_name, resource)
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module AuditsHelper
|
2
|
+
|
3
|
+
def description(audit)
|
4
|
+
str = case audit.action
|
5
|
+
when 'created'
|
6
|
+
"Created Record #{audit.auditable_type}"
|
7
|
+
when 'updated'
|
8
|
+
if audit.association.blank?
|
9
|
+
if audit.field_name.match(/_id$/)
|
10
|
+
"Old: #{get_belongs_to(audit, audit.old_value)} <br/>" +
|
11
|
+
"New: #{get_belongs_to(audit, audit.new_value)}"
|
12
|
+
else
|
13
|
+
"Old: #{audit.old_value} <br/>" +
|
14
|
+
"New: #{audit.new_value}"
|
15
|
+
end
|
16
|
+
else
|
17
|
+
if audit.old_value
|
18
|
+
"Old: #{get_has_many(audit, audit.old_value)}<br/>"+
|
19
|
+
"New: #{get_has_many(audit, audit.new_value)}"
|
20
|
+
else
|
21
|
+
"New: #{get_has_many(audit, audit.new_value)}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
when 'added'
|
25
|
+
if audit.old_value
|
26
|
+
"Old: #{get_has_many(audit, audit.old_value)}<br/>"+
|
27
|
+
"New: #{get_has_many(audit, audit.new_value)}"
|
28
|
+
else
|
29
|
+
"New: #{get_has_many(audit, audit.new_value)}"
|
30
|
+
end
|
31
|
+
when 'removed'
|
32
|
+
"Removed #{audit.association_type}"
|
33
|
+
end
|
34
|
+
|
35
|
+
str.html_safe
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_has_many(audit, value)
|
39
|
+
return nil unless value
|
40
|
+
if audit.field_name.match(/_id$/)
|
41
|
+
get_belongs_to(audit, value)
|
42
|
+
else
|
43
|
+
value
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
##
|
48
|
+
# For a belongs_to association, we only store the ID of what is being
|
49
|
+
# refered to (:industry_id => 5). We cannot guess what would be relevant
|
50
|
+
# to actually show for the value. We recommend implementing a #to_label
|
51
|
+
# method and/or overriding this method to display what is relevant to
|
52
|
+
# your application.
|
53
|
+
#
|
54
|
+
# EG:
|
55
|
+
# class Industry < ActiveRecord::Base
|
56
|
+
# has_many :companies
|
57
|
+
#
|
58
|
+
# def to_label
|
59
|
+
# name
|
60
|
+
# end
|
61
|
+
# end
|
62
|
+
|
63
|
+
def get_belongs_to(audit, value)
|
64
|
+
return nil unless value
|
65
|
+
if audit.association
|
66
|
+
klass = audit.association.class.reflect_on_association(audit.field_name.gsub(/_id$/,'').to_sym).class_name.constantize
|
67
|
+
else
|
68
|
+
klass = audit.auditable.class.reflect_on_association(audit.field_name.gsub(/_id$/,'').to_sym).class_name.constantize
|
69
|
+
end
|
70
|
+
value = klass.where(:id => value).first
|
71
|
+
return 'Unknown' unless value
|
72
|
+
return value.to_label
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
<h2>Audit Log</h2>
|
2
|
+
|
3
|
+
<%%= link_to "back to #{@resource.class}", @resource %>
|
4
|
+
|
5
|
+
<table>
|
6
|
+
<thead>
|
7
|
+
<tr>
|
8
|
+
<th>Field Name</th>
|
9
|
+
<th>Values</th>
|
10
|
+
<th>Created</th>
|
11
|
+
<th>Rollback</th>
|
12
|
+
</tr>
|
13
|
+
</thead>
|
14
|
+
<tbody>
|
15
|
+
<%% @audits.each do |audit| %>
|
16
|
+
<tr>
|
17
|
+
<td>
|
18
|
+
<%%= audit.field_name.humanize if audit.field_name %>
|
19
|
+
</td>
|
20
|
+
<td>
|
21
|
+
<%%= description(audit) %>
|
22
|
+
</td>
|
23
|
+
<td>
|
24
|
+
<%%= time_ago_in_words(audit.created_at) %> ago
|
25
|
+
</td>
|
26
|
+
<td>
|
27
|
+
<%%= link_to 'rollback', audit_rollback_path(audit) if audit.reversable? %>
|
28
|
+
</td>
|
29
|
+
</tr>
|
30
|
+
<%% end %>
|
31
|
+
</tbody>
|
32
|
+
</table>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class CreateAudits < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :audits do |t|
|
4
|
+
t.string :action
|
5
|
+
t.string :auditable_type
|
6
|
+
t.integer :auditable_id
|
7
|
+
t.string :association_type
|
8
|
+
t.integer :association_id
|
9
|
+
t.string :field_name
|
10
|
+
t.string :old_value
|
11
|
+
t.string :new_value
|
12
|
+
# t.integer :user_id
|
13
|
+
t.boolean :undoable, :default => true
|
14
|
+
t.timestamps
|
15
|
+
end
|
16
|
+
|
17
|
+
add_index :audits, [:auditable_type, :auditable_id]
|
18
|
+
add_index :audits, [:association_type, :association_id]
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.down
|
22
|
+
drop_table :audits
|
23
|
+
end
|
24
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: auditing
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 2
|
9
|
-
- 0
|
10
|
-
version: 1.2.0
|
4
|
+
prerelease:
|
5
|
+
version: 1.2.2
|
11
6
|
platform: ruby
|
12
7
|
authors:
|
13
8
|
- Brad Cantin
|
@@ -15,78 +10,33 @@ autorequire:
|
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
12
|
|
18
|
-
date: 2011-02-
|
13
|
+
date: 2011-02-05 00:00:00 -05:00
|
19
14
|
default_executable:
|
20
15
|
dependencies:
|
21
16
|
- !ruby/object:Gem::Dependency
|
22
|
-
type: :development
|
23
|
-
prerelease: false
|
24
|
-
name: activerecord
|
25
|
-
version_requirements: &id001 !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
|
-
requirements:
|
28
|
-
- - ">="
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
hash: 3
|
31
|
-
segments:
|
32
|
-
- 0
|
33
|
-
version: "0"
|
34
|
-
requirement: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
type: :development
|
37
|
-
prerelease: false
|
38
|
-
name: sqlite3-ruby
|
39
|
-
version_requirements: &id002 !ruby/object:Gem::Requirement
|
40
|
-
none: false
|
41
|
-
requirements:
|
42
|
-
- - ">="
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
hash: 3
|
45
|
-
segments:
|
46
|
-
- 0
|
47
|
-
version: "0"
|
48
|
-
requirement: *id002
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
type: :development
|
51
|
-
prerelease: false
|
52
17
|
name: rspec
|
53
|
-
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
54
20
|
none: false
|
55
21
|
requirements:
|
56
22
|
- - ">="
|
57
23
|
- !ruby/object:Gem::Version
|
58
|
-
hash: 3
|
59
|
-
segments:
|
60
|
-
- 0
|
61
24
|
version: "0"
|
62
|
-
requirement: *id003
|
63
|
-
- !ruby/object:Gem::Dependency
|
64
25
|
type: :development
|
65
|
-
|
66
|
-
name: rspec
|
67
|
-
version_requirements: &id004 !ruby/object:Gem::Requirement
|
68
|
-
none: false
|
69
|
-
requirements:
|
70
|
-
- - ">="
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
hash: 3
|
73
|
-
segments:
|
74
|
-
- 2
|
75
|
-
- 0
|
76
|
-
version: "2.0"
|
77
|
-
requirement: *id004
|
26
|
+
version_requirements: *id001
|
78
27
|
description: acts_as_versioned is good. This allows an attribute level rollback instead
|
79
|
-
email:
|
28
|
+
email:
|
29
|
+
- brad.cantin@gmail.com
|
80
30
|
executables: []
|
81
31
|
|
82
32
|
extensions: []
|
83
33
|
|
84
|
-
extra_rdoc_files:
|
85
|
-
|
86
|
-
- README.rdoc
|
34
|
+
extra_rdoc_files: []
|
35
|
+
|
87
36
|
files:
|
88
37
|
- .bundle/config
|
89
38
|
- .document
|
39
|
+
- .gitignore
|
90
40
|
- .rspec
|
91
41
|
- .rvmrc
|
92
42
|
- Gemfile
|
@@ -94,12 +44,20 @@ files:
|
|
94
44
|
- LICENSE
|
95
45
|
- README.rdoc
|
96
46
|
- Rakefile
|
97
|
-
- VERSION
|
98
47
|
- auditing.gemspec
|
99
48
|
- lib/auditing.rb
|
100
49
|
- lib/auditing/audit_relationship.rb
|
101
50
|
- lib/auditing/auditor.rb
|
102
51
|
- lib/auditing/base.rb
|
52
|
+
- lib/auditing/version.rb
|
53
|
+
- lib/generators/auditing/USAGE
|
54
|
+
- lib/generators/auditing/install_generator.rb
|
55
|
+
- lib/generators/auditing/templates/audit.rb
|
56
|
+
- lib/generators/auditing/templates/audits_controller.rb
|
57
|
+
- lib/generators/auditing/templates/audits_helper.rb
|
58
|
+
- lib/generators/auditing/templates/index.html.erb
|
59
|
+
- lib/generators/auditing/templates/initializer.rb
|
60
|
+
- lib/generators/auditing/templates/migration.rb
|
103
61
|
- spec/auditing/audit_relationship_spec.rb
|
104
62
|
- spec/auditing/auditor_spec.rb
|
105
63
|
- spec/auditing/base_spec.rb
|
@@ -107,7 +65,7 @@ files:
|
|
107
65
|
- spec/schema.rb
|
108
66
|
- spec/spec_helper.rb
|
109
67
|
has_rdoc: true
|
110
|
-
homepage:
|
68
|
+
homepage: https://github.com/bcantin/auditing
|
111
69
|
licenses: []
|
112
70
|
|
113
71
|
post_install_message:
|
@@ -120,23 +78,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
120
78
|
requirements:
|
121
79
|
- - ">="
|
122
80
|
- !ruby/object:Gem::Version
|
123
|
-
hash: 3
|
124
|
-
segments:
|
125
|
-
- 0
|
126
81
|
version: "0"
|
127
82
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
128
83
|
none: false
|
129
84
|
requirements:
|
130
85
|
- - ">="
|
131
86
|
- !ruby/object:Gem::Version
|
132
|
-
hash: 3
|
133
|
-
segments:
|
134
|
-
- 0
|
135
87
|
version: "0"
|
136
88
|
requirements: []
|
137
89
|
|
138
|
-
rubyforge_project:
|
139
|
-
rubygems_version: 1.
|
90
|
+
rubyforge_project: auditing
|
91
|
+
rubygems_version: 1.5.0
|
140
92
|
signing_key:
|
141
93
|
specification_version: 3
|
142
94
|
summary: A gem to keep track of audit hisory of a record
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
1.2.0
|