record_history 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock ADDED
@@ -0,0 +1,18 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ record_history (0.0.1)
5
+
6
+ GEM
7
+ remote: http://rubygems.org/
8
+ specs:
9
+ redcarpet (1.17.2)
10
+ yard (0.7.5)
11
+
12
+ PLATFORMS
13
+ ruby
14
+
15
+ DEPENDENCIES
16
+ record_history!
17
+ redcarpet (~> 1.17)
18
+ yard (~> 0.7.5)
@@ -4,9 +4,10 @@ class CreateRecordHistories < ActiveRecord::Migration
4
4
  t.string :item_type, :null => false
5
5
  t.integer :item_id, :null => false
6
6
  t.string :attr_name, :null => false
7
- t.text :old_value
8
- t.text :new_value
7
+ t.text :old_value_dump, :null => false
8
+ t.text :new_value_dump, :null => false
9
9
  t.integer :author_id
10
+ t.datetime :created_at
10
11
  end
11
12
  add_index :record_histories, [:item_type, :item_id, :attr_name]
12
13
  end
@@ -0,0 +1,54 @@
1
+ module RecordHistory
2
+ module Model
3
+
4
+ def self.included(base)
5
+ base.send :extend, ClassMethods
6
+ end
7
+
8
+ module ClassMethods
9
+ def has_record_history(options={})
10
+ send :include, InstanceMethods
11
+
12
+ attr_accessor :record_history_obj
13
+
14
+ class_attribute :ignore
15
+ self.ignore = ([options[:ignore]].flatten.compact || []).map &:to_s
16
+
17
+ class_attribute :only
18
+ self.only = ([options[:only]].flatten.compact || []).map{|attr| attr.to_s}
19
+
20
+ has_many :record_history,
21
+ :class_name => 'RecordHistoryModel',
22
+ :order => "created_at DESC",
23
+ :as => :item
24
+
25
+ before_save :build_record_history_obj
26
+ after_save :save_record_history_obj
27
+ end
28
+ end
29
+
30
+ module InstanceMethods
31
+
32
+
33
+ def build_record_history_obj
34
+ self.record_history_obj ||= []
35
+ self.class.new.attributes.keys.each do |attr_name|
36
+ if (self.send("#{attr_name}_changed?"))
37
+ self.record_history_obj << RecordHistoryModel.new(
38
+ :item_type => self.class.name,
39
+ :item_id => self.id,
40
+ :attr_name => attr_name,
41
+ :old_value => self.send("#{attr_name}_was"),
42
+ :new_value => self.send("#{attr_name}"),
43
+ :author_id => nil
44
+ )
45
+ end
46
+ end
47
+ end
48
+
49
+ def save_record_history_obj
50
+ self.record_history_obj.each{|item| item.save}
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,24 @@
1
+ class RecordHistoryModel < ActiveRecord::Base
2
+ self.table_name = "record_histories"
3
+
4
+ belongs_to :item, :polymorphic => true
5
+ validates :item_type, :item_id, :attr_name, :old_value_dump, :new_value_dump, { :presence => true }
6
+
7
+ def old_value
8
+ self.old_value = nil if self.old_value_dump.nil?
9
+ self.old_value_dump.nil? ? nil : Marshal.load(self.old_value_dump)
10
+ end
11
+
12
+ def old_value=(value)
13
+ self.old_value_dump = Marshal.dump(value)
14
+ end
15
+
16
+ def new_value
17
+ self.new_value = nil if self.new_value_dump.nil?
18
+ Marshal.load(self.new_value_dump)
19
+ end
20
+
21
+ def new_value=(value)
22
+ self.new_value_dump = Marshal.dump(value)
23
+ end
24
+ end
@@ -1,3 +1,3 @@
1
1
  module RecordHistory
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -1,5 +1,11 @@
1
1
  require "record_history/version"
2
+ require "record_history/record_history_model"
3
+ require "record_history/has_record_history"
2
4
 
3
5
  module RecordHistory
4
6
 
5
7
  end
8
+
9
+ ActiveSupport.on_load(:active_record) do
10
+ include RecordHistory::Model
11
+ end
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: record_history
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-21 00:00:00.000000000 Z
12
+ date: 2012-02-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: yard
16
- requirement: &17190158740 !ruby/object:Gem::Requirement
16
+ requirement: &17190158620 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.7.5
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *17190158740
24
+ version_requirements: *17190158620
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: redcarpet
27
- requirement: &17190158060 !ruby/object:Gem::Requirement
27
+ requirement: &17190157920 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '1.17'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *17190158060
35
+ version_requirements: *17190157920
36
36
  description: ActiveRecord versioning
37
37
  email:
38
38
  - m.gulin@gmail.com
@@ -47,6 +47,7 @@ files:
47
47
  - .yardoc/proxy_types
48
48
  - .yardopts
49
49
  - Gemfile
50
+ - Gemfile.lock
50
51
  - LICENSE
51
52
  - README.md
52
53
  - Rakefile
@@ -71,7 +72,10 @@ files:
71
72
  - lib/generators/record_history/install_generator.rb
72
73
  - lib/generators/record_history/templates/create_record_histories.rb
73
74
  - lib/record_history.rb
75
+ - lib/record_history/has_record_history.rb
76
+ - lib/record_history/record_history_model.rb
74
77
  - lib/record_history/version.rb
78
+ - pkg/record_history-0.0.1.gem
75
79
  - record_history.gemspec
76
80
  homepage: ''
77
81
  licenses: []