cobra_commander 0.8.0 → 0.10.0

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: 6f1de2b5ceb4fbde7dcd12fd71606c55cdd733e6928e4c6a866dfc1f3ec65af3
4
- data.tar.gz: 5a9537dabd13b974df919be911755debf92761b6bdf99b370c59cec2c8fc09af
3
+ metadata.gz: aef5fdfc5c3d583b0b70080e497ee97bc63d25ddcbd0e71fedb1574a73acd0fe
4
+ data.tar.gz: d99e9e310fb9958fdd6b15ff057be095b7249a0f37d639048db971d4cd7bf336
5
5
  SHA512:
6
- metadata.gz: 58f066894063d46d3b1c25baf2b085f3212db9ac716eee5c8ef6c2465c82233f06fae79e30c04205d95b75551799cd3f1c67901a60a516bf079e2cb154baa2b2
7
- data.tar.gz: 99babd4c1ae0b5e218ed913bf175cbd38d4efe4bc19d11ea108d8f914c9f3381a7f43bb6c8a4d64171bec648e5c5e8441c39c30f5c3a83f11e0c9f1aa4e0948b
6
+ metadata.gz: a3b8ba0d25eb81df0be99c7dfa06a81b87cd1f1233984d622f5a17d15ff672e50e2fa853e724bbea9038220c15fb5e507f0dffa05c605837f550198a5f9643c7
7
+ data.tar.gz: 7b9dbf8804a4d34e7fa083579917b580807ff92e4896a7db177844545f022392590a96500b31fdf2eb89aecd92e1599187cacd506eb0640d2b2fbc766afe5c56
@@ -0,0 +1,47 @@
1
+ name: CI
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ test:
7
+ name: Tests
8
+ runs-on: ubuntu-latest
9
+ strategy:
10
+ fail-fast: false
11
+ matrix:
12
+ ruby:
13
+ - "2.5"
14
+ - "2.6"
15
+ - "2.7"
16
+ bundler:
17
+ - "1"
18
+ - "2"
19
+ env:
20
+ BUNDLE_GEMFILE: gemfiles/bundler${{ matrix.bundler }}.gemfile
21
+ steps:
22
+ - uses: actions/checkout@v2
23
+ - name: Set up Ruby
24
+ uses: ruby/setup-ruby@v1
25
+ with:
26
+ ruby-version: ${{ matrix.ruby }}
27
+ bundler: ${{ matrix.bundler }}
28
+ bundler-cache: true
29
+ - name: Install bundler v1 # Even if we're testing bundler v2, we need v1 available because the fixture components have it in their Gemfile.locks
30
+ run: gem install bundler -v "~> 1" --no-document
31
+ - name: Install Graphviz
32
+ run: sudo apt -qq install graphviz
33
+ - name: Run tests
34
+ run: bundle exec rake spec
35
+ lint:
36
+ name: Lint Ruby
37
+ runs-on: ubuntu-latest
38
+ steps:
39
+ - uses: actions/checkout@v2
40
+ - name: rubocop
41
+ uses: reviewdog/action-rubocop@v1
42
+ with:
43
+ rubocop_version: 0.88.0
44
+ filter_mode: nofilter
45
+ fail_on_error: true
46
+ rubocop_extensions: ""
47
+ github_token: ${{ secrets.github_token }}
data/.gitignore CHANGED
@@ -13,3 +13,6 @@
13
13
  /spec/fixtures/app/node_manifest/node_modules/
14
14
  /spec/fixtures/app/components/*/node_modules/
15
15
  /tmp/
16
+
17
+ .bundle
18
+ gemfiles/*.lock
data/.rubocop.yml CHANGED
@@ -1,50 +1,20 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.3
3
-
4
- Metrics/LineLength:
5
- Max: 120
2
+ TargetRubyVersion: 2.5
3
+ NewCops: enable
6
4
 
7
5
  Metrics/BlockLength:
8
6
  Exclude:
9
7
  - spec/**/*.rb
10
8
  - cobra_commander.gemspec
11
9
 
12
- Metrics/ClassLength:
13
- Exclude:
14
- - spec/**/*.rb
15
- - cobra_commander.gemspec
16
-
17
- Style/AccessModifierIndentation:
10
+ Layout/AccessModifierIndentation:
18
11
  EnforcedStyle: outdent
19
12
 
20
- Style/Documentation:
21
- Enabled: true
22
-
23
- Style/ExtraSpacing:
24
- Exclude:
25
- - cobra_commander.gemspec
26
-
27
- Style/SpaceAroundOperators:
28
- Exclude:
29
- - cobra_commander.gemspec
30
-
31
- Style/Lambda:
32
- EnforcedStyle: literal
33
-
34
- Style/PercentLiteralDelimiters:
35
- PreferredDelimiters:
36
- default: ()
37
- '%i': '[]'
38
- '%I': '[]'
39
- '%r': '{}'
40
- '%w': '[]'
41
- '%W': '[]'
42
-
43
- # Single quotes being faster is hardly measurable and only affects parse time.
44
- # Enforcing double quotes reduces the times where you need to change them when introducing an interpolation.
45
- # Use single quotes only if their semantics are needed.
46
13
  Style/StringLiterals:
47
14
  EnforcedStyle: double_quotes
48
15
 
49
- Style/TrailingCommaInLiteral:
50
- EnforcedStyleForMultiline: comma
16
+ Style/TrailingCommaInArrayLiteral:
17
+ EnforcedStyleForMultiline: consistent_comma
18
+
19
+ Style/TrailingCommaInHashLiteral:
20
+ EnforcedStyleForMultiline: consistent_comma
data/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## Version 0.9.0 - 2020-08-26
6
+
7
+ * Add support for parallel task execution to `cobra exec`.
8
+
9
+ ## Version 0.8.1 - 2020-07-29
10
+
11
+ * Fix CobraCommander::Executor when running [`bundler`](https://bundler.io/) based commands (i.e.: `bundle exec rspec`)
12
+
5
13
  ## Version 0.8 - 2020-07-21
6
14
 
7
15
  * Standardize Cobra CLI options
data/Gemfile CHANGED
@@ -2,5 +2,4 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- # Specify your gem's dependencies in cbra.gemspec
6
5
  gemspec
data/README.md CHANGED
@@ -136,6 +136,14 @@ After checking out the repo, run `bin/setup` to install dependencies. You will a
136
136
 
137
137
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
138
138
 
139
+ ### Bundled App
140
+
141
+ In order to maintain the features around umbrella apps and specially `changes`, a bundled [`umbrella app repo`](spec/fixtures/app.tgz) is included in this repository. This repo is compacted by `tar`/`gzip` in order to keep isolation, the format was chosen to avoid issues described in https://github.com/swcarpentry/git-novice/issues/272. To avoid the same issues, the workflow for this fixture app is the following:
142
+
143
+ 1. unpack it somewhere outside your repo
144
+ 1. do your changes and commit (locally only, it doesn't have a remote)
145
+ 1. from within the app run `tar cfz path/to/cobra/spec/fixtures/app.tgz .`
146
+
139
147
  ## Contributing
140
148
 
141
149
  Bug reports and pull requests are welcome on GitHub at https://github.com/powerhome/cobra_commander. 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.
@@ -1,7 +1,6 @@
1
- # coding: utf-8
2
1
  # frozen_string_literal: true
3
2
 
4
- lib = File.expand_path("../lib", __FILE__)
3
+ lib = File.expand_path("lib", __dir__)
5
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
5
  require "cobra_commander/version"
7
6
 
@@ -13,7 +12,7 @@ Gem::Specification.new do |spec|
13
12
  "Garett Arrowood",
14
13
  "Carlos Palhares",
15
14
  ]
16
- spec.email = [
15
+ spec.email = [
17
16
  "blangfeld@powerhrg.com",
18
17
  "garett.arrowood@powerhrg.com",
19
18
  "carlos.palhares@powerhrg.com",
@@ -23,7 +22,7 @@ Gem::Specification.new do |spec|
23
22
  Tools for working with Component Based Rails Apps (see http://shageman.github.io/cbra.info/).
24
23
  Includes tools for graphing the components of an app and their relationships, as well as selectively
25
24
  testing components based on changes made.
26
- DESCRIPTION
25
+ DESCRIPTION
27
26
  spec.homepage = "http://tech.powerhrg.com/cobra_commander/"
28
27
  spec.license = "MIT"
29
28
 
@@ -34,15 +33,17 @@ DESCRIPTION
34
33
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
35
34
  spec.require_paths = ["lib"]
36
35
 
37
- spec.add_dependency "bundler", "~> 1.17"
38
- spec.add_dependency "thor", ["< 2.0", ">= 0.18.1"]
36
+ spec.add_dependency "bundler"
39
37
  spec.add_dependency "ruby-graphviz", "~> 1.2.3"
38
+ spec.add_dependency "thor", ["< 2.0", ">= 0.18.1"]
39
+ spec.add_dependency "tty-command", "~> 0.9.0"
40
+ spec.add_dependency "tty-spinner", "~> 0.9.3"
40
41
 
41
- spec.add_development_dependency "bundler", "~> 1.17"
42
- spec.add_development_dependency "rake", "~> 10.0"
43
- spec.add_development_dependency "rspec", "~> 3.5"
44
- spec.add_development_dependency "guard-rspec"
45
42
  spec.add_development_dependency "aruba", "~> 0.14.2"
46
- spec.add_development_dependency "rubocop", "0.48.1"
43
+ spec.add_development_dependency "bundler"
44
+ spec.add_development_dependency "guard-rspec"
47
45
  spec.add_development_dependency "pry"
46
+ spec.add_development_dependency "rake", "~> 10.0"
47
+ spec.add_development_dependency "rspec", "~> 3.5"
48
+ spec.add_development_dependency "rubocop", "0.88.0"
48
49
  end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gemspec path: "../"
6
+
7
+ gem "bundler", "~> 1.17.3"
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gemspec path: "../"
6
+
7
+ gem "bundler", "~> 2.2.11"
@@ -49,8 +49,16 @@ module CobraCommander
49
49
  @directly = @directly.sort_by(&:name)
50
50
  end
51
51
 
52
+ def component_changed?(component)
53
+ component.root_paths.any? do |component_path|
54
+ @changes.any? do |file_path|
55
+ file_path.start_with?(component_path)
56
+ end
57
+ end
58
+ end
59
+
52
60
  def add_if_changed(component)
53
- return if component.root_paths.uniq.none? { |path| @changes.any?(Regexp.new(path)) }
61
+ return unless component_changed?(component)
54
62
 
55
63
  @directly << component
56
64
  @transitively.merge(component.deep_dependents)
@@ -42,16 +42,16 @@ module CobraCommander
42
42
  Open3.capture3("git", "diff", "--name-only", @branch)
43
43
  end
44
44
 
45
- if result.exitstatus == 128
46
- raise InvalidSelectionError, "Specified --branch could not be found"
47
- end
45
+ raise InvalidSelectionError, "Specified --branch could not be found" if result.exitstatus == 128
48
46
 
49
47
  diff.split("\n").map { |f| File.join(@root_dir, f) }
50
48
  end
51
49
  end
52
50
 
53
51
  def assert_valid_result_choice
54
- raise InvalidSelectionError, "--results must be 'test', 'full', 'name' or 'json'" unless %w[test full name json].include?(@results) # rubocop:disable Metrics/LineLength
52
+ return if %w[test full name json].include?(@results)
53
+
54
+ raise InvalidSelectionError, "--results must be 'test', 'full', 'name' or 'json'"
55
55
  end
56
56
 
57
57
  def selected_result?(result)
@@ -32,14 +32,14 @@ module CobraCommander
32
32
  puts options.total ? components.size : CobraCommander::Output::FlatList.new(components).to_s
33
33
  end
34
34
 
35
- desc "exec [component] <command>", "Executes the command in the context of a given component or set of components. " \
36
- "If no component is given executes the command in all components."
35
+ desc "exec [component] <command>", "Executes the command in the context of a given component or set thereof. " \
36
+ "Defaults to all components."
37
37
  method_option :dependencies, type: :boolean, desc: "Run the command on each dependency of a given component"
38
38
  method_option :dependents, type: :boolean, desc: "Run the command on each dependency of a given component"
39
39
  def exec(command_or_component, command = nil)
40
40
  CobraCommander::Executor.exec(
41
41
  components_filtered(command && command_or_component),
42
- command ? command : command_or_component
42
+ command || command_or_component
43
43
  )
44
44
  end
45
45
 
@@ -58,8 +58,8 @@ module CobraCommander
58
58
  options.output
59
59
  )
60
60
  puts "Graph generated at #{options.output}"
61
- rescue ArgumentError => error
62
- error error.message
61
+ rescue ArgumentError => e
62
+ error e.message
63
63
  end
64
64
 
65
65
  desc "changes [--results=RESULTS] [--branch=BRANCH]", "Prints list of changed files"
@@ -83,10 +83,12 @@ module CobraCommander
83
83
 
84
84
  def components_filtered(component_name)
85
85
  return umbrella.components unless component_name
86
+
86
87
  component = find_component(component_name)
87
88
 
88
89
  return component.deep_dependencies if options.dependencies
89
90
  return component.deep_dependents if options.dependents
91
+
90
92
  [component]
91
93
  end
92
94
  end
@@ -3,7 +3,7 @@
3
3
  module CobraCommander
4
4
  # Represents a component withing an Umbrella
5
5
  class Component
6
- attr_reader :name, :dependencies, :sources
6
+ attr_reader :name, :sources
7
7
 
8
8
  def initialize(umbrella, name)
9
9
  @umbrella = umbrella
@@ -1,23 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "bundler"
4
+ require "bundler/lockfile_parser"
5
+ require "pathname"
6
+
3
7
  module CobraCommander
4
8
  module Dependencies
5
9
  # Calculates ruby bundler dependencies
6
10
  class Bundler
7
- def initialize(root)
8
- @definition = ::Bundler::Definition.build(
9
- Pathname.new(File.join(root, "Gemfile")).realpath,
10
- Pathname.new(File.join(root, "Gemfile.lock")).realpath,
11
- false
12
- )
13
- end
11
+ attr_reader :path
14
12
 
15
- def path
16
- @definition.lockfile
13
+ def initialize(root)
14
+ @root = Pathname.new(root)
15
+ @path = @root.join("Gemfile.lock").realpath
17
16
  end
18
17
 
19
18
  def dependencies
20
- @definition.dependencies.map(&:name)
19
+ lockfile.dependencies.values.map(&:name)
21
20
  end
22
21
 
23
22
  def components
@@ -28,9 +27,14 @@ module CobraCommander
28
27
 
29
28
  private
30
29
 
30
+ def lockfile
31
+ @lockfile ||= ::Bundler::LockfileParser.new(::Bundler.read_file(path))
32
+ end
33
+
31
34
  def components_source
32
- @components_source ||= @definition.send(:sources).path_sources.find do |source|
33
- source.path.to_s.eql?("components")
35
+ @components_source ||= begin
36
+ source = @lockfile.sources.find { |s| s.path.to_s.eql?("components") }
37
+ ::Bundler::Source::Path.new(source.options.merge("root_path" => @root))
34
38
  end
35
39
  end
36
40
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "json"
4
+ require "pathname"
4
5
 
5
6
  module CobraCommander
6
7
  module Dependencies
@@ -10,11 +11,11 @@ module CobraCommander
10
11
  attr_reader :path
11
12
 
12
13
  def initialize(path)
13
- @path = Pathname.new(File.join(path, "package.json")).realpath
14
+ @path = ::Pathname.new(File.join(path, "package.json")).realpath
14
15
  end
15
16
 
16
17
  def project_tag
17
- name.match(%r{^@[\w-]+\/}).to_s
18
+ name.match(%r{^@[\w-]+/}).to_s
18
19
  end
19
20
 
20
21
  def name
@@ -6,7 +6,7 @@ module CobraCommander
6
6
  # Yarn package repository to load and cache package.json files
7
7
  class PackageRepo
8
8
  def initialize
9
- @specs ||= {}
9
+ @specs = {}
10
10
  end
11
11
 
12
12
  def specs
@@ -14,8 +14,9 @@ module CobraCommander
14
14
  end
15
15
 
16
16
  def load_linked_specs(package)
17
- package.dependencies.values.each do |spec|
17
+ package.dependencies.each_value do |spec|
18
18
  next unless spec =~ /link:(.+)/
19
+
19
20
  load_spec(File.join(package.path, "..", Regexp.last_match(1)))
20
21
  end
21
22
  end
@@ -1,16 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative "executor/component_exec"
4
+ require_relative "executor/multi_exec"
5
+
3
6
  module CobraCommander
4
7
  # Execute commands on all components of a ComponentTree
5
8
  module Executor
6
- def self.exec(components, command, printer = $stdout)
7
- components.each do |component|
8
- component.root_paths.each do |path|
9
- printer.puts "===> #{component.name} (#{path})"
10
- output, = Open3.capture2e(command, chdir: path, unsetenv_others: true)
11
- printer.puts output
12
- end
13
- end
9
+ def self.exec(components, command, output = $stdout, status_output = $stderr)
10
+ components = Array(components)
11
+ exec = if components.size == 1
12
+ ComponentExec.new(components.first)
13
+ else
14
+ MultiExec.new(components)
15
+ end
16
+ exec.run(command, output: output, spin_output: status_output)
14
17
  end
15
18
  end
16
19
  end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "tty-command"
4
+
5
+ module CobraCommander
6
+ module Executor
7
+ # Execute a command on a single component
8
+ class ComponentExec
9
+ def initialize(component)
10
+ @component = component
11
+ end
12
+
13
+ def run(command, output: $stdout, **cmd_options)
14
+ tty = TTY::Command.new(pty: true, printer: :quiet, output: output)
15
+ isolate_bundle do
16
+ @component.root_paths.all? do |path|
17
+ tty.run!(command, chdir: path, **cmd_options).success?
18
+ end
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def isolate_bundle(&block)
25
+ if Bundler.respond_to?(:with_unbundled_env)
26
+ Bundler.with_unbundled_env(&block)
27
+ else
28
+ Bundler.with_clean_env(&block)
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "tty-spinner"
4
+ require "stringio"
5
+
6
+ require_relative "component_exec"
7
+
8
+ module CobraCommander
9
+ module Executor
10
+ # Executes a command on multiple components simultaniously
11
+ class MultiExec
12
+ def initialize(components)
13
+ @components = components
14
+ end
15
+
16
+ def run(command, output: $stdout, spin_output: $stderr, only_output_on_error: true, **cmd_options)
17
+ cmmd_output = StringIO.new
18
+ multi = TTY::Spinner::Multi.new("Running #{command}", output: spin_output)
19
+ @components.each do |component|
20
+ component_exec(multi, component, command, only_output_on_error: only_output_on_error,
21
+ stderr: :stdout, output: cmmd_output,
22
+ **cmd_options)
23
+ end
24
+ multi.auto_spin
25
+ output << cmmd_output.string
26
+ true
27
+ end
28
+
29
+ private
30
+
31
+ def component_exec(multi, component, command, **options)
32
+ exec = ComponentExec.new(component)
33
+ multi.register(*spinner(component.name)) do |spin|
34
+ exec.run(command, **options) ? spin.success : spin.error
35
+ end
36
+ end
37
+
38
+ def spinner(title)
39
+ pastel = Pastel.new
40
+ [":spinner #{title}", { format: :bouncing,
41
+ success_mark: pastel.green("[DONE]"),
42
+ error_mark: pastel.red("[ERROR]"), },]
43
+ end
44
+ end
45
+ end
46
+ end
@@ -18,7 +18,7 @@ module CobraCommander
18
18
 
19
19
  private_class_method def self.extract_format(output)
20
20
  format = output[-3..-1]
21
- return format if format == "png" || format == "dot"
21
+ return format if %w[png dot].include?(format)
22
22
 
23
23
  raise ArgumentError, "output format must be 'png' or 'dot'"
24
24
  end
@@ -21,6 +21,7 @@ module CobraCommander
21
21
 
22
22
  def resolve(component_root_path)
23
23
  return root if root.root_paths.include?(component_root_path)
24
+
24
25
  components.find do |component|
25
26
  component.root_paths.include?(component_root_path)
26
27
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CobraCommander
4
- VERSION = "0.8.0"
4
+ VERSION = "0.10.0"
5
5
  end
metadata CHANGED
@@ -1,31 +1,45 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cobra_commander
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ben Langfeld
8
8
  - Garett Arrowood
9
9
  - Carlos Palhares
10
- autorequire:
10
+ autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2020-07-27 00:00:00.000000000 Z
13
+ date: 2021-02-25 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ">="
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '0'
29
+ - !ruby/object:Gem::Dependency
30
+ name: ruby-graphviz
17
31
  requirement: !ruby/object:Gem::Requirement
18
32
  requirements:
19
33
  - - "~>"
20
34
  - !ruby/object:Gem::Version
21
- version: '1.17'
35
+ version: 1.2.3
22
36
  type: :runtime
23
37
  prerelease: false
24
38
  version_requirements: !ruby/object:Gem::Requirement
25
39
  requirements:
26
40
  - - "~>"
27
41
  - !ruby/object:Gem::Version
28
- version: '1.17'
42
+ version: 1.2.3
29
43
  - !ruby/object:Gem::Dependency
30
44
  name: thor
31
45
  requirement: !ruby/object:Gem::Requirement
@@ -47,61 +61,61 @@ dependencies:
47
61
  - !ruby/object:Gem::Version
48
62
  version: 0.18.1
49
63
  - !ruby/object:Gem::Dependency
50
- name: ruby-graphviz
64
+ name: tty-command
51
65
  requirement: !ruby/object:Gem::Requirement
52
66
  requirements:
53
67
  - - "~>"
54
68
  - !ruby/object:Gem::Version
55
- version: 1.2.3
69
+ version: 0.9.0
56
70
  type: :runtime
57
71
  prerelease: false
58
72
  version_requirements: !ruby/object:Gem::Requirement
59
73
  requirements:
60
74
  - - "~>"
61
75
  - !ruby/object:Gem::Version
62
- version: 1.2.3
76
+ version: 0.9.0
63
77
  - !ruby/object:Gem::Dependency
64
- name: bundler
78
+ name: tty-spinner
65
79
  requirement: !ruby/object:Gem::Requirement
66
80
  requirements:
67
81
  - - "~>"
68
82
  - !ruby/object:Gem::Version
69
- version: '1.17'
70
- type: :development
83
+ version: 0.9.3
84
+ type: :runtime
71
85
  prerelease: false
72
86
  version_requirements: !ruby/object:Gem::Requirement
73
87
  requirements:
74
88
  - - "~>"
75
89
  - !ruby/object:Gem::Version
76
- version: '1.17'
90
+ version: 0.9.3
77
91
  - !ruby/object:Gem::Dependency
78
- name: rake
92
+ name: aruba
79
93
  requirement: !ruby/object:Gem::Requirement
80
94
  requirements:
81
95
  - - "~>"
82
96
  - !ruby/object:Gem::Version
83
- version: '10.0'
97
+ version: 0.14.2
84
98
  type: :development
85
99
  prerelease: false
86
100
  version_requirements: !ruby/object:Gem::Requirement
87
101
  requirements:
88
102
  - - "~>"
89
103
  - !ruby/object:Gem::Version
90
- version: '10.0'
104
+ version: 0.14.2
91
105
  - !ruby/object:Gem::Dependency
92
- name: rspec
106
+ name: bundler
93
107
  requirement: !ruby/object:Gem::Requirement
94
108
  requirements:
95
- - - "~>"
109
+ - - ">="
96
110
  - !ruby/object:Gem::Version
97
- version: '3.5'
111
+ version: '0'
98
112
  type: :development
99
113
  prerelease: false
100
114
  version_requirements: !ruby/object:Gem::Requirement
101
115
  requirements:
102
- - - "~>"
116
+ - - ">="
103
117
  - !ruby/object:Gem::Version
104
- version: '3.5'
118
+ version: '0'
105
119
  - !ruby/object:Gem::Dependency
106
120
  name: guard-rspec
107
121
  requirement: !ruby/object:Gem::Requirement
@@ -117,47 +131,61 @@ dependencies:
117
131
  - !ruby/object:Gem::Version
118
132
  version: '0'
119
133
  - !ruby/object:Gem::Dependency
120
- name: aruba
134
+ name: pry
135
+ requirement: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ type: :development
141
+ prerelease: false
142
+ version_requirements: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ - !ruby/object:Gem::Dependency
148
+ name: rake
121
149
  requirement: !ruby/object:Gem::Requirement
122
150
  requirements:
123
151
  - - "~>"
124
152
  - !ruby/object:Gem::Version
125
- version: 0.14.2
153
+ version: '10.0'
126
154
  type: :development
127
155
  prerelease: false
128
156
  version_requirements: !ruby/object:Gem::Requirement
129
157
  requirements:
130
158
  - - "~>"
131
159
  - !ruby/object:Gem::Version
132
- version: 0.14.2
160
+ version: '10.0'
133
161
  - !ruby/object:Gem::Dependency
134
- name: rubocop
162
+ name: rspec
135
163
  requirement: !ruby/object:Gem::Requirement
136
164
  requirements:
137
- - - '='
165
+ - - "~>"
138
166
  - !ruby/object:Gem::Version
139
- version: 0.48.1
167
+ version: '3.5'
140
168
  type: :development
141
169
  prerelease: false
142
170
  version_requirements: !ruby/object:Gem::Requirement
143
171
  requirements:
144
- - - '='
172
+ - - "~>"
145
173
  - !ruby/object:Gem::Version
146
- version: 0.48.1
174
+ version: '3.5'
147
175
  - !ruby/object:Gem::Dependency
148
- name: pry
176
+ name: rubocop
149
177
  requirement: !ruby/object:Gem::Requirement
150
178
  requirements:
151
- - - ">="
179
+ - - '='
152
180
  - !ruby/object:Gem::Version
153
- version: '0'
181
+ version: 0.88.0
154
182
  type: :development
155
183
  prerelease: false
156
184
  version_requirements: !ruby/object:Gem::Requirement
157
185
  requirements:
158
- - - ">="
186
+ - - '='
159
187
  - !ruby/object:Gem::Version
160
- version: '0'
188
+ version: 0.88.0
161
189
  description: |
162
190
  Tools for working with Component Based Rails Apps (see http://shageman.github.io/cbra.info/).
163
191
  Includes tools for graphing the components of an app and their relationships, as well as selectively
@@ -172,10 +200,10 @@ extensions: []
172
200
  extra_rdoc_files: []
173
201
  files:
174
202
  - ".editorconfig"
203
+ - ".github/workflows/ci.yml"
175
204
  - ".gitignore"
176
205
  - ".rspec"
177
206
  - ".rubocop.yml"
178
- - ".travis.yml"
179
207
  - CHANGELOG.md
180
208
  - CODE_OF_CONDUCT.md
181
209
  - Gemfile
@@ -188,6 +216,8 @@ files:
188
216
  - bin/setup
189
217
  - cobra_commander.gemspec
190
218
  - exe/cobra
219
+ - gemfiles/bundler1.gemfile
220
+ - gemfiles/bundler2.gemfile
191
221
  - lib/cobra_commander.rb
192
222
  - lib/cobra_commander/affected.rb
193
223
  - lib/cobra_commander/change.rb
@@ -199,6 +229,8 @@ files:
199
229
  - lib/cobra_commander/dependencies/yarn/package_repo.rb
200
230
  - lib/cobra_commander/dependencies/yarn_workspace.rb
201
231
  - lib/cobra_commander/executor.rb
232
+ - lib/cobra_commander/executor/component_exec.rb
233
+ - lib/cobra_commander/executor/multi_exec.rb
202
234
  - lib/cobra_commander/output.rb
203
235
  - lib/cobra_commander/output/ascii_tree.rb
204
236
  - lib/cobra_commander/output/flat_list.rb
@@ -210,7 +242,7 @@ homepage: http://tech.powerhrg.com/cobra_commander/
210
242
  licenses:
211
243
  - MIT
212
244
  metadata: {}
213
- post_install_message:
245
+ post_install_message:
214
246
  rdoc_options: []
215
247
  require_paths:
216
248
  - lib
@@ -225,9 +257,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
225
257
  - !ruby/object:Gem::Version
226
258
  version: '0'
227
259
  requirements: []
228
- rubyforge_project:
260
+ rubyforge_project:
229
261
  rubygems_version: 2.7.3
230
- signing_key:
262
+ signing_key:
231
263
  specification_version: 4
232
264
  summary: Tools for working with Component Based Rails Apps
233
265
  test_files: []
data/.travis.yml DELETED
@@ -1,12 +0,0 @@
1
- sudo: true
2
- language: ruby
3
- before_install:
4
- - "find /home/travis/.rvm/rubies -wholename '*default/bundler-*.gemspec' -delete"
5
- - gem install bundler:"$BUNDLER_VERSION"
6
- - sudo apt-get -qq install graphviz
7
- - curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version 1.13.0
8
- - export PATH="$HOME/.yarn/bin:$PATH"
9
- rvm:
10
- - 2.5.1
11
- env:
12
- - BUNDLER_VERSION=1.17.3