Programowanie


Przegląd default scope w Rails

Przegląd default scope w Rails

Jeśli poszukasz w Internecie frazy “Rails Default Scope”, znajdziesz ogrom artykułów: dlaczego nie warto używać default scope, dlaczego default scope to źródło wielu problemów i jak usunąć default scope z projektu. Te artykuły często wyrażają silna negatywną opinie na temat default scope. Ale czy default scope jest naprawdę tak zły? Dyskusja na temat default scope toczy się przynajmniej od 2015 roku, prawie dziesięć lat, a ludzie nadal na ten temat rozmawiają. Dziś ja dołożę do tego wątku swoją cegiełkę.

Rzeczy, których nie wiesz o języku Ruby

Rzeczy, których nie wiesz o języku Ruby

Od czasu do czasu zdarza mi się usłyszeć od innych w trakcje programowania To naprawdę działa w Ruby? albo Nie wiedziałam/nie wiedziałem, że to tak działa. W końcu zrozumiałam, że to co dla mnie jest czymś normalnym, inne osoby niekoniecznie znają. Dziś chciałabym się podzielić kilkoma takimi smaczkami z języka Ruby, o których nie wszyscy wiedzą. Mam nadzieję, że Ci się spodobają.

Jak działa map(&:method) w Ruby?

Jak działa map(&:method) w Ruby?

Kilka dni temu, pracowałam nad projektem dla klienta i chciałam użyć metody map w jednej linijce, ale z dodatkowym argumentem w środku. Nigdy wcześniej nie miałam takiej potrzeby. Zazwyczaj wystarczał mi .map(&:next). Tym razem potrzebowałam czegoś troszeczkę innego. Zaczęłam od szybkiego przeszukania Internetu. Wyniki moich poszukiwań były na tyle interesujące, że postanowiłam napisać na ten temat artykuł.

Dynamiczna konfiguracja przy użyciu YAML w Ruby

Dynamiczna konfiguracja przy użyciu YAML w Ruby

Alek Od czasu do czasu programując w języku Ruby, a nawet częściej używając frameworka Ruby on Rails, potrzebuję stworzyć plik konfiguracyjny zawierający na przykład prywatne klucze do API. Oczywiście nie chcę tych danych śledzić w systemie kontroli wersji. Natomiast na dodanie ich do bazy danych jest jeszcze za wcześnie. W takiej sytuacji mogą pomóc zmienne środowiskowe zapisane w pliku .env. W tym przypadku jest jeszcze jeden mały haczyk. Chciałam by wszystkie dane były ustrukturyzowane w jednym pliku. Dlatego też użyłam kombinacji pliku YAML (akronim rekurencyjny od ang. YAML Ain’t Markup Language) ze zmiennymi środowiskowymi i ERB (Embedded Ruby). Oto jak wygląda to rozwiązanie.

Drugie spojrzenie na pattern matching w Ruby

Drugie spojrzenie na pattern matching w Ruby

Gdy pojawiają się nowości w naszym języku programowania czasami jesteśmy z tego powodu zadowolone, a czasami nie. Dziś chciałabym porozmawiać o zmianach, z których ja osobiście bardzo się cieszę. Mam na myśli dopasowanie do wzorca w języku Ruby, czyli pattern matching. Jakiś czas temu napisałam artykuł na temat Pattern Matching-u w języku Ruby. Zachęcam do zapoznania się z nim, ponieważ będę odwoływała się do omawianych tam przykładów. A teraz zanurzmy się jeszcze bardziej w świat dopasowania do wzorca w języku Ruby. Zaczynamy!

Jak Ruby rzutuje obiekty na łańcuchy znaków?

Jak Ruby rzutuje obiekty na łańcuchy znaków?

Miałam do zrobienia prostą funkcjonalność. Należało przedstawić różne obiekty, znajdujące się w tablicy, w postaci jednego łańcucha znaków. Sam problem jest trywialny, ale podczas jego implementacji zaczęłam się zastanawiać: Jak obiekty będą wyglądać po rzutowaniu na łańcuchy znaków? Tu akurat odpowiedź jest krótka - dobrze ;) Ciekawsza jest jednak odpowiedź na pytanie: Dlaczego po rzutowaniu obiekty wyglądają w określony sposób? To właśnie tym zagadnieniem zajmiemy dzisiaj się. Poszukiwania odpowiedzi czas zacząć. Aha nie zapominajmy, że to będzie niezła zabawa. Zapraszam!

Iteratory w Ruby

Ruby, podobnie jak inne języki programowania, ma wiele sposobów na wykonywanie kodu wielokrotnie. Możemy do tego celu użyć pętli takich jak loop, while, until czy for. Są one oczywiście bardzo przydatne, ale w języku Ruby występują również iteratory. Moim zadaniem są one jeszcze lepsze niż pętle. W języku Ruby mamy wiele różnych iteratorów, z których każdy ma inne zastosowanie. Najczęściej używane iteratory to each, map, collect, select, find, times. Ale moment! Kiedy powinnyśmy użyć iteratora each, a kiedy iteratora map? To bardzo dobre pytanie i właśnie dziś na nie odpowiemy.

Programowanie funkcyjne w Ruby

Ruby jest językiem obiektowym. Nie znaczy to jednak, że nie możemy przy pomocy Rubiego programować bardziej funkcyjnie. Gdy przyjrzymy się historii języka Ruby zauważymy, że u jego podstaw leży wiele różnych technologi. Twórca Rubiego, Yukihiro Matsumoto, inspirował się takimi językami jak: Perl, Smalltalk, Eiffel, Ada, Basic czy Lisp. Dzięki tym wszystkich inspiracjom w języku Ruby możemy znaleźć nie tylko koncepcje programowania obiektowego, ale również odrobinę programowania funkcyjnego.

Pattern matching w Ruby

Jakiś czas temu napisałam artykuł o podstawach pattern matchingu w Elixirze. Bardzo spodobała mi się idea dopasowywania do wzorca. Teraz możemy się nią cieszyć również w najnowszej wersji Ruby 2.7!!! Nie jest to co prawda ten sam pattern matching co w Elixirze, ale jest to ciekawa funkcjonalność. Trzeba też pamiętać, że pattern matching w Ruby jest funkcjonalnością eksperymentalną, więc może się zmieniać dynamicznie w następnych wersjach Rubiego. Nie zmienia to faktu, że już teraz możemy ją przetestować.

Dlaczego przestałam używać zmiennych instancji w klasach Ruby?

Klasę w Ruby możesz stworzyć na wiele różnych sposobów. Z jednej strony to jest super. Możesz być kreatywna i dostosować kod do swoich potrzeb. Z drugiej strony może to powodować pewne problemy z podjęciem decyzji. Co wybrać? Która opcja jest najlepsza? To pytanie może być frustrujące, zwłaszcza gdy zaczyna się przygodę z programowaniem. Dlatego też chciałabym dziś pokazać Ci szybkie sposoby na polepszenie Twojego kodu już na samym początku drogi.

Dlaczego nie powinnyśmy wysyłać maili z modelu w Railsach?

Wysyłanie wiadomości email przez aplikację do jej użytkowników jest czymś bardzo powszechnym. Wysyłamy maile związane z rejestracją, nowymi zmianami w aplikacji, reklamami, ostatnimi aktywnościami czy z zaproszeniem do grona znajomych. Można powiedzieć, że jest to chleb powszedni dzisiejszych aplikacji internetowych. Pomimo tego, że tak często aplikacje posiadają tą funkcjonalność, zdarzają się w niej błędy. Dziś chciałabym się takim błędem z Tobą podzielić.

Kolejność wykonywania działań w Ruby

Kolejność działań matematycznych w programowaniu jest bardzo ważna. Jeżeli nie znasz ich dobrze, możesz dostać całkowicie inny wynik, niż się spodziewasz. Twój program może nawet przestać działać. Dlatego warto znać zasady, na jakich jest oparta kolejność działań w programowaniu. W tym przypadku w języku Ruby. Czy powinnyśmy postępować zgodnie z zasadami jakich nauczyłyśmy się w szkole na lekcjach matematyki? A może wystarczy stosować kolejność od lewej do prawej? Sprawdźmy.

Pattern matching w Elixirze - podstawy

Elixir to język funkcyjny, stworzony przez José Valim w 2012 roku. Uruchamia się on na maszynie wirtualnej Erlanga. W historii języka Elixir pojawia się pewne nawiązanie do Rubiego i Railsów. Otóż José jest członkiem Rails Core Team, czyli zespołu, który zajmuje się rozwijaniem frameworka Ruby on Rails.

Wyrażenia regularne - co może pójść nie tak?

Ktoś kiedyś powiedział: Masz problem, użyj wyrażeń regularnych. Będziesz mieć dwa problemy. To po części prawda. Przynajmniej w niektórych przypadkach. Jako programiści powinniśmy być odpowiedzialni za to, co piszemy, za swój kod. Powinniśmy zatrzymać się i pomyśleć dwa razy o wszystkich możliwych przypadkach użycia swojego kodu. I mieć na to wszystko dowody, czyli testy. Dzisiaj chciałaby podzielić się z Tobą pewnym przypadkiem problemów z wyrażeniami regularnymi. Przypadkiem, gdzie brak dobrego przygotowania i sprawdzenia zaowocował błędem w aplikacji. W tym artykule nie będę poruszać podstaw dotyczących wyrażeń regularnych. Chcę pokazać na co warto zwrócić uwagę, korzystając z wyrażeń regularnych.

Zastosowanie metody each_with_object w Ruby

Ostatnio pracowałam z metodą each_with_object. Jak zazwyczaj w takich sytuacjach zawsze staram się, przed użyciem jakiejś metody, sprawdzić jej dokumentację. Weszłam więc na APIdock i przeglądam zastosowanie oraz przykłady. Okazało się, że nie było tam jednego z przypadków zastosowania. Chciałam go dodać, lecz bez powodzenia. Postanowiłam więc, że skoro czekam na rozwiązanie problemu ze strony APIdock mogę napisać krótką notatkę na temat metody each_with_object tutaj.

Leaflet - Wstęp do map

Jestem z powrotem! Tym razem chciałabym pokazać Wam trochę map. Dzisiejszym tematem będzie: Jak w prosty sposób można obsłużyć mapy na własnej stronie internetowej. Do tego będziemy potrzebować: Leaflet, fragmenty map (Maps tiles), Ruby on Rails (na początek wystarczy zwykły HTML).

Własne walidatory w Ruby on Rails

Przez kilka ostatnich dni pracowałam z walidatorami w Railsach. Ale zanim opowiem o tym, co zrobiłam kilka słów na temat tego czym są walidatory. Kiedy chcemy sprawdzić czy dane, które otrzymuje nasza aplikacja spełniają pewne założenia, wtedy używamy walidatorów. Przykładowo gdy chcemy sprawdzić czy dane mają odpowiedni format, czy liczba jest parzysta, lub po prostu czy nazwa jest wymagana dla wszystkich tych przypadków korzystamy właśnie z walidatorów.

Triki dla obiektu Hash w Ruby

Dzisiaj chciałabym opowiedzieć Wam trochę o obiekcie Hash i metodach, których często do niego wykorzystuje. Ale zanim o metodach to zacznijmy od tego co to jest właściwie Hash? Hash to bardzo specyficzna tablica. Jako klucz możemy użyć cokolwiek i przyporządkować mu odpowiednią wartość lub wartości…

Triki dla tablic w Ruby

Ruby ma naprawdę świetną dokumentację. Metody dla tablic też są dobrze opisane. Dziś chciałabym się skupić na kilku trikach jakie znam na tablicach w Ruby. Tworzenie tablicy składającej się z napisów: %w{ 1 2 3 4 } => ["1", "2", "3", "4"] Tworzenie tablicy składającej się z tej samej liczby: [2]*5 => [2, 2, 2, 2, 2] Tworzenie tablicy z kolejnych liczb naturalnych: (1..4).to_a => [1, 2, 3, 4] Tworzenie tablicy z kolejnych liczb parzystych: (2..10).step(2).to_a => [2, 4, 6, 8, 10]