
L'objectif: prévenir les bogues, oublier la plupart des problèmes de performances et passer plus de temps sur le code au lieu de déboguer et de réparer les tests.
En résumé, faites de l'écriture de superbes applications Web rapidement, amusantes et faciles.
Lucky a un nouveau nouveau jeu de guides qui facilite le démarrage.
N'hésitez pas à dire bonjour ou à poser des questions sur notre salle de chat.
Ou vous pouvez copier une véritable application de travail avec Lucky Jumpstart.
Pour installer Lucky, lisez l'installation de guides chanceux pour votre système d'exploitation. Le guide vous guidera dans l'installation d'un utilitaire de ligne de commande utilisé pour générer de nouvelles applications chanceuses.
Restez à jour en suivant @luckyframework sur Twitter.
API (Main)
class Api::Users::Show < ApiAction
get " /api/users/:user_id " do
user = UserQuery .find(user_id)
json UserSerializer .new(user)
end
endget "/sign_in" pour les routes non repos.user_id est générée car il existe un paramètre de route user_id .json pour rendre JSON. Extrait des sérialiseurs pour les réponses JSON réutilisables. # Set up the model
class User < BaseModel
table do
column last_active_at : Time
column last_name : String
column nickname : String ?
end
end? au type lorsque la colonne peut être nil . Crystal vous aidera ensuite à vous souvenir de ne pas appeler des méthodes qui ne fonctionneront pas.last_active_at et last_name car ils ne sont pas marqués comme nulables). # 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 est automatiquement généré lorsque vous définissez un modèle. Hériter de celui-ci pour personnaliser les requêtes.lower sur une colonne String pour vous assurer que Postgres trie tout en minuscules.gt pour faire en sorte que les utilisateurs sentent actifs il y a plus de 1 semaine. Lucky a beaucoup d'abstractions puissantes pour créer des requêtes complexes et taper des méthodes spécifiques (comme 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 indique au compilateur qu'il doit être transmis par les utilisateurs du type UserQuery .Users::New . Passer les paramètres en utilisant with : Users::Show.with(user.id) . Plus d'essayer de se souvenir des aides de chemin et si l'assistance est pluralisée ou non - si vous oubliez de passer un paramètre à un itinéraire, Lucky vous le fera savoir au temps de compilation.column nickname : String? Comme nilable, Lucky ne parviendrait pas à compiler la page si vous faisiez text user.nickname car il interdit l'impression nil . Au lieu de cela, nous ajoutons un secours "No Nickname" . Plus d'impression accidentelle du texte vide en HTML! Vous devez vous assurer d'installer les dépendances en cristal.
shards install exécutioncrystal spec à partir de la racine du projet. Voir contribution.md
Nous aimons tous les membres de la communauté qui ont travaillé dur pour améliorer la chance. Si vous êtes une de ces personnes, nous voulons vous donner un t-shirt!
Pour obtenir une chemise, nous vous demandons d'avoir apporté une contribution significative à Lucky. Cela comprend des choses comme la soumission des RP avec des corrections de bogues et des implémentations de fonctionnalités, aider les autres membres à résoudre des problèmes et le déploiement d'applications du monde réel en utilisant Lucky!
Pour réclamer votre chemise, remplissez ce formulaire.
Paulcsmith Paul Smith - Créateur original de Lucky
Fait avec contribution.
lucky watch basé fortement sur Sentry. Merci @samueleaton!