Sha256: a997a4ce6b6c695f0b56f04d6054f0d29f6654eb7a84d66ddca2dace02f05bff

Contents?: true

Size: 2 KB

Versions: 4

Compression:

Stored size: 2 KB

Contents

require 'velocity_limiter'

class RailsBase::NameChange < RailsBase::ServiceBase
	include VelocityLimiter
	include RailsBase::UserFieldValidators
	include ActionView::Helpers::DateHelper

	delegate :first_name, to: :context
	delegate :last_name, to: :context
	delegate :current_user, to: :context
	delegate :admin_user_id, to: :context

	def call
		if admin_user_id
			log(level: :warn, msg: "ADMIN CHANGE: initiated by user:#{admin_user_id}")
		else
			velocity = velocity_limit_reached?
			if velocity[:reached]
				context.fail!(message: velocity[:msg])
			end
		end

		original_name = current_user.full_name

		name_validation = validate_full_name?(first_name: first_name, last_name: last_name)

		unless name_validation[:status]
			errors = name_validation[:errors].values.join('</br>')
			context.fail!(message: errors)
		end

		log(level: :info, msg: "Modifying [#{current_user.id}] first name: #{current_user.first_name} -> #{first_name}}")
		log(level: :info, msg: "Modifying [#{current_user.id}] last name: #{current_user.last_name} -> #{last_name}}")

		if !current_user.update(first_name: first_name, last_name: last_name)
			context.fail!(message: "Unable to update name. Please try again later")
		end
		context.original_name = original_name
		context.name_change = current_user.reload.full_name

		return if admin_user_id

		RailsBase::EmailVerificationMailer.event(
			current_user,
			"Succesfull name change",
			"We changed the name on your account from #{original_name} to #{context.name_change}."
		).deliver_me
	end

	def velocity_max_in_frame
		1.hour
	end

	def velocity_max
		5
	end

	def velocity_frame
		5.hours
	end

	def cache_key
		"us.name_change.#{current_user.id}"
	end

	def validate!
		raise "Expected first_name to be a String. Received #{first_name.class}" unless first_name.is_a? String
		raise "Expected last_name to be a String. Received #{last_name.class}" unless last_name.is_a? String
		raise "Expected current_user to be a User. Received #{current_user.class}" unless current_user.is_a? User
	end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
rails_base-0.82.0 app/services/rails_base/name_change.rb
rails_base-0.81.1 app/services/rails_base/name_change.rb
rails_base-0.81.0 app/services/rails_base/name_change.rb
rails_base-0.80.0 app/services/rails_base/name_change.rb