From b0e3d45e458edcd93f562652ce9a1e815f34bcc6 Mon Sep 17 00:00:00 2001 From: latnedis Date: Sat, 26 Apr 2014 04:48:54 +0400 Subject: [PATCH 1/8] Output class: number of repos && members --- bin/github-team-remover | 1 + lib/remover.rb | 1 + lib/remover/cli.rb | 2 +- lib/remover/output.rb | 15 +++++++++++++++ lib/remover/team.rb | 8 ++++++++ 5 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 lib/remover/output.rb diff --git a/bin/github-team-remover b/bin/github-team-remover index 4cd975d..2c9b4b2 100755 --- a/bin/github-team-remover +++ b/bin/github-team-remover @@ -1,4 +1,5 @@ #!/usr/bin/env ruby +require 'bundler/setup' require 'rubygems' require 'remover' diff --git a/lib/remover.rb b/lib/remover.rb index 01155dc..d9eaf32 100644 --- a/lib/remover.rb +++ b/lib/remover.rb @@ -5,6 +5,7 @@ require 'remover/list' require 'remover/cli' require 'remover/configuration' +require 'remover/output' module Remover def self.configuration diff --git a/lib/remover/cli.rb b/lib/remover/cli.rb index 4d2a35c..31b1f91 100644 --- a/lib/remover/cli.rb +++ b/lib/remover/cli.rb @@ -12,7 +12,7 @@ def list Remover.configuration.load_from_options!(options) Remover::List.new(github).unused_teams.each do |team| - puts team.name + Remover::Output.new(team).output end end diff --git a/lib/remover/output.rb b/lib/remover/output.rb new file mode 100644 index 0000000..da0134b --- /dev/null +++ b/lib/remover/output.rb @@ -0,0 +1,15 @@ +module Remover + class Output + attr_accessor :team + + def initialize (team) + @team = team + end + + def output + puts team.name + puts "Number of members: #{team.number_of_members}" + puts "Number of repositories: #{team.number_of_repositories}" + end + end +end diff --git a/lib/remover/team.rb b/lib/remover/team.rb index f8b8ac8..2595702 100644 --- a/lib/remover/team.rb +++ b/lib/remover/team.rb @@ -14,6 +14,14 @@ def name github_team.name end + def number_of_members + github_client.team_members(github_team.id).size + end + + def number_of_repositories + github_client.team_repositories(github_team.id).size + end + private def with_members? From ca54a87c5bc60aa5011d6b2e49daa1f8a5bc644a Mon Sep 17 00:00:00 2001 From: latnedis Date: Sat, 26 Apr 2014 05:34:27 +0400 Subject: [PATCH 2/8] First task done --- Gemfile.lock | 4 +++- github-team-remover.gemspec | 1 + lib/remover/cli.rb | 7 +++++- lib/remover/configuration.rb | 2 +- lib/remover/output.rb | 44 +++++++++++++++++++++++++++++++----- lib/remover/team.rb | 8 +++++++ 6 files changed, 57 insertions(+), 9 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index e23a66f..50d9ff2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -2,6 +2,7 @@ PATH remote: . specs: github-team-remover (0.0.2) + colorize octokit (~> 3.0) thor @@ -10,12 +11,13 @@ GEM specs: addressable (2.3.6) ast (1.1.0) + colorize (0.7.2) diff-lcs (1.2.5) faraday (0.9.0) multipart-post (>= 1.2, < 3) json (1.8.1) multipart-post (2.0.0) - octokit (3.0.0) + octokit (3.1.0) sawyer (~> 0.5.3) parser (2.1.7) ast (~> 1.1) diff --git a/github-team-remover.gemspec b/github-team-remover.gemspec index 90f5aaa..d9b8661 100644 --- a/github-team-remover.gemspec +++ b/github-team-remover.gemspec @@ -21,6 +21,7 @@ Gem::Specification.new do |spec| spec.add_dependency 'octokit', '~> 3.0' spec.add_dependency 'thor' + spec.add_dependency 'colorize' spec.add_development_dependency 'rubocop' spec.add_development_dependency 'rspec', '~> 3.0.0.beta2' diff --git a/lib/remover/cli.rb b/lib/remover/cli.rb index 31b1f91..35acbd6 100644 --- a/lib/remover/cli.rb +++ b/lib/remover/cli.rb @@ -5,6 +5,7 @@ class CLI < Thor method_option :organization, required: true method_option :login, required: true method_option :password, required: true + method_option :verbose desc('list', 'List unused teams') @@ -12,7 +13,7 @@ def list Remover.configuration.load_from_options!(options) Remover::List.new(github).unused_teams.each do |team| - Remover::Output.new(team).output + Remover::Output.new(team, verbose?).output end end @@ -20,6 +21,10 @@ def list private + def verbose? + options[:verbose] + end + def github Remover::Github.new(octokit) end diff --git a/lib/remover/configuration.rb b/lib/remover/configuration.rb index 4495f6d..3df1693 100644 --- a/lib/remover/configuration.rb +++ b/lib/remover/configuration.rb @@ -1,6 +1,6 @@ module Remover class Configuration - OPTIONS = %i(organization login password) + OPTIONS = %i(organization login password verbose) attr_accessor(*OPTIONS) diff --git a/lib/remover/output.rb b/lib/remover/output.rb index da0134b..59eff73 100644 --- a/lib/remover/output.rb +++ b/lib/remover/output.rb @@ -1,15 +1,47 @@ +require 'colorize' + module Remover class Output - attr_accessor :team + attr_accessor :team, :verbose - def initialize (team) - @team = team + def initialize(team, verbose) + @team, @verbose = team, verbose end def output - puts team.name - puts "Number of members: #{team.number_of_members}" - puts "Number of repositories: #{team.number_of_repositories}" + team_name + number_of_members + members if verbose + puts + number_of_repositories + repositories if verbose + puts + end + + private + + def team_name + puts "#{team.name}".colorize(:blue) + end + + def number_of_members + puts " Number of members: #{team.number_of_members}".colorize(:light_blue) + end + + def number_of_repositories + puts " Number of repositories: #{team.number_of_repositories}".colorize(:light_blue) + end + + def members + team.members.each do |member| + puts " #{member.login}: #{member.html_url}".colorize(:green) + end + end + + def repositories + team.repositories.each do |repo| + puts " #{repo.name}: #{repo.html_url}".colorize(:green) + end end end end diff --git a/lib/remover/team.rb b/lib/remover/team.rb index 2595702..14b8923 100644 --- a/lib/remover/team.rb +++ b/lib/remover/team.rb @@ -22,6 +22,14 @@ def number_of_repositories github_client.team_repositories(github_team.id).size end + def members + github_client.team_members(github_team.id) + end + + def repositories + github_client.team_repositories(github_team.id) + end + private def with_members? From 32517b488a5f69aac518768305353d61642d8e86 Mon Sep 17 00:00:00 2001 From: latnedis Date: Sat, 26 Apr 2014 06:51:07 +0400 Subject: [PATCH 3/8] added r--remove && update output --- lib/remover.rb | 1 + lib/remover/cli.rb | 7 ++++++- lib/remover/configuration.rb | 2 +- lib/remover/output.rb | 13 ++++++++++--- lib/remover/remove.rb | 13 +++++++++++++ lib/remover/team.rb | 4 ++++ spec/remover/cli_spec.rb | 33 +++++++++++++++++++++++++++++++++ spec/remover/remove_spec.rb | 0 8 files changed, 68 insertions(+), 5 deletions(-) create mode 100644 lib/remover/remove.rb create mode 100644 spec/remover/cli_spec.rb create mode 100644 spec/remover/remove_spec.rb diff --git a/lib/remover.rb b/lib/remover.rb index d9eaf32..b913f45 100644 --- a/lib/remover.rb +++ b/lib/remover.rb @@ -6,6 +6,7 @@ require 'remover/cli' require 'remover/configuration' require 'remover/output' +require 'remover/remove' module Remover def self.configuration diff --git a/lib/remover/cli.rb b/lib/remover/cli.rb index 35acbd6..f4ba395 100644 --- a/lib/remover/cli.rb +++ b/lib/remover/cli.rb @@ -6,6 +6,7 @@ class CLI < Thor method_option :login, required: true method_option :password, required: true method_option :verbose + method_option :remove desc('list', 'List unused teams') @@ -13,7 +14,7 @@ def list Remover.configuration.load_from_options!(options) Remover::List.new(github).unused_teams.each do |team| - Remover::Output.new(team, verbose?).output + Remover::Output.new(team, verbose?, remove?).output end end @@ -25,6 +26,10 @@ def verbose? options[:verbose] end + def remove? + options[:remove] + end + def github Remover::Github.new(octokit) end diff --git a/lib/remover/configuration.rb b/lib/remover/configuration.rb index 3df1693..8bbb72d 100644 --- a/lib/remover/configuration.rb +++ b/lib/remover/configuration.rb @@ -1,6 +1,6 @@ module Remover class Configuration - OPTIONS = %i(organization login password verbose) + OPTIONS = %i(organization login password verbose remove) attr_accessor(*OPTIONS) diff --git a/lib/remover/output.rb b/lib/remover/output.rb index 59eff73..27608e8 100644 --- a/lib/remover/output.rb +++ b/lib/remover/output.rb @@ -2,10 +2,10 @@ module Remover class Output - attr_accessor :team, :verbose + attr_accessor :team, :verbose, :remove - def initialize(team, verbose) - @team, @verbose = team, verbose + def initialize(team, verbose, remove) + @team, @verbose, @remove = team, verbose, remove end def output @@ -16,6 +16,8 @@ def output number_of_repositories repositories if verbose puts + removed_team if remove + puts end private @@ -43,5 +45,10 @@ def repositories puts " #{repo.name}: #{repo.html_url}".colorize(:green) end end + + def removed_team + Remover::Remove.new(team).remove + puts " #{team.name} removed".colorize(:yellow) + end end end diff --git a/lib/remover/remove.rb b/lib/remover/remove.rb new file mode 100644 index 0000000..7989b01 --- /dev/null +++ b/lib/remover/remove.rb @@ -0,0 +1,13 @@ +module Remover + class Remove + attr_accessor :team + + def initialize(team) + @team = team + end + + def remove + team.remove + end + end +end diff --git a/lib/remover/team.rb b/lib/remover/team.rb index 14b8923..de27124 100644 --- a/lib/remover/team.rb +++ b/lib/remover/team.rb @@ -30,6 +30,10 @@ def repositories github_client.team_repositories(github_team.id) end + def remove + github_client.delete_team(github_team.id) + end + private def with_members? diff --git a/spec/remover/cli_spec.rb b/spec/remover/cli_spec.rb new file mode 100644 index 0000000..7fb898f --- /dev/null +++ b/spec/remover/cli_spec.rb @@ -0,0 +1,33 @@ +describe Remover::CLI do + let(:options) do + { + 'organization' => 'FlatSchool', + 'login' => 'fs-school', + 'password' => '123456', + 'verbose' => 'true', + 'remove' => 'true' + } + end + + let(:configuration) { Remover::Configuration.new } + + describe '#verbose' do + before do + configuration.load_from_options!(options) + end + + it 'true' do + expect(configuration.verbose).to eq('true') + end + end + + describe '#remove' do + before do + configuration.load_from_options!(options) + end + + it 'true' do + expect(configuration.remove).to eq('true') + end + end +end diff --git a/spec/remover/remove_spec.rb b/spec/remover/remove_spec.rb new file mode 100644 index 0000000..e69de29 From db6ee0347eb8443759a8612a892f07d7d53e6b46 Mon Sep 17 00:00:00 2001 From: latnedis Date: Sat, 26 Apr 2014 09:16:30 +0400 Subject: [PATCH 4/8] --remover fixed --- lib/remover/cli.rb | 4 ++-- lib/remover/output.rb | 2 +- lib/remover/remove.rb | 13 ------------- spec/remover/remove_spec.rb | 0 4 files changed, 3 insertions(+), 16 deletions(-) delete mode 100644 lib/remover/remove.rb delete mode 100644 spec/remover/remove_spec.rb diff --git a/lib/remover/cli.rb b/lib/remover/cli.rb index f4ba395..bb40f0a 100644 --- a/lib/remover/cli.rb +++ b/lib/remover/cli.rb @@ -5,8 +5,8 @@ class CLI < Thor method_option :organization, required: true method_option :login, required: true method_option :password, required: true - method_option :verbose - method_option :remove + method_option :verbose, desc: 'Puts members and repositories links' + method_option :remove, desc: 'Remove unused teams' desc('list', 'List unused teams') diff --git a/lib/remover/output.rb b/lib/remover/output.rb index 27608e8..ddf6164 100644 --- a/lib/remover/output.rb +++ b/lib/remover/output.rb @@ -47,7 +47,7 @@ def repositories end def removed_team - Remover::Remove.new(team).remove + team.remove puts " #{team.name} removed".colorize(:yellow) end end diff --git a/lib/remover/remove.rb b/lib/remover/remove.rb deleted file mode 100644 index 7989b01..0000000 --- a/lib/remover/remove.rb +++ /dev/null @@ -1,13 +0,0 @@ -module Remover - class Remove - attr_accessor :team - - def initialize(team) - @team = team - end - - def remove - team.remove - end - end -end diff --git a/spec/remover/remove_spec.rb b/spec/remover/remove_spec.rb deleted file mode 100644 index e69de29..0000000 From 0cb55feba569b0236f61cd8a56ac8792bc70d608 Mon Sep 17 00:00:00 2001 From: Bulat Sitdikov Date: Sat, 26 Apr 2014 09:37:15 +0400 Subject: [PATCH 5/8] Update github-team-remover --- bin/github-team-remover | 1 - 1 file changed, 1 deletion(-) diff --git a/bin/github-team-remover b/bin/github-team-remover index 2c9b4b2..4cd975d 100755 --- a/bin/github-team-remover +++ b/bin/github-team-remover @@ -1,5 +1,4 @@ #!/usr/bin/env ruby -require 'bundler/setup' require 'rubygems' require 'remover' From adbf3a22b341142bba92c47f296b798cad1de233 Mon Sep 17 00:00:00 2001 From: latnedis Date: Tue, 29 Apr 2014 04:52:13 +0400 Subject: [PATCH 6/8] Added specs & bugfix --- bin/github-team-remover | 1 + lib/remover.rb | 1 - lib/remover/cli.rb | 10 +++---- spec/remover/cli_spec.rb | 24 +++++++++++++++ spec/remover/team_spec.rb | 62 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 92 insertions(+), 6 deletions(-) diff --git a/bin/github-team-remover b/bin/github-team-remover index 4cd975d..2c9b4b2 100755 --- a/bin/github-team-remover +++ b/bin/github-team-remover @@ -1,4 +1,5 @@ #!/usr/bin/env ruby +require 'bundler/setup' require 'rubygems' require 'remover' diff --git a/lib/remover.rb b/lib/remover.rb index b913f45..d9eaf32 100644 --- a/lib/remover.rb +++ b/lib/remover.rb @@ -6,7 +6,6 @@ require 'remover/cli' require 'remover/configuration' require 'remover/output' -require 'remover/remove' module Remover def self.configuration diff --git a/lib/remover/cli.rb b/lib/remover/cli.rb index bb40f0a..47662df 100644 --- a/lib/remover/cli.rb +++ b/lib/remover/cli.rb @@ -2,11 +2,11 @@ module Remover class CLI < Thor - method_option :organization, required: true - method_option :login, required: true - method_option :password, required: true - method_option :verbose, desc: 'Puts members and repositories links' - method_option :remove, desc: 'Remove unused teams' + method_option :organization, aliases: '--o', required: true + method_option :login, aliases: '--l', required: true + method_option :password, aliases: '--p', required: true + method_option :verbose, aliases: '--v', desc: 'Puts members and repositories links' + method_option :remove, aliases: '--r', desc: 'Remove unused teams' desc('list', 'List unused teams') diff --git a/spec/remover/cli_spec.rb b/spec/remover/cli_spec.rb index 7fb898f..ebb1656 100644 --- a/spec/remover/cli_spec.rb +++ b/spec/remover/cli_spec.rb @@ -19,6 +19,18 @@ it 'true' do expect(configuration.verbose).to eq('true') end + + context 'if #verbose false' do + let(:options) do + { + 'verbose' => 'false' + } + end + + it 'false' do + expect(configuration.verbose).to eq('false') + end + end end describe '#remove' do @@ -29,5 +41,17 @@ it 'true' do expect(configuration.remove).to eq('true') end + + context 'if #remove false' do + let(:options) do + { + 'remove' => 'false' + } + end + + it 'false' do + expect(configuration.remove).to eq('false') + end + end end end diff --git a/spec/remover/team_spec.rb b/spec/remover/team_spec.rb index f666388..51040b6 100644 --- a/spec/remover/team_spec.rb +++ b/spec/remover/team_spec.rb @@ -49,4 +49,66 @@ end end end + + describe '#number_of_members' do + before do + allow(github_client).to receive(:team_members) { [] } + end + + it 'returns number of members' do + expect(team.number_of_members).to eq(github_client.team_members(github_team.id).size) + end + end + + describe '#number_of_repositories' do + before do + allow(github_client).to receive(:team_repositories) { [] } + end + + it 'returns number of repositories' do + expect(team.number_of_repositories).to eq(github_client.team_repositories(github_team.id).size) + end + end + + describe '#members' do + before do + allow(github_client).to receive(:team_members) { [] } + end + + it 'returns array of members' do + expect(team.members).to eq(github_client.team_members(github_team.id)) + end + end + + describe '#repositories' do + before do + allow(github_client).to receive(:team_repositories) { [] } + end + + it 'returns array of repositories' do + expect(team.repositories).to eq(github_client.team_repositories(github_team.id)) + end + end + + describe '#remove' do + context 'if teams removed' do + before do + allow(github_client).to receive(:delete_team) { true } + end + + it 'returns true' do + expect(team.remove).to eq(github_client.delete_team(github_team.id)) + end + end + + context 'if teams not removed' do + before do + allow(github_client).to receive(:delete_team) { false } + end + + it 'returns false' do + expect(team.remove).to eq(github_client.delete_team(github_team.id)) + end + end + end end From 21385ac5eba21a72b5c6d90a8e75f3f90b51d250 Mon Sep 17 00:00:00 2001 From: latnedis Date: Tue, 29 Apr 2014 11:30:39 +0400 Subject: [PATCH 7/8] Added specs in configuration_spec --- spec/remover/configuration_spec.rb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/spec/remover/configuration_spec.rb b/spec/remover/configuration_spec.rb index b656109..81d68be 100644 --- a/spec/remover/configuration_spec.rb +++ b/spec/remover/configuration_spec.rb @@ -3,7 +3,9 @@ { 'organization' => 'FlatSchool', 'login' => 'fs-school', - 'password' => '123456' + 'password' => '123456', + 'verbose' => 'true', + 'remove' => 'true' } end @@ -18,6 +20,8 @@ expect(configuration.organization).to eq('FlatSchool') expect(configuration.login).to eq('fs-school') expect(configuration.password).to eq('123456') + expect(configuration.verbose).to eq('true') + expect(configuration.remove).to eq('true') end end end From 27c817765ed0464d2cc0acf581afa8b8e5f8a307 Mon Sep 17 00:00:00 2001 From: latnedis Date: Tue, 29 Apr 2014 17:46:14 +0400 Subject: [PATCH 8/8] added formatter --- lib/remover.rb | 3 +- lib/remover/cli.rb | 23 +++---- lib/remover/configuration.rb | 8 +++ lib/remover/formatter.rb | 52 +++++++++++++++ lib/remover/output.rb | 60 +++++++++--------- lib/remover/remove.rb | 14 ++++ lib/remover/team.rb | 20 +++--- spec/remover/cli_spec.rb | 34 ++-------- spec/remover/remove_spec.rb | 33 ++++++++++ spec/remover/team_spec.rb | 120 +++++++++++++++++------------------ 10 files changed, 221 insertions(+), 146 deletions(-) create mode 100644 lib/remover/formatter.rb create mode 100644 lib/remover/remove.rb create mode 100644 spec/remover/remove_spec.rb diff --git a/lib/remover.rb b/lib/remover.rb index d9eaf32..b99512d 100644 --- a/lib/remover.rb +++ b/lib/remover.rb @@ -3,9 +3,10 @@ require 'remover/github' require 'remover/team' require 'remover/list' +require 'remover/remove' require 'remover/cli' require 'remover/configuration' -require 'remover/output' +require 'remover/formatter' module Remover def self.configuration diff --git a/lib/remover/cli.rb b/lib/remover/cli.rb index 47662df..3aa9a67 100644 --- a/lib/remover/cli.rb +++ b/lib/remover/cli.rb @@ -2,19 +2,20 @@ module Remover class CLI < Thor - method_option :organization, aliases: '--o', required: true - method_option :login, aliases: '--l', required: true - method_option :password, aliases: '--p', required: true - method_option :verbose, aliases: '--v', desc: 'Puts members and repositories links' - method_option :remove, aliases: '--r', desc: 'Remove unused teams' + method_option :organization, aliases: '--org', required: true + method_option :login, aliases: '--log', required: true + method_option :password, aliases: '--pas', required: true + method_option :verbose, aliases: '--ver', desc: 'Puts additional info' + method_option :remove, aliases: '--rem', desc: 'Removes unused teams' desc('list', 'List unused teams') def list Remover.configuration.load_from_options!(options) - Remover::List.new(github).unused_teams.each do |team| - Remover::Output.new(team, verbose?, remove?).output + puts Remover::Formatter.new(team).list_output + + team.delete_team if options[:remove] end end @@ -22,14 +23,6 @@ def list private - def verbose? - options[:verbose] - end - - def remove? - options[:remove] - end - def github Remover::Github.new(octokit) end diff --git a/lib/remover/configuration.rb b/lib/remover/configuration.rb index 8bbb72d..629c791 100644 --- a/lib/remover/configuration.rb +++ b/lib/remover/configuration.rb @@ -9,5 +9,13 @@ def load_from_options!(options) send("#{option}=", options[option.to_s]) end end + + def verbose? + true if options[:verbose] + end + + def remove? + true if options[:remove] + end end end diff --git a/lib/remover/formatter.rb b/lib/remover/formatter.rb new file mode 100644 index 0000000..4e6a934 --- /dev/null +++ b/lib/remover/formatter.rb @@ -0,0 +1,52 @@ +require 'colored' + +module Remover + class Formatter + TEAM_NAME = " Team Name: %{count}" + MEMBERS_AMOUNT = " Members amount: %{count}" + REPOS_AMOUNT = " Repositories amount: %{count}" + REPOS_LIST = " %{count}" + MEMBERS_LIST = " %{count}" + + + attr_accessor :team + + def initialize(team) + @team = team + end + + def list_output + "#{put_team_name} + #{put_repos_amount} + #{put_repos_list} + #{put_members_amount} + #{put_members_list}" + end + + private + + def put_repos_amount + (REPOS_AMOUNT % {count: team.repos_amount}).green + end + + def put_members_amount + (MEMBERS_AMOUNT % {count: team.members_amount}).green + end + + def put_team_name + (TEAM_NAME % {count: team.name}).red + end + + def put_repos_list + team.list_repos.each do |repos| + (REPOS_LIST % {count: repos.html_url}).yellow + end + end + + def put_members_list + team.list_members.each do |member| + (MEMBERS_LIST % {count: member.html_url}).yellow + end + end + end +end diff --git a/lib/remover/output.rb b/lib/remover/output.rb index ddf6164..2caa8a3 100644 --- a/lib/remover/output.rb +++ b/lib/remover/output.rb @@ -1,54 +1,52 @@ -require 'colorize' +require 'colored' module Remover class Output - attr_accessor :team, :verbose, :remove + TEAM_NAME = " Team Name: %{count}" + MEMBERS_AMOUNT = " Members amount: %{count}" + REPOS_AMOUNT = " Repositories amount: %{count}" + REPOS_LIST = " %{count}" + MEMBERS_LIST = " %{count}" - def initialize(team, verbose, remove) - @team, @verbose, @remove = team, verbose, remove + + attr_accessor :team + + def initialize(team) + @team = team end - def output - team_name - number_of_members - members if verbose - puts - number_of_repositories - repositories if verbose - puts - removed_team if remove - puts + def list_output + put_team_name + put_repos_amount + put_repos_list if verbose + put_members_amount + put_members_list if verbose end private - def team_name - puts "#{team.name}".colorize(:blue) + def put_repos_amount + (REPOS_AMOUNT % {count: team.repos_amount}).green end - def number_of_members - puts " Number of members: #{team.number_of_members}".colorize(:light_blue) + def put_members_amount + (MEMBERS_AMOUNT % {count: team.members_amount}).green end - def number_of_repositories - puts " Number of repositories: #{team.number_of_repositories}".colorize(:light_blue) + def put_team_name + (TEAM_NAME % {count: team.name}).red end - def members - team.members.each do |member| - puts " #{member.login}: #{member.html_url}".colorize(:green) + def put_repos_list + team.list_repos.each do |repos| + (REPOS_LIST % {count: repos.html_url}).yellow end end - def repositories - team.repositories.each do |repo| - puts " #{repo.name}: #{repo.html_url}".colorize(:green) + def put_members_list + team.list_members.each do |member| + (MEMBERS_LIST % {count: member.html_url}).yellow end end - - def removed_team - team.remove - puts " #{team.name} removed".colorize(:yellow) - end end end diff --git a/lib/remover/remove.rb b/lib/remover/remove.rb new file mode 100644 index 0000000..1a50d51 --- /dev/null +++ b/lib/remover/remove.rb @@ -0,0 +1,14 @@ +module Remover + class Remove + attr_accessor :team + + def initialize(team) + @team = team + end + + def remove_and_put_message + team.delete_team + puts " TEAM #{team.name} WAS REMOVED!".red_on_yellow + end + end +end diff --git a/lib/remover/team.rb b/lib/remover/team.rb index de27124..d0251ab 100644 --- a/lib/remover/team.rb +++ b/lib/remover/team.rb @@ -14,34 +14,34 @@ def name github_team.name end - def number_of_members + def delete_team + github_client.delete_team(github_team.id) + end + + def members_amount github_client.team_members(github_team.id).size end - def number_of_repositories + def repos_amount github_client.team_repositories(github_team.id).size end - def members + def list_members github_client.team_members(github_team.id) end - def repositories + def list_repos github_client.team_repositories(github_team.id) end - def remove - github_client.delete_team(github_team.id) - end - private def with_members? - github_client.team_members(github_team.id).size > 0 + members_amount > 0 end def with_repositories? - github_client.team_repositories(github_team.id).size > 0 + repos_amount > 0 end end end diff --git a/spec/remover/cli_spec.rb b/spec/remover/cli_spec.rb index ebb1656..7950db5 100644 --- a/spec/remover/cli_spec.rb +++ b/spec/remover/cli_spec.rb @@ -1,14 +1,12 @@ describe Remover::CLI do let(:options) do - { - 'organization' => 'FlatSchool', + { 'organization' => 'FlatSchool', 'login' => 'fs-school', 'password' => '123456', 'verbose' => 'true', 'remove' => 'true' } end - let(:configuration) { Remover::Configuration.new } describe '#verbose' do @@ -16,41 +14,19 @@ configuration.load_from_options!(options) end - it 'true' do + it 'returns true' do expect(configuration.verbose).to eq('true') end - context 'if #verbose false' do + context 'if --verbose key not entered' do let(:options) do { 'verbose' => 'false' } end - it 'false' do - expect(configuration.verbose).to eq('false') - end - end - end - - describe '#remove' do - before do - configuration.load_from_options!(options) - end - - it 'true' do - expect(configuration.remove).to eq('true') - end - - context 'if #remove false' do - let(:options) do - { - 'remove' => 'false' - } - end - - it 'false' do - expect(configuration.remove).to eq('false') + it 'returns false' do + expect(configuration.verbose).not_to eq('true') end end end diff --git a/spec/remover/remove_spec.rb b/spec/remover/remove_spec.rb new file mode 100644 index 0000000..d508175 --- /dev/null +++ b/spec/remover/remove_spec.rb @@ -0,0 +1,33 @@ +describe Remover::Remove do + let(:options) do + { 'organization' => 'FlatSchool', + 'login' => 'fs-school', + 'password' => '123456', + 'verbose' => 'true', + 'remove' => 'true' + } + end + let(:configuration) { Remover::Configuration.new } + + describe '#remove_and_put_message' do + before do + configuration.load_from_options!(options) + end + + it 'returns true' do + expect(configuration.remove).to eq('true') + end + + context 'if --remove key not entered' do + let(:options) do + { + 'remove' => 'false' + } + end + + it 'returns false' do + expect(configuration.remove).not_to eq('true') + end + end + end +end diff --git a/spec/remover/team_spec.rb b/spec/remover/team_spec.rb index 51040b6..e189789 100644 --- a/spec/remover/team_spec.rb +++ b/spec/remover/team_spec.rb @@ -9,105 +9,105 @@ end end - describe '#used' do - let(:members) { [double('Github Member')] } - let(:repositories) { [double('Github Repository')] } - + describe '#members_amount' do before do - allow(github_client).to receive(:team_members) { members } - allow(github_client).to receive(:team_repositories) { repositories } - end - - context 'with full of members and repositories' do - it 'not used' do - expect(team).to be_used - end + allow(github_client).to receive(:team_members) { [] } end - context 'without members' do - let(:members) { [] } - - it 'used' do - expect(team).not_to be_used - end + it 'returns Github team members amount' do + expect(team.members_amount).to eq(github_client.team_members(github_team.id).size) end + end - context 'without repositories' do - let(:repositories) { [] } - - it 'used' do - expect(team).not_to be_used - end + describe '#repos_amount' do + before do + allow(github_client).to receive(:team_repositories) { [] } end - context 'without members and repositories' do - let(:members) { [] } - let(:repositories) { [] } - - it 'used' do - expect(team).not_to be_used - end + it 'returns Github team repository amount' do + expect(team.repos_amount).to eq(github_client.team_repositories(github_team.id).size) end end - describe '#number_of_members' do + describe '#list_members' do before do allow(github_client).to receive(:team_members) { [] } end - it 'returns number of members' do - expect(team.number_of_members).to eq(github_client.team_members(github_team.id).size) + it 'returns array' do + expect(team.list_members).to be_an(Array) end end - describe '#number_of_repositories' do - before do - allow(github_client).to receive(:team_repositories) { [] } + describe '#delete_team' do + context 'if deleted' do + before do + allow(github_client).to receive(:delete_team) { true } + end + + it 'returns true' do + expect(team.delete_team).to eq(github_client.delete_team(github_team.id)) + end end - it 'returns number of repositories' do - expect(team.number_of_repositories).to eq(github_client.team_repositories(github_team.id).size) + context 'if not deleted' do + before do + allow(github_client).to receive(:delete_team) { false } + end + + it 'returns false' do + expect(team.delete_team).to eq(github_client.delete_team(github_team.id)) + end end end - describe '#members' do + describe '#list_repos' do before do - allow(github_client).to receive(:team_members) { [] } + allow(github_client).to receive(:team_repositories) { [] } end - it 'returns array of members' do - expect(team.members).to eq(github_client.team_members(github_team.id)) + it 'returns array' do + expect(team.list_repos).to be_an(Array) end end - describe '#repositories' do + describe '#used' do + let(:members) { [double('Github Member')] } + let(:repositories) { [double('Github Repository')] } + before do - allow(github_client).to receive(:team_repositories) { [] } + allow(github_client).to receive(:team_members) { members } + allow(github_client).to receive(:team_repositories) { repositories } end - it 'returns array of repositories' do - expect(team.repositories).to eq(github_client.team_repositories(github_team.id)) + context 'with full of members and repositories' do + it 'not used' do + expect(team).to be_used + end end - end - describe '#remove' do - context 'if teams removed' do - before do - allow(github_client).to receive(:delete_team) { true } - end + context 'without members' do + let(:members) { [] } - it 'returns true' do - expect(team.remove).to eq(github_client.delete_team(github_team.id)) + it 'used' do + expect(team).not_to be_used end end - context 'if teams not removed' do - before do - allow(github_client).to receive(:delete_team) { false } + context 'without repositories' do + let(:repositories) { [] } + + it 'used' do + expect(team).not_to be_used end + end - it 'returns false' do - expect(team.remove).to eq(github_client.delete_team(github_team.id)) + context 'without members and repositories' do + let(:members) { [] } + let(:repositories) { [] } + + it 'used' do + expect(team).not_to be_used end end end