column_hider 0.0.1
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/MIT-LICENSE +20 -0
- data/README.rdoc +71 -0
- data/Rakefile +28 -0
- data/lib/column_hider/version.rb +3 -0
- data/lib/column_hider.rb +23 -0
- data/test/column_hider_test.rb +53 -0
- data/test/dummy/config/application.rb +10 -0
- data/test/dummy/config/database.yml +3 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/test.rb +6 -0
- data/test/dummy/config.ru +0 -0
- data/test/dummy/db/schema.rb +0 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/test.log +87 -0
- data/test/test_helper.rb +9 -0
- metadata +98 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8d4fc13bfe9f49a63d59c3b6df79228de6fa5950
|
4
|
+
data.tar.gz: 725c675d14826b9472abfa07a1ec47475e1f956a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7cbe3d3a3b1ea959faa82b892548001be553975c5e4f470e87a422c50c9191a89f958797f7ccf915f7fc37537f7cee9169cf2748d2b504374cc02e9c8fc423d1
|
7
|
+
data.tar.gz: 8d22ed88c39f9dd44fc2b4267530fb78b76f3ba41d007bbf9986e06854a773232c390831b5a97695e2ae16e5cebc8eee055cf5aaa509ccaaf7eaf0fd1df67578
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2015 Ian Hall
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
= ColumnHider
|
2
|
+
|
3
|
+
== Procedure for deleting or renaming database columns in Rails applications
|
4
|
+
|
5
|
+
=== Avoiding downtime, or reliability issues during deploys
|
6
|
+
|
7
|
+
Ian Hall
|
8
|
+
May 2015
|
9
|
+
|
10
|
+
---
|
11
|
+
The process of deleting or renaming columns in a production database has some hidden dangers, more or less severe depending on how long it takes to run different parts of your deployment process.
|
12
|
+
|
13
|
+
This procedure aims to completely avoid these issues. If you can’t afford an deployment outage and want your application to be as close to 100% available as possible, you might like to consider this procedure.
|
14
|
+
|
15
|
+
---
|
16
|
+
== Renaming columns
|
17
|
+
|
18
|
+
The simple solution to this is: don’t do it! Instead:
|
19
|
+
|
20
|
+
* create a new column with the desired name
|
21
|
+
* migrate all data from the old column to the new column
|
22
|
+
* change all references to the old column name in your code to use the new column name
|
23
|
+
* (optional) use the column-deletion procedure below to remove the old column
|
24
|
+
|
25
|
+
The second step, migrating data from old to new columns, may need to be repeated before the fourth step if there is any gap in time which allows data to be updated between steps two and three.
|
26
|
+
|
27
|
+
== Column-deletion procedure
|
28
|
+
=== Problem Definition
|
29
|
+
|
30
|
+
When a Rails model is first used in a running Rails application, all the columns in the underlying database table are enumerated. The list of columns is kept in a class instance variable of an <code>ActiveRecord::Attribute::ClassMethods</code> method named +columns+. Once created, this variable persists for the lifetime of the running application.
|
31
|
+
|
32
|
+
Caching the column names this way is a good performance enhancement for the application, but it can lead to problems during or after database changes.
|
33
|
+
|
34
|
+
Without the procedure described below, one would run a migration to physically remove the column-to-be-deleted (+CTBD+), then deploy a new version of the application, with all references to the +CTBD+ removed. After successful deployment, restart the application.
|
35
|
+
|
36
|
+
<b>The danger period is the interval between the migration completing and the application restarting.</b>
|
37
|
+
|
38
|
+
Even though this interval may be relatively short - perhaps only a minute or two - if it’s possible that the running application will access the table that you’ve changed with the migration, then you’ll run into a problem.
|
39
|
+
|
40
|
+
=== Solution
|
41
|
+
|
42
|
+
The solution to this problem lies in overriding the +ActiveRecord+ columns method described above.
|
43
|
+
|
44
|
+
[Step One] Add the gem to your Gemfile.
|
45
|
+
|
46
|
+
In the model for your application which contains the +CTBD+, add these two lines:
|
47
|
+
|
48
|
+
extend ColumnHider
|
49
|
+
column_hider_columns :column_one
|
50
|
+
|
51
|
+
where +:column_one+ is the +CTBD+.
|
52
|
+
|
53
|
+
This logically deletes the column from the application - whenever the application accesses the model, the column will be removed from the list of columns that the application knows about.
|
54
|
+
|
55
|
+
Then go through your application in the normal way and remove all other references to the +CTBD+.
|
56
|
+
|
57
|
+
[Step Two] Deploy the code changes made in Step One.
|
58
|
+
|
59
|
+
At this point, your application will know nothing about the +CTBD+, and you can now go on to physically remove the +CTBD+.
|
60
|
+
|
61
|
+
[Step Three] Create and deploy a Rails migration to physically remove the +CTBD+.
|
62
|
+
|
63
|
+
[Step Four] Remove the two lines from your model that were added in Step One. Deploy this whenever …
|
64
|
+
|
65
|
+
[Step Five] … and relax!
|
66
|
+
|
67
|
+
== Conclusion
|
68
|
+
|
69
|
+
This might seem like a long-winded way to go about it, but it guarantees that you will avoid any problems in your running application when deleting or renaming columns.
|
70
|
+
|
71
|
+
Your mileage may vary, depending on the usage pattern of your application. If you can afford to take downtime and close down user access during a deployment window, you can safely run a destructive migration followed by an application deploy.
|
data/Rakefile
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
11
|
+
rdoc.title = 'ColumnHider'
|
12
|
+
rdoc.options << '--line-numbers'
|
13
|
+
rdoc.rdoc_files.include('README.rdoc')
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
Bundler::GemHelper.install_tasks
|
18
|
+
|
19
|
+
require 'rake/testtask'
|
20
|
+
|
21
|
+
Rake::TestTask.new(:test) do |t|
|
22
|
+
t.libs << 'lib'
|
23
|
+
t.libs << 'test'
|
24
|
+
t.pattern = 'test/**/*_test.rb'
|
25
|
+
t.verbose = false
|
26
|
+
end
|
27
|
+
|
28
|
+
task default: :test
|
data/lib/column_hider.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require "column_hider/version"
|
2
|
+
|
3
|
+
module ColumnHider
|
4
|
+
#
|
5
|
+
# Overrides the Rails ActiveRecord Attributes "columns" method.
|
6
|
+
# This allows the logical removal of a column prior to its physical removal.
|
7
|
+
# To use, add two lines to your model:
|
8
|
+
# ` extend ColumnHider`
|
9
|
+
# ` column_hider_columns :column_one, :column_two, ...`
|
10
|
+
#
|
11
|
+
|
12
|
+
def column_hider_columns(*cols)
|
13
|
+
@column_hider_columns = []
|
14
|
+
cols.each do |col|
|
15
|
+
@column_hider_columns << col.to_s
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def columns
|
20
|
+
@column_hider_columns ||= [] # just in case the model includes the line " extend ColumnHider", but doesn't call column_hider_columns
|
21
|
+
super.reject { |col| @column_hider_columns.include?(col.name) }
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'minitest/spec'
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
describe ColumnHider do
|
6
|
+
it 'has a version number' do
|
7
|
+
expect(ColumnHider::VERSION).wont_be_nil
|
8
|
+
end
|
9
|
+
|
10
|
+
before do
|
11
|
+
class Country < ActiveRecord::Base
|
12
|
+
establish_connection :adapter => 'sqlite3', :database => ':memory:'
|
13
|
+
connection.create_table(:countries, :force => true) do |t|
|
14
|
+
t.string :name
|
15
|
+
t.string :capital
|
16
|
+
t.string :comment
|
17
|
+
end
|
18
|
+
extend ColumnHider
|
19
|
+
column_hider_columns :capital
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
after do
|
24
|
+
Object.send :remove_const, :Country
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#column is removed in the model' do
|
28
|
+
let(:mock_col_arr) { %w(id name comment) }
|
29
|
+
col_arr = []
|
30
|
+
it '#shows the column is not there' do
|
31
|
+
Country.columns.each do |col|
|
32
|
+
col_arr << col.name
|
33
|
+
end
|
34
|
+
expect(col_arr).must_equal(mock_col_arr)
|
35
|
+
expect(col_arr).must_include('comment')
|
36
|
+
expect(col_arr).wont_include('capital')
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#column is removed dynamically' do
|
41
|
+
let(:mock_col_arr) { %w(id name capital) }
|
42
|
+
col_arr = []
|
43
|
+
it '#shows the column is not there' do
|
44
|
+
Country.send :column_hider_columns, :comment
|
45
|
+
Country.columns.each do |col|
|
46
|
+
col_arr << col.name
|
47
|
+
end
|
48
|
+
expect(col_arr).must_equal(mock_col_arr)
|
49
|
+
expect(col_arr).must_include('capital')
|
50
|
+
expect(col_arr).wont_include('comment')
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,87 @@
|
|
1
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
2
|
+
[1m[35m (0.1ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255))
|
3
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
4
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
5
|
+
[1m[35m (0.1ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255))
|
6
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
7
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
8
|
+
[1m[35m (0.1ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255))
|
9
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
10
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
11
|
+
[1m[35m (0.1ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255))
|
12
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
13
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
14
|
+
[1m[35m (0.2ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255))
|
15
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
16
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
17
|
+
[1m[35m (0.1ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255))
|
18
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
19
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
20
|
+
[1m[35m (0.1ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255))
|
21
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
22
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
23
|
+
[1m[35m (0.1ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255))
|
24
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
25
|
+
[1m[36m (0.3ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
26
|
+
[1m[35m (0.1ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255))
|
27
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
28
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
29
|
+
[1m[35m (0.1ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255))
|
30
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
31
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
32
|
+
[1m[35m (0.1ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255))
|
33
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
34
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
35
|
+
[1m[35m (0.2ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255))
|
36
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
37
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
38
|
+
[1m[35m (0.1ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255))
|
39
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
40
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
41
|
+
[1m[35m (0.2ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255))
|
42
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
43
|
+
[1m[36m (0.3ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
44
|
+
[1m[35m (0.2ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255))
|
45
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
46
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
47
|
+
[1m[35m (0.1ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255))
|
48
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
49
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
50
|
+
[1m[35m (0.2ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255))
|
51
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
52
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
53
|
+
[1m[35m (0.1ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255))
|
54
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
55
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
56
|
+
[1m[35m (0.1ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255))
|
57
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
58
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
59
|
+
[1m[35m (0.1ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255))
|
60
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
61
|
+
[1m[36m (0.3ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
62
|
+
[1m[35m (0.1ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255))
|
63
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
64
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "capital" varchar, "comment" varchar) [0m
|
65
|
+
[1m[35m (0.1ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "capital" varchar, "comment" varchar)
|
66
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "capital" varchar, "comment" varchar) [0m
|
67
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
68
|
+
[1m[35m (0.1ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255))
|
69
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
70
|
+
[1m[36m (0.3ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
71
|
+
[1m[35m (0.1ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255))
|
72
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "capital" varchar(255), "comment" varchar(255)) [0m
|
73
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "capital" varchar, "comment" varchar) [0m
|
74
|
+
[1m[35m (0.2ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "capital" varchar, "comment" varchar)
|
75
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "capital" varchar, "comment" varchar) [0m
|
76
|
+
[1m[36m (0.3ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "capital" varchar, "comment" varchar) [0m
|
77
|
+
[1m[35m (0.1ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "capital" varchar, "comment" varchar)
|
78
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "capital" varchar, "comment" varchar) [0m
|
79
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "capital" varchar, "comment" varchar) [0m
|
80
|
+
[1m[35m (0.2ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "capital" varchar, "comment" varchar)
|
81
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "capital" varchar, "comment" varchar) [0m
|
82
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "capital" varchar, "comment" varchar) [0m
|
83
|
+
[1m[35m (0.2ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "capital" varchar, "comment" varchar)
|
84
|
+
[1m[36m (0.1ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "capital" varchar, "comment" varchar) [0m
|
85
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "capital" varchar, "comment" varchar) [0m
|
86
|
+
[1m[35m (0.1ms)[0m CREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "capital" varchar, "comment" varchar)
|
87
|
+
[1m[36m (0.2ms)[0m [1mCREATE TABLE "countries" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "capital" varchar, "comment" varchar) [0m
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
# Configure Rails Environment
|
2
|
+
ENV["RAILS_ENV"] = "test"
|
3
|
+
|
4
|
+
require File.expand_path("../../test/dummy/config/environment.rb", __FILE__)
|
5
|
+
require "rails/test_help"
|
6
|
+
|
7
|
+
# Filter out Minitest backtrace while allowing backtrace from other libraries
|
8
|
+
# to be shown.
|
9
|
+
Minitest.backtrace_filter = Minitest::BacktraceFilter.new
|
metadata
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: column_hider
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Flashfunders
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-05-21 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.2.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.2.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sqlite3
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Superclasses the 'columns' method of ActiveRecord's Attribute class and
|
42
|
+
dynamically removes your chosen column(s).
|
43
|
+
email:
|
44
|
+
- engineering@flashfunders.com
|
45
|
+
executables: []
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files: []
|
48
|
+
files:
|
49
|
+
- MIT-LICENSE
|
50
|
+
- README.rdoc
|
51
|
+
- Rakefile
|
52
|
+
- lib/column_hider.rb
|
53
|
+
- lib/column_hider/version.rb
|
54
|
+
- test/column_hider_test.rb
|
55
|
+
- test/dummy/config.ru
|
56
|
+
- test/dummy/config/application.rb
|
57
|
+
- test/dummy/config/database.yml
|
58
|
+
- test/dummy/config/environment.rb
|
59
|
+
- test/dummy/config/environments/test.rb
|
60
|
+
- test/dummy/db/schema.rb
|
61
|
+
- test/dummy/db/test.sqlite3
|
62
|
+
- test/dummy/log/test.log
|
63
|
+
- test/test_helper.rb
|
64
|
+
homepage: ''
|
65
|
+
licenses:
|
66
|
+
- MIT
|
67
|
+
metadata: {}
|
68
|
+
post_install_message:
|
69
|
+
rdoc_options: []
|
70
|
+
require_paths:
|
71
|
+
- lib
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
requirements: []
|
83
|
+
rubyforge_project:
|
84
|
+
rubygems_version: 2.4.6
|
85
|
+
signing_key:
|
86
|
+
specification_version: 4
|
87
|
+
summary: Removes a database table column from the set of columns known to your application.
|
88
|
+
test_files:
|
89
|
+
- test/column_hider_test.rb
|
90
|
+
- test/dummy/config/application.rb
|
91
|
+
- test/dummy/config/database.yml
|
92
|
+
- test/dummy/config/environment.rb
|
93
|
+
- test/dummy/config/environments/test.rb
|
94
|
+
- test/dummy/config.ru
|
95
|
+
- test/dummy/db/schema.rb
|
96
|
+
- test/dummy/db/test.sqlite3
|
97
|
+
- test/dummy/log/test.log
|
98
|
+
- test/test_helper.rb
|