teamon.eu

Merb: cucumber + webrat, czyli wszystko co chcielibyście wiedzieć o testowaniu

02 grudnia 2008

Tym razem będzie o testowaniu aplikacji napisanej w Merbie. Większość pewnie zna framework testujący RSpec. Razem z RSpecem dostępny jest Story Runner. Jednak jak można wyczytać na stronie projektu:

RSpec’s Story Runner is now deprecated and will be extracted out to a separate gem soon. For more info on cucumber, see http://github.com/aslakhellesoy/cucumber/wikis
I to właśnie wspomnianego ogórka opisze.

Więcej... 4 komentarze

Pobieranie listy plików z DropBoxa

19 listopada 2008

Tym razem mała odskocznia od Merba, ale nadal w klimatach Ruby.

Jeśli ktoś nie słyszał, Dropbox to usługa która pozwala trzymać pliki na serwerze poprzez utworzenie specjalnego folderu w systemie i używanie go jak każdego innego. Dropbox sam uaktualni pliki na serwerze. Ponadto umożliwia synchronizacje plików na kilku komputerach oraz współdzielenie folderów. Więcej na stronie programu.

Wszystko pięknie, ale Dropbox ma jedna wadę. Możemy podać komuś link do pliku (z folderu Public) ale do całego folderu już nie. Autorzy twierdzą, że to ze względów bezpieczeństwa - ich sprawa. Nie udostępnili też żadnego API (np. z wymaganym kluczem czy coś).

Z pomocą przychodzi dostępny ajaxowy "Web Interface" i Mechanize. Plan jest całkiem prosty: zalogować się i pobrać listę plików dla podanej ścieżki.

Dość gadania, kodzik:

 
require "rubygems"
require "mechanize"
 
class Dropbox
  def initialize(email, password)
    @agent = WWW::Mechanize.new
    page = @agent.get('https://www.getdropbox.com/')
    form = page.forms.first
    form.email = email
    form.password = password 
    @agent.submit(form)
  end
 
  def get(path)
    links = []
    @agent.post("https://getdropbox.com/browse2/#{path}?ajax=yes", "d=0&mini&t=6bf8f0d91d").links.each do |link|
      unless link.text.blank? or link.text == "Parent directory"
        links << if link.href =~ %r[/browse2/#{path}/.+]
          [link.text, get(link.href.sub('/browse2/', ''))]
        else
          link
        end
      end
    end
    links
  end
end
 

A odpalamy to tak:

 
dbs = Dropbox.new("your@email.com", "yourpass")
links = dbs.get "Public"
pp links
 

Tablica links zawiera odnośniki do wszystkich plików z danego katalogu. Można teraz wygenerować sobie html`a z linkami, czy wrzucić skrypt na serwer aby lista plików była zawsze aktualna. Można by się jeszcze pobawić w pobranie wszystkich plików i spakowanie do archiwum :) .

Nie jestem tylko pewien parametru t. Można go łatwo podejrzeć za pomocą FireBuga po zalogowaniu się na stronie. Za każdym razem był taki sam, możliwe jednak, iż dla innego konta będzie inny.

P.S. Tak teraz patrze, to w sumie szału nie ma, ale jak już napisałem to puszcze może komuś się przyda.

5 komentarzy

Merb - flash

31 października 2008

UPDATE: Zamiast calej zabawy - plugin merb-flash :)

Kontynuując serię o sztuczkach w Merbie tym razem przedstawię coś, czego najbardziej mi zabrakło - railsowego flasha.

Więcej... 5 komentarzy

Merb - kolorowy logger

31 października 2008

Merb wczoraj został wypuszczony na świat w wersji RC4. Z tej okazji* rozpoczynam cykl kilku postów z przydatnymi sztuczkami związanymi z tym właśnie frameworkiem. Na pierwszy ogień idzie kolorowanie wiadomości z merbowego loggera.

Więcej... 1 komentarz

Po MerbCampie

13 października 2008

Pare minut temu zakończył się MerbCamp. Slajdy z prezentacji można znależć na Slideshare, zapis video powinien być dostępny w ciągu paru dni na stronie głównej campa.

Ogólnie myśle, że spotkanie wypadło dobrze, całkiem sporo rzeczy zostało wyjaśnionych. Wystąpienia można było śledzić poprzez udostępniony webcast (w małej, jednak wystarczającej rozdzielczości). Osobiście z obejżanych prezentacji (przesunięcie czasu skutecznie przeszkodziło w śledzeniu wszystkich) najbardziej podobała mi się "Merb plumbing: The router" a także możliwość zadawania pytań na żywo poprzez IRC.

Jutro (a w sumie to dzisiaj) rano czasu polskiego powinien być dostępny Merb 0.9.9 RC1. Autorzy zapowiedzieli, że w ciągu paru tygodni powinna wyjść RC2, a następnie już 1.0 Final. Najważniejsze jednak, że publiczne api juz nie zostanie zmienione także można na spokojnie działac ;)

Jest 1:43, jutro na 8 do szkoły - chyba czas do spania...

[EDIT] Video z prezentacji już dosępne.
Dodaj komentarz