From 488f8df3f98b9f1d8ed1f7ed0269a74cde27135a Mon Sep 17 00:00:00 2001 From: Max Date: Wed, 23 Apr 2014 20:24:37 +0400 Subject: [PATCH 01/14] Started work, created commander class && 1-easy task done --- Gemfile.lock | 4 +++- github-team-remover.gemspec | 1 + lib/remover/cli.rb | 16 ++++++++++------ lib/remover/commander.rb | 18 ++++++++++++++++++ lib/remover/team.rb | 9 +++++++++ spec/remover/commander_spec.rb | 23 +++++++++++++++++++++++ 6 files changed, 64 insertions(+), 7 deletions(-) create mode 100644 lib/remover/commander.rb create mode 100644 spec/remover/commander_spec.rb 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 4d2a35c..38d054c 100644 --- a/lib/remover/cli.rb +++ b/lib/remover/cli.rb @@ -1,19 +1,23 @@ require 'thor' +require 'colorize' module Remover class CLI < Thor - method_option :organization, required: true - method_option :login, required: true - method_option :password, required: true + method_option :organization, :aliases => "--o", required: true + method_option :login, :aliases => "--l", required: true + method_option :password, :aliases => "--p", required: true - desc('list', 'List unused teams') + desc('|Commands:', 'Alias, Command, Meaning.') def list Remover.configuration.load_from_options!(options) - Remover::List.new(github).unused_teams.each do |team| - puts team.name + puts 'Unused teams:'.colorize(:blue) + + Remover::List.new(github).unused_teams.each do |unused_team| + puts "Team name: #{unused_team.name}, Members: #{unused_team.members}, Repositories: #{unused_team.repos}" end + end default_task :list diff --git a/lib/remover/commander.rb b/lib/remover/commander.rb new file mode 100644 index 0000000..e213351 --- /dev/null +++ b/lib/remover/commander.rb @@ -0,0 +1,18 @@ +require 'thor' +require 'colorize' +require 'octokit' + +module Remover + class Commander + + def color + end + + def verbose + end + + def delete + end + + end +end diff --git a/lib/remover/team.rb b/lib/remover/team.rb index f8b8ac8..c187453 100644 --- a/lib/remover/team.rb +++ b/lib/remover/team.rb @@ -1,3 +1,4 @@ +# added members & repos module Remover class Team attr_accessor :github_client, :github_team @@ -14,6 +15,14 @@ def name github_team.name end + def members + github_client.team_members(github_team.id).size + end + + def repos + github_client.team_repositories(github_team.id).size + end + private def with_members? diff --git a/spec/remover/commander_spec.rb b/spec/remover/commander_spec.rb new file mode 100644 index 0000000..cec6f83 --- /dev/null +++ b/spec/remover/commander_spec.rb @@ -0,0 +1,23 @@ +describe Remover::Commander do + let(:commands) do + { + 'color' => 'blue', + 'verbose' => 'true', + 'delete' => 'true' + } + end + + let(:commander) { Remover::Commander.new } + + describe '#load from commands!(commands)' do + before do + commander.load_from_commands!(commands) + end + + it 'setting commands' do + expect(commander.color).to eq('blue') + expect(commander,verbose).to eq('true') + expect(commander.delete).to eq('true') + end + end +end From 6c456cba89682f67cf31450b2c8dc0d3e6230de0 Mon Sep 17 00:00:00 2001 From: Max Date: Wed, 23 Apr 2014 23:12:51 +0400 Subject: [PATCH 02/14] Added color as --c color ! Started working on verbose! Look comments! --- lib/remover/cli.rb | 18 ++++++++++++------ lib/remover/commander.rb | 2 +- lib/remover/configuration.rb | 3 ++- spec/remover/commander_spec.rb | 20 -------------------- 4 files changed, 15 insertions(+), 28 deletions(-) diff --git a/lib/remover/cli.rb b/lib/remover/cli.rb index 38d054c..a6a284c 100644 --- a/lib/remover/cli.rb +++ b/lib/remover/cli.rb @@ -3,27 +3,33 @@ 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 :organization, :aliases => '--o', required: true + method_option :login, :aliases => '--l', required: true + method_option :password, :aliases => '--p', required: true + method_option :color, :aliases => '--c' + method_option :verbose, :aliases => '--v' desc('|Commands:', 'Alias, Command, Meaning.') def list Remover.configuration.load_from_options!(options) - puts 'Unused teams:'.colorize(:blue) + puts 'Unused teams:'.colorize(color) Remover::List.new(github).unused_teams.each do |unused_team| - puts "Team name: #{unused_team.name}, Members: #{unused_team.members}, Repositories: #{unused_team.repos}" + puts "Team name: #{unused_team.name}, Members: #{unused_team.members}, Repositories: #{unused_team.repos}".colorize(color) end - end default_task :list private + def color + Remover.configuration.color.to_sym + end + def github Remover::Github.new(octokit) end diff --git a/lib/remover/commander.rb b/lib/remover/commander.rb index e213351..ae5bbe1 100644 --- a/lib/remover/commander.rb +++ b/lib/remover/commander.rb @@ -3,7 +3,7 @@ require 'octokit' module Remover - class Commander + class Commander < Thor def color end diff --git a/lib/remover/configuration.rb b/lib/remover/configuration.rb index 4495f6d..3647237 100644 --- a/lib/remover/configuration.rb +++ b/lib/remover/configuration.rb @@ -1,6 +1,7 @@ module Remover class Configuration - OPTIONS = %i(organization login password) + OPTIONS = %i(organization login password color verbose) + # DEFINITIONS = ['Organization name', 'Your login', 'Your password'] attr_accessor(*OPTIONS) diff --git a/spec/remover/commander_spec.rb b/spec/remover/commander_spec.rb index cec6f83..88289ea 100644 --- a/spec/remover/commander_spec.rb +++ b/spec/remover/commander_spec.rb @@ -1,23 +1,3 @@ describe Remover::Commander do - let(:commands) do - { - 'color' => 'blue', - 'verbose' => 'true', - 'delete' => 'true' - } - end - let(:commander) { Remover::Commander.new } - - describe '#load from commands!(commands)' do - before do - commander.load_from_commands!(commands) - end - - it 'setting commands' do - expect(commander.color).to eq('blue') - expect(commander,verbose).to eq('true') - expect(commander.delete).to eq('true') - end - end end From b35710474c2ff4b2b84fed8c7a014eb99081e14d Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 24 Apr 2014 00:04:02 +0400 Subject: [PATCH 03/14] added specs & made code readable a bit --- lib/remover/cli.rb | 4 ++-- lib/remover/configuration.rb | 1 - lib/remover/team.rb | 4 ++-- spec/remover/configuration_spec.rb | 6 +++++- spec/remover/team_spec.rb | 30 +++++++++++++++++++++++++++++- 5 files changed, 38 insertions(+), 7 deletions(-) diff --git a/lib/remover/cli.rb b/lib/remover/cli.rb index a6a284c..a144319 100644 --- a/lib/remover/cli.rb +++ b/lib/remover/cli.rb @@ -14,11 +14,11 @@ class CLI < Thor def list Remover.configuration.load_from_options!(options) - puts 'Unused teams:'.colorize(color) Remover::List.new(github).unused_teams.each do |unused_team| - puts "Team name: #{unused_team.name}, Members: #{unused_team.members}, Repositories: #{unused_team.repos}".colorize(color) + puts "Team name: #{unused_team.name}, Members: #{unused_team.members_amount}, + Repositories: #{unused_team.repositories_amount}".colorize(color) end end diff --git a/lib/remover/configuration.rb b/lib/remover/configuration.rb index 3647237..54b5f6b 100644 --- a/lib/remover/configuration.rb +++ b/lib/remover/configuration.rb @@ -1,7 +1,6 @@ module Remover class Configuration OPTIONS = %i(organization login password color verbose) - # DEFINITIONS = ['Organization name', 'Your login', 'Your password'] attr_accessor(*OPTIONS) diff --git a/lib/remover/team.rb b/lib/remover/team.rb index c187453..4e11f33 100644 --- a/lib/remover/team.rb +++ b/lib/remover/team.rb @@ -15,11 +15,11 @@ def name github_team.name end - def members + def members_amount github_client.team_members(github_team.id).size end - def repos + def repositories_amount github_client.team_repositories(github_team.id).size end diff --git a/spec/remover/configuration_spec.rb b/spec/remover/configuration_spec.rb index b656109..90b8f75 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', + 'color' => 'blue', + 'verbose' => '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.color).to eq('blue') + expect(configuration.verbose).to eq('true') end end end diff --git a/spec/remover/team_spec.rb b/spec/remover/team_spec.rb index f666388..8609fe5 100644 --- a/spec/remover/team_spec.rb +++ b/spec/remover/team_spec.rb @@ -1,5 +1,5 @@ describe Remover::Team do - let(:github_client) { double('Github Client') } + let(:github_client) { double('Github Client', members_amount: 1, repositories_amount: 1) } let(:github_team) { double('Github Team', id: 1, name: 'Owners') } let(:team) { Remover::Team.new(github_client, github_team) } @@ -9,6 +9,34 @@ end end + describe '#members' do + let(:members_amount) { [double(1)] } + + before do + allow(github_client).to receive(:team_members) { members_amount } + end + + context 'must be equal' do + it 'returns amount of members' do + expect(team.members_amount.size).to eq(github_client.members_amount.size) + end + end + end + + describe '#repositories_amount' do + let(:repositories_amount) { [double(1)] } + + before do + allow(github_client).to receive(:team_repositories) { repositories_amount } + end + + context 'must be equal' do + it 'returns amount of repos' do + expect(team.repositories_amount.size).to eq(github_client.repositories_amount.size) + end + end + end + describe '#used' do let(:members) { [double('Github Member')] } let(:repositories) { [double('Github Repository')] } From 052e05a5665b1d9e2cb468d6fdd61fcf3d3b8607 Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 24 Apr 2014 00:16:04 +0400 Subject: [PATCH 04/14] bugfix with CLI --- lib/remover/cli.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/remover/cli.rb b/lib/remover/cli.rb index a144319..d234a62 100644 --- a/lib/remover/cli.rb +++ b/lib/remover/cli.rb @@ -17,8 +17,10 @@ def list puts 'Unused teams:'.colorize(color) Remover::List.new(github).unused_teams.each do |unused_team| - puts "Team name: #{unused_team.name}, Members: #{unused_team.members_amount}, - Repositories: #{unused_team.repositories_amount}".colorize(color) + puts " + Team name: #{unused_team.name}, + Members: #{unused_team.members_amount}, + Repositories: #{unused_team.repositories_amount}".colorize(color) end end From 29e78b2445931086edf848535911e192614d1ba7 Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 24 Apr 2014 22:30:50 +0400 Subject: [PATCH 05/14] added --verbose, will make another class for reporting soon --- lib/remover/cli.rb | 31 +++++++++++++++++++++++++------ lib/remover/team.rb | 31 ++++++++++++++++++++++++++++--- spec/remover/team_spec.rb | 22 +++++++++++++++++++--- 3 files changed, 72 insertions(+), 12 deletions(-) diff --git a/lib/remover/cli.rb b/lib/remover/cli.rb index d234a62..4d02716 100644 --- a/lib/remover/cli.rb +++ b/lib/remover/cli.rb @@ -15,12 +15,23 @@ class CLI < Thor def list Remover.configuration.load_from_options!(options) puts 'Unused teams:'.colorize(color) - - Remover::List.new(github).unused_teams.each do |unused_team| - puts " - Team name: #{unused_team.name}, - Members: #{unused_team.members_amount}, - Repositories: #{unused_team.repositories_amount}".colorize(color) + if verbose? + Remover::List.new(github).unused_teams.each do |unused_team| + puts " + Team name: #{unused_team.name}, + Members: #{unused_team.members_amount}, + Members URL: #{unused_team.members_url}, + Repositories: #{unused_team.repositories_amount}, + Repositories URL: #{unused_team.repositories_url} + ".colorize(color) + end + else + Remover::List.new(github).unused_teams.each do |unused_team| + puts " + Team name: #{unused_team.name}, + Members: #{unused_team.members_amount}, + Repositories: #{unused_team.repositories_amount}".colorize(color) + end end end @@ -28,6 +39,14 @@ def list private + def verbose? + if ! options[:verbose].eql? nil + true + else + false + end + end + def color Remover.configuration.color.to_sym end diff --git a/lib/remover/team.rb b/lib/remover/team.rb index 4e11f33..828d101 100644 --- a/lib/remover/team.rb +++ b/lib/remover/team.rb @@ -1,4 +1,3 @@ -# added members & repos module Remover class Team attr_accessor :github_client, :github_team @@ -15,12 +14,38 @@ def name github_team.name end + def members_url + if with_members? + hash = Hash(*github_client.team_members(github_team.id)) + hash[:html_url] + else + 'no members' + end + end + + def repositories_url + if with_repositories? + hash = Hash(*github_client.team_repositories(github_team.id)) + hash[:html_url] + else + 'no repositories' + end + end + def members_amount - github_client.team_members(github_team.id).size + if with_members? + github_client.team_members(github_team.id).size + else + 0 + end end def repositories_amount - github_client.team_repositories(github_team.id).size + if with_repositories? + github_client.team_repositories(github_team.id).size + else + 0 + end end private diff --git a/spec/remover/team_spec.rb b/spec/remover/team_spec.rb index 8609fe5..41c9ba3 100644 --- a/spec/remover/team_spec.rb +++ b/spec/remover/team_spec.rb @@ -1,5 +1,5 @@ describe Remover::Team do - let(:github_client) { double('Github Client', members_amount: 1, repositories_amount: 1) } + let(:github_client) { double('Github Client', members_amount: 1, repositories_amount: 1, members_url: 'url') } let(:github_team) { double('Github Team', id: 1, name: 'Owners') } let(:team) { Remover::Team.new(github_client, github_team) } @@ -9,14 +9,30 @@ end end + + describe '#members_url' do + let(:members_url) {[double('Github Member')]} + + before do + allow(github_client).to receive(:team_members) {members_url} + end + + context 'members_url' do + it 'returns members url' do + expect(team.members_url).to eq(github_client.members_url) + end + end + end + + describe '#members' do - let(:members_amount) { [double(1)] } + let(:members_amount) { [double('Github Member')] } before do allow(github_client).to receive(:team_members) { members_amount } end - context 'must be equal' do + context 'memebers amount' do it 'returns amount of members' do expect(team.members_amount.size).to eq(github_client.members_amount.size) end From a424990d9a1bd86bfa7ba3fdd32f39d4e7d98b7a Mon Sep 17 00:00:00 2001 From: Max Date: Fri, 25 Apr 2014 23:31:53 +0400 Subject: [PATCH 06/14] verbose color delete works now, check comments --- github-team-remover.gemspec~ | 28 ++++++++++++++++++++++++ lib/remover.rb | 1 + lib/remover/cli.rb | 42 ++++++++++++++++-------------------- lib/remover/commander.rb | 18 ---------------- lib/remover/configuration.rb | 2 +- lib/remover/reporter.rb | 14 ++++++++++++ lib/remover/team.rb | 4 ++++ 7 files changed, 67 insertions(+), 42 deletions(-) create mode 100644 github-team-remover.gemspec~ delete mode 100644 lib/remover/commander.rb create mode 100644 lib/remover/reporter.rb diff --git a/github-team-remover.gemspec~ b/github-team-remover.gemspec~ new file mode 100644 index 0000000..d9b8661 --- /dev/null +++ b/github-team-remover.gemspec~ @@ -0,0 +1,28 @@ +# coding: utf-8 +lib = File.expand_path('../lib', __FILE__) +$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) + +require 'remover/version' + +Gem::Specification.new do |spec| + spec.name = "github-team-remover" + spec.version = Remover::VERSION + spec.authors = ["Flatstack School"] + spec.email = ["fs-admin+school@flatstack.com"] + spec.summary = %q{Show empty teams on github} + spec.description = %q{Show empty teams on github. Teams without members or tems without repositories.} + spec.homepage = "http://github.com/FlatstackSchool/github-team-remover" + spec.license = "MIT" + + spec.files = `git ls-files -z`.split("\x0") + spec.executables = ['github-team-remover'] + spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) + spec.require_paths = ["lib"] + + 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' +end diff --git a/lib/remover.rb b/lib/remover.rb index 01155dc..5ab3eea 100644 --- a/lib/remover.rb +++ b/lib/remover.rb @@ -3,6 +3,7 @@ require 'remover/github' require 'remover/team' require 'remover/list' +require 'remover/reporter' require 'remover/cli' require 'remover/configuration' diff --git a/lib/remover/cli.rb b/lib/remover/cli.rb index 4d02716..1f16c7a 100644 --- a/lib/remover/cli.rb +++ b/lib/remover/cli.rb @@ -7,31 +7,27 @@ 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 :color, :aliases => '--c' + method_option :color, :aliases => '--c', :default => :white method_option :verbose, :aliases => '--v' + method_option :delete, :aliases => '--d' desc('|Commands:', 'Alias, Command, Meaning.') def list Remover.configuration.load_from_options!(options) puts 'Unused teams:'.colorize(color) - if verbose? Remover::List.new(github).unused_teams.each do |unused_team| - puts " - Team name: #{unused_team.name}, - Members: #{unused_team.members_amount}, - Members URL: #{unused_team.members_url}, - Repositories: #{unused_team.repositories_amount}, - Repositories URL: #{unused_team.repositories_url} - ".colorize(color) - end - else - Remover::List.new(github).unused_teams.each do |unused_team| - puts " - Team name: #{unused_team.name}, - Members: #{unused_team.members_amount}, - Repositories: #{unused_team.repositories_amount}".colorize(color) - end + puts " ------------------------------".colorize(color) + puts " DELETED!".colorize(:red) if delete? + puts " Team name: #{unused_team.name}".colorize(color) + puts " Members: #{unused_team.members_amount}".colorize(color) + puts " Members URL:".colorize(color) + puts " #{unused_team.members_url.colorize(:yellow)}" if verbose? + puts " Repositories: #{unused_team.repositories_amount}".colorize(color) + puts " Repositories URL:".colorize(color) + puts " #{unused_team.repositories_url.colorize(:yellow)}" if verbose? + puts " ------------------------------".colorize(color) + unused_team.delete_team end end @@ -39,16 +35,16 @@ def list private + def delete? + true if options[:delete] + end + def verbose? - if ! options[:verbose].eql? nil - true - else - false - end + true if options[:verbose] end def color - Remover.configuration.color.to_sym + Remover.configuration.color.intern end def github diff --git a/lib/remover/commander.rb b/lib/remover/commander.rb deleted file mode 100644 index ae5bbe1..0000000 --- a/lib/remover/commander.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'thor' -require 'colorize' -require 'octokit' - -module Remover - class Commander < Thor - - def color - end - - def verbose - end - - def delete - end - - end -end diff --git a/lib/remover/configuration.rb b/lib/remover/configuration.rb index 54b5f6b..b017331 100644 --- a/lib/remover/configuration.rb +++ b/lib/remover/configuration.rb @@ -1,6 +1,6 @@ module Remover class Configuration - OPTIONS = %i(organization login password color verbose) + OPTIONS = %i(organization login password color verbose delete) attr_accessor(*OPTIONS) diff --git a/lib/remover/reporter.rb b/lib/remover/reporter.rb new file mode 100644 index 0000000..2324a70 --- /dev/null +++ b/lib/remover/reporter.rb @@ -0,0 +1,14 @@ +module Remover + class Reporter + + attr_accessor :color, :verbose + + def initialize() + end + + def test + puts "TEST!" + end + + end +end diff --git a/lib/remover/team.rb b/lib/remover/team.rb index 828d101..50c84a8 100644 --- a/lib/remover/team.rb +++ b/lib/remover/team.rb @@ -14,6 +14,10 @@ def name github_team.name end + def delete_team + github_client.delete_team(github_team.id) + end + def members_url if with_members? hash = Hash(*github_client.team_members(github_team.id)) From a96ebc247c53c264ed1c2497fa1061aa4bbe5d6f Mon Sep 17 00:00:00 2001 From: Max Date: Sat, 26 Apr 2014 00:24:30 +0400 Subject: [PATCH 07/14] bugfixes --- lib/remover/cli.rb | 15 ++++++- lib/remover/team.rb | 4 +- spec/remover/cli_spec.rb | 80 ++++++++++++++++++++++++++++++++++ spec/remover/commander_spec.rb | 3 -- spec/remover/team_spec.rb | 56 ++++++++++++++++-------- 5 files changed, 133 insertions(+), 25 deletions(-) create mode 100644 spec/remover/cli_spec.rb delete mode 100644 spec/remover/commander_spec.rb diff --git a/lib/remover/cli.rb b/lib/remover/cli.rb index 1f16c7a..f4dcde6 100644 --- a/lib/remover/cli.rb +++ b/lib/remover/cli.rb @@ -7,11 +7,22 @@ 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 :color, :aliases => '--c', :default => :white + method_option :color, :default => :white, :aliases => '--c' method_option :verbose, :aliases => '--v' method_option :delete, :aliases => '--d' - desc('|Commands:', 'Alias, Command, Meaning.') + desc('|Commands:', 'help list for more info') + + long_desc <<-LONGDESC + Optional commands: + --c color : will colorize your output. + + You can use red, yellow, green, white and maybe others colors + + --v => additional info, URL for users and repos + + --d => will delete all unused teams + LONGDESC def list Remover.configuration.load_from_options!(options) diff --git a/lib/remover/team.rb b/lib/remover/team.rb index 50c84a8..08bfe25 100644 --- a/lib/remover/team.rb +++ b/lib/remover/team.rb @@ -21,7 +21,7 @@ def delete_team def members_url if with_members? hash = Hash(*github_client.team_members(github_team.id)) - hash[:html_url] + hash[:html_url].to_s else 'no members' end @@ -30,7 +30,7 @@ def members_url def repositories_url if with_repositories? hash = Hash(*github_client.team_repositories(github_team.id)) - hash[:html_url] + hash[:html_url].to_s else 'no repositories' end diff --git a/spec/remover/cli_spec.rb b/spec/remover/cli_spec.rb new file mode 100644 index 0000000..8b29725 --- /dev/null +++ b/spec/remover/cli_spec.rb @@ -0,0 +1,80 @@ +describe Remover::CLI do + let(:options) do + { 'organization' => 'FlatSchool', + 'login' => 'fs-school', + 'password' => '123456', + 'color' => :blue, + 'verbose' => 'true', + 'delete' => 'true' + } + end + + let(:configuration) { Remover::Configuration.new } + + describe '#color' do + before do + configuration.load_from_options!(options) + end + + it 'returns true' do + expect(configuration.color).to eq(:blue) + end + + context '--color not used' do + let(:options) do + { + 'color' => :white + } + end + + it 'is default => :white' do + expect(configuration.color).to eq(:white) + end + end + end + + + describe '#verbose' do + before do + configuration.load_from_options!(options) + end + + it 'returns true' do + expect(configuration.verbose).to eq('true') + end + + context '--verbose not used' do + let(:options) do + { + 'verbose' => 'false' + } + end + it 'returns false' do + expect(configuration.verbose).not_to eq('true') + end + end + end + + + describe '#delete_team' do + before do + configuration.load_from_options!(options) + end + + it 'returns true' do + expect(configuration.delete).to eq('true') + end + + context 'if --delete key not entered' do + let(:options) do + { + 'delete' => 'false' + } + end + + it 'returns false' do + expect(configuration.delete).not_to eq('true') + end + end + end +end diff --git a/spec/remover/commander_spec.rb b/spec/remover/commander_spec.rb deleted file mode 100644 index 88289ea..0000000 --- a/spec/remover/commander_spec.rb +++ /dev/null @@ -1,3 +0,0 @@ -describe Remover::Commander do - -end diff --git a/spec/remover/team_spec.rb b/spec/remover/team_spec.rb index 41c9ba3..002bdc7 100644 --- a/spec/remover/team_spec.rb +++ b/spec/remover/team_spec.rb @@ -11,44 +11,64 @@ describe '#members_url' do - let(:members_url) {[double('Github Member')]} + before do + allow(github_client).to receive(:team_members) { [] } + end + + it 'returns array' do + expect(team.members_url).to be_a(String) + end + end + describe '#repositories_url' do before do - allow(github_client).to receive(:team_members) {members_url} + allow(github_client).to receive(:team_repositories) { [] } end - context 'members_url' do - it 'returns members url' do - expect(team.members_url).to eq(github_client.members_url) - end + it 'returns array' do + expect(team.repositories_url).to be_a(String) end end describe '#members' do - let(:members_amount) { [double('Github Member')] } - before do - allow(github_client).to receive(:team_members) { members_amount } + allow(github_client).to receive(:team_members) { [] } end - context 'memebers amount' do - it 'returns amount of members' do - expect(team.members_amount.size).to eq(github_client.members_amount.size) - end + it 'returns amount of members' do + expect(team.members_amount).to eq(github_client.team_members(github_team.id).size) end end describe '#repositories_amount' do - let(:repositories_amount) { [double(1)] } - before do - allow(github_client).to receive(:team_repositories) { repositories_amount } + allow(github_client).to receive(:team_repositories) { [] } end - context 'must be equal' do it 'returns amount of repos' do - expect(team.repositories_amount.size).to eq(github_client.repositories_amount.size) + expect(team.repositories_amount).to eq(github_client.team_repositories(github_team.id).size) + end + end + + 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 + + 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 From 4a5f510b0273acf75c8ca84fb331c34b4d6b9e15 Mon Sep 17 00:00:00 2001 From: Max Date: Sat, 26 Apr 2014 00:43:16 +0400 Subject: [PATCH 08/14] added Remover class, look comments --- lib/remover/cli.rb | 1 + lib/remover/reporter.rb | 51 +++++++++++++++++++++++++++++++++++++---- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/lib/remover/cli.rb b/lib/remover/cli.rb index f4dcde6..8c10f11 100644 --- a/lib/remover/cli.rb +++ b/lib/remover/cli.rb @@ -24,6 +24,7 @@ class CLI < Thor --d => will delete all unused teams LONGDESC + def list Remover.configuration.load_from_options!(options) puts 'Unused teams:'.colorize(color) diff --git a/lib/remover/reporter.rb b/lib/remover/reporter.rb index 2324a70..c9776e6 100644 --- a/lib/remover/reporter.rb +++ b/lib/remover/reporter.rb @@ -1,13 +1,56 @@ +require 'colorize' + module Remover class Reporter - attr_accessor :color, :verbose + attr_accessor :unused_team :color, :verbose, :delete + + def initialize(unused_team, color, verbose, delete) + @unused_team, @color, @verbose, @delete = unused_team, color, verbose, delete + end + + def report_to_cli + puts " ------------------------------".colorize(color_it) + report_and_delete + team_name + members_amount + members_url + repos_amount + repos_url + puts " ------------------------------".colorize(color_it) + end + + private + + def team_name + puts " Team name: #{unused_team.name}".colorize(color_it) + end + + def members_amount + puts " Members: #{unused_team.members_amount}".colorize(color_it) + end + + def members_url + puts " Members URL:".colorize(color_it) + puts " #{unused_team.members_url.colorize(:yellow)}" if verbose? + end + + def repos_amount + puts " Repositories: #{unused_team.repositories_amount}".colorize(color_it) + end + + def repos_url + puts " Repositories URL:".colorize(color) + puts " #{unused_team.repositories_url.colorize(:yellow)}" if verbose? + end - def initialize() + def report_and_delete + puts " DELETED!".colorize(:red) if delete + unused_team.delete_team end - def test - puts "TEST!" + def color_it + color end end From 9f959577bf7f383d94ff16fc044e82d827737451 Mon Sep 17 00:00:00 2001 From: Max Date: Sat, 26 Apr 2014 00:53:49 +0400 Subject: [PATCH 09/14] quality fixes --- lib/remover/cli.rb | 28 +++++++++++++--------------- lib/remover/reporter.rb | 2 +- spec/remover/cli_spec.rb | 2 -- spec/remover/team_spec.rb | 16 +++++++--------- 4 files changed, 21 insertions(+), 27 deletions(-) diff --git a/lib/remover/cli.rb b/lib/remover/cli.rb index 8c10f11..883a182 100644 --- a/lib/remover/cli.rb +++ b/lib/remover/cli.rb @@ -3,7 +3,6 @@ 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 @@ -24,22 +23,21 @@ class CLI < Thor --d => will delete all unused teams LONGDESC - def list Remover.configuration.load_from_options!(options) - puts 'Unused teams:'.colorize(color) - Remover::List.new(github).unused_teams.each do |unused_team| - puts " ------------------------------".colorize(color) - puts " DELETED!".colorize(:red) if delete? - puts " Team name: #{unused_team.name}".colorize(color) - puts " Members: #{unused_team.members_amount}".colorize(color) - puts " Members URL:".colorize(color) - puts " #{unused_team.members_url.colorize(:yellow)}" if verbose? - puts " Repositories: #{unused_team.repositories_amount}".colorize(color) - puts " Repositories URL:".colorize(color) - puts " #{unused_team.repositories_url.colorize(:yellow)}" if verbose? - puts " ------------------------------".colorize(color) - unused_team.delete_team + puts 'Unused teams:'.colorize(color) + Remover::List.new(github).unused_teams.each do |unused_team| + puts ' ------------------------------'.colorize(color) + puts ' DELETED!'.colorize(:red) if delete? + puts " Team name: #{unused_team.name}".colorize(color) + puts " Members: #{unused_team.members_amount}".colorize(color) + puts ' Members URL:'.colorize(color) + puts " #{unused_team.members_url.colorize(:yellow)}" if verbose? + puts " Repositories: #{unused_team.repositories_amount}".colorize(color) + puts ' Repositories URL:'.colorize(color) + puts " #{unused_team.repositories_url.colorize(:yellow)}" if verbose? + puts ' ------------------------------'.colorize(color) + unused_team.delete_team end end diff --git a/lib/remover/reporter.rb b/lib/remover/reporter.rb index c9776e6..921c6b5 100644 --- a/lib/remover/reporter.rb +++ b/lib/remover/reporter.rb @@ -3,7 +3,7 @@ module Remover class Reporter - attr_accessor :unused_team :color, :verbose, :delete + attr_accessor :unused_team, :color, :verbose, :delete def initialize(unused_team, color, verbose, delete) @unused_team, @color, @verbose, @delete = unused_team, color, verbose, delete diff --git a/spec/remover/cli_spec.rb b/spec/remover/cli_spec.rb index 8b29725..d576ddd 100644 --- a/spec/remover/cli_spec.rb +++ b/spec/remover/cli_spec.rb @@ -33,7 +33,6 @@ end end - describe '#verbose' do before do configuration.load_from_options!(options) @@ -55,7 +54,6 @@ end end - describe '#delete_team' do before do configuration.load_from_options!(options) diff --git a/spec/remover/team_spec.rb b/spec/remover/team_spec.rb index 002bdc7..ff1f87d 100644 --- a/spec/remover/team_spec.rb +++ b/spec/remover/team_spec.rb @@ -9,7 +9,6 @@ end end - describe '#members_url' do before do allow(github_client).to receive(:team_members) { [] } @@ -30,14 +29,13 @@ end end - describe '#members' do before do allow(github_client).to receive(:team_members) { [] } end it 'returns amount of members' do - expect(team.members_amount).to eq(github_client.team_members(github_team.id).size) + expect(team.members_amount).to eq(github_client.team_members(github_team.id).size) end end @@ -46,10 +44,10 @@ allow(github_client).to receive(:team_repositories) { [] } end - it 'returns amount of repos' do - expect(team.repositories_amount).to eq(github_client.team_repositories(github_team.id).size) - end + it 'returns amount of repos' do + expect(team.repositories_amount).to eq(github_client.team_repositories(github_team.id).size) end + end describe '#delete_team' do context 'if deleted' do @@ -57,10 +55,10 @@ 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 + it 'returns true' do + expect(team.delete_team).to eq(github_client.delete_team(github_team.id)) end + end context 'if not deleted' do before do From f80a83d386f3576f092fe1823703c114ab98c13e Mon Sep 17 00:00:00 2001 From: Max Date: Mon, 28 Apr 2014 13:50:07 +0400 Subject: [PATCH 10/14] spec fixes --- lib/remover/reporter.rb | 4 ++-- spec/remover/team_spec.rb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/remover/reporter.rb b/lib/remover/reporter.rb index 921c6b5..e2075ac 100644 --- a/lib/remover/reporter.rb +++ b/lib/remover/reporter.rb @@ -11,12 +11,12 @@ def initialize(unused_team, color, verbose, delete) def report_to_cli puts " ------------------------------".colorize(color_it) - report_and_delete team_name members_amount members_url repos_amount repos_url + report_and_delete puts " ------------------------------".colorize(color_it) end @@ -45,7 +45,7 @@ def repos_url end def report_and_delete - puts " DELETED!".colorize(:red) if delete + puts " !DELETED!".colorize(:red) if delete unused_team.delete_team end diff --git a/spec/remover/team_spec.rb b/spec/remover/team_spec.rb index ff1f87d..6486690 100644 --- a/spec/remover/team_spec.rb +++ b/spec/remover/team_spec.rb @@ -1,5 +1,5 @@ describe Remover::Team do - let(:github_client) { double('Github Client', members_amount: 1, repositories_amount: 1, members_url: 'url') } + let(:github_client) { double('Github Client') } let(:github_team) { double('Github Team', id: 1, name: 'Owners') } let(:team) { Remover::Team.new(github_client, github_team) } From 35ea487a9e287a00aa6332ab14ca05e3b88a2a58 Mon Sep 17 00:00:00 2001 From: Max Date: Mon, 28 Apr 2014 14:03:37 +0400 Subject: [PATCH 11/14] delete fix --- lib/remover/cli.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/remover/cli.rb b/lib/remover/cli.rb index 883a182..646dc77 100644 --- a/lib/remover/cli.rb +++ b/lib/remover/cli.rb @@ -31,13 +31,13 @@ def list puts ' DELETED!'.colorize(:red) if delete? puts " Team name: #{unused_team.name}".colorize(color) puts " Members: #{unused_team.members_amount}".colorize(color) - puts ' Members URL:'.colorize(color) + puts ' Members URL:'.colorize(color) if verbose? puts " #{unused_team.members_url.colorize(:yellow)}" if verbose? puts " Repositories: #{unused_team.repositories_amount}".colorize(color) - puts ' Repositories URL:'.colorize(color) + puts ' Repositories URL:'.colorize(color) if verbose? puts " #{unused_team.repositories_url.colorize(:yellow)}" if verbose? puts ' ------------------------------'.colorize(color) - unused_team.delete_team + unused_team.delete_team if delete? end end From b99d78c872104ecee558a8dee23529e252b51cbf Mon Sep 17 00:00:00 2001 From: latnedis Date: Tue, 29 Apr 2014 09:26:02 +0400 Subject: [PATCH 12/14] now works everything, thanks to Bulat PC --- bin/github-team-remover | 1 + lib/remover/cli.rb | 12 +----------- lib/remover/reporter.rb | 14 +++++++++++--- 3 files changed, 13 insertions(+), 14 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/cli.rb b/lib/remover/cli.rb index 646dc77..b7421c7 100644 --- a/lib/remover/cli.rb +++ b/lib/remover/cli.rb @@ -27,17 +27,7 @@ def list Remover.configuration.load_from_options!(options) puts 'Unused teams:'.colorize(color) Remover::List.new(github).unused_teams.each do |unused_team| - puts ' ------------------------------'.colorize(color) - puts ' DELETED!'.colorize(:red) if delete? - puts " Team name: #{unused_team.name}".colorize(color) - puts " Members: #{unused_team.members_amount}".colorize(color) - puts ' Members URL:'.colorize(color) if verbose? - puts " #{unused_team.members_url.colorize(:yellow)}" if verbose? - puts " Repositories: #{unused_team.repositories_amount}".colorize(color) - puts ' Repositories URL:'.colorize(color) if verbose? - puts " #{unused_team.repositories_url.colorize(:yellow)}" if verbose? - puts ' ------------------------------'.colorize(color) - unused_team.delete_team if delete? + Remover::Reporter.new(unused_team, color, verbose?, delete?).report_to_cli end end diff --git a/lib/remover/reporter.rb b/lib/remover/reporter.rb index e2075ac..41d3f74 100644 --- a/lib/remover/reporter.rb +++ b/lib/remover/reporter.rb @@ -13,15 +13,23 @@ def report_to_cli puts " ------------------------------".colorize(color_it) team_name members_amount - members_url + members_url if verbose? repos_amount - repos_url - report_and_delete + repos_url if verbose? + report_and_delete if delete? puts " ------------------------------".colorize(color_it) end private + def verbose? + true if @verbose + end + + def delete? + true if @delete + end + def team_name puts " Team name: #{unused_team.name}".colorize(color_it) end From 04df84901d5b9e90db25f80d8e217dd48b1dcff3 Mon Sep 17 00:00:00 2001 From: Max Date: Tue, 29 Apr 2014 11:35:18 +0400 Subject: [PATCH 13/14] All is done! Quality fixes --- lib/remover/cli.rb | 12 ++++++------ lib/remover/reporter.rb | 14 ++++++-------- lib/remover/team.rb | 8 ++++---- spec/remover/team_spec.rb | 6 +++--- 4 files changed, 19 insertions(+), 21 deletions(-) diff --git a/lib/remover/cli.rb b/lib/remover/cli.rb index b7421c7..b76dc1e 100644 --- a/lib/remover/cli.rb +++ b/lib/remover/cli.rb @@ -3,12 +3,12 @@ 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 :color, :default => :white, :aliases => '--c' - method_option :verbose, :aliases => '--v' - method_option :delete, :aliases => '--d' + method_option :organization, aliases: '--o', required: true + method_option :login, aliases: '--l', required: true + method_option :password, aliases: '--p', required: true + method_option :color, default: :white, aliases: '--c' + method_option :verbose, aliases: '--v' + method_option :delete, aliases: '--d' desc('|Commands:', 'help list for more info') diff --git a/lib/remover/reporter.rb b/lib/remover/reporter.rb index 41d3f74..96ed0c2 100644 --- a/lib/remover/reporter.rb +++ b/lib/remover/reporter.rb @@ -2,7 +2,6 @@ module Remover class Reporter - attr_accessor :unused_team, :color, :verbose, :delete def initialize(unused_team, color, verbose, delete) @@ -10,14 +9,14 @@ def initialize(unused_team, color, verbose, delete) end def report_to_cli - puts " ------------------------------".colorize(color_it) + puts ' ------------------------------'.colorize(color_it) team_name members_amount members_url if verbose? repos_amount repos_url if verbose? report_and_delete if delete? - puts " ------------------------------".colorize(color_it) + puts ' ------------------------------'.colorize(color_it) end private @@ -39,7 +38,7 @@ def members_amount end def members_url - puts " Members URL:".colorize(color_it) + puts ' Members URL:'.colorize(color_it) puts " #{unused_team.members_url.colorize(:yellow)}" if verbose? end @@ -48,18 +47,17 @@ def repos_amount end def repos_url - puts " Repositories URL:".colorize(color) - puts " #{unused_team.repositories_url.colorize(:yellow)}" if verbose? + puts ' Repositories URL:'.colorize(color) + puts " #{unused_team.repositories_url.colorize(:yellow)}" if verbose? end def report_and_delete - puts " !DELETED!".colorize(:red) if delete + puts ' !DELETED!'.colorize(:red) if delete unused_team.delete_team end def color_it color end - end end diff --git a/lib/remover/team.rb b/lib/remover/team.rb index 08bfe25..382b910 100644 --- a/lib/remover/team.rb +++ b/lib/remover/team.rb @@ -20,8 +20,8 @@ def delete_team def members_url if with_members? - hash = Hash(*github_client.team_members(github_team.id)) - hash[:html_url].to_s + users_hash = Hash(*github_client.team_members(github_team.id)) + users_hash[:html_url].to_s else 'no members' end @@ -29,8 +29,8 @@ def members_url def repositories_url if with_repositories? - hash = Hash(*github_client.team_repositories(github_team.id)) - hash[:html_url].to_s + repos_hash = Hash(*github_client.team_repositories(github_team.id)) + repos_hash[:html_url].to_s else 'no repositories' end diff --git a/spec/remover/team_spec.rb b/spec/remover/team_spec.rb index 6486690..88dafa4 100644 --- a/spec/remover/team_spec.rb +++ b/spec/remover/team_spec.rb @@ -55,10 +55,10 @@ 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)) + it 'returns true' do + expect(team.delete_team).to eq(github_client.delete_team(github_team.id)) + end end - end context 'if not deleted' do before do From ad8307db4b11957718be6e40d1d376b3cd7f8bed Mon Sep 17 00:00:00 2001 From: Max Larionov Date: Tue, 29 Apr 2014 11:42:23 +0400 Subject: [PATCH 14/14] Update README.md Updated readme --- README.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e40b99b..c22b909 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,13 @@ ```ruby github-team-remover \ - --organization FlatstackSchool \ - --login github-login \ - --password github-password + --organization FlatstackSchool, or --o \ + --login github-login, or --l \ + --password github-password, or --p \ +optional + --color color, like blue, or --c \ + --verbose or --v + --delete or --d ``` ## Install