after_create :notify_author! def notify_author! self.users.each do |user| if … UserMailer.existing_author(user) else UserMailer.welcome_author(user) end end end
or User.new) # Le user n’existe pas form.persisted? => false form.save form.persisted? => true form.created? => true # Le user existe form.persisted? => true form.save form.persisted? => true form.created? => false
|user| if user.created? NewUserMailer.welcome_email(user.model) else ExistingUserMailer.added_email(user.model) end end end def process(params) validate(params[:thing]) do |f| f.save notify_authors! reset_authorships! end end
policy Thing::Policy, :create? model Thing, :create builds -> (model, policy, params) do return self::Admin if policy.admin? return self::SignedIn if policy.signed_in? end ... class SignedIn < self end class Admin < SignedIn end end end
= Thing::Create.(thing: {name: "Rails", users: [{"email": "[email protected]"}]}).model op = Thing::Create.(thing: {name: "Rails", users: [{"email": « [email protected]"}]}) res, op = Thing::Create.run(thing: {name: "Rails", users: [{"email": « [email protected] »}]}) res sera true ou false op contiendra, par exemple les erreurs ou le model on le contract…
pouvoir se passer d’ActionVieux API Hypermedia (rendering & deserialisation) Totalement découplé de Rails (Sinatra, Lotus…) L’intégration à venir avec une nouvelle gem call_sheet Pipelines in operations Dry-container integration Je n’ai pas parlé de
moyen d’apprendre, c’est comme toujours de pratiquer: • Créer une GEM Un FormBuilder complètement découplé de Rails • Améliorer une GEM Tyrant (github.com/apotonick/tyrant) • Travailler sur une sample app Lotus/TRB Et maintenant ?