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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c7cc261c10ba9619a4d6f78856bd6307fd02a6f9a448db2f0672aabaff4e038c
4
- data.tar.gz: c4efb2c2b2b5d9da69e3fa4a9f0555e8b6ebd712a03f7b8e3a4949d80da6a927
3
+ metadata.gz: 9a65354f12eb0a8c66c0bc901f87bb35f1ddf2d9d18f2b399c8e13758bc779e7
4
+ data.tar.gz: b0d88b4c72e2b6e6404b762b2113a6c61779c2d7a3cc4a7732c09452599d895c
5
5
  SHA512:
6
- metadata.gz: 5b62dd5d4983d649927fff20945286694af6ebebac4b7f07279b8a15026831220310eb6613e2a0930a936fe50296c97c343c8c17b25563dc48c61ebdb55cf93f
7
- data.tar.gz: 275e6b4fe545516a63539efd94254918dc564a222ba2023a5273e7460d5bfc9e1b5408464ac6878e8f5cf006d9940741be9bc261eba691c894f0c87b8ebb985f
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.map! do |table_data|
50
- {
51
- table_name: table_data['table_name'],
52
- table_comment: table_data['obj_description'],
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
@@ -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
- FileUtils.mkdir_p('commento')
12
+ @commento_data = @data_scraper.call
13
+ FileUtils.mkdir_p(COMMENTO_FOLDER_NAME)
7
14
  File.write(
8
- "commento/index.#{template_format}",
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%', "#{table_name}.#{column_data[: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 template_format
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
- " <p>%column_name%: %column_comment%</p>\n"
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 template_format
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Commento
4
- VERSION = '0.1.1'
4
+ VERSION = '0.1.3'
5
5
  end
data/lib/commento.rb CHANGED
@@ -8,6 +8,7 @@ require 'commento/dsl'
8
8
  require 'commento/helpers'
9
9
  require 'commento/report'
10
10
  require 'commento/reports/html'
11
+ require 'commento/scrapers/ruby'
11
12
 
12
13
  module Commento
13
14
  extend self
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.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-08-14 00:00:00.000000000 Z
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: