Class: RepoTender::CLI::Org::Remove
- Inherits:
-
Dry::CLI::Command
- Object
- Dry::CLI::Command
- RepoTender::CLI::Org::Remove
- Includes:
- GlobalOptions, Helpers
- Defined in:
- lib/repo_tender/cli/org.rb
Instance Method Summary collapse
Methods included from GlobalOptions
Methods included from Helpers
fail_with, format_failure, format_ref, parse_ref, same_org?
Instance Method Details
#call(name:, plain: nil, json: nil, no_color: nil, quiet: nil) ⇒ Object
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/repo_tender/cli/org.rb', line 116 def call(name:, plain: nil, json: nil, no_color: nil, quiet: nil, **) # The flags don't affect the identity match for remove; we # match on (host, name) only. This matches the user's # expectation that "remove" targets the org, not the flag # combination they added it with. mode = UI::Mode.resolve( flags: {plain: plain, json: json, no_color: no_color, quiet: quiet}, env: CLI.env, out: out ) pastel = Pastel.new(enabled: mode.color) parsed = parse_ref(name) return fail_with(self, parsed.failure) if parsed.failure? target = parsed.success paths = CLI.make_paths config = Config::Store.load(paths.config_file).success kept = config.orgs.reject { |o| same_org?(o, target) } if kept.size == config.orgs.size return fail_with(self, "not tracked: #{format_ref(target)}") end result = Config::Store.update(paths.config_file) do |c| Config::Store.with(c, orgs: kept) end if result.failure? return fail_with(self, "failed to update config: #{format_failure(result.failure)}") end out.puts pastel.green("removed: #{format_ref(target)}") CLI.record_outcome(Outcome.new(exit_code: 0)) end |