Trekking

Projekt stworzony na laboratoria z Architektury serwisów internetowych.

Funkcjonalność

Serwis pozwala użytkownikom na proste tworzenie i edycję własnych ścieżek, a także wyszukiwanie ścieżek terenowych utworzonych przez innych użytkowników.

Do każdej ścieżki wyświetlane są dodatkowe informacje: jej całkowita długość, ilość punktów kontrolnych oraz wykres zmian wysokości terenu na trasie.

Wykorzystane technologie

JavaScript:

Baza danych

MongoDB, ponieważ wspiera przechowywanie współrzędnych i wyszukiwanie rekordów na podstawie ich pozycji.

Kluczowe gemy

  • devise - dodaje możliwość logowania, rejestracji itp.
  • cancan - ustalanie uprawnień użytkowników
  • simple_form - łatwe tworzenie formularzy
  • geocoder - dodaje funkcje zamiany adresu na współrzedne (konkretnie metoda coordinates z http://rubydoc.info/github/alexreisner/geocoder/master/Geocoder:coordinates). Używam do szukania ścieżek w pobliżu podanego miejsca.
  • mongoid - adapter MongoDB dla Ruby. Wzorowany na ActiveRecord, przez co użycie jest bardzo podobne.
  • haml - bardzo atrakcyjna warstwa zapisu HTMLa. Skraca czas potrzebny na napisanie kodu i zdecydowanie poprawia czytelność.

Grafika

Przy tworzeniu wyglądu skorzystałem z biblioteki bootstrap stworzonej przez Twittera. Zapewnia wygląd dla podstawowych elementów strony, oraz wsparcie dla wielu przeglądarek.

Użycie

Sprowadza się do ściągnięcia ze strony http://twitter.github.com/bootstrap/ pliku bootstrap.css i dołączenia go do naszej aplikacji. Przyĸład application.css:

/*
*= require bootstrap
*= require_self
*/

I to tyle. Potem możemy już korzystać ze styli, które udostępnia nam bootstrap. Kilka ciekawszych:

Bootstrap narzuca pewien styl kodu HTML dla formularzy, który jest niekompatybilny z domyślnym zachowaniem takich gemów jak simple_form czy formtastic. Dlatego napisałem własny builder rozszerzający simple_form, który produkuje HTML odpowiedni dla styli bootstrapa. Znajduje się w pliku https://github.com/pokonski/trekking/blob/master/config/initializers/simple_form.rb