Sha256: a1beb97f778f98ee5348941abc491ca3bf2aede52196918e214a7b021a7d9e9a

Contents?: true

Size: 1.21 KB

Versions: 4

Compression:

Stored size: 1.21 KB

Contents

module Jobshop
  class Registration < VirtualRecord
    memo_attr(:user) {
      record = organization.users.build(user_params)
      record.singleton_class.class_eval do
        validates :forename, presence: true
        validates :surname, presence: true
      end
      record
    }

    memo_attr(:organization) {
      record = ::Jobshop::Organization.find(params[:organization_id])
      record.assign_attributes(organization_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!
        organization.register_to(user)
      end

      result != false
    end

    private

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

    def organization_params
      registration_params.fetch(:organization, 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

4 entries across 4 versions & 1 rubygems

Version Path
jobshop-0.0.179 app/models/jobshop/registration.rb
jobshop-0.0.167 app/models/jobshop/registration.rb
jobshop-0.0.163 app/models/jobshop/registration.rb
jobshop-0.0.157 app/models/jobshop/registration.rb