272 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			272 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/zsh
 | |
| 
 | |
| #
 | |
| # rnt() = RentDynamics God Function
 | |
| #
 | |
| # Performs one of the following actions based on first argument:
 | |
| # 	- (arg = NO ARGUMENT)  Deactivate current virtual environment and return to $RD_PATH
 | |
| # 	- (arg = project-name) Activate (and step into) project by name
 | |
| # 	- (arg = 'db')         Connect to databases available to the 1-password api
 | |
| # 	- (arg = 'op')         1pass login/logout tool for current shell (assists in quick db access)
 | |
| # 	- (arg = 'refresh_db') Drops and recreates local POSTGRES databases
 | |
| # 	- (arg = 'cleanup')    Performs safe-deletions on all projects' inactive branches
 | |
| # 	- (arg = 'status')     Uses 'rockymadden/slack-cli' to update slack status
 | |
| # 	- (arg = 'mail')       BROKEN : Uses a VMAIL client to connect to email
 | |
| #
 | |
| # The (arg = project-name) case requires the following project file-structure:
 | |
| #	$RD_PATH/project-name
 | |
| #	  | /code (created by git clone PROJECT_URL code)
 | |
| #	  | /env  (created by virtualenv or nodeenv)
 | |
| #	
 | |
| 
 | |
| function rnt() {
 | |
| 	ERROR_CODE=0;
 | |
| 
 | |
| 	case $1 in
 | |
| 		db | DB)
 | |
| 			RENT_DYNAMICS_CONNECT_TO_DATABASE "${@:2}" || ERROR_CODE=1;
 | |
| 			;;
 | |
| 		refresh_db | REFRESH_DB)
 | |
| 			RENT_DYNAMICS_REFRESH_LOCAL_POSTGRES_DATABASES "${@:2}" || ERROR_CODE=2;
 | |
| 			;;
 | |
| 		cleanup | CLEANUP)
 | |
| 			RENT_DYNAMICS_GIT_PROJECT_CLEAN_UP "${@:2}" || ERROR_CODE=3;
 | |
| 			;;
 | |
| 		status | slack-status)
 | |
| 			RENT_DYNAMICS_UPDATE_SLACK_STATUS "${@:2}" || ERROR_CODE=4;
 | |
| 			;;
 | |
| 		mail | MAIL | email | EMAIL)
 | |
| 			# RENT_DYNAMICS_CONNECT_TO_EMAIL "${@:2}";
 | |
| 			echo "Email not currently supported :c"
 | |
| 			ERROR_CODE=5;
 | |
| 			;;
 | |
| 		op | 1pass )
 | |
| 			RENT_DYNAMICS_ONE_PASSWORD "${@:2}" || ERROR_CODE=6;
 | |
| 			;;
 | |
| 		*)
 | |
| 			deactivate >/dev/null 2>/dev/null || deactivate_node >/dev/null 2>/dev/null;
 | |
| 			cd "$RD_PATH"
 | |
| 
 | |
| 			[ -d "$1" ] && {
 | |
| 				cd "$1" >/dev/null 2>/dev/null;
 | |
| 				[ -f "./env/bin/activate" ] \
 | |
| 					&& source "./env/bin/activate" \
 | |
| 					|| echo No environment here, boss!;
 | |
| 				[ -d "./code" ] && cd "./code";
 | |
| 			}
 | |
| 	esac
 | |
| 
 | |
| 	return ERROR_CODE;
 | |
| }
 | |
| _rnt () { # autocompletion
 | |
| 	local state;
 | |
| 
 | |
| 	_arguments \
 | |
| 		'1: :->project_or_command'\
 | |
| 		':: :->command_args'\
 | |
| 		;
 | |
| 	case "$state" in
 | |
| 		project_or_command)
 | |
| 			compadd $(ls "$RD_PATH");
 | |
| 			compadd db refresh_db cleanup mail status op;
 | |
| 			;;
 | |
| 		command_args)
 | |
| 			[ $words[2] == 'status' ] && _RENT_DYNAMICS_UPDATE_SLACK_STATUS;
 | |
| 			[ $words[2] == 'op' ] && _RENT_DYNAMICS_ONE_PASSWORD;
 | |
| 			;;
 | |
| 	esac
 | |
| }
 | |
| compdef _rnt rnt;
 | |
| 
 | |
| ###############################################################################
 | |
| ### HELPERS ###################################################################
 | |
| ###############################################################################
 | |
| 
 | |
| function RENT_DYNAMICS_CONNECT_TO_DATABASE() {
 | |
| 	"$DOTWRYN/bin/rd-db.sh" "$@";
 | |
| }
 | |
| 
 | |
| function RENT_DYNAMICS_REFRESH_LOCAL_POSTGRES_DATABASES() {
 | |
| 	psql postgres -c "DROP DATABASE rentdynamics;"
 | |
| 	psql postgres -c "CREATE DATABASE rentdynamics with owner rd;"
 | |
| 	psql postgres -c "DROP DATABASE rdrentplus;"
 | |
| 	psql postgres -c "CREATE DATABASE rdrentplus with owner rd;"
 | |
| }
 | |
| 
 | |
| function RENT_DYNAMICS_GIT_PROJECT_CLEAN_UP() {
 | |
| 	printf "\nInitializing branch cleanup...\n\n"
 | |
| 	for dir in $(ls $RD_PATH); do
 | |
| 		rnt $dir >/dev/null 2>/dev/null;
 | |
| 		if [ -d .git ]; then
 | |
| 			printf " - %s\e[1;34m %s\e[0m..." "clearing repository" "$dir";
 | |
| 			git branch -d $(git branch | sed -E "/master|\*|epic-*/d") >/dev/null 2>/dev/null;
 | |
| 			printf "\e[1;32m%s\e[0m\n" " DONE";
 | |
| 		else
 | |
| 			printf " - \e[1;34m%s\e[1;31m %s\e[0m\n" "$dir" "is not a git repository";
 | |
| 		fi
 | |
| 		rnt;
 | |
| 	done;
 | |
| 	printf "\n\n\e[1;36m%s\e[1;35m %s\e[0m\n\n" "RentDynamics" "repository branches all clean!";
 | |
| }
 | |
| 
 | |
| function RENT_DYNAMICS_CONNECT_TO_EMAIL() {
 | |
| 	'VMAIL_HOME=~/.vmail/business1 vmail';
 | |
| }
 | |
| 
 | |
| function RENT_DYNAMICS_UPDATE_SLACK_STATUS() {
 | |
| 	slack-cli --version >/dev/null 2>&1 || {
 | |
| 		echo 'I require the slack-cli. For installation and setup, see https://github.com/rockymadden/slack-cli';
 | |
| 	}
 | |
| 	ERROR_MESSAGE="Slack CLI Error"
 | |
| 
 | |
| 	local STATUS_ARG;
 | |
| 	case $1 in
 | |
| 		start)
 | |
| 			STATUS_ARG='boost';
 | |
| 			;;
 | |
| 		stop)
 | |
| 			STATUS_ARG='ride';
 | |
| 			;;
 | |
| 		*)
 | |
| 			STATUS_ARG="$1";
 | |
| 			;;
 | |
| 	esac
 | |
| 
 | |
| 	local MESSAGE;
 | |
| 	local EMOJI;
 | |
| 	case $STATUS_ARG in
 | |
| 		boost | boost-fire | f-zero)
 | |
| 			MESSAGE="Use your heart, and boost fire!"; EMOJI=':boost_fire:';
 | |
| 			;;
 | |
| 		monkas)
 | |
| 			MESSAGE=" "; EMOJI=':monkas:';
 | |
| 			;;
 | |
| 
 | |
| 		ride | bike-ride | bike)
 | |
| 			MESSAGE="probably riding"; EMOJI=':man-biking:';
 | |
| 			;;
 | |
| 		plank)
 | |
| 			MESSAGE="plank time!"; EMOJI=':evergreen_tree:';
 | |
| 			;;
 | |
| 		meal | eat | food)
 | |
| 			MESSAGE="so hungry..."; EMOJI=':hamburger:';
 | |
| 			;;
 | |
| 		turbo)
 | |
| 			MESSAGE="ZOOOM"; EMOJI=':turbo:';
 | |
| 			;;
 | |
| 		super)
 | |
| 			MESSAGE="AAAAAAAAAAAAHHHHHHHHH"; EMOJI=':gohan:';
 | |
| 			;;
 | |
| 		meeting)
 | |
| 			MESSAGE="afk"; EMOJI=':necktie:';
 | |
| 			;;
 | |
| 		budget)
 | |
| 			MESSAGE="did somebody say skee-ball??"; EMOJI=':scales:';
 | |
| 			;;
 | |
| 		cheese)
 | |
| 			MESSAGE="only the most important things on my mind"; EMOJI=':cheese_wedge:';
 | |
| 			;;
 | |
| 		foos)
 | |
| 			MESSAGE="I will defeat Mike... someday..."; EMOJI=':soccer:';
 | |
| 			;;
 | |
| 		lax | belax | belax8 )
 | |
| 			MESSAGE="BELAAAAAAAX"; EMOJI=':exploding_head:';
 | |
| 			;;
 | |
| 		panic)
 | |
| 			MESSAGE="dont panic!"; EMOJI=':exclamation:';
 | |
| 			;;
 | |
| 		off | not-working | no-money)
 | |
| 			MESSAGE="not making money"; EMOJI=':sunglasses:';
 | |
| 			;;
 | |
| 		school )
 | |
| 			MESSAGE="probably doing homework..."; EMOJI=':male-teacher:';
 | |
| 			;;
 | |
| 		clear | clear-status | no-status | please-turn-off-my-status-mr-slack-robot)
 | |
| 			slack status clear >/dev/null 2>&1
 | |
| 			;;
 | |
| 		:*:)
 | |
| 			MESSAGE=" "; EMOJI="$1";
 | |
| 			;;
 | |
| 		*)
 | |
| 			ERROR_MESSAGE="Unrecognized preset or emoji";
 | |
| 			;;
 | |
| 	esac
 | |
| 
 | |
| 	[ $2 ] && MESSAGE="$2";
 | |
| 
 | |
| 	[ $EMOJI ] \
 | |
| 		&& slack-cli status edit "$MESSAGE" "$EMOJI" >/dev/null 2>&1 \
 | |
| 		&& echo "Slack status successfully updated! : ($STATUS_ARG)" \
 | |
| 		|| echo "ERROR:::Failed to update slack status :c ($ERROR_MESSAGE)";
 | |
| }
 | |
| _RENT_DYNAMICS_UPDATE_SLACK_STATUS() { # autocompletion
 | |
| 	compadd \
 | |
| 		boost-fire bike-ride monkas surprised plank meal turbo super meeting budget cheese foos belax \
 | |
| 		panic not-working school clear-status \
 | |
| 		;
 | |
| }
 | |
| 
 | |
| RENT_DYNAMICS_ONE_PASSWORD() {
 | |
| 	ERROR_CODE=0;
 | |
| 
 | |
| 	case $1 in
 | |
| 		login )
 | |
| 			RENT_DYNAMICS_ONE_PASSWORD_LOGIN "${@:2}" || ERROR_CODE=1;
 | |
| 			;;
 | |
| 		logout | deactivate )
 | |
| 			RENT_DYNAMICS_ONE_PASSWORD_LOGOUT "${@:2}" || ERROR_CODE=2;
 | |
| 			;;
 | |
| 		* )
 | |
| 			RENT_DYNAMICS_ONE_PASSWORD_CHECK_LOGIN "${@:2}" || ERROR_CODE=3;
 | |
| 			;;
 | |
| 	esac
 | |
| 
 | |
| 	return "$ERROR_CODE";
 | |
| }
 | |
| _RENT_DYNAMICS_ONE_PASSWORD() { # autocompletion
 | |
| 	compadd \
 | |
| 		login deactivate\
 | |
| 		;
 | |
| }
 | |
| 
 | |
| RENT_DYNAMICS_ONE_PASSWORD_LOGIN() {
 | |
| 	ERROR_CODE=0;
 | |
| 
 | |
| 	RENT_DYNAMICS_ONE_PASSWORD_IS_LOGGED_IN && {
 | |
| 		echo 'Already logged in!';
 | |
| 	} || {
 | |
| 		unset OP_SESSION_rent_dynamics;
 | |
| 		eval $(op signin rent_dynamics 2>/dev/null);
 | |
| 
 | |
| 		op list templates >/dev/null 2>&1 && {
 | |
| 			echo 'Successfully logged in to 1-password!';
 | |
| 		} || {
 | |
| 			echo 'Failed to log in. Double check your password and op-cli settings.';
 | |
| 			echo 'Have you run one-time setup? (`op signin rent-dynamics.1-password.com <your-email-address>`)';
 | |
| 			ERROR_CODE=1;
 | |
| 		};
 | |
| 	}
 | |
| 
 | |
| 	return "$ERROR_CODE";
 | |
| }
 | |
| 
 | |
| RENT_DYNAMICS_ONE_PASSWORD_LOGOUT() {
 | |
| 	[ ! -z $OP_SESSION_rent_dynamics ] && {
 | |
| 		unset OP_SESSION_rent_dynamics && echo 'Successfully logged out from 1-password';
 | |
| 	} || {
 | |
| 		echo 'Current shell is not logged in to 1-password';
 | |
| 		return 1;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| RENT_DYNAMICS_ONE_PASSWORD_CHECK_LOGIN() {
 | |
| 	RENT_DYNAMICS_ONE_PASSWORD_IS_LOGGED_IN \
 | |
| 		&& echo 'Current shell is logged-in to rent_dynamics 1-password'\
 | |
| 		|| echo 'Current shell is not logged-in rent_dynamics 1-password';
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| RENT_DYNAMICS_ONE_PASSWORD_IS_LOGGED_IN() {
 | |
| 	op list templates >/dev/null 2>&1 && return 0 || return 1;
 | |
| }
 |