commento 0.1.1 → 0.1.3
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 +4 -4
- data/lib/commento/adapters/active_record.rb +23 -15
- data/lib/commento/configuration.rb +5 -1
- data/lib/commento/report.rb +25 -4
- data/lib/commento/reports/html.rb +18 -3
- data/lib/commento/scrapers/ruby.rb +58 -0
- data/lib/commento/version.rb +1 -1
- data/lib/commento.rb +1 -0
- 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: 9a65354f12eb0a8c66c0bc901f87bb35f1ddf2d9d18f2b399c8e13758bc779e7
|
4
|
+
data.tar.gz: b0d88b4c72e2b6e6404b762b2113a6c61779c2d7a3cc4a7732c09452599d895c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: def8375883745c14c5fa4b032bec57a3e4030299fc79c4a0a214e46f177d4e962c93d99a2f899d51e8db450cb4e14ca26d5805430f678b5489b85f14893a72f1
|
7
|
+
data.tar.gz: b7fe5588c90a2c072efb614a43201220c443410ed149b3965ea5baf65e93276506e85fe61c4d859e2a15556e4d8232b379e6425f9b288013f48918594689c168
|
@@ -8,8 +8,6 @@ module Commento
|
|
8
8
|
# Public: The name of the adapter.
|
9
9
|
attr_reader :name
|
10
10
|
|
11
|
-
SKIP_COLUMN_NAME = %w[id uuid created_at updated_at].freeze
|
12
|
-
|
13
11
|
# Public: Initialize a new ActiveRecord adapter instance.
|
14
12
|
#
|
15
13
|
# name - The Symbol name for this adapter. Optional (default :active_record)
|
@@ -46,24 +44,30 @@ module Commento
|
|
46
44
|
|
47
45
|
# Public: Returns comments for tables and columns.
|
48
46
|
def comments_for_database
|
49
|
-
execute(tables_comments_sql).to_a.
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
columns: execute(columns_comments_sql(table_data['table_name'])).to_a.filter_map do |column_data|
|
54
|
-
next if SKIP_COLUMN_NAME.include?(column_data['column_name'])
|
55
|
-
|
56
|
-
{
|
57
|
-
column_name: column_data['column_name'],
|
58
|
-
column_comment: column_data['col_description']
|
59
|
-
}
|
60
|
-
end
|
61
|
-
}
|
47
|
+
execute(tables_comments_sql).to_a.filter_map do |table_data|
|
48
|
+
next if configuration.skip_table_names.include?(table_data['table_name'])
|
49
|
+
|
50
|
+
parse_data(table_data)
|
62
51
|
end
|
63
52
|
end
|
64
53
|
|
65
54
|
private
|
66
55
|
|
56
|
+
def parse_data(table_data)
|
57
|
+
{
|
58
|
+
table_name: table_data['table_name'],
|
59
|
+
table_comment: table_data['obj_description'],
|
60
|
+
columns: execute(columns_comments_sql(table_data['table_name'])).to_a.filter_map do |column_data|
|
61
|
+
next if configuration.skip_column_names.include?(column_data['column_name'])
|
62
|
+
|
63
|
+
{
|
64
|
+
column_name: column_data['column_name'],
|
65
|
+
column_comment: column_data['col_description']
|
66
|
+
}
|
67
|
+
end
|
68
|
+
}
|
69
|
+
end
|
70
|
+
|
67
71
|
def tables_comments_sql
|
68
72
|
<<-SQL.squish
|
69
73
|
SELECT
|
@@ -94,6 +98,10 @@ module Commento
|
|
94
98
|
def execute(sql)
|
95
99
|
::ActiveRecord::Base.connection.execute(sql)
|
96
100
|
end
|
101
|
+
|
102
|
+
def configuration
|
103
|
+
Commento.configuration
|
104
|
+
end
|
97
105
|
end
|
98
106
|
end
|
99
107
|
end
|
@@ -2,10 +2,14 @@
|
|
2
2
|
|
3
3
|
module Commento
|
4
4
|
class Configuration
|
5
|
-
attr_accessor :adapter
|
5
|
+
attr_accessor :adapter, :include_folders, :exclude_folders, :skip_table_names, :skip_column_names
|
6
6
|
|
7
7
|
def initialize
|
8
8
|
@adapter = nil
|
9
|
+
@include_folders = %w[app lib]
|
10
|
+
@exclude_folders = ['app/assets']
|
11
|
+
@skip_table_names = %w[ar_internal_metadata schema_migrations]
|
12
|
+
@skip_column_names = %w[id uuid created_at updated_at]
|
9
13
|
end
|
10
14
|
end
|
11
15
|
end
|
data/lib/commento/report.rb
CHANGED
@@ -2,10 +2,17 @@
|
|
2
2
|
|
3
3
|
module Commento
|
4
4
|
class Report
|
5
|
+
COMMENTO_FOLDER_NAME = 'commento'
|
6
|
+
|
7
|
+
def initialize(data_scraper: Commento::Scrapers::Ruby.new)
|
8
|
+
@data_scraper = data_scraper
|
9
|
+
end
|
10
|
+
|
5
11
|
def create_report
|
6
|
-
|
12
|
+
@commento_data = @data_scraper.call
|
13
|
+
FileUtils.mkdir_p(COMMENTO_FOLDER_NAME)
|
7
14
|
File.write(
|
8
|
-
"
|
15
|
+
"#{COMMENTO_FOLDER_NAME}/#{file_name}",
|
9
16
|
main_template.gsub('%tables_placeholder%', tables_placeholder)
|
10
17
|
)
|
11
18
|
end
|
@@ -23,9 +30,19 @@ module Commento
|
|
23
30
|
|
24
31
|
def columns_placeholder(table_name, columns)
|
25
32
|
columns.map do |column_data|
|
33
|
+
full_column_name = "#{table_name}.#{column_data[:column_name]}"
|
26
34
|
column_template
|
27
|
-
.gsub('%column_name%',
|
35
|
+
.gsub('%column_name%', full_column_name)
|
28
36
|
.gsub('%column_comment%', column_data[:column_comment].presence || '')
|
37
|
+
.gsub('%data_placeholder%', data_placeholder(full_column_name))
|
38
|
+
end.join
|
39
|
+
end
|
40
|
+
|
41
|
+
def data_placeholder(full_column_name)
|
42
|
+
return '' if @commento_data[full_column_name].blank?
|
43
|
+
|
44
|
+
@commento_data[full_column_name].map do |filename|
|
45
|
+
data_template.gsub('%commento_data%', filename)
|
29
46
|
end.join
|
30
47
|
end
|
31
48
|
|
@@ -45,7 +62,11 @@ module Commento
|
|
45
62
|
raise NotImplementedError
|
46
63
|
end
|
47
64
|
|
48
|
-
def
|
65
|
+
def data_template
|
66
|
+
raise NotImplementedError
|
67
|
+
end
|
68
|
+
|
69
|
+
def file_name
|
49
70
|
raise NotImplementedError
|
50
71
|
end
|
51
72
|
|
@@ -35,11 +35,22 @@ module Commento
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def column_template
|
38
|
-
|
38
|
+
[
|
39
|
+
" <div class='column-body'>",
|
40
|
+
' <p>%column_name%: %column_comment%</p>',
|
41
|
+
" <div class='column-data'>",
|
42
|
+
'%data_placeholder%',
|
43
|
+
' </div>',
|
44
|
+
" </div>\n"
|
45
|
+
].join("\n")
|
46
|
+
end
|
47
|
+
|
48
|
+
def data_template
|
49
|
+
' <span>%commento_data%</span>'
|
39
50
|
end
|
40
51
|
|
41
|
-
def
|
42
|
-
'html'
|
52
|
+
def file_name
|
53
|
+
'index.html'
|
43
54
|
end
|
44
55
|
|
45
56
|
def styles
|
@@ -52,6 +63,10 @@ module Commento
|
|
52
63
|
'.table-header h3 { padding: .25rem; background: #bbb }',
|
53
64
|
'.table-header p { padding: .25rem; margin: 0 }',
|
54
65
|
'.table-body { padding: 0 .25rem }',
|
66
|
+
'.column-body { margin-bottom: .5rem; }',
|
67
|
+
'.column-body p { margin: 0 }',
|
68
|
+
'.column-data { display: flex; flex-direction: column; margin: .5rem 0 }',
|
69
|
+
'.column-data span { font-style: italic; padding-left: 1rem }',
|
55
70
|
'</style>'
|
56
71
|
].join
|
57
72
|
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Commento
|
4
|
+
module Scrapers
|
5
|
+
class Ruby
|
6
|
+
COMMENTO_MATCH_REGEXP = /^[ \t]*# commento:.+$/.freeze
|
7
|
+
|
8
|
+
# @data contains data with next format
|
9
|
+
# {
|
10
|
+
# 'fantasy_sports.points' => [
|
11
|
+
# 'app/services/some_service.rb:11'
|
12
|
+
# ]
|
13
|
+
# }
|
14
|
+
# key - table_name.column_name
|
15
|
+
# values - lines of files where these columns are changed in the code
|
16
|
+
def initialize
|
17
|
+
@data = {}
|
18
|
+
end
|
19
|
+
|
20
|
+
def call
|
21
|
+
configuration.include_folders.each { |include_folder| iterate_folder(include_folder) }
|
22
|
+
@data
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def iterate_folder(include_folder)
|
28
|
+
Dir.glob("#{include_folder}/**/*.rb").each do |filename|
|
29
|
+
next if exclude_folders.include?(filename.split('/')[0..-2].join('/'))
|
30
|
+
|
31
|
+
File.open(filename) { |lines| iterate_filelines(lines, filename) }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# commento line looks like
|
36
|
+
# commento: fantasy_sports.points, fantasy_sports.statistics
|
37
|
+
def iterate_filelines(lines, filename)
|
38
|
+
lines.each.with_index(1) do |line, index|
|
39
|
+
next unless COMMENTO_MATCH_REGEXP.match?(line)
|
40
|
+
|
41
|
+
fields = line.strip.split('# commento: ')[-1].split(',').map(&:strip)
|
42
|
+
fields.each do |field|
|
43
|
+
@data[field] ||= []
|
44
|
+
@data[field] << "#{filename}:#{index}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def exclude_folders
|
50
|
+
@exclude_folders ||= configuration.exclude_folders
|
51
|
+
end
|
52
|
+
|
53
|
+
def configuration
|
54
|
+
Commento.configuration
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/lib/commento/version.rb
CHANGED
data/lib/commento.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: commento
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bogdanov Anton
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-09-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubocop
|
@@ -82,6 +82,7 @@ files:
|
|
82
82
|
- lib/commento/helpers.rb
|
83
83
|
- lib/commento/report.rb
|
84
84
|
- lib/commento/reports/html.rb
|
85
|
+
- lib/commento/scrapers/ruby.rb
|
85
86
|
- lib/commento/version.rb
|
86
87
|
homepage: https://github.com/kortirso/commento
|
87
88
|
licenses:
|