change_log 1.0.5 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,7 +1,7 @@
1
- source "http://rubygems.org"
1
+ source "https://rubygems.org"
2
2
  # Specify your gem's dependencies in change_log.gemspec
3
3
  gemspec
4
-
4
+ gem 'activerecord-import', '~> 0.3.1'
5
5
  group :test do
6
6
  gem 'rake'
7
7
  end
data/Gemfile.lock CHANGED
@@ -4,13 +4,32 @@ PATH
4
4
  change_log (1.0.5)
5
5
 
6
6
  GEM
7
- remote: http://rubygems.org/
7
+ remote: https://rubygems.org/
8
8
  specs:
9
+ activemodel (3.2.13)
10
+ activesupport (= 3.2.13)
11
+ builder (~> 3.0.0)
12
+ activerecord (3.2.13)
13
+ activemodel (= 3.2.13)
14
+ activesupport (= 3.2.13)
15
+ arel (~> 3.0.2)
16
+ tzinfo (~> 0.3.29)
17
+ activerecord-import (0.3.1)
18
+ activerecord (~> 3.0)
19
+ activesupport (3.2.13)
20
+ i18n (= 0.6.1)
21
+ multi_json (~> 1.0)
22
+ arel (3.0.2)
23
+ builder (3.0.4)
24
+ i18n (0.6.1)
25
+ multi_json (1.7.7)
9
26
  rake (10.0.3)
27
+ tzinfo (0.3.37)
10
28
 
11
29
  PLATFORMS
12
30
  ruby
13
31
 
14
32
  DEPENDENCIES
33
+ activerecord-import (~> 0.3.1)
15
34
  change_log!
16
35
  rake
data/README.textile CHANGED
@@ -6,17 +6,12 @@ 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
8
  * Note:
9
- Change Log version 1.0.5 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
-
9
+ Use Change Log version 1.0.5 if your application is using Rails 2.x.
13
10
 
14
11
  h2. Install Change Log Gem
15
12
 
16
13
  1. by command:
17
14
  <pre><code># gem install change_log</code></pre>
18
- Then in your environment.rb:
19
- <pre><code>config.gem 'change_log'</code></pre>
20
15
 
21
16
 
22
17
  2. or by bundler:
@@ -27,12 +22,6 @@ gem 'change_log'
27
22
  Then:
28
23
  <pre><code>bundle install</code></pre>
29
24
 
30
- * Note:
31
- If you use bundler with Rails 2.3.x, you may get "enable_change_log" method missing error.
32
- This is because Rails 2.3.x comes with its own gem handling.
33
- You need to override that and replace it with support for Bundler.
34
- Visit "Bundler Website":http://gembundler.com/rails23.html to find out how.
35
-
36
25
  3. Create a table to keep all changes
37
26
 
38
27
  Generate a migration file similar to this:
@@ -152,7 +141,7 @@ Just remember in your environment.rb file, you need to tell change_log gem
152
141
  what is your table name:
153
142
 
154
143
  <pre><code># config/environment.rb
155
- ChangeLogs.set_table_name('hr_maintenances')
144
+ ChangeLogs.table_name :hr_maintenances
156
145
  </code></pre>
157
146
 
158
147
 
@@ -163,7 +152,7 @@ h2. Wish List
163
152
  h3. Author
164
153
  ----
165
154
 
166
- Peter Zhang at NCS New Zealand.
155
+ Peter Zhang at NCS Software Ltd New Zealand.
167
156
  Email: peterz@ncs.co.nz
168
157
 
169
- Copyright (c) 2011 Peter Zhang and NCS LTD, released under the MIT license
158
+ Copyright (c) 2013 Peter Zhang and NCS Software LTD, released under the MIT license
@@ -1,17 +1,20 @@
1
1
  class ChangeLogs < ActiveRecord::Base
2
2
  # Set table name to "change_logs"
3
- def table_name
4
- :change_logs
5
- end
3
+ self.table_name = :change_logs
6
4
 
7
5
  private
8
6
 
9
- # Save Change Log details when options
10
- def self.update_change_log_record_with(option={})
11
- record = ChangeLogs.new(option)
12
- record.field_type = get_field_type(option[:table_name],option[:attribute_name]) unless option[:action].eql?('DELETE')
13
- record.created_at = Time.now
14
- record.save
7
+ # Save Change Log details with changes
8
+ def self.update_change_log_record_with(changes=[])
9
+ records = []
10
+ changes.each do |option|
11
+ record = ChangeLogs.new(option)
12
+ record.field_type = get_field_type(option[:table_name],option[:attribute_name]) unless option[:action].eql?('DELETE')
13
+ record.user = option[:user].id unless option[:user].is_a?(String)
14
+ record.created_at = Time.now
15
+ records << record
16
+ end
17
+ ChangeLogs.import records
15
18
  end
16
19
 
17
20
  # return the latest version number for this change
@@ -42,76 +42,44 @@ module ChangeLog
42
42
  # ActiveRecord models that declare `enable_change_log`.
43
43
  module InstanceMethods
44
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.
48
45
  def record_create
49
46
  # do nothing if the change log is not turned on
50
47
  return '' unless switched_on?
51
-
52
- # generate the single sql insert statement
53
- column_values = []
48
+ changes = []
54
49
  # saving changes to change log
55
50
  self.attributes.map do |key,value|
56
51
  unless self.ignore.include?(key.to_sym)
57
- field_type = ChangeLogs.get_field_type(self.class.table_name,key)
58
- value = value.gsub("'", %q(\\\')) unless value.blank? || !value.is_a?(String)
59
- user = ChangeLog.whodidit
60
- if user.blank?
61
- user = 'Unkown'
62
- else
63
- user = ChangeLog.whodidit.is_a?(String) ? ChangeLog.whodidit : ChangeLog.whodidit.id
64
- end
65
- time = Time.now.strftime("%Y-%m-%d %T")
66
- column_values << '(' + ["'INSERT'", self.id, "'#{self.class.table_name}'", "'#{user}'", "'#{field_type}'", "'#{key}'", "'#{value}'",1, "'#{time}'" ].join(',') + ')'
52
+ changes << {:action=>'INSERT', :record_id=>self.id,:table_name=>self.class.table_name, :user=>ChangeLog.whodidit,:attribute_name=>key,:new_value=>value,:version=>1}
67
53
  end
68
54
  end
69
- column_names = ['action','record_id','table_name','user','field_type','attribute_name','new_value','version','created_at']
70
- insert_statement = "INSERT INTO `#{ChangeLogs.table_name}` (`#{column_names.join('`, `')}`) VALUES " + column_values.join( ',' ) + ";"
71
- ChangeLogs.connection.execute( insert_statement )
55
+ ChangeLogs.update_change_log_record_with(changes)
72
56
  end
73
57
 
74
- # NOTE::This version's change_log is temporarily locked down to Rails 2.3.x
75
- # and mysql database. Another version with fully support to Rails 3.x and multiple databases
76
- # will be available soon in another branch on github.
77
58
  def record_update
78
59
  # do nothing if the change log is not turned on and no changes has been made
79
60
  return '' unless switched_on? && self.valid? && self.changed?
80
-
81
- # generate the single sql insert statement
82
- column_values = []
61
+ changes = []
83
62
  # saving changes to change log
84
63
  self.changes.each do |attribute_name,value|
85
64
  # do not record changes between nil <=> ''
86
65
  # and ignore the changes for ignored columns
87
66
  unless value[1].eql?(value[0]) || (value[1].blank?&&value[0].blank?) || self.ignore.include?(attribute_name.to_s)
88
- field_type = ChangeLogs.get_field_type(self.class.table_name,attribute_name)
89
- value[0] = value[0].gsub("'", %q(\\\')) unless value[0].blank? || !value[0].is_a?(String)
90
- value[1] = value[1].gsub("'", %q(\\\')) unless value[1].blank? || !value[1].is_a?(String)
91
- user = ChangeLog.whodidit
92
- if user.blank?
93
- user = 'Unkown'
94
- else
95
- user = ChangeLog.whodidit.is_a?(String) ? ChangeLog.whodidit : ChangeLog.whodidit.id
96
- end
97
- time = Time.now.strftime("%Y-%m-%d %T")
98
- column_values << '(' + ["'UPDATE'", self.id, "'#{self.class.table_name}'", "'#{user}'","'#{field_type}'", "'#{attribute_name}'", "'#{value[0]}'","'#{value[1]}'",ChangeLogs.get_version_number(self.id,self.class.table_name),"'#{time}'"].join(',') + ')'
67
+ changes << {:action=>'UPDATE',:record_id=>self.id,:table_name=>self.class.table_name,:user=>ChangeLog.whodidit,:attribute_name=>attribute_name,:old_value=>value[0],:new_value=>value[1],:version => ChangeLogs.get_version_number(self.id,self.class.table_name)}
99
68
  end
100
69
  end
101
- column_names = ['action','record_id','table_name','user','field_type','attribute_name','old_value','new_value','version','created_at']
102
- insert_statement = "INSERT INTO `#{ChangeLogs.table_name}` (`#{column_names.join('`, `')}`) VALUES " + column_values.join( ',' ) + ";"
103
- ChangeLogs.connection.execute( insert_statement )
70
+ ChangeLogs.update_change_log_record_with(changes)
104
71
  end
105
72
 
106
73
  def record_destroy
107
74
  return '' unless switched_on?
108
- ChangeLogs.update_change_log_record_with({:action=>'DELETE',:table_name=>self.class.table_name,:record_id=>self.id,:user=>ChangeLog.whodidit,:version => ChangeLogs.get_version_number(self.id,self.class.table_name)})
75
+ changes = [{:action=>'DELETE',:table_name=>self.class.table_name,:record_id=>self.id,:user=>ChangeLog.whodidit,:version => ChangeLogs.get_version_number(self.id,self.class.table_name)}]
76
+ ChangeLogs.update_change_log_record_with(changes)
109
77
  end
110
78
 
111
79
  # Return a list of change_log records
112
80
  # Return empty array if not record found
113
81
  def change_logs
114
- return ChangeLogs.find(:all,:conditions=>['table_name= ? and record_id = ?',self.class.table_name,self.id],:order=>"created_at DESC")
82
+ return ChangeLogs.where(['table_name= ? and record_id = ?',self.class.table_name,self.id]).order("created_at DESC")
115
83
  end
116
84
 
117
85
  # Return `true` if current record has a list of change_log records
@@ -1,3 +1,3 @@
1
1
  module ChangeLog
2
- VERSION = "1.0.5"
2
+ VERSION = "2.0.0"
3
3
  end
data/test/boot.rb CHANGED
@@ -15,7 +15,7 @@ else
15
15
  if version
16
16
  gem 'rails', version
17
17
  else
18
- gem 'actionpack', '< 3.0.0.a'
19
- gem 'activerecord', '< 3.0.0.a'
18
+ gem 'actionpack', '> 3.0.0'
19
+ gem 'activerecord', '> 3.0.0'
20
20
  end
21
21
  end
@@ -10,7 +10,7 @@ class ChangeLogTest < ActiveRecordTestCase
10
10
  # insert an new record
11
11
  # then check the total number
12
12
  def test_update_change_log_record_with
13
- option = {:action=>'INSERT', :record_id=>3,:table_name=>'test', :user=>'test',:attribute_name=>'test',:new_value=>'50',:version=>1}
13
+ option = [{:action=>'INSERT', :record_id=>3,:table_name=>'test', :user=>'test',:attribute_name=>'test',:new_value=>'50',:version=>1}]
14
14
  assert_equal true, ChangeLogs.update_change_log_record_with(option)
15
15
  assert_equal 3, ChangeLogs.count()
16
16
  end
@@ -29,7 +29,7 @@ class ChangeLogTest < ActiveRecordTestCase
29
29
  def test_change_log_logic
30
30
  # find a test, update the total
31
31
  version_number = ChangeLogs.get_version_number(1,'test')
32
- option = {:action=>'UPDATE', :record_id=>1,:table_name=>'test', :user=>'peterz',:attribute_name=>'test',:new_value=>'999',:old_value=>'100',:version=>version_number}
32
+ option = [{:action=>'UPDATE', :record_id=>1,:table_name=>'test', :user=>'peterz',:attribute_name=>'test',:new_value=>'999',:old_value=>'100',:version=>version_number}]
33
33
  assert_equal true, ChangeLogs.update_change_log_record_with(option)
34
34
  change_log = ChangeLogs.find(version_number)
35
35
  assert_equal 'peterz',change_log.user
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: change_log
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 2.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-09 00:00:00.000000000 Z
12
+ date: 2013-07-04 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: A gem for tracking who did what and when it happened -- keeps all the
15
15
  changes done by user into a maintenance log