Sha256: 658a9a47a5edf652f6dc38e731008d7d515514c57077c5b9aa17bfe6eeceb3fa

Contents?: true

Size: 1.08 KB

Versions: 2

Compression:

Stored size: 1.08 KB

Contents

module Jobshop
  class Registration < VirtualRecord
    memo_attr(:user) { team.users.build(user_params) }
    memo_attr(:team) {
      record = ::Jobshop::Team.find(params[:team_id])

      record.assign_attributes(team_params)

      record.singleton_class.class_eval do
        validates :name, presence: true, on: :update, if: :name_changed?
      end

      record
    }

    def save
      return false unless valid?

      result = ActiveRecord::Base.transaction do
        user.save!
        team.update!(owner: user,
                     registration_token: nil,
                     registration_token_sent_at: nil)
      end

      result != false
    end

    private

    def registration_params
      params.fetch(:registration, ActionController::Parameters.new)
    end

    def team_params
      registration_params.fetch(:team, ActionController::Parameters.new)
        .permit(:name)
    end

    def user_params
      registration_params.fetch(:user, ActionController::Parameters.new)
        .permit(:forename, :surname, :email, :password, :password_confirmation)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
jobshop-0.0.131 app/models/jobshop/registration.rb
jobshop-0.0.127 app/models/jobshop/registration.rb