audited-mongo_mapper 3.0.0.rc1

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.
@@ -0,0 +1,2 @@
1
+ require 'audited'
2
+ require 'audited/adapters/mongo_mapper'
@@ -0,0 +1,15 @@
1
+ require 'mongo_mapper'
2
+ require 'audited/auditor'
3
+ require 'audited/adapters/mongo_mapper/audit'
4
+
5
+ module Audited::Auditor::ClassMethods
6
+ def default_ignored_attributes
7
+ ['id', '_id']
8
+ end
9
+ end
10
+
11
+ ::MongoMapper::Document.plugin Audited::Auditor
12
+
13
+ Audited.audit_class = Audited::Adapters::MongoMapper::Audit
14
+
15
+ require 'audited/sweeper'
@@ -0,0 +1,100 @@
1
+ require 'set'
2
+ require 'audited/audit'
3
+
4
+ module Audited
5
+ module Adapters
6
+ module MongoMapper
7
+ # Audit saves the changes to ActiveRecord models. It has the following attributes:
8
+ #
9
+ # * <tt>auditable</tt>: the ActiveRecord model that was changed
10
+ # * <tt>user</tt>: the user that performed the change; a string or an ActiveRecord model
11
+ # * <tt>action</tt>: one of create, update, or delete
12
+ # * <tt>audited_changes</tt>: a serialized hash of all the changes
13
+ # * <tt>comment</tt>: a comment set with the audit
14
+ # * <tt>created_at</tt>: Time that the change was performed
15
+ #
16
+ class Audit
17
+ include ::MongoMapper::Document
18
+ include ActiveModel::Observing
19
+
20
+ key :auditable_id, ObjectId
21
+ key :auditable_type, String
22
+ key :associated_id, ObjectId
23
+ key :associated_type, String
24
+ key :user_id, ObjectId
25
+ key :user_type, String
26
+ key :username, String
27
+ key :action, String
28
+ key :audited_changes, Hash
29
+ key :version, Integer, :default => 0
30
+ key :comment, String
31
+ key :remote_address, String
32
+ key :created_at, Time
33
+
34
+ include Audited::Audit
35
+
36
+ before_create :set_created_at
37
+
38
+ def self.acending; sort(:version.asc); end
39
+ def self.ascending; sort(:version.asc); end
40
+ def self.descending; sort(:version.desc); end
41
+ def self.creates; where(:action => 'create'); end
42
+ def self.updates; where(:action => 'update'); end
43
+ def self.destroys; where(:action => 'destroy'); end
44
+
45
+ def self.up_until(date_or_time); where(:created_at.lte => date_or_time); end
46
+ def self.from_version(version); where(:version.gte => version); end
47
+ def self.to_version(version); where(:version.lte => version); end
48
+
49
+ class << self
50
+
51
+ # @private
52
+ def sanitize_for_time_with_zone(value)
53
+ case value
54
+ when Hash
55
+ value.inject({}){|h,(k,v)| h[k] = sanitize_for_time_with_zone(v); h }
56
+ when Array
57
+ value.map{|v| sanitize_for_time_with_zone(v) }
58
+ when ActiveSupport::TimeWithZone
59
+ value.utc
60
+ else
61
+ value
62
+ end
63
+ end
64
+ end
65
+
66
+ def audited_changes=(value)
67
+ self[:audited_changes] = self.class.sanitize_for_time_with_zone(value)
68
+ end
69
+
70
+ # Allows user to be set to either a string or an ActiveRecord object
71
+ # @private
72
+ def user_as_string=(user)
73
+ # reset both either way
74
+ self.user_as_model = self.username = nil
75
+ user.is_a?(::MongoMapper::Document) ?
76
+ self.user_as_model = user :
77
+ self.username = user
78
+ end
79
+ alias_method :user_as_model=, :user=
80
+ alias_method :user=, :user_as_string=
81
+
82
+ # @private
83
+ def user_as_string
84
+ self.user_as_model || self.username
85
+ end
86
+ alias_method :user_as_model, :user
87
+ alias_method :user, :user_as_string
88
+
89
+ # Return all audits older than the current one.
90
+ def ancestors
91
+ self.class.where(:auditable_id => auditable_id, :auditable_type => auditable_type, :version.lte => version)
92
+ end
93
+
94
+ def set_created_at
95
+ self[:created_at] = Time.now.utc if !persisted? && !created_at?
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
metadata ADDED
@@ -0,0 +1,86 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: audited-mongo_mapper
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.0.0.rc1
5
+ prerelease: 6
6
+ platform: ruby
7
+ authors:
8
+ - Brandon Keepers
9
+ - Kenneth Kalmer
10
+ - Daniel Morrison
11
+ - Brian Ryckbost
12
+ - Steve Richert
13
+ - Ryan Glover
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+ date: 2012-04-25 00:00:00.000000000 Z
18
+ dependencies:
19
+ - !ruby/object:Gem::Dependency
20
+ name: audited
21
+ requirement: !ruby/object:Gem::Requirement
22
+ none: false
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 3.0.0.rc1
27
+ prerelease: 6
28
+ type: :runtime
29
+ prerelease: false
30
+ version_requirements: !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - '='
34
+ - !ruby/object:Gem::Version
35
+ version: 3.0.0.rc1
36
+ prerelease: 6
37
+ - !ruby/object:Gem::Dependency
38
+ name: mongo_mapper
39
+ requirement: !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ version: '0.11'
45
+ type: :runtime
46
+ prerelease: false
47
+ version_requirements: !ruby/object:Gem::Requirement
48
+ none: false
49
+ requirements:
50
+ - - ~>
51
+ - !ruby/object:Gem::Version
52
+ version: '0.11'
53
+ description: Log all changes to your MongoMapper models
54
+ email: info@collectiveidea.com
55
+ executables: []
56
+ extensions: []
57
+ extra_rdoc_files: []
58
+ files:
59
+ - lib/audited-mongo_mapper.rb
60
+ - lib/audited/adapters/mongo_mapper.rb
61
+ - lib/audited/adapters/mongo_mapper/audit.rb
62
+ homepage: https://github.com/collectiveidea/audited
63
+ licenses: []
64
+ post_install_message:
65
+ rdoc_options: []
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ required_rubygems_version: !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ! '>'
78
+ - !ruby/object:Gem::Version
79
+ version: 1.3.1
80
+ requirements: []
81
+ rubyforge_project:
82
+ rubygems_version: 1.8.21
83
+ signing_key:
84
+ specification_version: 3
85
+ summary: Log all changes to your MongoMapper models
86
+ test_files: []