distincter2 1.2.0 → 1.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4a8604db5a2f754b08135af05307d7164d0d54988163e91c20c91a09809a007f
4
- data.tar.gz: 813d231a8ee7b4ace12726bedc9a9ebc2cd45e5be04e12446dc478ab36d6749b
3
+ metadata.gz: 4b8d1d5aa62302ef718c566a9053311075f4999fc1e8509c1e2d93e788f85a87
4
+ data.tar.gz: 66ebec72784df7a866f179c730f354120db1e227911655a8ee11ce509947adb5
5
5
  SHA512:
6
- metadata.gz: cce320b5a321b1b589011dcaea2ee56b457512dfdf07f39cd2521a9d5af09978721462392bceeba8f9ed5afa0eea78a0577b839812d0d0f54b1db5e415490844
7
- data.tar.gz: 86fe736d56978146e074c396b04fb92d7b747fc5adf3bc2726e5ad80139dc523f522066cf26089fad8b80cedb28f351a5e2a189cfb6af6639dcbd7d61665b9e8
6
+ metadata.gz: 81680f8b162f0851527be19be9a8018ebf34a9a613aab8f7451a9035ba3e8b1146303054810dff9724638ab3bd871965e27a2c030949c85804a2a477e0e6f4f4
7
+ data.tar.gz: 9c5898feafe48a5111c47bdbe99907c2b36eba081ffcc2d89f9e70cdaa9cbc542828f76f10cf6f64ba7d7dc68acb6a44a9793f2f4b0e324b11277b7e4c25fa1d
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # distincter2
2
2
 
3
3
  [![GitHubActions](https://github.com/fartem/distincter2/workflows/Build/badge.svg)](https://github.com/fartem/distincter2/actions?branch=master)
4
+ [![codebeat badge](https://codebeat.co/badges/69d6a564-ddda-495b-9e10-107bf7691fb0)](https://codebeat.co/projects/github-com-fartem-distincter2-master)
4
5
  [![Gem Version](https://badge.fury.io/rb/distincter2.svg)](https://badge.fury.io/rb/distincter2)
5
6
 
6
7
  ## About
@@ -22,6 +23,30 @@ $ distincter2 ./path_to_directory_with_markdown_files
22
23
  $ ./bin/local_distincter2 ./path_to_directory_with_markdown_files
23
24
  ```
24
25
 
26
+ ### Config
27
+
28
+ Add `distincter2_config.d2c` to root of your project and add excluded files line by line. Below you can find examples.
29
+
30
+ #### v1
31
+
32
+ Provides basic list for excluding files by names (without directories).
33
+
34
+ Add `v1`:
35
+
36
+ ```text
37
+ v1
38
+
39
+ BOOKS.md
40
+ DONE.md
41
+ ```
42
+
43
+ Or without `v1`:
44
+
45
+ ```text
46
+ BOOKS.md
47
+ DONE.md
48
+ ```
49
+
25
50
  ## Contributors
26
51
 
27
52
  * [@fartem](https://github.com/fartem) as Artem Fomchenkov
data/bin/distincter2 CHANGED
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ # frozen_string_literal: true
4
+
3
5
  require 'distincter2'
4
6
  require 'colorize'
5
7
 
@@ -1,42 +1,61 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Distincter2
2
4
  # distincter2 checker.
3
5
  # Handles a file and operate them.
4
6
  class D2Checker
5
- # Mute if you don't want to see errors in output
6
- def initialize(mute: false)
7
+ # @param {D2Config} config
8
+ # @param {Boolean} mute
9
+ def initialize(config, mute: false)
10
+ @config = config
7
11
  @mute = mute
8
12
  end
9
13
 
10
- # Check entrypoint.
14
+ # @param {String} path
11
15
  def check(path)
12
16
  duplicates = analyze_dir(path)
17
+
13
18
  exit(duplicates.empty? ? 0 : 1)
14
19
  end
15
20
 
16
- # Analyze given directory with recursion.
21
+ # @param {String} path
22
+ # @return {String[]}
17
23
  # rubocop:disable Metrics/MethodLength
18
24
  def analyze_dir(path)
19
25
  duplicates = []
20
26
  ::Dir.foreach(path).each do |entry|
21
27
  next if entry.start_with?('.')
22
28
 
23
- file = "#{::File.absolute_path(path)}/#{::File.basename(entry)}"
24
- analyze_result = []
29
+ entry_name = ::File.basename(entry)
30
+
31
+ file = "#{::File.absolute_path(path)}/#{entry_name}"
25
32
  if ::File.directory?(file)
26
33
  analyze_result = analyze_dir(file)
27
34
  else
28
35
  next unless entry.end_with?('.md')
29
36
 
37
+ next unless can_analyze(entry_name)
38
+
30
39
  analyze_result = analyze_file(file)
31
40
  end
41
+
32
42
  duplicates += analyze_result unless analyze_result.empty?
33
43
  end
44
+
34
45
  duplicates
35
46
  end
36
47
 
37
48
  # rubocop:enable Metrics/MethodLength
38
49
 
39
- # Analyze given file.
50
+ # @param {String} entry
51
+ def can_analyze(entry)
52
+ return false unless @config.version == 'v1'
53
+
54
+ @config.exclude_paths.none?(entry)
55
+ end
56
+
57
+ # @param {String} path
58
+ # @return {String[]}
40
59
  # rubocop:disable Metrics/MethodLength
41
60
  def analyze_file(path)
42
61
  lines = []
@@ -45,6 +64,7 @@ module Distincter2
45
64
  lines << line if !line.empty? && line.start_with?('-')
46
65
  end
47
66
  end
67
+
48
68
  duplicates = lines.select { |line| lines.count(line) > 1 }
49
69
  .uniq
50
70
  unless @mute
@@ -52,6 +72,7 @@ module Distincter2
52
72
  puts("#{path} : #{duplicate}")
53
73
  end
54
74
  end
75
+
55
76
  duplicates
56
77
  end
57
78
 
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'set'
4
+
5
+ module Distincter2
6
+ # Distincter2 config.
7
+ class D2Config
8
+ # @param {String[]} exclude_paths
9
+ # @param {String} version
10
+ def initialize(exclude_paths, version = 'v1')
11
+ @exclude_paths = exclude_paths.to_set
12
+ @version = version
13
+ end
14
+
15
+ attr_accessor :exclude_paths, :version
16
+ end
17
+
18
+ # D2Config with empty arguments.
19
+ class D2ConfigEmpty < ::Distincter2::D2Config
20
+ # Constructor without paths.
21
+ def initialize
22
+ super([])
23
+ end
24
+ end
25
+
26
+ # D2Config parser.
27
+ class D2ConfigParser
28
+ # @param {String} config_path
29
+ def initialize(config_path)
30
+ @config_path = config_path
31
+ end
32
+
33
+ # @return {D2Config}
34
+ # rubocop:disable Metrics/MethodLength
35
+ def parse
36
+ exclude_paths = []
37
+ version = 'v1'
38
+ ::File.open(@config_path, 'r') do |file|
39
+ file.readlines.each do |line|
40
+ l = line.strip
41
+
42
+ next if l == 'v1'
43
+
44
+ next if l.empty?
45
+
46
+ exclude_paths << l
47
+ end
48
+ end
49
+ ::Distincter2::D2Config.new(exclude_paths, version)
50
+ end
51
+ # rubocop:enable Metrics/MethodLength
52
+ end
53
+ end
data/lib/distincter2.rb CHANGED
@@ -1,12 +1,22 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative './distincter2/checker'
4
+ require_relative './distincter2/config'
2
5
 
3
6
  module Distincter2
4
7
  # distincter2 runner. Just an entrypoint.
5
8
  class Distincter2
6
- # distincter2 starter.
9
+ #
7
10
  # You need a project path to run validation.
8
11
  def start(path)
9
- checker = ::Distincter2::D2Checker.new
12
+ config_path = "#{path}/distincter2_config.d2c"
13
+ checker = ::Distincter2::D2Checker.new(
14
+ if ::File.exist?(config_path)
15
+ ::Distincter2::D2ConfigParser.new(config_path).parse
16
+ else
17
+ ::Distincter2::D2ConfigEmpty.new
18
+ end
19
+ )
10
20
  checker.check(path)
11
21
  end
12
22
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: distincter2
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Artem Fomchenkov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-04-19 00:00:00.000000000 Z
11
+ date: 2023-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -93,6 +93,7 @@ files:
93
93
  - bin/distincter2
94
94
  - lib/distincter2.rb
95
95
  - lib/distincter2/checker.rb
96
+ - lib/distincter2/config.rb
96
97
  homepage: https://github.com/fartem/distincter2
97
98
  licenses:
98
99
  - MIT