Slide 1

Slide 1 text

Interactions

Slide 2

Slide 2 text

def create @user = User.new(params[:user]) ! if @user.save redirect_to @user else render 'new' end end

Slide 3

Slide 3 text

Notifications.welcome(@user).deliver

Slide 4

Slide 4 text

default_group = Community .find(current_community_id) .default_group ! @user.groups.create!(group: default_group) ! Notifications.notify_admin(group).deliver

Slide 5

Slide 5 text

def create @user = User.new(params[:user]) ! if @user.save redirect_to @user else render 'new' end end

Slide 6

Slide 6 text

def create @user = User.new(params[:user]) ! if @user.save default_group = Community .find(current_community_id) .default_group ! @user.groups.create!(group: default_group) ! Notifications.notify_admin(group).deliver ! Notifications.welcome(@user).deliver else render 'new' end end

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

Skinny Controllers, Fat Models

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

@user.join_group(…)

Slide 11

Slide 11 text

@user.send_password_reminder(…)

Slide 12

Slide 12 text

@user.find_similar_users(…)

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

More Models!!!

Slide 15

Slide 15 text

NOUNS User Group Community Comment Message Account ForumPost Store Invoice Cart Room Facility CreditCard Article

Slide 16

Slide 16 text

VERBS SignUp Join Transfer Send Purchase Move Copy Match Tag Share Count Export List Merge Clone

Slide 17

Slide 17 text

Interactions

Slide 18

Slide 18 text

ActiveInteraction

Slide 19

Slide 19 text

class SignUpUser < ActiveInteraction::Base string :name, :email, :password date :birthday, default: nil model :community ! validates :name, presence: true validates :email, format: /\A.+@.+\.\w+\z/ validates :password, password: true ! def execute user = User.create!(inputs.slice(:name, :email, :birthday)) ! compose(JoinDefaultGroup, user: user, community: community ) ! Notifications.welcome(user).deliver ! user end end

Slide 20

Slide 20 text

SignUpUser.run(params[:user])

Slide 21

Slide 21 text

string :name, :email, :password date :birthday, default: nil model :community

Slide 22

Slide 22 text

string :name, :email, :password date :birthday, default: nil model :community

Slide 23

Slide 23 text

array :tags do string end ! hash :room_prefs do boolean :view integer :floor_number end

Slide 24

Slide 24 text

validates :name, presence: true validates :email, format: /\A.+@.+\.\w+\z/ validates :password, password: true

Slide 25

Slide 25 text

validates :name, presence: true validates :email, format: /\A.+@.+\.\w+\z/ validates :password, password: true

Slide 26

Slide 26 text

def execute user = User.create!( inputs.slice(:name, :email, :birthday) ) ! compose(JoinDefaultGroup, user: user, community: community ) ! Notifications.welcome(user).deliver 
 user end

Slide 27

Slide 27 text

def execute user = User.create!( inputs.slice(:name, :email, :birthday) ) ! compose(JoinDefaultGroup, user: user, community: community ) ! Notifications.welcome(user).deliver 
 user end

Slide 28

Slide 28 text

outcome = SignUpUser.run(params[:user])

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

def create @sign_up = SignUpUser.run(params[:user]) ! if @sign_up.valid? redirect_to user_path(outcome.result) else render 'new' end end

Slide 31

Slide 31 text

• Slim Controllers, Slim Models! • Rails/forms ready • Encapsulate business logic

Slide 32

Slide 32 text

orgsync/active_interaction @AaronLasseigne @taylorfausak