calcifer 0.1.1 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b0c1bdeaf9f49017bb6f2aff22d00c18f7bb68557214065f9ace1eba6c5d2751
4
- data.tar.gz: 0f7feb93dfceeb89a75c507111e283d846f71e1c025e520333511a320b1c33b0
3
+ metadata.gz: a959bb4f96beb91315e7571c4e0b6c6d40e6c9225f545d063b9fc2f3ed926d9a
4
+ data.tar.gz: 54a53e3d1dcb91bcbd20aac7ffe794d4b22867508a76d66e3066afb16b057321
5
5
  SHA512:
6
- metadata.gz: a7f917e7934082a97c5b230dd6b41003cfcd7da2f8e13657dd705bf868497f538c28b27073af41c8fb05cb274d49c60ad669ff3a95e6d5615423fc861ee5ec20
7
- data.tar.gz: a81969f58b5f626d64119bff0f938d11e7d2c1a98d1d759991f54c3b60af205dd63f75013ab9791f7fa49c476ccc194d3e57920924a81ac941d1a8016ae564ef
6
+ metadata.gz: b522e099b19572387281ae0d987adcd796e98e3cc47e88115e2a06437a6a1d6bdf9dddd8462a81876f241c1b2a762d656138c35c31b564eff1bbfef40fe6639c
7
+ data.tar.gz: f98d7b8431f5ef378950ddddff0323abb846d7951b7ac68f875516e5e1307d7a3eeeadcf8f00eae9ac4b4d70aa7b28694496d67d8ea055f4214feaad31644e61
data/Gemfile.lock CHANGED
@@ -1,13 +1,19 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- calcifer (0.1.1)
4
+ calcifer (0.2.1)
5
+ rgl
5
6
 
6
7
  GEM
7
8
  remote: https://rubygems.org/
8
9
  specs:
9
10
  diff-lcs (1.5.0)
11
+ generator (0.0.1)
12
+ lazy_priority_queue (0.1.1)
10
13
  rake (10.5.0)
14
+ rgl (0.5.7)
15
+ lazy_priority_queue (~> 0.1.0)
16
+ stream (~> 0.5.3)
11
17
  rspec (3.10.0)
12
18
  rspec-core (~> 3.10.0)
13
19
  rspec-expectations (~> 3.10.0)
@@ -21,6 +27,8 @@ GEM
21
27
  diff-lcs (>= 1.2.0, < 2.0)
22
28
  rspec-support (~> 3.10.0)
23
29
  rspec-support (3.10.3)
30
+ stream (0.5.3)
31
+ generator
24
32
 
25
33
  PLATFORMS
26
34
  ruby
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,6 +39,8 @@ Gem::Specification.new do |spec|
37
39
  spec.executables = ['calcifer']
38
40
  spec.require_paths = ["lib"]
39
41
 
42
+ spec.add_dependency 'rgl'
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"
@@ -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,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
@@ -2,30 +2,23 @@
2
2
 
3
3
  module Calcifer
4
4
  module Finders
5
- class ModulesFinder
5
+ class ModuleNameFinder
6
6
  MODULE_REGEX = /^(module)\s\w+/.freeze
7
7
  CLASS_REGEX = /^(class)\s\w+/.freeze
8
+ ONE_LINE_CLASS_REGEX = /^(class)\s\w+\s<\s\w+;\s(end)/.freeze
8
9
  attr_reader :modules
9
10
 
10
- def initialize(file_list)
11
- @file_list = file_list
12
- @modules = []
11
+ def initialize(file)
12
+ @file = file
13
13
  end
14
14
 
15
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
16
+ return unless @file
24
17
 
25
- def build_module_name(file)
26
- # TODO add clause to one line defnition as "class Error < StandardError; end"
27
18
  module_name = ''
28
- file.readlines.each do |line|
19
+ @file.readlines.each do |line|
20
+ next if line.strip.match(ONE_LINE_CLASS_REGEX)&.length&.positive?
21
+
29
22
  if line.strip.match(MODULE_REGEX)&.length&.positive?
30
23
  module_name += "#{line.gsub('module', '').strip}::"
31
24
  elsif line.strip.match(CLASS_REGEX)&.length&.positive?
@@ -33,7 +26,8 @@ module Calcifer
33
26
  break
34
27
  end
35
28
  end
36
- module_name
29
+
30
+ module_name.length.positive? ? module_name : nil
37
31
  end
38
32
  end
39
33
  end
@@ -5,25 +5,19 @@ module Calcifer
5
5
  class SpecFilesRelatedFinder
6
6
  attr_reader :related_spec_files
7
7
 
8
- def initialize(modules)
9
- @modules = modules
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.split.map(&lambda { |file_path|
25
- file_path.gsub('./app', './spec').gsub('.rb', '_spec.rb')
26
- }).select { |file_path_spec| File.file?(file_path_spec) }
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,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
@@ -1,3 +1,3 @@
1
1
  module Calcifer
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.1"
3
3
  end
data/lib/calcifer.rb CHANGED
@@ -1,18 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'calcifer/version'
4
- require 'calcifer/finders/modules_finder'
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
10
8
 
11
9
  def self.execute
12
10
  file_list = Calcifer::Finders::FilesDiffFinder.new.execute
13
- module_list = Calcifer::Finders::ModulesFinder.new(file_list).execute
14
- spec_files_path_list = Calcifer::Finders::SpecFilesRelatedFinder.new(module_list).execute
11
+ graph_list_file = file_list.map(&->(file) { Calcifer::Buiders::RootFileBuilder.new(file).build }).compact
15
12
 
16
- printf %x[echo #{spec_files_path_list}]
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
+ spec_files_path = graph_list_file.map(&:related_files_paths).flatten
20
+ spec_files_path_list = Calcifer::Finders::SpecFilesRelatedFinder.new(spec_files_path).execute
21
+
22
+ printf `echo #{spec_files_path_list}`
17
23
  end
18
24
  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.1.1
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gustavo Duarte
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-29 00:00:00.000000000 Z
11
+ date: 2022-01-05 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'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -74,9 +88,12 @@ files:
74
88
  - bin/setup
75
89
  - calcifer.gemspec
76
90
  - lib/calcifer.rb
91
+ - lib/calcifer/builders/root_file_builder.rb
92
+ - lib/calcifer/finders/file_related_finder.rb
77
93
  - lib/calcifer/finders/files_diff_finder.rb
78
- - lib/calcifer/finders/modules_finder.rb
94
+ - lib/calcifer/finders/module_name_finder.rb
79
95
  - lib/calcifer/finders/spec_files_related_finder.rb
96
+ - lib/calcifer/graph/root_file.rb
80
97
  - lib/calcifer/version.rb
81
98
  homepage: https://github.com/GustavoDuarteM/calcifer
82
99
  licenses:
@@ -92,7 +109,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
92
109
  requirements:
93
110
  - - ">="
94
111
  - !ruby/object:Gem::Version
95
- version: '0'
112
+ version: 2.6.4
96
113
  required_rubygems_version: !ruby/object:Gem::Requirement
97
114
  requirements:
98
115
  - - ">="