audited 4.7.1 → 5.0.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of audited might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/.gitignore +0 -1
- data/.standard.yml +5 -0
- data/.travis.yml +35 -26
- data/Appraisals +27 -18
- data/CHANGELOG.md +97 -4
- data/Gemfile +1 -1
- data/README.md +88 -19
- data/Rakefile +6 -6
- data/gemfiles/rails50.gemfile +3 -0
- data/gemfiles/rails51.gemfile +3 -0
- data/gemfiles/rails52.gemfile +3 -1
- data/gemfiles/rails60.gemfile +10 -0
- data/gemfiles/rails61.gemfile +10 -0
- data/lib/audited-rspec.rb +3 -1
- data/lib/audited.rb +26 -8
- data/lib/audited/audit.rb +48 -43
- data/lib/audited/auditor.rb +137 -57
- data/lib/audited/railtie.rb +16 -0
- data/lib/audited/rspec_matchers.rb +5 -3
- data/lib/audited/sweeper.rb +3 -10
- data/lib/audited/version.rb +3 -1
- data/lib/generators/audited/install_generator.rb +9 -7
- data/lib/generators/audited/migration.rb +2 -0
- data/lib/generators/audited/migration_helper.rb +3 -1
- data/lib/generators/audited/templates/add_association_to_audits.rb +2 -0
- data/lib/generators/audited/templates/add_comment_to_audits.rb +2 -0
- data/lib/generators/audited/templates/add_remote_address_to_audits.rb +2 -0
- data/lib/generators/audited/templates/add_request_uuid_to_audits.rb +2 -0
- data/lib/generators/audited/templates/add_version_to_auditable_index.rb +23 -0
- data/lib/generators/audited/templates/install.rb +3 -1
- data/lib/generators/audited/templates/rename_association_to_associated.rb +2 -0
- data/lib/generators/audited/templates/rename_changes_to_audited_changes.rb +2 -0
- data/lib/generators/audited/templates/rename_parent_to_association.rb +2 -0
- data/lib/generators/audited/templates/revert_polymorphic_indexes_order.rb +2 -0
- data/lib/generators/audited/upgrade_generator.rb +20 -14
- data/spec/audited/audit_spec.rb +151 -62
- data/spec/audited/auditor_spec.rb +456 -239
- data/spec/audited/sweeper_spec.rb +29 -20
- data/spec/audited_spec.rb +18 -0
- data/spec/audited_spec_helpers.rb +7 -7
- data/spec/rails_app/app/assets/config/manifest.js +2 -0
- data/spec/rails_app/config/application.rb +7 -2
- data/spec/rails_app/config/database.yml +1 -0
- data/spec/rails_app/config/environment.rb +1 -1
- data/spec/rails_app/config/environments/test.rb +5 -5
- data/spec/rails_app/config/initializers/secret_token.rb +2 -2
- data/spec/spec_helper.rb +15 -13
- data/spec/support/active_record/models.rb +37 -11
- data/spec/support/active_record/postgres/1_change_audited_changes_type_to_json.rb +1 -2
- data/spec/support/active_record/postgres/2_change_audited_changes_type_to_jsonb.rb +1 -2
- data/spec/support/active_record/schema.rb +28 -20
- data/test/db/version_1.rb +2 -2
- data/test/db/version_2.rb +2 -2
- data/test/db/version_3.rb +2 -3
- data/test/db/version_4.rb +2 -3
- data/test/db/version_5.rb +0 -1
- data/test/db/version_6.rb +2 -0
- data/test/install_generator_test.rb +18 -19
- data/test/test_helper.rb +6 -7
- data/test/upgrade_generator_test.rb +22 -17
- metadata +64 -29
- data/gemfiles/rails40.gemfile +0 -9
- data/gemfiles/rails41.gemfile +0 -8
- data/gemfiles/rails42.gemfile +0 -8
- data/spec/rails_app/config/environments/development.rb +0 -21
- data/spec/rails_app/config/environments/production.rb +0 -35
@@ -1,5 +1,7 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
+
SingleCov.covered!
|
4
|
+
|
3
5
|
class AuditsController < ActionController::Base
|
4
6
|
before_action :populate_user
|
5
7
|
|
@@ -11,7 +13,7 @@ class AuditsController < ActionController::Base
|
|
11
13
|
end
|
12
14
|
|
13
15
|
def update
|
14
|
-
current_user.
|
16
|
+
current_user.update!(password: "foo")
|
15
17
|
head :ok
|
16
18
|
end
|
17
19
|
|
@@ -20,48 +22,58 @@ class AuditsController < ActionController::Base
|
|
20
22
|
attr_accessor :current_user
|
21
23
|
attr_accessor :custom_user
|
22
24
|
|
23
|
-
def populate_user
|
25
|
+
def populate_user
|
26
|
+
end
|
24
27
|
end
|
25
28
|
|
26
29
|
describe AuditsController do
|
27
30
|
include RSpec::Rails::ControllerExampleGroup
|
28
31
|
render_views
|
29
32
|
|
30
|
-
before
|
33
|
+
before do
|
34
|
+
Audited::Railtie.initializers.each(&:run)
|
31
35
|
Audited.current_user_method = :current_user
|
32
36
|
end
|
33
37
|
|
34
38
|
let(:user) { create_user }
|
35
39
|
|
36
40
|
describe "POST audit" do
|
37
|
-
|
38
41
|
it "should audit user" do
|
39
42
|
controller.send(:current_user=, user)
|
40
43
|
expect {
|
41
44
|
post :create
|
42
|
-
}.to change(
|
45
|
+
}.to change(Audited::Audit, :count)
|
43
46
|
|
44
47
|
expect(controller.company.audits.last.user).to eq(user)
|
45
48
|
end
|
46
49
|
|
50
|
+
it "does not audit when method is not found" do
|
51
|
+
controller.send(:current_user=, user)
|
52
|
+
Audited.current_user_method = :nope
|
53
|
+
expect {
|
54
|
+
post :create
|
55
|
+
}.to change(Audited::Audit, :count)
|
56
|
+
expect(controller.company.audits.last.user).to eq(nil)
|
57
|
+
end
|
58
|
+
|
47
59
|
it "should support custom users for sweepers" do
|
48
60
|
controller.send(:custom_user=, user)
|
49
61
|
Audited.current_user_method = :custom_user
|
50
62
|
|
51
63
|
expect {
|
52
64
|
post :create
|
53
|
-
}.to change(
|
65
|
+
}.to change(Audited::Audit, :count)
|
54
66
|
|
55
67
|
expect(controller.company.audits.last.user).to eq(user)
|
56
68
|
end
|
57
69
|
|
58
70
|
it "should record the remote address responsible for the change" do
|
59
|
-
request.env[
|
71
|
+
request.env["REMOTE_ADDR"] = "1.2.3.4"
|
60
72
|
controller.send(:current_user=, user)
|
61
73
|
|
62
74
|
post :create
|
63
75
|
|
64
|
-
expect(controller.company.audits.last.remote_address).to eq(
|
76
|
+
expect(controller.company.audits.last.remote_address).to eq("1.2.3.4")
|
65
77
|
end
|
66
78
|
|
67
79
|
it "should record a UUID for the web request responsible for the change" do
|
@@ -80,11 +92,10 @@ describe AuditsController do
|
|
80
92
|
|
81
93
|
expect {
|
82
94
|
post :create
|
83
|
-
}.to change(
|
95
|
+
}.to change(Audited::Audit, :count)
|
84
96
|
|
85
97
|
expect(controller.company.audits.last.user).to eq(user)
|
86
98
|
end
|
87
|
-
|
88
99
|
end
|
89
100
|
|
90
101
|
describe "PUT update" do
|
@@ -92,33 +103,31 @@ describe AuditsController do
|
|
92
103
|
controller.send(:current_user=, user)
|
93
104
|
|
94
105
|
expect {
|
95
|
-
put :update,
|
96
|
-
}.to_not change(
|
106
|
+
put :update, params: {id: 123}
|
107
|
+
}.to_not change(Audited::Audit, :count)
|
97
108
|
end
|
98
109
|
end
|
99
110
|
end
|
100
111
|
|
101
|
-
|
102
112
|
describe Audited::Sweeper do
|
103
|
-
|
104
113
|
it "should be thread-safe" do
|
105
114
|
instance = Audited::Sweeper.new
|
106
115
|
|
107
116
|
t1 = Thread.new do
|
108
117
|
sleep 0.5
|
109
|
-
instance.controller =
|
110
|
-
expect(instance.controller).to eq(
|
118
|
+
instance.controller = "thread1 controller instance"
|
119
|
+
expect(instance.controller).to eq("thread1 controller instance")
|
111
120
|
end
|
112
121
|
|
113
122
|
t2 = Thread.new do
|
114
|
-
instance.controller =
|
123
|
+
instance.controller = "thread2 controller instance"
|
115
124
|
sleep 1
|
116
|
-
expect(instance.controller).to eq(
|
125
|
+
expect(instance.controller).to eq("thread2 controller instance")
|
117
126
|
end
|
118
127
|
|
119
|
-
t1.join
|
128
|
+
t1.join
|
129
|
+
t2.join
|
120
130
|
|
121
131
|
expect(instance.controller).to be_nil
|
122
132
|
end
|
123
|
-
|
124
133
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Audited do
|
4
|
+
describe "#store" do
|
5
|
+
describe "maintains state of store" do
|
6
|
+
let(:current_user) { "current_user" }
|
7
|
+
before { Audited.store[:current_user] = current_user }
|
8
|
+
|
9
|
+
it "when executed without fibers" do
|
10
|
+
expect(Audited.store[:current_user]).to eq(current_user)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "when executed with Fibers" do
|
14
|
+
Fiber.new { expect(Audited.store[:current_user]).to eq(current_user) }.resume
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -1,15 +1,14 @@
|
|
1
1
|
module AuditedSpecHelpers
|
2
|
-
|
3
2
|
def create_user(attrs = {})
|
4
|
-
Models::ActiveRecord::User.create({name:
|
3
|
+
Models::ActiveRecord::User.create({name: "Brandon", username: "brandon", password: "password", favourite_device: "Android Phone"}.merge(attrs))
|
5
4
|
end
|
6
5
|
|
7
6
|
def build_user(attrs = {})
|
8
|
-
Models::ActiveRecord::User.new({name:
|
7
|
+
Models::ActiveRecord::User.new({name: "darth", username: "darth", password: "noooooooo"}.merge(attrs))
|
9
8
|
end
|
10
9
|
|
11
10
|
def create_versions(n = 2, attrs = {})
|
12
|
-
Models::ActiveRecord::User.create(name:
|
11
|
+
Models::ActiveRecord::User.create(name: "Foobar 1", **attrs).tap do |u|
|
13
12
|
(n - 1).times do |i|
|
14
13
|
u.update_attribute :name, "Foobar #{i + 2}"
|
15
14
|
end
|
@@ -18,15 +17,16 @@ module AuditedSpecHelpers
|
|
18
17
|
end
|
19
18
|
|
20
19
|
def run_migrations(direction, migrations_paths, target_version = nil)
|
21
|
-
if rails_below?(
|
20
|
+
if rails_below?("5.2.0.rc1")
|
22
21
|
ActiveRecord::Migrator.send(direction, migrations_paths, target_version)
|
23
|
-
|
22
|
+
elsif rails_below?("6.0.0.rc1")
|
24
23
|
ActiveRecord::MigrationContext.new(migrations_paths).send(direction, target_version)
|
24
|
+
else
|
25
|
+
ActiveRecord::MigrationContext.new(migrations_paths, ActiveRecord::SchemaMigration).send(direction, target_version)
|
25
26
|
end
|
26
27
|
end
|
27
28
|
|
28
29
|
def rails_below?(rails_version)
|
29
30
|
Gem::Version.new(Rails::VERSION::STRING) < Gem::Version.new(rails_version)
|
30
31
|
end
|
31
|
-
|
32
32
|
end
|
@@ -1,8 +1,13 @@
|
|
1
|
-
require
|
1
|
+
require "active_record/railtie"
|
2
2
|
|
3
3
|
module RailsApp
|
4
4
|
class Application < Rails::Application
|
5
|
-
config.root = File.expand_path(
|
5
|
+
config.root = File.expand_path("../../", __FILE__)
|
6
6
|
config.i18n.enforce_available_locales = true
|
7
7
|
end
|
8
8
|
end
|
9
|
+
|
10
|
+
require "active_record/connection_adapters/sqlite3_adapter"
|
11
|
+
if ActiveRecord::ConnectionAdapters::SQLite3Adapter.respond_to?(:represent_boolean_as_integer)
|
12
|
+
ActiveRecord::ConnectionAdapters::SQLite3Adapter.represent_boolean_as_integer = true
|
13
|
+
end
|
@@ -15,14 +15,14 @@ RailsApp::Application.configure do
|
|
15
15
|
# Configure static file server for tests with Cache-Control for performance.
|
16
16
|
if config.respond_to?(:public_file_server)
|
17
17
|
config.public_file_server.enabled = true
|
18
|
-
config.public_file_server.headers = {
|
18
|
+
config.public_file_server.headers = {"Cache-Control" => "public, max-age=3600"}
|
19
19
|
else
|
20
|
-
config.static_cache_control =
|
21
|
-
config.serve_static_files
|
20
|
+
config.static_cache_control = "public, max-age=3600"
|
21
|
+
config.serve_static_files = true
|
22
22
|
end
|
23
23
|
|
24
24
|
# Show full error reports and disable caching.
|
25
|
-
config.consider_all_requests_local
|
25
|
+
config.consider_all_requests_local = true
|
26
26
|
# config.action_controller.perform_caching = false
|
27
27
|
|
28
28
|
# Raise exceptions instead of rendering exception templates.
|
@@ -34,7 +34,7 @@ RailsApp::Application.configure do
|
|
34
34
|
# Tell Action Mailer not to deliver emails to the real world.
|
35
35
|
# The :test delivery method accumulates sent emails in the
|
36
36
|
# ActionMailer::Base.deliveries array.
|
37
|
-
config.action_mailer.delivery_method = :test
|
37
|
+
# config.action_mailer.delivery_method = :test
|
38
38
|
|
39
39
|
# Randomize the order test cases are executed.
|
40
40
|
config.active_support.test_order = :random
|
@@ -1,3 +1,3 @@
|
|
1
|
-
Rails.application.config.secret_token =
|
1
|
+
Rails.application.config.secret_token = "ea942c41850d502f2c8283e26bdc57829f471bb18224ddff0a192c4f32cdf6cb5aa0d82b3a7a7adbeb640c4b06f3aa1cd5f098162d8240f669b39d6b49680571"
|
2
2
|
Rails.application.config.session_store :cookie_store, key: "_my_app"
|
3
|
-
Rails.application.config.secret_key_base =
|
3
|
+
Rails.application.config.secret_key_base = "secret value"
|
data/spec/spec_helper.rb
CHANGED
@@ -1,22 +1,24 @@
|
|
1
|
-
ENV[
|
1
|
+
ENV["RAILS_ENV"] = "test"
|
2
|
+
require "bundler/setup"
|
3
|
+
require "single_cov"
|
4
|
+
SingleCov.setup :rspec
|
2
5
|
|
3
|
-
|
4
|
-
|
5
|
-
require 'protected_attributes'
|
6
|
+
if Bundler.definition.dependencies.map(&:name).include?("protected_attributes")
|
7
|
+
require "protected_attributes"
|
6
8
|
end
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
9
|
+
require "rails_app/config/environment"
|
10
|
+
require "rspec/rails"
|
11
|
+
require "audited"
|
12
|
+
require "audited-rspec"
|
13
|
+
require "audited_spec_helpers"
|
14
|
+
require "support/active_record/models"
|
13
15
|
|
14
|
-
SPEC_ROOT = Pathname.new(File.expand_path(
|
16
|
+
SPEC_ROOT = Pathname.new(File.expand_path("../", __FILE__))
|
15
17
|
|
16
|
-
Dir[SPEC_ROOT.join(
|
18
|
+
Dir[SPEC_ROOT.join("support/*.rb")].sort.each { |f| require f }
|
17
19
|
|
18
20
|
RSpec.configure do |config|
|
19
21
|
config.include AuditedSpecHelpers
|
20
|
-
config.use_transactional_fixtures = false if Rails.version.start_with?(
|
22
|
+
config.use_transactional_fixtures = false if Rails.version.start_with?("4.")
|
21
23
|
config.use_transactional_tests = false if config.respond_to?(:use_transactional_tests=)
|
22
24
|
end
|
@@ -1,12 +1,14 @@
|
|
1
|
-
require
|
2
|
-
require File.expand_path(
|
1
|
+
require "cgi"
|
2
|
+
require File.expand_path("../schema", __FILE__)
|
3
3
|
|
4
4
|
module Models
|
5
5
|
module ActiveRecord
|
6
6
|
class User < ::ActiveRecord::Base
|
7
7
|
audited except: :password
|
8
|
-
attribute :non_column_attr if Rails.version >=
|
8
|
+
attribute :non_column_attr if Rails.version >= "5.1"
|
9
9
|
attr_protected :logins if respond_to?(:attr_protected)
|
10
|
+
enum status: {active: 0, reliable: 1, banned: 2}
|
11
|
+
serialize :phone_numbers, Array
|
10
12
|
|
11
13
|
def name=(val)
|
12
14
|
write_attribute(:name, CGI.escapeHTML(val))
|
@@ -20,13 +22,28 @@ module Models
|
|
20
22
|
|
21
23
|
class UserOnlyPassword < ::ActiveRecord::Base
|
22
24
|
self.table_name = :users
|
23
|
-
attribute :non_column_attr if Rails.version >=
|
25
|
+
attribute :non_column_attr if Rails.version >= "5.1"
|
24
26
|
audited only: :password
|
25
27
|
end
|
26
28
|
|
29
|
+
class UserRedactedPassword < ::ActiveRecord::Base
|
30
|
+
self.table_name = :users
|
31
|
+
audited redacted: :password
|
32
|
+
end
|
33
|
+
|
34
|
+
class UserMultipleRedactedAttributes < ::ActiveRecord::Base
|
35
|
+
self.table_name = :users
|
36
|
+
audited redacted: [:password, :ssn]
|
37
|
+
end
|
38
|
+
|
39
|
+
class UserRedactedPasswordCustomRedaction < ::ActiveRecord::Base
|
40
|
+
self.table_name = :users
|
41
|
+
audited redacted: :password, redaction_value: ["My", "Custom", "Value", 7]
|
42
|
+
end
|
43
|
+
|
27
44
|
class CommentRequiredUser < ::ActiveRecord::Base
|
28
45
|
self.table_name = :users
|
29
|
-
audited comment_required: true
|
46
|
+
audited except: :password, comment_required: true
|
30
47
|
end
|
31
48
|
|
32
49
|
class OnCreateCommentRequiredUser < ::ActiveRecord::Base
|
@@ -44,6 +61,11 @@ module Models
|
|
44
61
|
audited comment_required: true, on: :destroy
|
45
62
|
end
|
46
63
|
|
64
|
+
class NoUpdateWithCommentOnlyUser < ::ActiveRecord::Base
|
65
|
+
self.table_name = :users
|
66
|
+
audited update_with_comment_only: false
|
67
|
+
end
|
68
|
+
|
47
69
|
class AccessibleAfterDeclarationUser < ::ActiveRecord::Base
|
48
70
|
self.table_name = :users
|
49
71
|
audited
|
@@ -90,35 +112,39 @@ module Models
|
|
90
112
|
end
|
91
113
|
|
92
114
|
class Owner < ::ActiveRecord::Base
|
93
|
-
self.table_name =
|
115
|
+
self.table_name = "users"
|
116
|
+
audited
|
94
117
|
has_associated_audits
|
95
118
|
has_many :companies, class_name: "OwnedCompany", dependent: :destroy
|
96
119
|
end
|
97
120
|
|
98
121
|
class OwnedCompany < ::ActiveRecord::Base
|
99
|
-
self.table_name =
|
122
|
+
self.table_name = "companies"
|
100
123
|
belongs_to :owner, class_name: "Owner"
|
101
124
|
attr_accessible :name, :owner if respond_to?(:attr_accessible) # declare attr_accessible before calling aaa
|
102
125
|
audited associated_with: :owner
|
103
126
|
end
|
104
127
|
|
128
|
+
class OwnedCompany::STICompany < OwnedCompany
|
129
|
+
end
|
130
|
+
|
105
131
|
class OnUpdateDestroy < ::ActiveRecord::Base
|
106
|
-
self.table_name =
|
132
|
+
self.table_name = "companies"
|
107
133
|
audited on: [:update, :destroy]
|
108
134
|
end
|
109
135
|
|
110
136
|
class OnCreateDestroy < ::ActiveRecord::Base
|
111
|
-
self.table_name =
|
137
|
+
self.table_name = "companies"
|
112
138
|
audited on: [:create, :destroy]
|
113
139
|
end
|
114
140
|
|
115
141
|
class OnCreateDestroyExceptName < ::ActiveRecord::Base
|
116
|
-
self.table_name =
|
142
|
+
self.table_name = "companies"
|
117
143
|
audited except: :name, on: [:create, :destroy]
|
118
144
|
end
|
119
145
|
|
120
146
|
class OnCreateUpdate < ::ActiveRecord::Base
|
121
|
-
self.table_name =
|
147
|
+
self.table_name = "companies"
|
122
148
|
audited on: [:create, :update]
|
123
149
|
end
|
124
150
|
end
|
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
class ChangeAuditedChangesTypeToJson < parent
|
1
|
+
class ChangeAuditedChangesTypeToJson < ActiveRecord::Migration[5.0]
|
3
2
|
def self.up
|
4
3
|
remove_column :audits, :audited_changes
|
5
4
|
add_column :audits, :audited_changes, :json
|
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
class ChangeAuditedChangesTypeToJsonb < parent
|
1
|
+
class ChangeAuditedChangesTypeToJsonb < ActiveRecord::Migration[5.0]
|
3
2
|
def self.up
|
4
3
|
remove_column :audits, :audited_changes
|
5
4
|
add_column :audits, :audited_changes, :jsonb
|
@@ -1,28 +1,33 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "active_record"
|
2
|
+
require "logger"
|
3
3
|
|
4
4
|
begin
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
raise Exception.new('No database name specified.') if db_name.blank?
|
9
|
-
if db_type == 'sqlite3'
|
10
|
-
db_file = Pathname.new(__FILE__).dirname.join(db_name)
|
11
|
-
db_file.unlink if db_file.file?
|
5
|
+
if ActiveRecord.version >= Gem::Version.new("6.1.0")
|
6
|
+
db_config = ActiveRecord::Base.configurations.configs_for(env_name: Rails.env).first
|
7
|
+
ActiveRecord::Tasks::DatabaseTasks.create(db_config)
|
12
8
|
else
|
13
|
-
|
14
|
-
|
15
|
-
|
9
|
+
db_config = ActiveRecord::Base.configurations[Rails.env].clone
|
10
|
+
db_type = db_config["adapter"]
|
11
|
+
db_name = db_config.delete("database")
|
12
|
+
raise StandardError.new("No database name specified.") if db_name.blank?
|
13
|
+
if db_type == "sqlite3"
|
14
|
+
db_file = Pathname.new(__FILE__).dirname.join(db_name)
|
15
|
+
db_file.unlink if db_file.file?
|
16
|
+
else
|
17
|
+
if defined?(JRUBY_VERSION)
|
18
|
+
db_config.symbolize_keys!
|
19
|
+
db_config[:configure_connection] = false
|
20
|
+
end
|
21
|
+
adapter = ActiveRecord::Base.send("#{db_type}_connection", db_config)
|
22
|
+
adapter.recreate_database db_name, db_config.slice("charset").symbolize_keys
|
23
|
+
adapter.disconnect!
|
16
24
|
end
|
17
|
-
adapter = ActiveRecord::Base.send("#{db_type}_connection", db_config)
|
18
|
-
adapter.recreate_database db_name
|
19
|
-
adapter.disconnect!
|
20
25
|
end
|
21
|
-
rescue
|
26
|
+
rescue => e
|
22
27
|
Kernel.warn e
|
23
28
|
end
|
24
29
|
|
25
|
-
logfile = Pathname.new(__FILE__).dirname.join(
|
30
|
+
logfile = Pathname.new(__FILE__).dirname.join("debug.log")
|
26
31
|
logfile.unlink if logfile.file?
|
27
32
|
ActiveRecord::Base.logger = Logger.new(logfile)
|
28
33
|
|
@@ -35,11 +40,14 @@ ActiveRecord::Schema.define do
|
|
35
40
|
t.column :username, :string
|
36
41
|
t.column :password, :string
|
37
42
|
t.column :activated, :boolean
|
43
|
+
t.column :status, :integer, default: 0
|
38
44
|
t.column :suspended_at, :datetime
|
39
45
|
t.column :logins, :integer, default: 0
|
40
46
|
t.column :created_at, :datetime
|
41
47
|
t.column :updated_at, :datetime
|
42
48
|
t.column :favourite_device, :string
|
49
|
+
t.column :ssn, :integer
|
50
|
+
t.column :phone_numbers, :string
|
43
51
|
end
|
44
52
|
|
45
53
|
create_table :companies do |t|
|
@@ -74,9 +82,9 @@ ActiveRecord::Schema.define do
|
|
74
82
|
t.column :created_at, :datetime
|
75
83
|
end
|
76
84
|
|
77
|
-
add_index :audits, [:auditable_id, :auditable_type], name:
|
78
|
-
add_index :audits, [:associated_id, :associated_type], name:
|
79
|
-
add_index :audits, [:user_id, :user_type], name:
|
85
|
+
add_index :audits, [:auditable_id, :auditable_type], name: "auditable_index"
|
86
|
+
add_index :audits, [:associated_id, :associated_type], name: "associated_index"
|
87
|
+
add_index :audits, [:user_id, :user_type], name: "user_index"
|
80
88
|
add_index :audits, :request_uuid
|
81
89
|
add_index :audits, :created_at
|
82
90
|
end
|