Pour éviter la pourriture des liens, le blog de Chris Wanstrath lié par user83510 est reposté ci-dessous (avec sa permission).
Toujours, rien ne vaut un original, d'utiliser son lien aussi longtemps qu'il continue à travailler.
→ singin' singletons
18 novembre 2008
Il y a des choses que je ne comprends pas. David Bowie, par exemple. Ou de l'Hémisphère Sud. Mais rien ne dépasse mon esprit comme le Rubis Singleton. Parce que vraiment, c'est totalement inutile.
Voici ce qu'ils veulent vous faire avec votre code:
require 'net/http'
# first you setup your singleton
class Cheat
include Singleton
def initialize
@host = 'http://cheat.errtheblog.com/'
@http = Net::HTTP.start(URI.parse(@host).host)
end
def sheet(name)
@http.get("/s/#{name}").body
end
end
# then you use it
Cheat.instance.sheet 'migrations'
Cheat.instance.sheet 'yahoo_ceo'
Mais c'est fou. Lutter contre la puissance.
require 'net/http'
# here's how we roll
module Cheat
extend self
def host
@host ||= 'http://cheat.errtheblog.com/'
end
def http
@http ||= Net::HTTP.start(URI.parse(host).host)
end
def sheet(name)
http.get("/s/#{name}").body
end
end
# then you use it
Cheat.sheet 'migrations'
Cheat.sheet 'singletons'
Tout pourquoi pas? L'API est plus concis, le code est plus facile à tester, en moquer, et le talon, et cela reste toujours très simple de convertir en un bon de classe en cas de nécessité.
(( le droit d'auteur devrait dix chris wanstrath ))