table_inspector 0.3.2 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +13 -4
- data/lib/table_inspector/column.rb +2 -2
- data/lib/table_inspector/grid.rb +1 -1
- data/lib/table_inspector/presenter.rb +44 -3
- data/lib/table_inspector/table.rb +2 -2
- data/lib/table_inspector/text.rb +21 -1
- data/lib/table_inspector/validator.rb +37 -0
- data/lib/table_inspector/version.rb +1 -1
- data/lib/table_inspector.rb +26 -25
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dafb1f2e93a8ac7beb1729635132812c7460b4a4bac712c08f011783357bd6ca
|
4
|
+
data.tar.gz: 4656a91cbb769c9465480bdc1798f3b38bec3b074098eb15cd6549f6ac6e9ea8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 853d58ade3b5b95304c8633cd8e926cc9b1d7d060a0c0d0d6828561d668fae23baf9bca2583619ad07045cf83ad29de3bf98788eb9af2442c8235f4368d1c133
|
7
|
+
data.tar.gz: 2db47bebcf0715737ebf1e87d3578294be46332ec5023f94bbe3f879bd5fa705506eff47b8c6f30fa5d5254b06f16e30877215cd77c5db7d4e550f01dc1159d0
|
data/README.md
CHANGED
@@ -12,22 +12,31 @@ require "table_inspector"
|
|
12
12
|
TableInspector.scan User
|
13
13
|
```
|
14
14
|
|
15
|
-
![TableInspect scan table](/img/
|
15
|
+
![TableInspect scan table](/img/table_inspector_scan_table_1.png)
|
16
16
|
|
17
17
|
It will print the all table definition and all indexes.
|
18
18
|
|
19
|
-
|
19
|
+
Or you can use `TableInspector.ascan` to print more colorful table(`ascan` means `awesome scan`) :
|
20
|
+
```ruby
|
21
|
+
TableInspector.ascan User
|
22
|
+
```
|
23
|
+
![TableInspect ascan table](/img/table_inspector_ascan_table_1.png)
|
24
|
+
|
25
|
+
And to print a specific column by:
|
20
26
|
|
21
27
|
```ruby
|
22
28
|
TableInspector.scan User, :name
|
23
29
|
```
|
24
|
-
![Table Inspector scan column](/img/
|
30
|
+
![Table Inspector scan column](/img/table_inspector_scan_column_1.png)
|
25
31
|
|
26
32
|
It will print the column definition and which indexes that contains this column.
|
27
33
|
|
28
34
|
Also, you can print `sql_type` which type of column in database by provide `sql_type: true` option:
|
29
35
|
|
30
|
-
|
36
|
+
```ruby
|
37
|
+
TableInspector.scan User, sql_type: true
|
38
|
+
```
|
39
|
+
![Table Inspector scan table column with sql type](/img/table_inspector_scan_table_with_sql_type_1.png)
|
31
40
|
|
32
41
|
## Installation
|
33
42
|
Add this line to your application's Gemfile:
|
@@ -3,11 +3,11 @@ module TableInspector
|
|
3
3
|
class Column
|
4
4
|
attr_reader :column, :klass, :sql_type, :presenter
|
5
5
|
|
6
|
-
def initialize(klass, column_name, sql_type: false)
|
6
|
+
def initialize(klass, column_name, sql_type: false, colorize: false )
|
7
7
|
@column = klass.columns.find {|column| column.name == column_name.to_s}
|
8
8
|
@klass = klass
|
9
9
|
@sql_type = sql_type
|
10
|
-
@presenter = Presenter.new(klass, sql_type: sql_type)
|
10
|
+
@presenter = Presenter.new(klass, sql_type: sql_type, colorize: colorize)
|
11
11
|
end
|
12
12
|
|
13
13
|
def render
|
data/lib/table_inspector/grid.rb
CHANGED
@@ -3,15 +3,39 @@ module TableInspector
|
|
3
3
|
class Presenter
|
4
4
|
attr_reader :klass, :sql_type
|
5
5
|
|
6
|
-
def initialize(klass, sql_type:)
|
6
|
+
def initialize(klass, sql_type:, colorize: false)
|
7
7
|
@klass = klass
|
8
8
|
@sql_type = sql_type
|
9
|
+
@colorize = colorize
|
9
10
|
end
|
10
11
|
|
11
|
-
def
|
12
|
+
def extract_meta_with_highlight(column)
|
13
|
+
column_data = column.as_json.merge(column.sql_type_metadata.as_json)
|
14
|
+
|
15
|
+
# Colorize text but except "comment" field
|
16
|
+
column_data.each do |k, v|
|
17
|
+
if k != "comment"
|
18
|
+
column_data[k] = colorize(v)
|
19
|
+
else
|
20
|
+
column_data[k]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
column_data.slice(*ordered_keys)
|
25
|
+
end
|
26
|
+
|
27
|
+
def extract_meta_without_highlight(column)
|
12
28
|
column.as_json.merge(column.sql_type_metadata.as_json).slice(*ordered_keys)
|
13
29
|
end
|
14
30
|
|
31
|
+
def extract_meta(column)
|
32
|
+
if @colorize
|
33
|
+
extract_meta_with_highlight(column)
|
34
|
+
else
|
35
|
+
extract_meta_without_highlight(column)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
15
39
|
def header
|
16
40
|
first_column = klass.columns.first
|
17
41
|
extract_meta(first_column).keys.map(&:humanize)
|
@@ -24,5 +48,22 @@ module TableInspector
|
|
24
48
|
keys << "sql_type" if sql_type
|
25
49
|
end
|
26
50
|
end
|
51
|
+
|
52
|
+
def colorize(value)
|
53
|
+
case value
|
54
|
+
when TrueClass, DateTime, 'datetime'
|
55
|
+
Text.green(value)
|
56
|
+
when FalseClass
|
57
|
+
Text.red(value)
|
58
|
+
when Numeric, 'integer', 'decimal'
|
59
|
+
Text.blue(value)
|
60
|
+
when 'boolean'
|
61
|
+
Text.cyan(value)
|
62
|
+
when String
|
63
|
+
Text.yellow(value)
|
64
|
+
else
|
65
|
+
value
|
66
|
+
end
|
67
|
+
end
|
27
68
|
end
|
28
|
-
end
|
69
|
+
end
|
@@ -3,10 +3,10 @@ module TableInspector
|
|
3
3
|
class Table
|
4
4
|
attr_reader :klass, :sql_type, :presenter
|
5
5
|
|
6
|
-
def initialize(klass, sql_type: false)
|
6
|
+
def initialize(klass, sql_type: false, colorize: false)
|
7
7
|
@klass = klass
|
8
8
|
@sql_type = sql_type
|
9
|
-
@presenter = Presenter.new(klass, sql_type: sql_type)
|
9
|
+
@presenter = Presenter.new(klass, sql_type: sql_type, colorize: colorize)
|
10
10
|
end
|
11
11
|
|
12
12
|
def render
|
data/lib/table_inspector/text.rb
CHANGED
@@ -10,5 +10,25 @@ module TableInspector
|
|
10
10
|
def break_line
|
11
11
|
puts "\n"
|
12
12
|
end
|
13
|
+
|
14
|
+
def red(text)
|
15
|
+
"\e[31m#{text}\e[0m"
|
16
|
+
end
|
17
|
+
|
18
|
+
def green(text)
|
19
|
+
"\e[32m#{text}\e[0m"
|
20
|
+
end
|
21
|
+
|
22
|
+
def yellow(text)
|
23
|
+
"\e[33m#{text}\e[0m"
|
24
|
+
end
|
25
|
+
|
26
|
+
def blue(text)
|
27
|
+
"\e[34m#{text}\e[0m"
|
28
|
+
end
|
29
|
+
|
30
|
+
def cyan(text)
|
31
|
+
"\e[36m#{text}\e[0m"
|
32
|
+
end
|
13
33
|
end
|
14
|
-
end
|
34
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
|
2
|
+
module TableInspector
|
3
|
+
class Validator
|
4
|
+
def initialize(klass, column_name)
|
5
|
+
@klass = klass
|
6
|
+
@column = column_name
|
7
|
+
end
|
8
|
+
|
9
|
+
def validate!
|
10
|
+
|
11
|
+
if column_name && !validate_column(klass, column_name)
|
12
|
+
puts column_is_not_exists_hint(klass, column_name)
|
13
|
+
return
|
14
|
+
end
|
15
|
+
|
16
|
+
true
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def is_active_record_class?(klass)
|
22
|
+
klass < ActiveRecord::Base
|
23
|
+
end
|
24
|
+
|
25
|
+
def validate_column(klass, column_name)
|
26
|
+
klass.columns.find{|column| column.name == column_name.to_s }
|
27
|
+
end
|
28
|
+
|
29
|
+
def not_a_model_class_hint(klass)
|
30
|
+
"#{klass} is not a model klass"
|
31
|
+
end
|
32
|
+
|
33
|
+
def column_is_not_exists_hint(klass, column_name)
|
34
|
+
puts "Column '#{column_name}' doesn't exists in table '#{klass.table_name}'"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/table_inspector.rb
CHANGED
@@ -7,11 +7,32 @@ require "table_inspector/indexes"
|
|
7
7
|
require "table_inspector/text"
|
8
8
|
require "table_inspector/column"
|
9
9
|
require "table_inspector/presenter"
|
10
|
+
require "table_inspector/validator"
|
10
11
|
|
11
12
|
module TableInspector
|
12
13
|
extend self
|
13
14
|
|
15
|
+
def ascan(klass, column_name = nil, sql_type: false)
|
16
|
+
klass = init_klass!(klass)
|
17
|
+
return unless klass
|
18
|
+
|
19
|
+
return unless Validator.new(klass, column_name)
|
20
|
+
|
21
|
+
render(klass, column_name, sql_type, colorize: true)
|
22
|
+
end
|
23
|
+
|
14
24
|
def scan(klass, column_name = nil, sql_type: false)
|
25
|
+
klass = init_klass!(klass)
|
26
|
+
return unless klass
|
27
|
+
|
28
|
+
return unless Validator.new(klass, column_name)
|
29
|
+
|
30
|
+
render(klass, column_name, sql_type)
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def init_klass!(klass)
|
15
36
|
begin
|
16
37
|
unless klass.is_a?(Class)
|
17
38
|
klass = klass.to_s.classify.constantize
|
@@ -21,38 +42,18 @@ module TableInspector
|
|
21
42
|
return
|
22
43
|
end
|
23
44
|
|
24
|
-
|
25
|
-
|
26
|
-
return
|
27
|
-
end
|
28
|
-
|
29
|
-
if column_name && !validate_column(klass, column_name)
|
30
|
-
puts column_is_not_exists_hint(klass, column_name)
|
31
|
-
return
|
32
|
-
end
|
45
|
+
klass
|
46
|
+
end
|
33
47
|
|
48
|
+
def render(klass, column_name, sql_type, colorize: false)
|
34
49
|
if column_name
|
35
|
-
Column.new(klass, column_name, sql_type: sql_type).render
|
50
|
+
Column.new(klass, column_name, sql_type: sql_type, colorize: colorize).render
|
36
51
|
else
|
37
|
-
Table.new(klass, sql_type: sql_type).render
|
52
|
+
Table.new(klass, sql_type: sql_type, colorize: colorize).render
|
38
53
|
end
|
39
54
|
end
|
40
|
-
|
41
|
-
private
|
42
|
-
|
43
|
-
def validate_column(klass, column_name)
|
44
|
-
klass.columns.find{|column| column.name == column_name.to_s }
|
45
|
-
end
|
46
55
|
|
47
56
|
def invalid_model_name_hint(klass)
|
48
57
|
"'#{klass}' can be transform to a model class."
|
49
58
|
end
|
50
|
-
|
51
|
-
def not_a_model_class_hint(klass)
|
52
|
-
"#{klass} is not a model klass"
|
53
|
-
end
|
54
|
-
|
55
|
-
def column_is_not_exists_hint(klass, column_name)
|
56
|
-
puts "Column '#{column_name}' doesn't exists in table '#{klass.table_name}'"
|
57
|
-
end
|
58
59
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: table_inspector
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ian
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-02
|
11
|
+
date: 2023-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -56,6 +56,7 @@ files:
|
|
56
56
|
- lib/table_inspector/railtie.rb
|
57
57
|
- lib/table_inspector/table.rb
|
58
58
|
- lib/table_inspector/text.rb
|
59
|
+
- lib/table_inspector/validator.rb
|
59
60
|
- lib/table_inspector/version.rb
|
60
61
|
- lib/tasks/table_inspector_tasks.rake
|
61
62
|
homepage: https://github.com/table_inspector
|