legacy_column 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 4f9f7f8aae1c7e54444ac728bd65800583b8dba9c0ced595cebfe6ce61609bc5
4
+ data.tar.gz: 524f49a0d6a9e99cf75eda7274d044597f11c51815756236c8b66f75aaf0915f
5
+ SHA512:
6
+ metadata.gz: 263844b58944bf35870e664e5cb4a4e3ec45c1ad055baf16f8e94c7c2c13cae382d4c1c829f59f7e9f832c217960a17d910d77e7da7332842532fa978b04a107
7
+ data.tar.gz: fd37196e959a15199e2c64feb56d03f13c14a3cab9f9858b8507048c9a4a0a78274cb8e3f864281e9a1dfbbf44e492c8dfe400fcb35911b150ac6d467661a9cf
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec
@@ -0,0 +1,58 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ legacy_column (0.1.0)
5
+ activerecord (>= 4.0.0)
6
+ activesupport (>= 4.0.0)
7
+
8
+ GEM
9
+ remote: http://rubygems.org/
10
+ specs:
11
+ activemodel (6.0.3.2)
12
+ activesupport (= 6.0.3.2)
13
+ activerecord (6.0.3.2)
14
+ activemodel (= 6.0.3.2)
15
+ activesupport (= 6.0.3.2)
16
+ activesupport (6.0.3.2)
17
+ concurrent-ruby (~> 1.0, >= 1.0.2)
18
+ i18n (>= 0.7, < 2)
19
+ minitest (~> 5.1)
20
+ tzinfo (~> 1.1)
21
+ zeitwerk (~> 2.2, >= 2.2.2)
22
+ concurrent-ruby (1.1.7)
23
+ diff-lcs (1.4.4)
24
+ i18n (1.8.5)
25
+ concurrent-ruby (~> 1.0)
26
+ minitest (5.14.1)
27
+ rake (13.0.1)
28
+ rspec (3.9.0)
29
+ rspec-core (~> 3.9.0)
30
+ rspec-expectations (~> 3.9.0)
31
+ rspec-mocks (~> 3.9.0)
32
+ rspec-core (3.9.2)
33
+ rspec-support (~> 3.9.3)
34
+ rspec-expectations (3.9.2)
35
+ diff-lcs (>= 1.2.0, < 2.0)
36
+ rspec-support (~> 3.9.0)
37
+ rspec-mocks (3.9.1)
38
+ diff-lcs (>= 1.2.0, < 2.0)
39
+ rspec-support (~> 3.9.0)
40
+ rspec-support (3.9.3)
41
+ sqlite3 (1.4.2)
42
+ thread_safe (0.3.6)
43
+ tzinfo (1.2.7)
44
+ thread_safe (~> 0.1)
45
+ zeitwerk (2.4.0)
46
+
47
+ PLATFORMS
48
+ ruby
49
+
50
+ DEPENDENCIES
51
+ bundler (~> 1.17)
52
+ legacy_column!
53
+ rake (~> 13.0.1)
54
+ rspec (~> 3.2)
55
+ sqlite3 (~> 1.4.2)
56
+
57
+ BUNDLED WITH
58
+ 1.17.2
@@ -0,0 +1,41 @@
1
+ [![Build Status](https://circleci.com/gh/logicalgroove/legacy_column.svg?style=shield)](https://app.circleci.com/pipelines/github/logicalgroove/legacy_column)
2
+ [![License](https://img.shields.io/badge/License-MIT-yellowgreen.svg)](https://img.shields.io/badge/License-MIT-yellowgreen.svg)
3
+
4
+ # LegacyColumn
5
+
6
+ A gem that will print a message if a developer is trying to use a column that is from a legacy system but has to stay there.
7
+
8
+ ## Installation
9
+
10
+
11
+ ```ruby
12
+ gem 'legacy_column'
13
+ ```
14
+
15
+ ## Usage
16
+
17
+ Just list the column names:
18
+ ```ruby
19
+ legacy_column :old_email, :old_phone_number
20
+ ```
21
+
22
+ A custom message can be added:
23
+ ```ruby
24
+ legacy_column :old_email, :old_phone_number, message: 'Do not touch this!!!'
25
+ ```
26
+
27
+ It will output something like this in rails logs:
28
+
29
+ ```
30
+ Use of legacy column detected.
31
+ User => old_email
32
+ Do not touch this!!!
33
+ ```
34
+
35
+ ## Contributing
36
+ Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
37
+
38
+ Please make sure to update tests as appropriate.
39
+
40
+ ## License
41
+ [MIT](https://choosealicense.com/licenses/mit/)
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/init.rb ADDED
@@ -0,0 +1,3 @@
1
+ require "legacy_column"
2
+
3
+ LegacyColumn::Railtie.insert
@@ -0,0 +1,28 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "legacy_column/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "legacy_column"
8
+ spec.version = LegacyColumn::VERSION
9
+ spec.authors = ["Aleksander Lopez Yazikov"]
10
+ spec.email = ["webodessa@gmail.com"]
11
+
12
+ spec.summary = %q{Warning for your legacy columns.}
13
+ spec.description = %q{A gem that will print a message if a developer is trying to use a column that is from a legacy system but has to stay there.}
14
+ spec.homepage = "https://github.com/logicalgroove/legacy_column"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = Dir["{lib,spec}/**/*", "[A-Z]*", "init.rb"]
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.required_rubygems_version = ">= 1.3.4"
21
+
22
+ spec.add_dependency "activesupport", [">= 4.0.0"]
23
+ spec.add_dependency "activerecord", [">= 4.0.0"]
24
+ spec.add_development_dependency "bundler", "~> 1.17"
25
+ spec.add_development_dependency "rake", "~> 13.0.1"
26
+ spec.add_development_dependency "rspec", "~> 3.2"
27
+ spec.add_development_dependency "sqlite3", "~> 1.4.2"
28
+ end
@@ -0,0 +1,37 @@
1
+ # usage:
2
+ # include LegacyColumn
3
+ # legacy_column :pos_type, :pos_user, message: 'Stop what you doing!'
4
+
5
+ require "active_support/concern"
6
+
7
+ module LegacyColumn
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ class_attribute :legacy_column_names, instance_writer: false, default: nil
12
+ class_attribute :legacy_column_message, instance_writer: false, default: nil
13
+ end
14
+
15
+ module ClassMethods
16
+ DEFAULT_MESSAGE = 'This column is set as legacy and should not be used anymore.'
17
+
18
+ def legacy_column(*columns, message:nil)
19
+ return unless columns
20
+
21
+ self.legacy_column_names = columns
22
+ self.legacy_column_message = message || DEFAULT_MESSAGE
23
+
24
+ send('before_validation', :legacy_column)
25
+ end
26
+ end
27
+
28
+ def legacy_column
29
+ legacy_column_names.each do |column|
30
+ if changed_attributes.keys.include? column.to_s
31
+ puts "\n\nUSE of legacy column detected.\n #{self.class} => #{column}\n #{legacy_column_message}\n\n"
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ require "legacy_column/railtie"
@@ -0,0 +1,19 @@
1
+ module LegacyColumn
2
+ if defined?(Rails::Railtie)
3
+ require 'rails'
4
+
5
+ class Railtie < Rails::Railtie
6
+ initializer 'legacy_column.extend_active_record' do
7
+ ActiveSupport.on_load(:active_record) do
8
+ LegacyColumn::Railtie.insert
9
+ end
10
+ end
11
+ end
12
+ end
13
+
14
+ class Railtie
15
+ def self.insert
16
+ ActiveRecord::Base.send(:include, LegacyColumn)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,3 @@
1
+ module LegacyColumn
2
+ VERSION = '0.1.0'
3
+ end
@@ -0,0 +1,21 @@
1
+ sqlite:
2
+ adapter: sqlite
3
+ database: spec/db/test.sqlite
4
+
5
+ sqlite3:
6
+ adapter: sqlite3
7
+ database: spec/db/test.sqlite3
8
+
9
+ postgresql:
10
+ adapter: postgresql
11
+ username: postgres
12
+ password: postgres
13
+ database: nilify_blanks_plugin_test
14
+ min_messages: ERROR
15
+
16
+ mysql:
17
+ adapter: mysql
18
+ host: localhost
19
+ username: root
20
+ password:
21
+ database: nilify_blanks_plugin_test
@@ -0,0 +1,9 @@
1
+ ActiveRecord::Schema.define(:version => 0) do
2
+
3
+ create_table :users, :force => true do |t|
4
+ t.string :first_name
5
+ t.string :last_name
6
+ t.string :old_email
7
+ t.string :old_phone_number
8
+ end
9
+ end
Binary file
@@ -0,0 +1,53 @@
1
+ RSpec.describe LegacyColumn do
2
+ context 'default message' do
3
+ before do
4
+ class User < ActiveRecord::Base
5
+ legacy_column :old_email, :old_phone_number
6
+ end
7
+ end
8
+
9
+ it 'should recognize all legacy columns' do
10
+ expect(User.legacy_column_names).to eq([:old_email, :old_phone_number])
11
+ end
12
+
13
+ it 'should recognize default message' do
14
+ expect(User.legacy_column_message).to eq('This column is set as legacy and should not be used anymore.')
15
+ end
16
+
17
+ describe 'output' do
18
+ let(:user) { User.create }
19
+
20
+ it 'prints awesome things' do
21
+ expect {
22
+ user.update(old_email: 'something')
23
+ }.to output("\n\nUSE of legacy column detected.\n User => old_email\n This column is set as legacy and should not be used anymore.\n\n").to_stdout
24
+ end
25
+ end
26
+ end
27
+
28
+ context 'custom message' do
29
+ before do
30
+ class User < ActiveRecord::Base
31
+ legacy_column :old_email, :old_phone_number, message: 'Dont do it!!!'
32
+ end
33
+ end
34
+
35
+ it 'should recognize all legacy columns' do
36
+ expect(User.legacy_column_names).to eq([:old_email, :old_phone_number])
37
+ end
38
+
39
+ it 'should recognize default message' do
40
+ expect(User.legacy_column_message).to eq('Dont do it!!!')
41
+ end
42
+
43
+ describe 'output' do
44
+ let(:user) { User.create }
45
+
46
+ it 'prints awesome things' do
47
+ expect {
48
+ user.update(old_email: 'something')
49
+ }.to output("\n\nUSE of legacy column detected.\n User => old_email\n Dont do it!!!\n\n").to_stdout
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,26 @@
1
+ require "rubygems"
2
+ require "rspec"
3
+ require "active_support"
4
+ require "active_record"
5
+ require "yaml"
6
+
7
+ config = YAML::load(IO.read(File.join(File.dirname(__FILE__), 'db', 'database.yml')))
8
+ ActiveRecord::Base.configurations = {'test' => config[ENV['DB'] || 'sqlite3']}
9
+ ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['test'])
10
+
11
+ # Load Test Schema into the Database
12
+ load(File.dirname(__FILE__) + "/db/schema.rb")
13
+
14
+ require File.dirname(__FILE__) + '/../init'
15
+
16
+ RSpec.configure do |config|
17
+ # Enable flags like --only-failures and --next-failure
18
+ config.example_status_persistence_file_path = ".rspec_status"
19
+
20
+ # Disable RSpec exposing methods globally on `Module` and `main`
21
+ config.disable_monkey_patching!
22
+
23
+ config.expect_with :rspec do |c|
24
+ c.syntax = :expect
25
+ end
26
+ end
metadata ADDED
@@ -0,0 +1,142 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: legacy_column
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Aleksander Lopez Yazikov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-08-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 4.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 4.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: activerecord
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 4.0.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 4.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.17'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.17'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 13.0.1
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 13.0.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.2'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.2'
83
+ - !ruby/object:Gem::Dependency
84
+ name: sqlite3
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 1.4.2
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 1.4.2
97
+ description: A gem that will print a message if a developer is trying to use a column
98
+ that is from a legacy system but has to stay there.
99
+ email:
100
+ - webodessa@gmail.com
101
+ executables: []
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - Gemfile
106
+ - Gemfile.lock
107
+ - README.md
108
+ - Rakefile
109
+ - init.rb
110
+ - legacy_column.gemspec
111
+ - lib/legacy_column.rb
112
+ - lib/legacy_column/railtie.rb
113
+ - lib/legacy_column/version.rb
114
+ - spec/db/database.yml
115
+ - spec/db/schema.rb
116
+ - spec/db/test.sqlite3
117
+ - spec/legacy_column_spec.rb
118
+ - spec/spec_helper.rb
119
+ homepage: https://github.com/logicalgroove/legacy_column
120
+ licenses:
121
+ - MIT
122
+ metadata: {}
123
+ post_install_message:
124
+ rdoc_options: []
125
+ require_paths:
126
+ - lib
127
+ required_ruby_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ required_rubygems_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: 1.3.4
137
+ requirements: []
138
+ rubygems_version: 3.0.3
139
+ signing_key:
140
+ specification_version: 4
141
+ summary: Warning for your legacy columns.
142
+ test_files: []