SlideShare a Scribd company logo
EloquentSequence
- Historia pewnej biblioteki
Open Source
Adam Matysiak
CTO / Team Leader
adam@highsolutions.pl
#1 - Potrzeba
● Pojawiła się potrzeba zarządzania kolejnością rekordów w bazie danych
● Rozwiązanie:
○ Stworzenie atrybutu w modelu (nazwa seq), który przechowuje kolejność
○ Automatyczne ustalanie wartości, gdy obiekt jest zapisany do bazy
danych
○ Proste metody przenieś w górę/dół
● Dodatkowe wymagania:
○ Gdy obiekt jest usuwany, atrybut seq powinien być zaktualizowany dla
pozostałych
○ Dodanie obsługi dla podzbiorów, np. gdy chcemy pamiętać kolejność dla
grup obiektów oddzielnie (np. page_id, user_id itp.)
#2 - Potrzeba się powtarza
● Kolejny projekt potrzebuje tej funkcjonalności
● Kopiowanie kodu z poprzedniego projektu jest czasochłonne
● Rozwiązanie:
○ Stworzenie traita, który może być użyty w wielu modelach (wystarczy
skopiować jeden plik)
● Jeśli dana funkcjonalność jest użyta w kilku projektach, staje się kandydatem
do wydzielonej biblioteki
#3 - Utworzenie prostej paczki
● Utwórz paczkę, by nie kopiować funkcjonalności za każdym razem
● Kroki:
○ Utwórz repozytorium na GitHub z dobrą nazwą
○ Utwórz pliki:
■ composer.json - zawiera nazwę projektu, wymagane biblioteki itp.
■ readme.md - opis projektu, proces instalacyjny, opis API itp.
■ license - po prostu skopiuj z internetu :P (MIT jest najpopularniejsze)
○ Utwórz katalog:
■ src/ - wstaw tutaj wszystkie potrzebne pliki
● Utwórz pierwszy release
#4 - Publikacja paczki
● Utwórz konto na packagist.org
● Połącz repozytorium na GitHubie z kontem na Packagist
○ Przejdź do Ustawienia > Integracje > Packagist
○ Skopiuj swój kod API z packagist i uruchom autoaktualizację
repozytorium
● Voilà!
○ Twoja paczka może być wyszukana i zainstalowana przez Composera
#5 - Instalacja paczki przez Composera
● Po prostu wykonaj komendę:
composer require GITHUB_USER/PACKAGE_NAME
○ np. composer require highsolutions/eloquent-sequence
● Paczka zostanie zainstalowana i możesz zastąpić wcześniejsze rozwiązanie:
○ Usuń trait z repozytorium
○ Zmień namespace z traita, z którego korzystałeś do tego z paczki
○ Sprawdź czy wszystko działa
#6 - Utrzymanie paczki
● Gdy opublikujesz paczkę, powinieneś ją utrzymywać i rozwijać
● Kod powinien być dobrze udokumentowany (phpDoc, readme)
● Używaj najlepszych praktyk -> to w końcu Twoja wizytówka
● Lepiej drobne commity, a często
● Używaj Semantic Versioning
#6 - Semantic Versioning
#7 - Nie zapomnij o unit testach!
● Unit testy zwiększą oceny i pewność korzystania z Twojej paczki
● Dodaj katalog tests do paczki
○ /tests
■ Models - dla modeli Eloquent (jeśli potrzebne)
■ Unit - tutaj wstaw testy (można też stworzyć inne katalogi, np.
Integration)
■ stubs - dla plików potrzebnych przez testy (pliki, obrazki, migracje)
■ temp - dla plików tymczasowych (baza danych .sqlite, logi itp.)
● Dodaj plik TestCase.php (np. z tego Gista)
● Dodaj bibliotekę phpunit do wymagań i utwórz plik phpunit.xml
● Wywołuj testy przez: vendor/bin/phpunit
#8 - Udostępnij paczkę
● Gdy paczka jest przetestowana i działa, pokaż ją światu!
● Napisz o tym na twitterze, swoim blogu, fanpage’u, medium itp.
● Zgłoś swoją paczkę do Laravel News
● A gdy użytkownicy się pojawią:
○ Reaguj szybko na Issues i Pull Requesty
○ Usprawniaj swoją paczkę jeśli zgłaszana potrzebna jest ważna i
przydatna
○ Aktualizuj swoją paczkę gdy wyjdzie nowa wersja Laravela
#9 - Potrzebujesz pomocy?
● Bootpack - “czarodziejski” kreator paczek
● laravel-packager - narzędzie CLI do generowania paczki wewnątrz Laravela
● laravel5-package-template - boilerplate dla paczki
● https://www.google.pl/search?q=how+to+create+Laravel+package
● skopiować kod jakiejś paczki :)
#10 - Have fun
● Open Source jest fajne / naprawdę!
● Twórz paczki, nawet jeśli tylko Ty byś używał (packagist.com pozwala na
prywatne repozytoria)
● Któregoś dnia stworzysz paczkę, z której będzie korzystać wielu
programistów Laravela, wdzięcznych że ktoś rozwiązał problem za nich
#11 - Nasze paczki
● eloquent-sequence - Łatwe zarządzanie kolejnością obiektów w bazie danych
● laravel-translation-manager - GUI do zarządzania translacjami wraz z edytowaniem
tłumaczeń na żywo
● laravel-poster - Powiadomienia na Slacka o postach opublikowanych na danym
fanpage na Facebooku
● laravel-github-hook - Proste Continuous Delivery
● laravel-lang-import-export - Import & Export tłumaczeń do/z CSV
● laravel-feed - Proste tworzenie feedów RSS 2.0
● laravel-google-keywords - Wyświetlanie ostatnich słów kluczowych użytych do
znalezienia Twojej strony w Google
● laravel-environments - Zarządzanie różnymi środowiskami projektu
EloquentSequence - historia pewnej biblioteki Open Source
Pytania?
adam@highsolutions.pl
@AdamMatysiak

More Related Content

PDF
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
PDF
Laravel 8.0 - co nowego?
PDF
201105 OWASP Fuzzing interpretera PHP
PDF
Laravel Dusk - prosty przepis na testy E2E
PDF
Laravel Octane - czy na pewno taki szybki?
PDF
Laravel Poznań Meetup #12 - "Laravel 6.0 - co nowego?"
PDF
Przegląd najciekawszych wtyczek do Laravela
PDF
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
Laravel 8.0 - co nowego?
201105 OWASP Fuzzing interpretera PHP
Laravel Dusk - prosty przepis na testy E2E
Laravel Octane - czy na pewno taki szybki?
Laravel Poznań Meetup #12 - "Laravel 6.0 - co nowego?"
Przegląd najciekawszych wtyczek do Laravela
Jak zacząć, aby nie żałować - czyli 50 twarzy PHP

Similar to EloquentSequence - historia pewnej biblioteki Open Source (20)

PDF
Ansible w praktyce
PDF
Docker praktyczne podstawy
ODP
Elasticsearch nie tylko dla Wielkodanowców
PDF
Kubernetes i Docker Swarm - Tomasz Woszczynski
PDF
Nowoczesny obiektowy Pascal (2) - kurs BSC
PDF
Agregacja i analiza logów
ODP
Drupal Rules - Drupal Idzie Na Studia - Jarosław Sobiecki
PPTX
3Camp Tech 2016/11/15 - Front-end tooling: package managers
PDF
Sekrety magicznego ogrodu Docker
PDF
Testy integracyjne
PDF
Jak przyspieszyłem aplikację produkcyjną o ponad 40%
PDF
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
PDF
Docker na MacOS przy wsparciu maszyny wirtualnej z Linuksem [PL]
PDF
JavaScript, Moduły
PDF
Rails tobak2005
PDF
Migrate API w Drupalu [PL]
PDF
Jak stworzyliśmy system kudosów w Laravelu i Slacku
PDF
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
PPS
Programowanie
PPS
Programowanie
Ansible w praktyce
Docker praktyczne podstawy
Elasticsearch nie tylko dla Wielkodanowców
Kubernetes i Docker Swarm - Tomasz Woszczynski
Nowoczesny obiektowy Pascal (2) - kurs BSC
Agregacja i analiza logów
Drupal Rules - Drupal Idzie Na Studia - Jarosław Sobiecki
3Camp Tech 2016/11/15 - Front-end tooling: package managers
Sekrety magicznego ogrodu Docker
Testy integracyjne
Jak przyspieszyłem aplikację produkcyjną o ponad 40%
Code driven development w Drupalu 7 | DrupalCamp Wrocław 2014
Docker na MacOS przy wsparciu maszyny wirtualnej z Linuksem [PL]
JavaScript, Moduły
Rails tobak2005
Migrate API w Drupalu [PL]
Jak stworzyliśmy system kudosów w Laravelu i Slacku
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
Programowanie
Programowanie
Ad

More from Laravel Poland MeetUp (20)

PDF
WebRTC+Websockety - Jak stworzyłem aplikację do kamerek internetowych w Larav...
PDF
xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
PDF
Kilka slajdów o castowaniu atrybutów w Eloquent
PDF
Licencje otwartego oprogramowania
PDF
Jak przemycić Shape Up do Scruma?
PDF
Cykl życia zapytania HTTP (pod maską)
PDF
Enumy w Laravelu - dlaczego warto stosować?
PDF
Laravelowe paczki do uwierzytelniania
PDF
Walidacja w Laravelu
PDF
(prawie) Wszystko o Tinkerze
PDF
Laravel Jobs i PHP8
PDF
Wszystko o Laravel Livewire
PDF
Laravel/PHP - zderzenie z PDFami
PDF
Action-based Laravel
PDF
Automatyzacja utrzymania jakości w środowisku PHP
PDF
Wstęp do Gitlab CI/CD w aplikacjach napisanych w Laravel
PDF
Laravel Collection - tablice na sterydach
PDF
AOP w Laravel
PDF
Speed up web API with Laravel and Swoole using Docker
PDF
Laravel 6.0 - co nowego?
WebRTC+Websockety - Jak stworzyłem aplikację do kamerek internetowych w Larav...
xD bug - Jak debugować PHP-owe aplikacje (Xdebug)
Kilka slajdów o castowaniu atrybutów w Eloquent
Licencje otwartego oprogramowania
Jak przemycić Shape Up do Scruma?
Cykl życia zapytania HTTP (pod maską)
Enumy w Laravelu - dlaczego warto stosować?
Laravelowe paczki do uwierzytelniania
Walidacja w Laravelu
(prawie) Wszystko o Tinkerze
Laravel Jobs i PHP8
Wszystko o Laravel Livewire
Laravel/PHP - zderzenie z PDFami
Action-based Laravel
Automatyzacja utrzymania jakości w środowisku PHP
Wstęp do Gitlab CI/CD w aplikacjach napisanych w Laravel
Laravel Collection - tablice na sterydach
AOP w Laravel
Speed up web API with Laravel and Swoole using Docker
Laravel 6.0 - co nowego?
Ad

EloquentSequence - historia pewnej biblioteki Open Source

  • 1. EloquentSequence - Historia pewnej biblioteki Open Source
  • 2. Adam Matysiak CTO / Team Leader adam@highsolutions.pl
  • 3. #1 - Potrzeba ● Pojawiła się potrzeba zarządzania kolejnością rekordów w bazie danych ● Rozwiązanie: ○ Stworzenie atrybutu w modelu (nazwa seq), który przechowuje kolejność ○ Automatyczne ustalanie wartości, gdy obiekt jest zapisany do bazy danych ○ Proste metody przenieś w górę/dół ● Dodatkowe wymagania: ○ Gdy obiekt jest usuwany, atrybut seq powinien być zaktualizowany dla pozostałych ○ Dodanie obsługi dla podzbiorów, np. gdy chcemy pamiętać kolejność dla grup obiektów oddzielnie (np. page_id, user_id itp.)
  • 4. #2 - Potrzeba się powtarza ● Kolejny projekt potrzebuje tej funkcjonalności ● Kopiowanie kodu z poprzedniego projektu jest czasochłonne ● Rozwiązanie: ○ Stworzenie traita, który może być użyty w wielu modelach (wystarczy skopiować jeden plik) ● Jeśli dana funkcjonalność jest użyta w kilku projektach, staje się kandydatem do wydzielonej biblioteki
  • 5. #3 - Utworzenie prostej paczki ● Utwórz paczkę, by nie kopiować funkcjonalności za każdym razem ● Kroki: ○ Utwórz repozytorium na GitHub z dobrą nazwą ○ Utwórz pliki: ■ composer.json - zawiera nazwę projektu, wymagane biblioteki itp. ■ readme.md - opis projektu, proces instalacyjny, opis API itp. ■ license - po prostu skopiuj z internetu :P (MIT jest najpopularniejsze) ○ Utwórz katalog: ■ src/ - wstaw tutaj wszystkie potrzebne pliki ● Utwórz pierwszy release
  • 6. #4 - Publikacja paczki ● Utwórz konto na packagist.org ● Połącz repozytorium na GitHubie z kontem na Packagist ○ Przejdź do Ustawienia > Integracje > Packagist ○ Skopiuj swój kod API z packagist i uruchom autoaktualizację repozytorium ● Voilà! ○ Twoja paczka może być wyszukana i zainstalowana przez Composera
  • 7. #5 - Instalacja paczki przez Composera ● Po prostu wykonaj komendę: composer require GITHUB_USER/PACKAGE_NAME ○ np. composer require highsolutions/eloquent-sequence ● Paczka zostanie zainstalowana i możesz zastąpić wcześniejsze rozwiązanie: ○ Usuń trait z repozytorium ○ Zmień namespace z traita, z którego korzystałeś do tego z paczki ○ Sprawdź czy wszystko działa
  • 8. #6 - Utrzymanie paczki ● Gdy opublikujesz paczkę, powinieneś ją utrzymywać i rozwijać ● Kod powinien być dobrze udokumentowany (phpDoc, readme) ● Używaj najlepszych praktyk -> to w końcu Twoja wizytówka ● Lepiej drobne commity, a często ● Używaj Semantic Versioning
  • 9. #6 - Semantic Versioning
  • 10. #7 - Nie zapomnij o unit testach! ● Unit testy zwiększą oceny i pewność korzystania z Twojej paczki ● Dodaj katalog tests do paczki ○ /tests ■ Models - dla modeli Eloquent (jeśli potrzebne) ■ Unit - tutaj wstaw testy (można też stworzyć inne katalogi, np. Integration) ■ stubs - dla plików potrzebnych przez testy (pliki, obrazki, migracje) ■ temp - dla plików tymczasowych (baza danych .sqlite, logi itp.) ● Dodaj plik TestCase.php (np. z tego Gista) ● Dodaj bibliotekę phpunit do wymagań i utwórz plik phpunit.xml ● Wywołuj testy przez: vendor/bin/phpunit
  • 11. #8 - Udostępnij paczkę ● Gdy paczka jest przetestowana i działa, pokaż ją światu! ● Napisz o tym na twitterze, swoim blogu, fanpage’u, medium itp. ● Zgłoś swoją paczkę do Laravel News ● A gdy użytkownicy się pojawią: ○ Reaguj szybko na Issues i Pull Requesty ○ Usprawniaj swoją paczkę jeśli zgłaszana potrzebna jest ważna i przydatna ○ Aktualizuj swoją paczkę gdy wyjdzie nowa wersja Laravela
  • 12. #9 - Potrzebujesz pomocy? ● Bootpack - “czarodziejski” kreator paczek ● laravel-packager - narzędzie CLI do generowania paczki wewnątrz Laravela ● laravel5-package-template - boilerplate dla paczki ● https://www.google.pl/search?q=how+to+create+Laravel+package ● skopiować kod jakiejś paczki :)
  • 13. #10 - Have fun ● Open Source jest fajne / naprawdę! ● Twórz paczki, nawet jeśli tylko Ty byś używał (packagist.com pozwala na prywatne repozytoria) ● Któregoś dnia stworzysz paczkę, z której będzie korzystać wielu programistów Laravela, wdzięcznych że ktoś rozwiązał problem za nich
  • 14. #11 - Nasze paczki ● eloquent-sequence - Łatwe zarządzanie kolejnością obiektów w bazie danych ● laravel-translation-manager - GUI do zarządzania translacjami wraz z edytowaniem tłumaczeń na żywo ● laravel-poster - Powiadomienia na Slacka o postach opublikowanych na danym fanpage na Facebooku ● laravel-github-hook - Proste Continuous Delivery ● laravel-lang-import-export - Import & Export tłumaczeń do/z CSV ● laravel-feed - Proste tworzenie feedów RSS 2.0 ● laravel-google-keywords - Wyświetlanie ostatnich słów kluczowych użytych do znalezienia Twojej strony w Google ● laravel-environments - Zarządzanie różnymi środowiskami projektu