Existem muitos frameworks Ruby por . Alguns são completos, outros são modulares e outros são minimalistas. Por quê mais um framework?

O Nyane nasceu depois que eu resolvi estudar o Rack, e me deparei com isto: Very Simple Rack Framework.

Construir um framework baseado no Rack, ao vivo, durante uma apresentação de 30 minutos? Não é possível! Olha a sintaxe, tão bonitinha, como construir isso de maneira rápida e fácil de apresentar? Aquilo me deixou muito intrigado. Passei horas procurando na internet como construir um framework que fosse capaz de aceitar aquela sintaxe. Infelizmente, a documentação do Rack para este tipo de finalidade é quase nula.

Fui atrás de alguns frameworks simples baseados no Rack. O primeiro que eu encontrei foi o Coset. Mas o código era meio difícil de entender. Quer dizer, o código do framework em si não é complicado, acontece que eu não enxergava a ligação entre aquele código e o Rack. Iria precisar de algo bem mais simples pra começar.

Foi aí que eu encontrei algumas apresentações sobre como construir aplicações Rack. Agora, todo aquele código começava a fazer sentido. Mesmo assim, eu queria algo mais simples. Foi quando eu encontrei o Invisible. A versão inicial era ainda mais simples. Ótimo! Achei meu ponto de partida.

No final de semana passado, estava em um quarto de hotel sem internet. Resolvi começar a “brincar sério” com o Rack. Foi aí que me saí com isso:

class Nyane
 
  def initialize(&block)
    @actions = []
    instance_eval(&block)
  end
 
  def get(route, &block)
    @actions << [route, block]
  end
 
  def call(env)
    action = @actions.detect { |route, block| env["PATH_INFO"].match(Regexp.new("^#{route}$")) }
 
    if action
      [200, {'Content-type' => 'text/html'}, action.last.call]
    else
      [404, {'Content-type' => 'text/plain'}, "Not found"]
    end
  end
 
end

 

22 linhas no total. 17 linhas de código. E mesmo assim, capaz de rodar isto:

require "nyane"
 
app = Nyane.new do
  get "/" do
    "Hello!"
  end
 
  get "/hello" do
    "Hello, hello, hello!"
  end
 
  get "/bye" do
    "Goodbye!"
  end
end
 
run app

 

Genial!

O código estava pronto. Queria liberar logo para que outras pessoas pudessem “brincar” com o Rack também. Conversando com o Nando, ele disse que o framework teria que ter “uma razão pra existir”. Mesmo eu dizendo que não era algo pra ser levado a sério, era só pra estudo. Aí ele disse que se fosse pra desenvolver um framework, teria que ter um motivo e se diferenciar dos outros. E eu continuava dizendo que era algo insignificante! :P

Bom, se é preciso motivos, e diferenciá-lo, então eu farei! :)

A idéia do Nyane é ser um framework extremamente simples. Nada de helpers, layouts, partial. Nem mesmo suporte à cookies, sessions. Quer saber? Vou liberar sem suporte à POST! Aí está a diferença dele pros outros. Duvido que exista um framework que não suporte POST. :P

Depois disso, faltava um nome. Mas escolher um nome para um projeto que não devia ser levado a sério? Parecia demais para mim. Resolvi brincar com o nome. Nyane, quer dizer insignificante em Sesotho. Sim, um framework insignificante. :P

Coloquei o código no GitHub no começo da semana. Mostrei apenas para alguns amigos. Apesar de ser algo bem simples e experimental, algumas pessoas se interessaram em usá-lo para alguma pequenas aplicações. Claro, você não vai construir nenhum site completo com ele, mas, quem sabe uma área do site que não necessite de sessões, cookies ou até mesmo POST. Quando eu construía este código, não via aplicação alguma, nem mesmo achava que pudesse ser usado em produção. Hoje, vejo algumas áreas (ou serviços) de sites maiores que podem ser reescritos sem a necessidade de nada acima, nem mesmo POST.

Sim, o suporte à POST pode ser algo que amplie o uso do framework, mas, qual seria a grande diferenciação dele para os outros? :P Bom, fica para uma próxima versão.

Melhor: que tal você experimentar um pouco com o código e implementar isto? Que acha? :)

Tags: , , / Trackback URI: trackback

5 comentários em “Nyane: o framework insignificante”

  1. 02/11/08 às 11:00 am #Nando Vieira

    Hahhahahaa… GET only é um sonho! Vou usar só isso daqui para frente! :P

  2. 02/11/08 às 11:22 am #José Valim

    Já que o pessoal do Rails “mascaram” o PUT e o DELETE em cima do POST, agora é a nossa hora de mascarar o POST, PUT e DELETE em cima do GET! =)

    Vida longa ao Nyane!

  3. 03/11/08 às 5:25 am #Peter

    Ótimo post Arthur! Hora de brincar um pouco com o Nyane e aprender mais sobre o Rack! ;)

    Valew, absss.

  4. 10/11/08 às 11:43 pm #Jônatas Davi Paganini

    Parabéns campeão!

  5. 20/12/08 às 12:45 pm #Então, o Rails agora usa Rack. Mas o que é o Rack? - ArthurGeek.net

    [...] com suporte à Rack. Ele também pode ser considerado um framework para construir frameworks. O Nyane é um bom exemplo disto, mas existem muitos [...]

Deixe um comentário

Não é aceito código HTML