O ile przy blipie problemów nie było – serwis jest również napisany w Railsach, więc cała obsługa sprowadzała się do wykorzystania biblioteki Active Resource. W przypadku flakera było troszkę trudniej… ale na szczęście Ruby radzi sobie ze wszystkim
Jak czytamy w dokumentacji:
curl -u login:hasło -d 'text=test&link=http://blog.flaker.pl' http://api.flaker.pl/api/type:submit
Pierwszy “genialny” pomysł zakładał wykorzystanie curla, poprzez zrobienia czegoś w rodzaju:
command = "curl -u login:hasło -d 'text=#{tekst}&link=#{link}' http://api.flaker.pl/api/type:submit
eval command
Pomysł przestał być genialny, po ok 3 sekundach zastanawiania się nad nim ![]()
Ostatecznie wykorzystałem model, nie dziedziczący jednak po żadnym innym, o następującym kodzie:
class Flaker
require "net/http"
require 'uri'
def self.flac(text, link)
url = URI.parse("http://api.flaker.pl/api/type:submit")
req = Net::HTTP::Post.new(url.path)
req.basic_auth 'login', 'haslo'
req.set_form_data({'text'=>text, 'link'=>link}, '&')
res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) }
end
end
Status na flakera wrzucamy używając linijki:
Flaker.flac('text', 'link')
Czyli bez praktycznie żadnej magii, wysłanie żądania post na zadany adres, z odpowiednimi parametrami. I działa świetnie
Oczywiście można by narzekać, że tylko wysyłanie, że nie da się odczytać statusów etc. Ale cóż – miał wysyłać status? Wysyła
Zgodnie z zasadą YAGNI (You Ain’t Gonna Need It) takie rozwiązanie jest jak najbardziej wystarczające.
self jest IMHO niepotrzebne, tylko zaśmieca kod
Swoją drogą, kiedyś napisałem coś podobnego (funkcjonalność z założenia miała być całkiem inna, nie chodziło o proste wysłanie wiadomości) http://github.com/ravicious/flip/tree/master ale patrząc na to z perspektywy czasu, przydałaby się to napisać jeszcze raz. Jakimś pr0coderem nie jestem, więc żadnego gema na razie nie będzie.
dlaczego? self jest po to, żebym nie musiał tworzyć instancji tej klasy, co tylko zabrałoby pamięć i troszkę czasu
A, już rozumiem. Takiego tricku jeszcze nie znałem
Hm, a jak tutaj dodać jakieś walidacje? Przy Blipie można użyć HyperactiveResource, a w tym przykładzie nie wykorzystuje się ARes.
Walidacje są dla mnie ważne, bo dane będzie wprowadzał user.
tutaj nie ma, bo nie były mi potrzebne
Ale da się je dodać w przystępny sposób?