calcifer 0.1.1 → 0.4.0
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/.github/workflows/main.yml +41 -0
- data/.rubocop.yml +20 -0
- data/Gemfile +4 -2
- data/Gemfile.lock +30 -1
- data/README.md +9 -1
- data/Rakefile +5 -3
- data/calcifer.gemspec +5 -0
- data/lib/calcifer/builders/root_file_builder.rb +18 -0
- data/lib/calcifer/factories/list_file_factory.rb +47 -0
- data/lib/calcifer/finders/file_related_finder.rb +23 -0
- data/lib/calcifer/finders/files_branch_diff_finder.rb +22 -0
- data/lib/calcifer/finders/module_name_finder.rb +54 -0
- data/lib/calcifer/finders/spec_files_related_finder.rb +6 -12
- data/lib/calcifer/graph/graph_list_file.rb +27 -0
- data/lib/calcifer/graph/root_file.rb +31 -0
- data/lib/calcifer/version.rb +3 -1
- data/lib/calcifer.rb +11 -10
- metadata +41 -5
- data/lib/calcifer/finders/modules_finder.rb +0 -40
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7d116a75730c531b8425c3358f6988fd46c3cf480fa73e6fea53a783ae9db4e
|
4
|
+
data.tar.gz: bcd079c57f89dcdedac1c6d3f43d656a09dff5b14a058b6655a218c76ab6a97e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e12138c209b2a7a49aced35daa7c9f181d0b7668a6066a3a565135480781ff1c12ffe6157d35201f0e9892f97fbe9bc4c756ab41a88a0cfaf992578c6fbe67a6
|
7
|
+
data.tar.gz: 6f2b9e7ca8fe6392804f9a641559ce4df4998734f81bf3b8cd227172860a4486dd222e2d8f6dea67d85cd3d518b49d72e7323db351927e084193efd4b16cf46a
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# This is a basic workflow to help you get started with Actions
|
2
|
+
|
3
|
+
name: CI
|
4
|
+
|
5
|
+
# Controls when the workflow will run
|
6
|
+
on:
|
7
|
+
# Triggers the workflow on push or pull request events but only for the main branch
|
8
|
+
push:
|
9
|
+
branches: [ main ]
|
10
|
+
pull_request:
|
11
|
+
branches: [ main ]
|
12
|
+
|
13
|
+
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
14
|
+
jobs:
|
15
|
+
# This workflow contains a single job called "build"
|
16
|
+
build:
|
17
|
+
# The type of runner that the job will run on
|
18
|
+
runs-on: ubuntu-latest
|
19
|
+
|
20
|
+
steps:
|
21
|
+
- name: Checkout code
|
22
|
+
uses: actions/checkout@v2
|
23
|
+
|
24
|
+
- name: Setup Ruby and install gems
|
25
|
+
uses: actions/setup-ruby@v1
|
26
|
+
with:
|
27
|
+
ruby-version: 2.6
|
28
|
+
|
29
|
+
- name: Build env
|
30
|
+
run: |
|
31
|
+
sudo apt-get -yqq install libpq-dev
|
32
|
+
gem install bundler:1.17.0
|
33
|
+
bundle install
|
34
|
+
|
35
|
+
- name: Run Rspec
|
36
|
+
run: bundle exec rspec
|
37
|
+
- name: Run Rubocop
|
38
|
+
run: bundle exec rubocop
|
39
|
+
|
40
|
+
|
41
|
+
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
AllCops:
|
2
|
+
NewCops: enable
|
3
|
+
Exclude:
|
4
|
+
- 'bin/**/*'
|
5
|
+
- calcifer.gemspec
|
6
|
+
- spec/fixtures/**
|
7
|
+
|
8
|
+
Metrics/ModuleLength:
|
9
|
+
Exclude:
|
10
|
+
- spec/**/*.rb
|
11
|
+
|
12
|
+
Metrics/BlockLength:
|
13
|
+
Exclude:
|
14
|
+
- spec/**/*.rb
|
15
|
+
|
16
|
+
Style/Documentation:
|
17
|
+
Enabled: false
|
18
|
+
|
19
|
+
Metrics/MethodLength:
|
20
|
+
Max: 20
|
data/Gemfile
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
source 'https://rubygems.org'
|
4
|
+
|
5
|
+
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
4
6
|
|
5
7
|
# Specify your gem's dependencies in calcifer.gemspec
|
6
8
|
gemspec
|
data/Gemfile.lock
CHANGED
@@ -1,13 +1,26 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
calcifer (0.
|
4
|
+
calcifer (0.4.0)
|
5
|
+
rgl (~> 0.5.7)
|
5
6
|
|
6
7
|
GEM
|
7
8
|
remote: https://rubygems.org/
|
8
9
|
specs:
|
10
|
+
ast (2.4.2)
|
9
11
|
diff-lcs (1.5.0)
|
12
|
+
generator (0.0.1)
|
13
|
+
lazy_priority_queue (0.1.1)
|
14
|
+
parallel (1.21.0)
|
15
|
+
parser (3.1.0.0)
|
16
|
+
ast (~> 2.4.1)
|
17
|
+
rainbow (3.1.1)
|
10
18
|
rake (10.5.0)
|
19
|
+
regexp_parser (2.2.0)
|
20
|
+
rexml (3.2.5)
|
21
|
+
rgl (0.5.7)
|
22
|
+
lazy_priority_queue (~> 0.1.0)
|
23
|
+
stream (~> 0.5.3)
|
11
24
|
rspec (3.10.0)
|
12
25
|
rspec-core (~> 3.10.0)
|
13
26
|
rspec-expectations (~> 3.10.0)
|
@@ -21,6 +34,21 @@ GEM
|
|
21
34
|
diff-lcs (>= 1.2.0, < 2.0)
|
22
35
|
rspec-support (~> 3.10.0)
|
23
36
|
rspec-support (3.10.3)
|
37
|
+
rubocop (1.25.1)
|
38
|
+
parallel (~> 1.10)
|
39
|
+
parser (>= 3.1.0.0)
|
40
|
+
rainbow (>= 2.2.2, < 4.0)
|
41
|
+
regexp_parser (>= 1.8, < 3.0)
|
42
|
+
rexml
|
43
|
+
rubocop-ast (>= 1.15.1, < 2.0)
|
44
|
+
ruby-progressbar (~> 1.7)
|
45
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
46
|
+
rubocop-ast (1.15.1)
|
47
|
+
parser (>= 3.0.1.1)
|
48
|
+
ruby-progressbar (1.11.0)
|
49
|
+
stream (0.5.3)
|
50
|
+
generator
|
51
|
+
unicode-display_width (2.1.0)
|
24
52
|
|
25
53
|
PLATFORMS
|
26
54
|
ruby
|
@@ -30,6 +58,7 @@ DEPENDENCIES
|
|
30
58
|
calcifer!
|
31
59
|
rake (~> 10.0)
|
32
60
|
rspec (~> 3.0)
|
61
|
+
rubocop (~> 1.25)
|
33
62
|
|
34
63
|
BUNDLED WITH
|
35
64
|
1.17.3
|
data/README.md
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
# Calcifer
|
2
|
+
|
3
|
+
Calcifer helps you find test files that are directly related to the files you changed.
|
2
4
|
## Installation
|
3
5
|
|
4
6
|
Add this line to your application's Gemfile:
|
@@ -17,8 +19,14 @@ Or install it yourself as:
|
|
17
19
|
|
18
20
|
## Usage
|
19
21
|
|
20
|
-
|
22
|
+
To search for related files using uncommitted changes, just do the following
|
23
|
+
|
24
|
+
$ bundle exec calcifer | xargs bundle exec rspec
|
25
|
+
|
26
|
+
To search for related files using the other branch changes as a reference, just do the following
|
27
|
+
|
21
28
|
|
29
|
+
$ bundle exec calcifer -b 'branch_name' | xargs bundle exec rspec
|
22
30
|
## Contributing
|
23
31
|
|
24
32
|
Bug reports and pull requests are welcome on GitHub at https://github.com/GustavoDuarteM/calcifer. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
data/Rakefile
CHANGED
data/calcifer.gemspec
CHANGED
@@ -14,6 +14,8 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.homepage = "https://github.com/GustavoDuarteM/calcifer"
|
15
15
|
spec.license = "MIT"
|
16
16
|
|
17
|
+
spec.required_ruby_version = '>= 2.6.4'
|
18
|
+
|
17
19
|
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
18
20
|
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
19
21
|
if spec.respond_to?(:metadata)
|
@@ -37,7 +39,10 @@ Gem::Specification.new do |spec|
|
|
37
39
|
spec.executables = ['calcifer']
|
38
40
|
spec.require_paths = ["lib"]
|
39
41
|
|
42
|
+
spec.add_dependency 'rgl', "~>0.5.7"
|
43
|
+
|
40
44
|
spec.add_development_dependency "bundler", "~> 1.17"
|
41
45
|
spec.add_development_dependency "rake", "~> 10.0"
|
42
46
|
spec.add_development_dependency "rspec", "~> 3.0"
|
47
|
+
spec.add_development_dependency "rubocop", "~> 1.25"
|
43
48
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Calcifer
|
4
|
+
module Buiders
|
5
|
+
class RootFileBuilder
|
6
|
+
def initialize(file)
|
7
|
+
@file = file
|
8
|
+
end
|
9
|
+
|
10
|
+
def build
|
11
|
+
return unless @file
|
12
|
+
|
13
|
+
module_name = Calcifer::Finders::ModuleNameFinder.new(@file).execute
|
14
|
+
Calcifer::Graph::RootFile.new(module_name, @file) if module_name
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Calcifer
|
4
|
+
module Factories
|
5
|
+
class ListFileFactory
|
6
|
+
PARAM_BRANCH = ['-b', '-branch'].freeze
|
7
|
+
|
8
|
+
def initialize(params)
|
9
|
+
@params = params
|
10
|
+
end
|
11
|
+
|
12
|
+
def fabricate
|
13
|
+
extract_parameters
|
14
|
+
|
15
|
+
return Calcifer::Finders::FilesDiffFinder.new if @branch.nil?
|
16
|
+
|
17
|
+
Calcifer::Finders::FilesBranchDiffFinder.new(@branch)
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def extract_parameters
|
23
|
+
params_list.each do |param|
|
24
|
+
param_branch(param)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def params_list
|
29
|
+
@params_list = []
|
30
|
+
(0..@params.length - 1).step(2) do |num|
|
31
|
+
range = 2 + num
|
32
|
+
@params_list << @params[num..range]
|
33
|
+
end
|
34
|
+
|
35
|
+
@params_list
|
36
|
+
end
|
37
|
+
|
38
|
+
def param_branch(array_param)
|
39
|
+
param, value = array_param
|
40
|
+
|
41
|
+
return unless PARAM_BRANCH.include?(param)
|
42
|
+
|
43
|
+
@branch = value
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Calcifer
|
4
|
+
module Finders
|
5
|
+
class FileRelatedFinder
|
6
|
+
attr_reader :related_spec_files
|
7
|
+
|
8
|
+
def initialize(module_name)
|
9
|
+
@module_name = module_name
|
10
|
+
end
|
11
|
+
|
12
|
+
def execute
|
13
|
+
related_files_path.split
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def related_files_path
|
19
|
+
`grep -Rlw '#{@module_names}' ./app`
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Calcifer
|
4
|
+
module Finders
|
5
|
+
class FilesBranchDiffFinder
|
6
|
+
def initialize(branch)
|
7
|
+
@branch = branch
|
8
|
+
end
|
9
|
+
|
10
|
+
def execute
|
11
|
+
@file_list = git_files.split.map(&lambda { |file_path|
|
12
|
+
file = File.open(file_path)
|
13
|
+
file if file.size.positive? && File.extname(file.path) == '.rb'
|
14
|
+
}).compact
|
15
|
+
end
|
16
|
+
|
17
|
+
def git_files
|
18
|
+
`git diff --name-only #{@branch}...`
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Calcifer
|
4
|
+
module Finders
|
5
|
+
class ModuleNameFinder
|
6
|
+
MODULE_REGEX = /^(module)\s\w+/.freeze
|
7
|
+
CLASS_REGEX = /^(class)\s\w+/.freeze
|
8
|
+
ONE_LINE_CLASS_REGEX = /^(class)\s\w+\s<\s\w+;\s(end)/.freeze
|
9
|
+
attr_reader :modules
|
10
|
+
|
11
|
+
def initialize(file)
|
12
|
+
@file = file
|
13
|
+
@module_name = []
|
14
|
+
end
|
15
|
+
|
16
|
+
def execute
|
17
|
+
return unless @file
|
18
|
+
|
19
|
+
@file.readlines.each do |line|
|
20
|
+
next if one_line_class_definition?(line)
|
21
|
+
|
22
|
+
if module_definition?(line)
|
23
|
+
@module_name << line.gsub('module', '').strip
|
24
|
+
elsif class_definition?(line)
|
25
|
+
@module_name << line.gsub('class', '').gsub(/<(.*)/, '').strip
|
26
|
+
break
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
mount_module_name
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def one_line_class_definition?(line)
|
36
|
+
line.strip.match(ONE_LINE_CLASS_REGEX)&.length&.positive?
|
37
|
+
end
|
38
|
+
|
39
|
+
def module_definition?(line)
|
40
|
+
line.strip.match(MODULE_REGEX)&.length&.positive?
|
41
|
+
end
|
42
|
+
|
43
|
+
def class_definition?(line)
|
44
|
+
line.strip.match(CLASS_REGEX)&.length&.positive?
|
45
|
+
end
|
46
|
+
|
47
|
+
def mount_module_name
|
48
|
+
return unless @module_name.length.positive?
|
49
|
+
|
50
|
+
@module_name.join('::')
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -5,25 +5,19 @@ module Calcifer
|
|
5
5
|
class SpecFilesRelatedFinder
|
6
6
|
attr_reader :related_spec_files
|
7
7
|
|
8
|
-
def initialize(
|
9
|
-
@
|
8
|
+
def initialize(related_files_path)
|
9
|
+
@related_files_path = related_files_path
|
10
10
|
end
|
11
11
|
|
12
12
|
def execute
|
13
13
|
@related_spec_files = specs_to_related_files.join(' ').strip
|
14
14
|
end
|
15
15
|
|
16
|
-
private
|
17
|
-
|
18
|
-
def related_files_path
|
19
|
-
module_names = @modules.join('\\|')
|
20
|
-
`grep -Rlw '#{module_names}' ./app`
|
21
|
-
end
|
22
|
-
|
23
16
|
def specs_to_related_files
|
24
|
-
related_files_path.
|
25
|
-
file_path.gsub('./app', './spec').gsub('.rb', '_spec.rb')
|
26
|
-
|
17
|
+
@related_files_path.map(&lambda { |file_path|
|
18
|
+
spec_file_path = file_path.gsub('./app', './spec').gsub('.rb', '_spec.rb')
|
19
|
+
File.file?(spec_file_path) ? spec_file_path : nil
|
20
|
+
}).compact
|
27
21
|
end
|
28
22
|
end
|
29
23
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Calcifer
|
4
|
+
module Graph
|
5
|
+
class GraphListFile
|
6
|
+
def initialize(file_list)
|
7
|
+
@file_list = file_list
|
8
|
+
end
|
9
|
+
|
10
|
+
def execute
|
11
|
+
graph_list_file = @file_list.map(&->(file) { Calcifer::Buiders::RootFileBuilder.new(file).build }).compact
|
12
|
+
|
13
|
+
graph_list_file.each do |graph|
|
14
|
+
related_files = Calcifer::Finders::FileRelatedFinder.new(graph.module_name).execute
|
15
|
+
graph_vertices = related_files.map { |related_file| [graph.file_path, related_file] }
|
16
|
+
graph.graph_root.add_edges(*graph_vertices)
|
17
|
+
end
|
18
|
+
|
19
|
+
graph_list_file
|
20
|
+
end
|
21
|
+
|
22
|
+
def file_list
|
23
|
+
Calcifer::Finders::FilesDiffFinder.new.execute
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Calcifer
|
4
|
+
module Graph
|
5
|
+
class RootFile
|
6
|
+
attr :graph_root, :module_name, :file_path
|
7
|
+
|
8
|
+
def initialize(module_name, file)
|
9
|
+
@module_name = module_name
|
10
|
+
@file = file
|
11
|
+
@file_path = file.path
|
12
|
+
build_graph_root
|
13
|
+
end
|
14
|
+
|
15
|
+
def add_related_file_path(file_path)
|
16
|
+
@graph_root.add_edge(@file.path, file_path)
|
17
|
+
end
|
18
|
+
|
19
|
+
def related_files_paths
|
20
|
+
@graph_root.vertices - [@file.path]
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def build_graph_root
|
26
|
+
@graph_root = RGL::DirectedAdjacencyGraph.new
|
27
|
+
@graph_root.add_vertex(@file.path)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/calcifer/version.rb
CHANGED
data/lib/calcifer.rb
CHANGED
@@ -1,18 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require '
|
5
|
-
require 'calcifer/finders/files_diff_finder'
|
6
|
-
require 'calcifer/finders/spec_files_related_finder'
|
3
|
+
Dir["#{File.dirname(__FILE__)}/calcifer/**/*.rb"].sort.each { |file| require file }
|
4
|
+
require 'rgl/adjacency'
|
7
5
|
|
8
6
|
module Calcifer
|
9
7
|
class Error < StandardError; end
|
8
|
+
class << self
|
9
|
+
def execute
|
10
|
+
file_list_finder = Calcifer::Factories::ListFileFactory.new(ARGV).fabricate
|
11
|
+
file_list = file_list_finder.execute
|
12
|
+
graph_list_file = Calcifer::Graph::GraphListFile.new(file_list).execute
|
13
|
+
spec_files_path = graph_list_file.map(&:related_files_paths).flatten
|
14
|
+
spec_files_path_list = Calcifer::Finders::SpecFilesRelatedFinder.new(spec_files_path).execute
|
10
15
|
|
11
|
-
|
12
|
-
|
13
|
-
module_list = Calcifer::Finders::ModulesFinder.new(file_list).execute
|
14
|
-
spec_files_path_list = Calcifer::Finders::SpecFilesRelatedFinder.new(module_list).execute
|
15
|
-
|
16
|
-
printf %x[echo #{spec_files_path_list}]
|
16
|
+
printf `echo #{spec_files_path_list}`
|
17
|
+
end
|
17
18
|
end
|
18
19
|
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: calcifer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gustavo Duarte
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rgl
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.5.7
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.5.7
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,6 +66,20 @@ dependencies:
|
|
52
66
|
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '3.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.25'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.25'
|
55
83
|
description:
|
56
84
|
email:
|
57
85
|
- gustavo_dmuniz@yahoo.com.br
|
@@ -60,8 +88,10 @@ executables:
|
|
60
88
|
extensions: []
|
61
89
|
extra_rdoc_files: []
|
62
90
|
files:
|
91
|
+
- ".github/workflows/main.yml"
|
63
92
|
- ".gitignore"
|
64
93
|
- ".rspec"
|
94
|
+
- ".rubocop.yml"
|
65
95
|
- ".travis.yml"
|
66
96
|
- CODE_OF_CONDUCT.md
|
67
97
|
- Gemfile
|
@@ -74,9 +104,15 @@ files:
|
|
74
104
|
- bin/setup
|
75
105
|
- calcifer.gemspec
|
76
106
|
- lib/calcifer.rb
|
107
|
+
- lib/calcifer/builders/root_file_builder.rb
|
108
|
+
- lib/calcifer/factories/list_file_factory.rb
|
109
|
+
- lib/calcifer/finders/file_related_finder.rb
|
110
|
+
- lib/calcifer/finders/files_branch_diff_finder.rb
|
77
111
|
- lib/calcifer/finders/files_diff_finder.rb
|
78
|
-
- lib/calcifer/finders/
|
112
|
+
- lib/calcifer/finders/module_name_finder.rb
|
79
113
|
- lib/calcifer/finders/spec_files_related_finder.rb
|
114
|
+
- lib/calcifer/graph/graph_list_file.rb
|
115
|
+
- lib/calcifer/graph/root_file.rb
|
80
116
|
- lib/calcifer/version.rb
|
81
117
|
homepage: https://github.com/GustavoDuarteM/calcifer
|
82
118
|
licenses:
|
@@ -92,14 +128,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
92
128
|
requirements:
|
93
129
|
- - ">="
|
94
130
|
- !ruby/object:Gem::Version
|
95
|
-
version:
|
131
|
+
version: 2.6.4
|
96
132
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
133
|
requirements:
|
98
134
|
- - ">="
|
99
135
|
- !ruby/object:Gem::Version
|
100
136
|
version: '0'
|
101
137
|
requirements: []
|
102
|
-
rubygems_version: 3.
|
138
|
+
rubygems_version: 3.1.6
|
103
139
|
signing_key:
|
104
140
|
specification_version: 4
|
105
141
|
summary: This gem helps to find class test files related to pending changes in git.
|
@@ -1,40 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Calcifer
|
4
|
-
module Finders
|
5
|
-
class ModulesFinder
|
6
|
-
MODULE_REGEX = /^(module)\s\w+/.freeze
|
7
|
-
CLASS_REGEX = /^(class)\s\w+/.freeze
|
8
|
-
attr_reader :modules
|
9
|
-
|
10
|
-
def initialize(file_list)
|
11
|
-
@file_list = file_list
|
12
|
-
@modules = []
|
13
|
-
end
|
14
|
-
|
15
|
-
def execute
|
16
|
-
@file_list.each do |file|
|
17
|
-
module_name = build_module_name(file)
|
18
|
-
@modules << module_name if module_name.length.positive?
|
19
|
-
end
|
20
|
-
@modules
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def build_module_name(file)
|
26
|
-
# TODO add clause to one line defnition as "class Error < StandardError; end"
|
27
|
-
module_name = ''
|
28
|
-
file.readlines.each do |line|
|
29
|
-
if line.strip.match(MODULE_REGEX)&.length&.positive?
|
30
|
-
module_name += "#{line.gsub('module', '').strip}::"
|
31
|
-
elsif line.strip.match(CLASS_REGEX)&.length&.positive?
|
32
|
-
module_name += line.gsub('class', '').gsub(/<(.*)/, '').strip
|
33
|
-
break
|
34
|
-
end
|
35
|
-
end
|
36
|
-
module_name
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|