change_log 1.0.1 → 1.0.2
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.
- data/README.textile +36 -6
- data/lib/change_log/change_logs.rb +3 -1
- data/lib/change_log/has_change_log.rb +29 -6
- data/lib/change_log/version.rb +1 -1
- metadata +23 -43
data/README.textile
CHANGED
@@ -5,6 +5,11 @@ It automatically saves who made the changes at what time and what has been chang
|
|
5
5
|
You can choose to skip the column which you do not want to keep change logs.
|
6
6
|
For example: 'updated_at', 'created_at' and 'password' etc.
|
7
7
|
|
8
|
+
* Note:
|
9
|
+
Change Log version 1.0.2 is temporarily locked down to Rails 2.3.x and mysql database only.
|
10
|
+
Another version with fully support to Rails 3.x and multiple databases
|
11
|
+
will be available soon in another branch on github.
|
12
|
+
|
8
13
|
|
9
14
|
h2. Install Change Log Gem
|
10
15
|
|
@@ -116,16 +121,41 @@ ChangeLogs.find(:all,:conditions=>['user = ?', 'peterz'])</code></pre>
|
|
116
121
|
<pre><code># List all changes for table 'accounts'
|
117
122
|
ChangeLogs.find(:all,:conditions=>['table_name = ?', 'accounts'])</code></pre>
|
118
123
|
|
119
|
-
*
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
+
4. *Turn ChangeLogs off in testing environment*
|
125
|
+
You can globally turn it off for your testing.
|
126
|
+
<pre><code># config/environment.rb
|
127
|
+
ChangeLog.enabled = false if RAILS_ENV == 'test'
|
128
|
+
</code></pre>
|
129
|
+
|
130
|
+
5. *Database and table name*
|
131
|
+
change_log gem can save changes into separate database from the main application.
|
132
|
+
The database could be MySQL, SQLite or any other database that active record is happy to connect with.
|
133
|
+
|
134
|
+
Here is an example of database.yml when using separate database for 'change_logs':
|
135
|
+
<pre><code>change_logs:
|
136
|
+
adapter: mysql2
|
137
|
+
encoding: utf8
|
138
|
+
database: change_logs
|
139
|
+
username: username
|
140
|
+
password: ********
|
141
|
+
host: hostname
|
142
|
+
port: 3306
|
143
|
+
</code></pre>
|
144
|
+
|
145
|
+
And also you need to tell change_log gem to establish the connection.
|
146
|
+
<pre><code># config/environment.rb
|
147
|
+
ChangeLogs.establish_connection(:change_logs)
|
148
|
+
</code></pre>
|
149
|
+
|
150
|
+
Table name is also configurable. Instead of 'change_logs', choose your preferred table name and run the migration.
|
151
|
+
Just remember in your environment.rb file, you need to tell change_log gem
|
152
|
+
what is your table name:
|
124
153
|
|
125
154
|
<pre><code># config/environment.rb
|
126
155
|
ChangeLogs.set_table_name('hr_maintenances')
|
127
156
|
</code></pre>
|
128
157
|
|
158
|
+
|
129
159
|
h2. Wish List
|
130
160
|
Please email me if you have any enquiry.
|
131
161
|
|
@@ -136,4 +166,4 @@ h3. Author
|
|
136
166
|
Peter Zhang at NCS New Zealand.
|
137
167
|
Email: peterz@ncs.co.nz
|
138
168
|
|
139
|
-
Copyright (c) 2011 Peter Zhang and NCS LTD, released under the MIT license
|
169
|
+
Copyright (c) 2011 Peter Zhang and NCS LTD, released under the MIT license
|
@@ -41,30 +41,53 @@ module ChangeLog
|
|
41
41
|
# Wrap the following methods in a module so we can include them only in the
|
42
42
|
# ActiveRecord models that declare `enable_change_log`.
|
43
43
|
module InstanceMethods
|
44
|
+
|
45
|
+
# NOTE::This version's change_log is temporarily locked down to Rails 2.3.x
|
46
|
+
# and mysql database. Another version with fully support to Rails 3.x and multiple databases
|
47
|
+
# will be available soon in another branch on github.
|
44
48
|
def record_create
|
45
49
|
# do nothing if the change log is not turned on
|
46
50
|
return '' unless switched_on?
|
51
|
+
|
52
|
+
# generate the single sql insert statement
|
53
|
+
column_values = []
|
47
54
|
# saving changes to change log
|
48
55
|
self.attributes.map do |key,value|
|
49
56
|
unless self.ignore.include?(key.to_sym)
|
50
|
-
|
51
|
-
|
57
|
+
field_type = ChangeLogs.get_field_type(self.class.table_name,key)
|
58
|
+
value = value.gsub("'", %q(\\\')) unless value.blank?
|
59
|
+
column_values << '(' + ["'INSERT'", self.id, "'#{self.class.table_name}'", "'#{ChangeLog.whodidit}'", "'#{field_type}'", "'#{key}'", "'#{value}'",1].join(',') + ')'
|
52
60
|
end
|
53
61
|
end
|
62
|
+
column_names = ['action','record_id','table_name','user','field_type','attribute_name','new_value','version']
|
63
|
+
insert_statement = "INSERT INTO `#{ChangeLogs.table_name}` (`#{column_names.join('`, `')}`) VALUES " + column_values.join( ',' ) + ";"
|
64
|
+
ActiveRecord::Base.connection.execute( insert_statement )
|
54
65
|
end
|
55
66
|
|
67
|
+
# NOTE::This version's change_log is temporarily locked down to Rails 2.3.x
|
68
|
+
# and mysql database. Another version with fully support to Rails 3.x and multiple databases
|
69
|
+
# will be available soon in another branch on github.
|
56
70
|
def record_update
|
57
71
|
# do nothing if the change log is not turned on and no changes has been made
|
58
72
|
return '' unless switched_on? && self.valid? && self.changed?
|
59
73
|
|
74
|
+
# generate the single sql insert statement
|
75
|
+
column_values = []
|
76
|
+
# saving changes to change log
|
60
77
|
self.changes.each do |attribute_name,value|
|
61
78
|
# do not record changes between nil <=> ''
|
62
79
|
# and ignore the changes for ignored columns
|
63
80
|
unless value[1].eql?(value[0]) || (value[1].blank?&&value[0].blank?) || self.ignore.include?(attribute_name.to_s)
|
64
|
-
|
65
|
-
|
81
|
+
field_type = ChangeLogs.get_field_type(self.class.table_name,attribute_name)
|
82
|
+
value[0] = value[0].gsub("'", %q(\\\')) unless value[0].blank?
|
83
|
+
value[1] = value[1].gsub("'", %q(\\\')) unless value[1].blank?
|
84
|
+
|
85
|
+
column_values << '(' + ["'UPDATE'", self.id, "'#{self.class.table_name}'", "'#{ChangeLog.whodidit}'","'#{field_type}'", "'#{attribute_name}'", "'#{value[0]}'","'#{value[1]}'",ChangeLogs.get_version_number(self.id,self.class.table_name)].join(',') + ')'
|
66
86
|
end
|
67
|
-
end
|
87
|
+
end
|
88
|
+
column_names = ['action','record_id','table_name','user','field_type','attribute_name','old_value','new_value','version']
|
89
|
+
insert_statement = "INSERT INTO `#{ChangeLogs.table_name}` (`#{column_names.join('`, `')}`) VALUES " + column_values.join( ',' ) + ";"
|
90
|
+
ActiveRecord::Base.connection.execute( insert_statement )
|
68
91
|
end
|
69
92
|
|
70
93
|
def record_destroy
|
@@ -96,4 +119,4 @@ module ChangeLog
|
|
96
119
|
end
|
97
120
|
end
|
98
121
|
|
99
|
-
ActiveRecord::Base.send :include, ChangeLog::Model
|
122
|
+
ActiveRecord::Base.send :include, ChangeLog::Model
|
data/lib/change_log/version.rb
CHANGED
metadata
CHANGED
@@ -1,34 +1,24 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: change_log
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 0
|
9
|
-
- 1
|
10
|
-
version: 1.0.1
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.2
|
5
|
+
prerelease:
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Peter Zhang
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
date: 2011-01-25 00:00:00 +13:00
|
19
|
-
default_executable:
|
12
|
+
date: 2013-05-08 00:00:00.000000000 Z
|
20
13
|
dependencies: []
|
21
|
-
|
22
|
-
|
23
|
-
email:
|
14
|
+
description: A gem for tracking who did what and when it happened -- keeps all the
|
15
|
+
changes done by user into a maintenance log
|
16
|
+
email:
|
24
17
|
- peterz@ncs.co.nz
|
25
18
|
executables: []
|
26
|
-
|
27
19
|
extensions: []
|
28
|
-
|
29
20
|
extra_rdoc_files: []
|
30
|
-
|
31
|
-
files:
|
21
|
+
files:
|
32
22
|
- Gemfile
|
33
23
|
- MIT-LICENSE
|
34
24
|
- README.textile
|
@@ -49,41 +39,31 @@ files:
|
|
49
39
|
- test/lib/activerecord_test_case.rb
|
50
40
|
- test/lib/activerecord_test_connector.rb
|
51
41
|
- test/lib/load_fixtures.rb
|
52
|
-
has_rdoc: true
|
53
42
|
homepage: http://www.ncs.co.nz
|
54
43
|
licenses: []
|
55
|
-
|
56
44
|
post_install_message:
|
57
45
|
rdoc_options: []
|
58
|
-
|
59
|
-
require_paths:
|
46
|
+
require_paths:
|
60
47
|
- lib
|
61
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
62
49
|
none: false
|
63
|
-
requirements:
|
64
|
-
- -
|
65
|
-
- !ruby/object:Gem::Version
|
66
|
-
|
67
|
-
|
68
|
-
- 0
|
69
|
-
version: "0"
|
70
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
55
|
none: false
|
72
|
-
requirements:
|
73
|
-
- -
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
|
76
|
-
segments:
|
77
|
-
- 0
|
78
|
-
version: "0"
|
56
|
+
requirements:
|
57
|
+
- - ! '>='
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
79
60
|
requirements: []
|
80
|
-
|
81
61
|
rubyforge_project: change_log
|
82
|
-
rubygems_version: 1.
|
62
|
+
rubygems_version: 1.8.24
|
83
63
|
signing_key:
|
84
64
|
specification_version: 3
|
85
65
|
summary: Change log gem records every changes for the active record model
|
86
|
-
test_files:
|
66
|
+
test_files:
|
87
67
|
- test/boot.rb
|
88
68
|
- test/change_log_test.rb
|
89
69
|
- test/database.yml
|