legacy_column 0.1.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.
@@ -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: []