
A meta: evite bugs, esqueça a maioria dos problemas de desempenho e gaste mais tempo no código, em vez de depurar e corrigir testes.
Em resumo, tornar os aplicativos impressionantes da Web rápidos, divertidos e fáceis.
Lucky tem um novo conjunto de guias que facilitam o início.
Sinta -se à vontade para dizer oi ou fazer perguntas em nossa sala de bate -papo.
Ou você pode copiar um aplicativo de trabalho real com o Lucky Jumpstart.
Para instalar a Lucky, leia os guias da Lucky para o seu sistema operacional. O guia o levará a instalar um utilitário de linha de comando usado para gerar novos aplicativos da sorte.
Mantenha -se atualizado seguindo @LuckyFramework no Twitter.
API (principal)
class Api::Users::Show < ApiAction
get " /api/users/:user_id " do
user = UserQuery .find(user_id)
json UserSerializer .new(user)
end
endget "/sign_in" para rotas sem descanso.user_id é gerado porque existe um parâmetro de rota user_id .json para renderizar JSON. Extrair serializadores para respostas JSON reutilizáveis. # Set up the model
class User < BaseModel
table do
column last_active_at : Time
column last_name : String
column nickname : String ?
end
end? para o tipo quando a coluna pode ser nil . Crystal ajudará você a se lembrar de não chamar métodos que não funcionarão.last_active_at e last_name , pois não são marcados como nalizáveis). # Add some methods to help query the database
class UserQuery < User::BaseQuery
def recently_active
last_active_at.gt( 1 .week.ago)
end
def sorted_by_last_name
last_name.lower.desc_order
end
end
# Query the database
UserQuery .new.recently_active.sorted_by_last_nameUser::BaseQuery é gerado automaticamente quando você define um modelo. Herdar dele para personalizar consultas.lower em uma coluna String para garantir que o Postgres classifique tudo em minúsculas.gt para fazer com que os usuários durem mais de 1 semana. Lucky tem muitas abstrações poderosas para criar consultas complexas e digitar métodos específicos (como lower ). class Users::Index < BrowserAction
get " /users " do
users = UserQuery .new.sorted_by_last_name
render IndexPage , users: users
end
end
class Users::IndexPage < MainLayout
needs users : UserQuery
def content
render_new_user_button
render_user_list
end
private def render_new_user_button
link " New User " , to: Users :: New
end
private def render_user_list
ul class: " user-list " do
users.each do | user |
li do
link user.name, to: Users :: Show .with(user.id)
text " - "
text user.nickname || " No Nickname "
end
end
end
end
endneeds users : UserQuery informa ao compilador que ele deve ser aprovado os usuários do tipo UserQuery do tipo.Users::New . Passe os parâmetros usando with : Users::Show.with(user.id) . Chega de tentar lembrar os ajudantes do caminho e se o ajudante está pluralizado ou não - se você esquecer de passar um parâmetro para uma rota, Lucky avisará você em tempo de compilação.column nickname : String? Por mais nilável, Lucky não conseguiria compilar a página se você acabasse de fazer text user.nickname pois não conquistou a impressão nil . Então, em vez disso, adicionamos um fallback "No Nickname" . Chega de imprimir mais acidentalmente texto vazio em html! Você precisa instalar as dependências do cristal.
shards installcrystal spec da raiz do projeto. Consulte Contribuindo.md
Adoramos todos os membros da comunidade que fizeram muito trabalho para melhorar a sorte. Se você é uma dessas pessoas, queremos lhe dar uma camiseta!
Para conseguir uma camisa, pedimos que você tenha dado uma contribuição significativa à Lucky. Isso inclui coisas como enviar PRs com correções de bugs e implementações de recursos, ajudar outros membros a trabalhar através de problemas e implantar aplicativos do mundo real usando a Lucky!
Para reivindicar sua camisa, preencha este formulário.
Paulcsmith Paul Smith - Criador original de Lucky
Feito com contrib.rocks.
lucky watch baseado fortemente em Sentry. Obrigado @samueleaton!