model_history 0.1.0 → 0.2.0
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.
- checksums.yaml +7 -0
- data/.travis.yml +14 -0
- data/README.md +2 -0
- data/Rakefile +7 -0
- data/gemfiles/3.2.gemfile +7 -0
- data/gemfiles/4.0.gemfile +7 -0
- data/gemfiles/4.1.gemfile +7 -0
- data/lib/generators/model_history/migration/migration_generator.rb +1 -1
- data/lib/model_history/model_history_mixin.rb +3 -5
- data/lib/model_history/model_history_record.rb +7 -5
- data/lib/model_history/version.rb +1 -1
- data/model_history.gemspec +3 -5
- data/spec/fake_app.rb +7 -24
- data/spec/models/user_spec.rb +29 -10
- data/spec/spec_helper.rb +0 -1
- metadata +28 -74
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 6fab3fdfea879b5aaccf4d803a7549df590b7482
|
|
4
|
+
data.tar.gz: 3daac8c9e61e41730e928cc1fdd0547fbd2fdf38
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: b50882f6352b20304c2943164282be7bb115086f0cf9b196b6582fee87f612af6eadea9521092745892fbfe6b26563d485deef12745f2ed52a9351b873683675
|
|
7
|
+
data.tar.gz: c5e84b352837d5cd5ec3462547446113fd06aeabd988364608077f6a2d55de58b32e0b4005ca067f7524e1b0577707db776d6709c94f5a777947a40aa8e103e1
|
data/.travis.yml
ADDED
data/README.md
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# ModelHistory
|
|
2
2
|
|
|
3
|
+
[](https://travis-ci.org/patorash/model_history)
|
|
4
|
+
|
|
3
5
|
Model History is a simple gem that allows you to keep track of changes to specific fields in your Rails models using the ActiveRecord::Dirty module.
|
|
4
6
|
|
|
5
7
|
## Installation
|
data/Rakefile
CHANGED
|
@@ -24,7 +24,7 @@ module ModelHistory
|
|
|
24
24
|
|
|
25
25
|
def create_migration_file
|
|
26
26
|
if self.class.orm_has_migration?
|
|
27
|
-
migration_template 'migration.rb', 'db/migrate/create_model_history_records'
|
|
27
|
+
migration_template 'migration.rb', 'db/migrate/create_model_history_records.rb'
|
|
28
28
|
end
|
|
29
29
|
end
|
|
30
30
|
end
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
module ModelHistory
|
|
2
|
-
|
|
3
2
|
module Mixin
|
|
4
|
-
|
|
5
3
|
class CreatorProcError < StandardError ; end
|
|
6
4
|
|
|
7
5
|
def self.included base
|
|
@@ -99,8 +97,8 @@ module ModelHistory
|
|
|
99
97
|
def add_model_history_record column_name, old_value, new_value, options={}
|
|
100
98
|
creator = options[:creator] || self.creator_for_model_history
|
|
101
99
|
|
|
102
|
-
|
|
103
|
-
:model
|
|
100
|
+
mhr_attributes = {
|
|
101
|
+
:model => self,
|
|
104
102
|
:column_name => column_name,
|
|
105
103
|
:column_type => self.class.columns_hash[column_name.to_s].type,
|
|
106
104
|
:old_value => old_value,
|
|
@@ -108,7 +106,7 @@ module ModelHistory
|
|
|
108
106
|
:creator => creator
|
|
109
107
|
}
|
|
110
108
|
|
|
111
|
-
dhr = ModelHistoryRecord.new(
|
|
109
|
+
dhr = ModelHistoryRecord.new(mhr_attributes)
|
|
112
110
|
|
|
113
111
|
# attributes for manual updates
|
|
114
112
|
[:revised_created_at, :performing_manual_update].each do |attribute|
|
|
@@ -2,7 +2,7 @@ require "active_record"
|
|
|
2
2
|
|
|
3
3
|
class ModelHistoryRecord < ActiveRecord::Base
|
|
4
4
|
belongs_to :creator, :polymorphic => true
|
|
5
|
-
belongs_to :model,
|
|
5
|
+
belongs_to :model, :polymorphic => true
|
|
6
6
|
|
|
7
7
|
validates_presence_of :model_type, :model_id, :column_name, :column_type, :new_value
|
|
8
8
|
|
|
@@ -26,9 +26,11 @@ class ModelHistoryRecord < ActiveRecord::Base
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
if ::ActiveRecord::VERSION::MAJOR < 4
|
|
30
|
+
attr_accessible :model, :model_id, :model_type,
|
|
31
|
+
:column_name, :column_type, :old_value, :new_value,
|
|
32
|
+
:creator, :creator_id, :creator_type, :revised_created_at
|
|
33
|
+
end
|
|
32
34
|
|
|
33
35
|
attr_accessor :performing_manual_update
|
|
34
36
|
|
|
@@ -51,7 +53,7 @@ class ModelHistoryRecord < ActiveRecord::Base
|
|
|
51
53
|
|
|
52
54
|
private
|
|
53
55
|
|
|
54
|
-
def val_to_col_type
|
|
56
|
+
def val_to_col_type(attribute)
|
|
55
57
|
val_as_string = self[attribute]
|
|
56
58
|
return nil if val_as_string.nil?
|
|
57
59
|
case self[:column_type].to_sym
|
data/model_history.gemspec
CHANGED
|
@@ -6,7 +6,7 @@ require 'model_history/version'
|
|
|
6
6
|
Gem::Specification.new do |spec|
|
|
7
7
|
spec.name = 'model_history'
|
|
8
8
|
spec.version = ModelHistory::VERSION
|
|
9
|
-
spec.authors = ['
|
|
9
|
+
spec.authors = ['Toyoaki Oko']
|
|
10
10
|
spec.email = ['chariderpato@gmail.com']
|
|
11
11
|
spec.description = %q{Model History is a simple gem that allows you to keep track of changes to specific fields in your Rails models using the ActiveRecord::Dirty module.}
|
|
12
12
|
spec.summary = %q{Model History is a simple gem that allows you to keep track of changes to specific fields in your Rails models using the ActiveRecord::Dirty module.}
|
|
@@ -18,11 +18,9 @@ Gem::Specification.new do |spec|
|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
19
19
|
spec.require_paths = ['lib']
|
|
20
20
|
|
|
21
|
-
spec.add_development_dependency 'bundler'
|
|
21
|
+
spec.add_development_dependency 'bundler'
|
|
22
22
|
spec.add_development_dependency 'rake'
|
|
23
23
|
spec.add_development_dependency 'rspec'
|
|
24
|
-
spec.add_development_dependency '
|
|
25
|
-
spec.add_development_dependency 'activerecord'
|
|
24
|
+
spec.add_development_dependency 'activerecord', '>= 3.2.11'
|
|
26
25
|
spec.add_development_dependency 'sqlite3'
|
|
27
|
-
spec.add_dependency 'rails', '>= 3.2.11'
|
|
28
26
|
end
|
data/spec/fake_app.rb
CHANGED
|
@@ -1,24 +1,9 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
1
|
require 'active_record'
|
|
3
|
-
require 'action_controller/railtie'
|
|
4
|
-
require 'action_view/helpers'
|
|
5
2
|
require 'model_history'
|
|
6
3
|
|
|
7
4
|
# database
|
|
8
5
|
ActiveRecord::Base.configurations = {'test' => {:adapter => 'sqlite3', :database => ':memory:'}}
|
|
9
|
-
ActiveRecord::Base.establish_connection
|
|
10
|
-
|
|
11
|
-
# config
|
|
12
|
-
app = Class.new(Rails::Application)
|
|
13
|
-
app.config.secret_token = '3b7cd727ee24e8444053437c36cc66c4'
|
|
14
|
-
app.config.session_store :cookie_store, :key => '_myapp_session'
|
|
15
|
-
app.config.active_support.deprecation = :log
|
|
16
|
-
app.initialize!
|
|
17
|
-
|
|
18
|
-
# routes
|
|
19
|
-
app.routes.draw do
|
|
20
|
-
resources :users
|
|
21
|
-
end
|
|
6
|
+
ActiveRecord::Base.establish_connection :test
|
|
22
7
|
|
|
23
8
|
# models
|
|
24
9
|
class User < ActiveRecord::Base
|
|
@@ -26,15 +11,13 @@ class User < ActiveRecord::Base
|
|
|
26
11
|
validates :name, :presence => true
|
|
27
12
|
end
|
|
28
13
|
|
|
29
|
-
#
|
|
30
|
-
class ApplicationController < ActionController::Base; end
|
|
31
|
-
|
|
32
|
-
# helpers
|
|
33
|
-
Object.const_set(:ApplicationHelper, Module.new)
|
|
34
|
-
|
|
35
|
-
#migrations
|
|
14
|
+
# migrations
|
|
36
15
|
class CreateAllTables < ActiveRecord::Migration
|
|
37
16
|
def self.up
|
|
38
|
-
create_table
|
|
17
|
+
create_table :users do |t|
|
|
18
|
+
t.string :name
|
|
19
|
+
t.integer :age
|
|
20
|
+
t.timestamps
|
|
21
|
+
end
|
|
39
22
|
end
|
|
40
23
|
end
|
data/spec/models/user_spec.rb
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# coding: utf-8
|
|
2
1
|
require 'spec_helper'
|
|
3
2
|
|
|
4
3
|
describe User do
|
|
@@ -10,24 +9,44 @@ describe User do
|
|
|
10
9
|
end
|
|
11
10
|
it "Get user history" do
|
|
12
11
|
history = @user.model_history_records.last
|
|
13
|
-
history.model_type.
|
|
14
|
-
history.column_name.
|
|
15
|
-
history.column_type.
|
|
16
|
-
history.old_value.
|
|
17
|
-
history.new_value.
|
|
12
|
+
expect(history.model_type).to eq 'User'
|
|
13
|
+
expect(history.column_name).to eq 'name'
|
|
14
|
+
expect(history.column_type).to eq 'string'
|
|
15
|
+
expect(history.old_value).to eq 'Makunouchi'
|
|
16
|
+
expect(history.new_value).to eq 'Sendo'
|
|
18
17
|
end
|
|
19
18
|
it "#history_for_column" do
|
|
20
19
|
histories = @user.history_for_column :name
|
|
21
|
-
histories.
|
|
22
|
-
histories.
|
|
20
|
+
expect(histories.count).to eq 2
|
|
21
|
+
expect(histories).to eq ['Makunouchi', 'Sendo']
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
context 'multi columns change' do
|
|
26
|
+
before do
|
|
27
|
+
@user = User.create!(:name => 'Makunouchi', :age => 22)
|
|
28
|
+
@user.update_attributes!(:name => 'Sendo', :age => 23)
|
|
29
|
+
end
|
|
30
|
+
it 'Get user histories' do
|
|
31
|
+
histories = ModelHistoryRecord.created_at_gte(@user.updated_at)
|
|
32
|
+
expect(histories.count).to eq 2
|
|
33
|
+
histories.each do |history|
|
|
34
|
+
if history.column_name == 'name'
|
|
35
|
+
expect(history.old_value).to eq 'Makunouchi'
|
|
36
|
+
expect(history.new_value).to eq 'Sendo'
|
|
37
|
+
elsif history.column_name == 'age'
|
|
38
|
+
expect(history.old_value).to eq 22
|
|
39
|
+
expect(history.new_value).to eq 23
|
|
40
|
+
end
|
|
41
|
+
end
|
|
23
42
|
end
|
|
24
43
|
end
|
|
25
44
|
|
|
26
45
|
context "callback methods" do
|
|
27
46
|
it "call add_model_history_record" do
|
|
28
47
|
user = User.new(:name => "Makunouchi", :age => 22)
|
|
29
|
-
user.
|
|
30
|
-
user.
|
|
48
|
+
expect(user).to receive(:set_model_history_changes)
|
|
49
|
+
expect(user).to receive(:save_model_history)
|
|
31
50
|
user.save!
|
|
32
51
|
end
|
|
33
52
|
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -7,7 +7,6 @@ require 'rspec'
|
|
|
7
7
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
|
8
8
|
require File.join(File.dirname(__FILE__), 'fake_app')
|
|
9
9
|
|
|
10
|
-
require 'rspec/rails'
|
|
11
10
|
require 'generators/model_history/migration/templates/active_record/migration'
|
|
12
11
|
|
|
13
12
|
RSpec.configure do |config|
|
metadata
CHANGED
|
@@ -1,128 +1,85 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: model_history
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
5
|
-
prerelease:
|
|
4
|
+
version: 0.2.0
|
|
6
5
|
platform: ruby
|
|
7
6
|
authors:
|
|
8
|
-
-
|
|
7
|
+
- Toyoaki Oko
|
|
9
8
|
autorequire:
|
|
10
9
|
bindir: bin
|
|
11
10
|
cert_chain: []
|
|
12
|
-
date:
|
|
11
|
+
date: 2014-09-23 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
|
15
14
|
name: bundler
|
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
|
17
|
-
none: false
|
|
18
16
|
requirements:
|
|
19
|
-
- -
|
|
20
|
-
- !ruby/object:Gem::Version
|
|
21
|
-
version: '1.3'
|
|
22
|
-
type: :development
|
|
23
|
-
prerelease: false
|
|
24
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
-
none: false
|
|
26
|
-
requirements:
|
|
27
|
-
- - ~>
|
|
28
|
-
- !ruby/object:Gem::Version
|
|
29
|
-
version: '1.3'
|
|
30
|
-
- !ruby/object:Gem::Dependency
|
|
31
|
-
name: rake
|
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
|
33
|
-
none: false
|
|
34
|
-
requirements:
|
|
35
|
-
- - ! '>='
|
|
17
|
+
- - ">="
|
|
36
18
|
- !ruby/object:Gem::Version
|
|
37
19
|
version: '0'
|
|
38
20
|
type: :development
|
|
39
21
|
prerelease: false
|
|
40
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
-
none: false
|
|
42
23
|
requirements:
|
|
43
|
-
- -
|
|
24
|
+
- - ">="
|
|
44
25
|
- !ruby/object:Gem::Version
|
|
45
26
|
version: '0'
|
|
46
27
|
- !ruby/object:Gem::Dependency
|
|
47
|
-
name:
|
|
28
|
+
name: rake
|
|
48
29
|
requirement: !ruby/object:Gem::Requirement
|
|
49
|
-
none: false
|
|
50
30
|
requirements:
|
|
51
|
-
- -
|
|
31
|
+
- - ">="
|
|
52
32
|
- !ruby/object:Gem::Version
|
|
53
33
|
version: '0'
|
|
54
34
|
type: :development
|
|
55
35
|
prerelease: false
|
|
56
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
-
none: false
|
|
58
37
|
requirements:
|
|
59
|
-
- -
|
|
38
|
+
- - ">="
|
|
60
39
|
- !ruby/object:Gem::Version
|
|
61
40
|
version: '0'
|
|
62
41
|
- !ruby/object:Gem::Dependency
|
|
63
|
-
name: rspec
|
|
42
|
+
name: rspec
|
|
64
43
|
requirement: !ruby/object:Gem::Requirement
|
|
65
|
-
none: false
|
|
66
44
|
requirements:
|
|
67
|
-
- -
|
|
45
|
+
- - ">="
|
|
68
46
|
- !ruby/object:Gem::Version
|
|
69
47
|
version: '0'
|
|
70
48
|
type: :development
|
|
71
49
|
prerelease: false
|
|
72
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
73
|
-
none: false
|
|
74
51
|
requirements:
|
|
75
|
-
- -
|
|
52
|
+
- - ">="
|
|
76
53
|
- !ruby/object:Gem::Version
|
|
77
54
|
version: '0'
|
|
78
55
|
- !ruby/object:Gem::Dependency
|
|
79
56
|
name: activerecord
|
|
80
57
|
requirement: !ruby/object:Gem::Requirement
|
|
81
|
-
none: false
|
|
82
58
|
requirements:
|
|
83
|
-
- -
|
|
59
|
+
- - ">="
|
|
84
60
|
- !ruby/object:Gem::Version
|
|
85
|
-
version:
|
|
61
|
+
version: 3.2.11
|
|
86
62
|
type: :development
|
|
87
63
|
prerelease: false
|
|
88
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
89
|
-
none: false
|
|
90
65
|
requirements:
|
|
91
|
-
- -
|
|
66
|
+
- - ">="
|
|
92
67
|
- !ruby/object:Gem::Version
|
|
93
|
-
version:
|
|
68
|
+
version: 3.2.11
|
|
94
69
|
- !ruby/object:Gem::Dependency
|
|
95
70
|
name: sqlite3
|
|
96
71
|
requirement: !ruby/object:Gem::Requirement
|
|
97
|
-
none: false
|
|
98
72
|
requirements:
|
|
99
|
-
- -
|
|
73
|
+
- - ">="
|
|
100
74
|
- !ruby/object:Gem::Version
|
|
101
75
|
version: '0'
|
|
102
76
|
type: :development
|
|
103
77
|
prerelease: false
|
|
104
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
105
|
-
none: false
|
|
106
79
|
requirements:
|
|
107
|
-
- -
|
|
80
|
+
- - ">="
|
|
108
81
|
- !ruby/object:Gem::Version
|
|
109
82
|
version: '0'
|
|
110
|
-
- !ruby/object:Gem::Dependency
|
|
111
|
-
name: rails
|
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
|
113
|
-
none: false
|
|
114
|
-
requirements:
|
|
115
|
-
- - ! '>='
|
|
116
|
-
- !ruby/object:Gem::Version
|
|
117
|
-
version: 3.2.11
|
|
118
|
-
type: :runtime
|
|
119
|
-
prerelease: false
|
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
121
|
-
none: false
|
|
122
|
-
requirements:
|
|
123
|
-
- - ! '>='
|
|
124
|
-
- !ruby/object:Gem::Version
|
|
125
|
-
version: 3.2.11
|
|
126
83
|
description: Model History is a simple gem that allows you to keep track of changes
|
|
127
84
|
to specific fields in your Rails models using the ActiveRecord::Dirty module.
|
|
128
85
|
email:
|
|
@@ -131,12 +88,16 @@ executables: []
|
|
|
131
88
|
extensions: []
|
|
132
89
|
extra_rdoc_files: []
|
|
133
90
|
files:
|
|
134
|
-
- .gitignore
|
|
135
|
-
- .rspec
|
|
91
|
+
- ".gitignore"
|
|
92
|
+
- ".rspec"
|
|
93
|
+
- ".travis.yml"
|
|
136
94
|
- Gemfile
|
|
137
95
|
- LICENSE.txt
|
|
138
96
|
- README.md
|
|
139
97
|
- Rakefile
|
|
98
|
+
- gemfiles/3.2.gemfile
|
|
99
|
+
- gemfiles/4.0.gemfile
|
|
100
|
+
- gemfiles/4.1.gemfile
|
|
140
101
|
- lib/generators/model_history/migration/migration_generator.rb
|
|
141
102
|
- lib/generators/model_history/migration/templates/active_record/migration.rb
|
|
142
103
|
- lib/model_history.rb
|
|
@@ -150,33 +111,26 @@ files:
|
|
|
150
111
|
homepage: https://github.com/patorash/model_history
|
|
151
112
|
licenses:
|
|
152
113
|
- MIT
|
|
114
|
+
metadata: {}
|
|
153
115
|
post_install_message:
|
|
154
116
|
rdoc_options: []
|
|
155
117
|
require_paths:
|
|
156
118
|
- lib
|
|
157
119
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
158
|
-
none: false
|
|
159
120
|
requirements:
|
|
160
|
-
- -
|
|
121
|
+
- - ">="
|
|
161
122
|
- !ruby/object:Gem::Version
|
|
162
123
|
version: '0'
|
|
163
|
-
segments:
|
|
164
|
-
- 0
|
|
165
|
-
hash: 1898891071957235163
|
|
166
124
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
167
|
-
none: false
|
|
168
125
|
requirements:
|
|
169
|
-
- -
|
|
126
|
+
- - ">="
|
|
170
127
|
- !ruby/object:Gem::Version
|
|
171
128
|
version: '0'
|
|
172
|
-
segments:
|
|
173
|
-
- 0
|
|
174
|
-
hash: 1898891071957235163
|
|
175
129
|
requirements: []
|
|
176
130
|
rubyforge_project:
|
|
177
|
-
rubygems_version:
|
|
131
|
+
rubygems_version: 2.2.2
|
|
178
132
|
signing_key:
|
|
179
|
-
specification_version:
|
|
133
|
+
specification_version: 4
|
|
180
134
|
summary: Model History is a simple gem that allows you to keep track of changes to
|
|
181
135
|
specific fields in your Rails models using the ActiveRecord::Dirty module.
|
|
182
136
|
test_files:
|