cobra_commander 0.5.0 → 0.8.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.
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CobraCommander
4
- VERSION = "0.5.0"
4
+ VERSION = "0.8.0"
5
5
  end
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": [
3
+ "config:base"
4
+ ],
5
+ "ignorePaths": [
6
+ "spec/fixtures"
7
+ ]
8
+ }
metadata CHANGED
@@ -1,30 +1,51 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cobra_commander
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Langfeld
8
8
  - Garett Arrowood
9
+ - Carlos Palhares
9
10
  autorequire:
10
11
  bindir: exe
11
12
  cert_chain: []
12
- date: 2018-09-20 00:00:00.000000000 Z
13
+ date: 2020-07-27 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
- name: thor
16
+ name: bundler
16
17
  requirement: !ruby/object:Gem::Requirement
17
18
  requirements:
18
19
  - - "~>"
19
20
  - !ruby/object:Gem::Version
20
- version: 0.19.4
21
+ version: '1.17'
21
22
  type: :runtime
22
23
  prerelease: false
23
24
  version_requirements: !ruby/object:Gem::Requirement
24
25
  requirements:
25
26
  - - "~>"
26
27
  - !ruby/object:Gem::Version
27
- version: 0.19.4
28
+ version: '1.17'
29
+ - !ruby/object:Gem::Dependency
30
+ name: thor
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "<"
34
+ - !ruby/object:Gem::Version
35
+ version: '2.0'
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: 0.18.1
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - "<"
44
+ - !ruby/object:Gem::Version
45
+ version: '2.0'
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: 0.18.1
28
49
  - !ruby/object:Gem::Dependency
29
50
  name: ruby-graphviz
30
51
  requirement: !ruby/object:Gem::Requirement
@@ -45,14 +66,14 @@ dependencies:
45
66
  requirements:
46
67
  - - "~>"
47
68
  - !ruby/object:Gem::Version
48
- version: '1.13'
69
+ version: '1.17'
49
70
  type: :development
50
71
  prerelease: false
51
72
  version_requirements: !ruby/object:Gem::Requirement
52
73
  requirements:
53
74
  - - "~>"
54
75
  - !ruby/object:Gem::Version
55
- version: '1.13'
76
+ version: '1.17'
56
77
  - !ruby/object:Gem::Dependency
57
78
  name: rake
58
79
  requirement: !ruby/object:Gem::Requirement
@@ -144,11 +165,13 @@ description: |
144
165
  email:
145
166
  - blangfeld@powerhrg.com
146
167
  - garett.arrowood@powerhrg.com
168
+ - carlos.palhares@powerhrg.com
147
169
  executables:
148
170
  - cobra
149
171
  extensions: []
150
172
  extra_rdoc_files: []
151
173
  files:
174
+ - ".editorconfig"
152
175
  - ".gitignore"
153
176
  - ".rspec"
154
177
  - ".rubocop.yml"
@@ -169,11 +192,20 @@ files:
169
192
  - lib/cobra_commander/affected.rb
170
193
  - lib/cobra_commander/change.rb
171
194
  - lib/cobra_commander/cli.rb
172
- - lib/cobra_commander/component_tree.rb
195
+ - lib/cobra_commander/component.rb
196
+ - lib/cobra_commander/dependencies.rb
197
+ - lib/cobra_commander/dependencies/bundler.rb
198
+ - lib/cobra_commander/dependencies/yarn/package.rb
199
+ - lib/cobra_commander/dependencies/yarn/package_repo.rb
200
+ - lib/cobra_commander/dependencies/yarn_workspace.rb
173
201
  - lib/cobra_commander/executor.rb
174
- - lib/cobra_commander/graph.rb
175
202
  - lib/cobra_commander/output.rb
203
+ - lib/cobra_commander/output/ascii_tree.rb
204
+ - lib/cobra_commander/output/flat_list.rb
205
+ - lib/cobra_commander/output/graph_viz.rb
206
+ - lib/cobra_commander/umbrella.rb
176
207
  - lib/cobra_commander/version.rb
208
+ - renovate.json
177
209
  homepage: http://tech.powerhrg.com/cobra_commander/
178
210
  licenses:
179
211
  - MIT
@@ -194,7 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
194
226
  version: '0'
195
227
  requirements: []
196
228
  rubyforge_project:
197
- rubygems_version: 2.7.7
229
+ rubygems_version: 2.7.3
198
230
  signing_key:
199
231
  specification_version: 4
200
232
  summary: Tools for working with Component Based Rails Apps
@@ -1,168 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "bundler"
4
- require "json"
5
-
6
- module CobraCommander
7
- # Represents a dependency tree in a given context
8
- class ComponentTree
9
- attr_reader :name, :path
10
-
11
- def initialize(name, path, ancestry = Set.new)
12
- @name = name
13
- @path = path
14
- @ancestry = ancestry
15
- @ruby = Ruby.new(path)
16
- @js = Js.new(path)
17
- @type = type_of_component
18
- end
19
-
20
- def flatten
21
- _flatten(self)
22
- end
23
-
24
- def subtree(name)
25
- _subtree(name, self)
26
- end
27
-
28
- def depends_on?(component_name)
29
- dependencies.any? do |component|
30
- component.name == component_name || component.depends_on?(component_name)
31
- end
32
- end
33
-
34
- def dependents_of(component_name)
35
- depends = depends_on?(component_name) ? self : nil
36
- dependents_below = dependencies.map do |component|
37
- component.dependents_of(component_name)
38
- end
39
- [depends, dependents_below].flatten.compact.uniq(&:name)
40
- end
41
-
42
- def to_h
43
- {
44
- name: @name,
45
- path: path,
46
- type: @type,
47
- ancestry: @ancestry,
48
- dependencies: dependencies.map(&:to_h),
49
- }
50
- end
51
-
52
- def dependencies
53
- @deps ||= begin
54
- deps = @ruby.dependencies + @js.dependencies
55
- deps.sort_by { |dep| dep[:name] }
56
- .map(&method(:dep_representation))
57
- end
58
- end
59
-
60
- private
61
-
62
- def _flatten(component)
63
- component.dependencies.map do |dep|
64
- [dep] + _flatten(dep)
65
- end.flatten.uniq(&:name)
66
- end
67
-
68
- def _subtree(name, tree)
69
- return tree if tree.name == name
70
- tree.dependencies.each do |component|
71
- return _subtree(name, component)
72
- end
73
- end
74
-
75
- def type_of_component
76
- return "Ruby & JS" if @ruby.gem? && @js.node?
77
- return "Ruby" if @ruby.gem?
78
- return "JS" if @js.node?
79
- end
80
-
81
- def dep_representation(dep)
82
- full_path = File.expand_path(File.join(path, dep[:path]))
83
- ancestry = @ancestry + [{ name: @name, path: path, type: @type }]
84
- ComponentTree.new(dep[:name], full_path, ancestry)
85
- end
86
-
87
- # Calculates ruby dependencies
88
- class Ruby
89
- def initialize(root_path)
90
- @root_path = root_path
91
- end
92
-
93
- def dependencies
94
- @deps ||= begin
95
- return [] unless gem?
96
- gems = bundler_definition.dependencies.select { |dep| path?(dep.source) }
97
- format(gems)
98
- end
99
- end
100
-
101
- def path?(source)
102
- return if source.nil?
103
- source_has_path = source.respond_to?(:path?) ? source.path? : source.is_a_path?
104
- source_has_path && source.path.to_s != "."
105
- end
106
-
107
- def format(deps)
108
- deps.map do |dep|
109
- path = File.join(dep.source.path, dep.name)
110
- { name: dep.name, path: path }
111
- end
112
- end
113
-
114
- def gem?
115
- @gem ||= File.exist?(gemfile_path)
116
- end
117
-
118
- def bundler_definition
119
- ::Bundler::Definition.build(gemfile_path, gemfile_lock_path, nil)
120
- end
121
-
122
- def gemfile_path
123
- File.join(@root_path, "Gemfile")
124
- end
125
-
126
- def gemfile_lock_path
127
- File.join(@root_path, "Gemfile.lock")
128
- end
129
- end
130
-
131
- # Calculates js dependencies
132
- class Js
133
- def initialize(root_path)
134
- @root_path = root_path
135
- end
136
-
137
- def dependencies
138
- @deps ||= begin
139
- return [] unless node?
140
- json = JSON.parse(File.read(package_json_path))
141
- format combined_deps(json)
142
- end
143
- end
144
-
145
- def format(deps)
146
- return [] if deps.nil?
147
- linked_deps = deps.select { |_, v| v.start_with? "link:" }
148
- linked_deps.map do |_, v|
149
- relational_path = v.split("link:")[1]
150
- dep_name = relational_path.split("/")[-1]
151
- { name: dep_name, path: relational_path }
152
- end
153
- end
154
-
155
- def node?
156
- @node ||= File.exist?(package_json_path)
157
- end
158
-
159
- def package_json_path
160
- File.join(@root_path, "package.json")
161
- end
162
-
163
- def combined_deps(json)
164
- Hash(json["dependencies"]).merge(Hash(json["devDependencies"]))
165
- end
166
- end
167
- end
168
- end
@@ -1,46 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "graphviz"
4
- require "cobra_commander/component_tree"
5
-
6
- module CobraCommander
7
- # Generates graphs of components
8
- class Graph
9
- def initialize(app_path, format)
10
- @format = format
11
- @tree = CobraCommander.umbrella_tree(app_path).to_h
12
- end
13
-
14
- def generate!
15
- return unless valid_format?
16
-
17
- g = GraphViz.new(:G, type: :digraph, concentrate: true)
18
-
19
- app_node = g.add_nodes(@tree[:name])
20
- map_nodes(g, app_node, @tree)
21
- output(g)
22
- end
23
-
24
- private
25
-
26
- def map_nodes(g, parent_node, tree)
27
- tree[:dependencies].each do |dep|
28
- node = g.find_node(dep[:name]) || g.add_nodes(dep[:name])
29
- g.add_edges(parent_node, node)
30
- map_nodes(g, node, dep)
31
- end
32
- end
33
-
34
- def output(g)
35
- graph = "graph.#{@format}"
36
- g.output(@format => graph)
37
- puts "Graph generated at #{`pwd`.chomp}/#{graph}"
38
- end
39
-
40
- def valid_format?
41
- return true if @format == "png" || @format == "dot"
42
- puts "FORMAT must be 'png' or 'dot'"
43
- false
44
- end
45
- end
46
- end