Ruckusing Migrations część 5 – tworzenie własnych zadań

Piąty i ostatni odcinek serii postów poświęconych Ruckusing Migration zostanie poświęcony tworzeniu własnych zadań. Przez zadania rozumiem polecenia jakie możemy wpisywać w CLI i dzięki temu wykonać jakieś niestandardowe działania (np. db:migrate, db:generate etc).

Jak zawsze zachęcam do zapoznania się z poprzednimi postami poświęconymi tej bibliotece. Część pierwszą można znaleźć tutaj, część drugą tutaj, trzecią tutaj a czwartą tutaj.

Informacje podstawowe

Zadania znajdują się w katalogu Task (np. vendor/ruckusing/ruckusing-migrations/lib/Task). Domyślnie w tym katalogu znajdują się jeszcze dwa inne katalogi Db i Hello. W katalogu Db znajdują się zadania, które korzystając z tej biblioteki będziesz używał na codzień czyli db:migrate, db:generate etc. Z kolei w katalogu Hello znajduje się zadanie o nazwie World. Jak nie trudno się domyśleć jest to swego rodzaju przykład. Można to zadanie uruchomić z poziomu CLI wpisując hello:world.

Lokalizacje „customowych” zadań można rzecz jasna zmienić. Wystarczy w pliku konfiguracyjnym dodają klucz „tasks_dir” a jako wartość adres katalogu.

Tworzenie własnych zadań

Pliki z klasami zadań należy umieścić w jakimś katalogu „przestrzeni nazw”, o którym wspomniałem w poprzednim akapicie. Nie ma możliwości stworzenia „luźnego” zadania bez wrzucania go jakąkolwiek przestrzeń nazw ponieważ podczas próby uruchomienia takiego zadania zgłoszony zostanie wyjątek o nieprawidłowym formacie lub braku zadania.

Plik zadania musi mieć taką samą nazwę jak samo zadanie, a klasa musi mieć nazwę wg następującego schematu Task_{przestrzeń_nazw}_{nazwa_zadania}. Jeśli spróbujecie uruchomić taką pustą klasę zadania dostaniemy info że nasza klasa nie interfejsu Ruckusing_Task_Interface. Po dodaniu tego interfejsu do klasy i próbie uruchomienia dostaniemy informację, że wystąpił Fatal Error. Pojawił się on dlatego, że interfejs, który zaimplementowaliśmy wymaga aby nasza klasa posiadała definicję dwóch funkcji setMigrationsDirectory i setAdapter. Nie ma sensu jednak pisać ich od podstaw tylko sprawić aby klasa naszego zadania rozszerzyła klasę Ruckusing_Task_Base. Ta klasa posiada już definicję tych dwóch brakujących funkcji. Tak więc po dopisaniu odpowiedniego kodu i uruchomieniu zadania powiliśmy przestać otrzymywać informacje o błędach. Nic bardziej mylnego 😉  Dostaniemy informację o tym, że naszej klasie zadania brakuje definicji jeszcze dwóch funkcji execute i help. Uzupełnieniem tych funkcji musimy jednak zająć się osobiście.

Funkcja help

Jak nietrudno się domyśleć funkcja odpowiada za wyświetlenie pomocy dla konkretnego zadania. Pomoc w CLI można wyświetlić w następujący sposób {przestrzeń_nazw}:{zadanie} help.

Zadanie ta funkcja ma bardzo proste – musi zwrócić tekst jaki będzie wyświetlany podczas zapytania o pomoc dla zadania.

Funkcja execute

I tutaj zaczyna się zabawa ponieważ to właśnie ta funkcja będzie wywoływana podczas uruchamiania zadania. Funkcja ta przyjmuje jeden parametr zawierający listę argumentów jakie możemy podać podczas uruchamiania zadania. Można to zrobić w następujący sposób:

 

Podając takie argumenty przy wywołaniu zadaniu dostaniemy następującą tablicę:

Teraz aby mieć możliwość wykonania czegokolwiek na bazie danych należy pobrać adapter. Ten jednak jest podawany jako parametr tylko w konstruktorze klasy Ruckusing_Task_Base i ustawiany jako zmienna prywatna. Tak więc jeśli chcemy skorzystać z jego dobrodziejstwa musimy w naszym zadaniu nadpisać konstruktor w następujący sposób:

I za pomocą tak ustawionego adaptera możemy wykonywać różne operacje na bazie danych. Jeśli czytaliście poprzednie części kursu to wiecie jakie możliwości daje adapter a jeśli nie to ponownie zapraszam do zapoznania się z nimi.

I to by było na tyle

Tym postem kończę temat Ruckusing Migration. Przykładowe zadanie jakie wykonałem na potrzeby tego postu można znaleźć na GitHubie a dokładnie w tym miejscu (zadanie nazywa się info:tables). Zapraszam do komentowania i do przeczytania już wkrótce.

Posty które mogą Cię zainteresować:

Dodaj komentarz

Your email address will not be published. Please enter your name, email and a comment.