model_history 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Build Status](https://travis-ci.org/patorash/model_history.png?branch=master)](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:
|