distincter2 1.3.0 → 1.3.2

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: 9ffd3065d97f5ea86eaa09c2a0a12f1d86bbce35409c8469ae4a3593284d831a
4
- data.tar.gz: 40b4baf7cddb4ce8123442a7efb7b6e3c21a7a07236e0c3fe523877bc1c8901e
3
+ metadata.gz: e7356757437f888b0a6ab4054086150075337e10a56bd32c970bd2bd1e6c5687
4
+ data.tar.gz: 385dddc273aab58dad6002c533feeb72002f886fdb82ef45ce35f12a8d7179f3
5
5
  SHA512:
6
- metadata.gz: 238b6ca822da1fe8752e8dfbeea444cccf51ac237f9e044543ac92552d012bd4c330d4798bcd666e758b372bd5ad21c585abf8539f8ad41afe976780c79833bc
7
- data.tar.gz: f526bdee7e4be1bebd6af837d223bef292c67c7b34d7a7078afa3d8def5722d11d1b88cc120e4b669c94927dbed3f324cf3d3f500b89f77a16406c9dd362e7e6
6
+ metadata.gz: 20c5b2ea990ec92ead8e5b0808ab0ce1cb75f2dc3bc0075c3945e1f40e5cfb5cc5fc17cfbe13368d34817841455d81c799103a615746665a0fa472c3759fa867
7
+ data.tar.gz: a8d452f076387b8087486e251adfdf9d43033213da477f8ff3ddacfceee6c212d70f3717ecb40369a9a5e0d3e25eeee62738788c6be162a00473b2c80a4f1e5e
data/README.md CHANGED
@@ -25,13 +25,49 @@ $ ./bin/local_distincter2 ./path_to_directory_with_markdown_files
25
25
 
26
26
  ### Config
27
27
 
28
- Add `distincter2_config.d2c` to root of your project and add excluded files line by line:
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`:
29
35
 
30
36
  ```text
37
+ v1
38
+
31
39
  BOOKS.md
32
40
  DONE.md
33
41
  ```
34
42
 
43
+ Or without `v1`:
44
+
45
+ ```text
46
+ BOOKS.md
47
+ DONE.md
48
+ ```
49
+
50
+ ## How to contribute
51
+
52
+ ### Documentation
53
+
54
+ Just run:
55
+
56
+ ```shell
57
+ $ rdoc
58
+ ```
59
+
60
+ ### Contribution
61
+
62
+ Read [Commit Convention](./COMMIT_CONVENTION.md). Make sure your build is green before you contribute your pull request.
63
+ Then:
64
+
65
+ ```shell
66
+ $ bundle exec rake
67
+ ```
68
+
69
+ If you don't see any error messages, submit your pull request.
70
+
35
71
  ## Contributors
36
72
 
37
73
  * [@fartem](https://github.com/fartem) as Artem Fomchenkov
@@ -1,26 +1,31 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Distincter2
4
- # distincter2 checker.
5
- # Handles a file and operate them.
4
+ # Class to check for duplicate lines in markdown files
6
5
  class D2Checker
7
- # @param {D2Config} config
8
- # @param {Boolean} mute
6
+ # Initialize the D2Checker with a configuration object and an optional mute flag
7
+ #
8
+ # @param config [Object] The configuration object containing settings for the checker
9
+ # @param mute [Boolean] A flag indicating whether to mute the output of duplicate lines (default: false)
9
10
  def initialize(config, mute: false)
10
11
  @config = config
11
12
  @mute = mute
12
13
  end
13
14
 
14
- # @param {String} path
15
+ # Check for duplicate lines in markdown files within a given directory
16
+ #
17
+ # @param path [String] The path to the directory to check
18
+ # @return [Array] An array of duplicate lines found in the markdown files
15
19
  def check(path)
16
20
  duplicates = analyze_dir(path)
17
21
 
18
22
  exit(duplicates.empty? ? 0 : 1)
19
23
  end
20
24
 
21
- # @param {String} path
22
- # @return {String[]}
23
- # rubocop:disable Metrics/MethodLength
25
+ # Recursively analyze a directory for duplicate lines in markdown files
26
+ #
27
+ # @param path [String] The path to the directory to analyze
28
+ # @return [Array] An array of duplicate lines found in the markdown files
24
29
  def analyze_dir(path)
25
30
  duplicates = []
26
31
  ::Dir.foreach(path).each do |entry|
@@ -34,7 +39,7 @@ module Distincter2
34
39
  else
35
40
  next unless entry.end_with?('.md')
36
41
 
37
- next if @config.exclude_paths.include?(entry_name)
42
+ next unless can_analyze(entry_name)
38
43
 
39
44
  analyze_result = analyze_file(file)
40
45
  end
@@ -45,11 +50,20 @@ module Distincter2
45
50
  duplicates
46
51
  end
47
52
 
48
- # rubocop:enable Metrics/MethodLength
53
+ # Check if a file can be analyzed based on the configuration settings
54
+ #
55
+ # @param entry [String] The name of the file to check
56
+ # @return [Boolean] True if the file can be analyzed, false otherwise
57
+ def can_analyze(entry)
58
+ return false unless @config.version == 'v1'
49
59
 
50
- # @param {String} path
51
- # @return {String[]}
52
- # rubocop:disable Metrics/MethodLength
60
+ @config.exclude_paths.none?(entry)
61
+ end
62
+
63
+ # Analyze a markdown file for duplicate lines
64
+ #
65
+ # @param path [String] The path to the markdown file to analyze
66
+ # @return [Array] An array of duplicate lines found in the markdown file
53
67
  def analyze_file(path)
54
68
  lines = []
55
69
  ::File.open(path, 'r') do |file|
@@ -68,7 +82,5 @@ module Distincter2
68
82
 
69
83
  duplicates
70
84
  end
71
-
72
- # rubocop:enable Metrics/MethodLength
73
85
  end
74
86
  end
@@ -3,38 +3,71 @@
3
3
  require 'set'
4
4
 
5
5
  module Distincter2
6
- # Distincter2 config.
6
+ # Class representing the configuration for Distincter2.
7
7
  class D2Config
8
- # @param {String[]} exclude_paths
9
- def initialize(exclude_paths)
8
+ # Initializes a new instance of D2Config.
9
+ #
10
+ # @param exclude_paths [Array<String>] An array of paths to be excluded.
11
+ # @param version [String] The version of the configuration. Default is 'v1'.
12
+ def initialize(exclude_paths, version = 'v1')
10
13
  @exclude_paths = exclude_paths.to_set
14
+ @version = version
11
15
  end
12
16
 
17
+ # Accessor for the exclude_paths attribute.
18
+ #
19
+ # @return [Set<String>] The set of paths to be excluded.
13
20
  attr_accessor :exclude_paths
21
+
22
+ # Accessor for the version attribute.
23
+ #
24
+ # @return [String] The version of the configuration.
25
+ attr_accessor :version
14
26
  end
15
27
 
16
- # D2Config with empty arguments.
17
- class D2ConfigEmpty < ::Distincter2::D2Config
28
+ # Class representing an empty configuration for Distincter2.
29
+ # This class inherits from D2Config and initializes with an empty array of exclude_paths.
30
+ class D2EmptyConfig < ::Distincter2::D2Config
18
31
  # Constructor without paths.
32
+ #
33
+ # @return [void]
19
34
  def initialize
35
+ # Calls the parent class's initialize method with an empty array of exclude_paths.
20
36
  super([])
21
37
  end
22
38
  end
23
39
 
24
- # D2Config parser.
40
+ # Class representing a parser for Distincter2 configuration files.
25
41
  class D2ConfigParser
26
- # @param {String} config_path
42
+ # Initializes a new instance of D2ConfigParser.
43
+ #
44
+ # @param config_path [String] The path to the configuration file.
27
45
  def initialize(config_path)
28
46
  @config_path = config_path
29
47
  end
30
48
 
31
- # @return {D2Config}
49
+ # Parses the configuration file and returns a D2Config object.
50
+ #
51
+ # @return [Distincter2::D2Config] A D2Config object representing the parsed configuration.
32
52
  def parse
33
53
  exclude_paths = []
54
+ version = 'v1'
55
+
56
+ # Open the configuration file and read its lines.
34
57
  ::File.open(@config_path, 'r') do |file|
35
- exclude_paths += file.readlines.map(&:strip)
58
+ file.readlines.each do |line|
59
+ l = line.strip
60
+
61
+ # Skip lines that contain the version number or are empty.
62
+ next if l == 'v1' || l.empty?
63
+
64
+ # Add the non-empty, non-version lines to the exclude_paths array.
65
+ exclude_paths << l
66
+ end
36
67
  end
37
- ::Distincter2::D2Config.new(exclude_paths)
68
+
69
+ # Create a new D2Config object with the parsed exclude_paths and version.
70
+ ::Distincter2::D2Config.new(exclude_paths, version)
38
71
  end
39
72
  end
40
73
  end
data/lib/distincter2.rb CHANGED
@@ -5,18 +5,35 @@ require_relative './distincter2/config'
5
5
 
6
6
  module Distincter2
7
7
  # distincter2 runner. Just an entrypoint.
8
+ # This class represents the main entry point for the Distincter2 runner.
8
9
  class Distincter2
10
+ # This method starts the validation process for a given project path.
9
11
  #
10
- # You need a project path to run validation.
12
+ # @param path [String] The path to the project directory.
13
+ # @return [void]
14
+ #
15
+ # @example
16
+ # # Create an instance of Distincter2
17
+ # distincter = Distincter2.new
18
+ #
19
+ # # Start the validation process for a project located at '/path/to/project'
20
+ # distincter.start('/path/to/project')
11
21
  def start(path)
22
+ # Construct the path to the distincter2_config.d2c file
12
23
  config_path = "#{path}/distincter2_config.d2c"
24
+
25
+ # Create a new D2Checker instance with the appropriate configuration
13
26
  checker = ::Distincter2::D2Checker.new(
14
27
  if ::File.exist?(config_path)
28
+ # If the config file exists, parse it and use the parsed configuration
15
29
  ::Distincter2::D2ConfigParser.new(config_path).parse
16
30
  else
17
- ::Distincter2::D2ConfigEmpty.new
31
+ # If the config file does not exist, use an empty configuration
32
+ ::Distincter2::D2EmptyConfig.new
18
33
  end
19
34
  )
35
+
36
+ # Run the validation process using the checker
20
37
  checker.check(path)
21
38
  end
22
39
  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.3.0
4
+ version: 1.3.2
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-09-14 00:00:00.000000000 Z
11
+ date: 2024-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize