oneclickorgs/one-click-orgs

View on GitHub
app/models/change_member_class_proposal.rb

Summary

Maintainability
A
0 mins
Test Coverage
class ChangeMemberClassProposal < MembershipProposal
  attr_accessible :member_id, :member_class_id
  
  validate :member_must_exist
  def member_must_exist
    errors.add(:member, "does not exist") unless organisation.members.exists?(parameters['member_id'])
  end
  
  validate :member_class_must_exist
  def member_class_must_exist
    errors.add(:member_class, "does not exist") unless organisation.member_classes.exists?(parameters['member_class_id'])
  end

  def enact!
    # TODO: Needs backwards compatibility; previously stored the member's ID in
    # the 'id' key, not 'member_id'
    
    member = organisation.members.find(parameters['member_id']) # TODO verify that this member still exists
    mc = organisation.member_classes.find(parameters['member_class_id']) # TODO verify that this member class still exists
    member.member_class = mc
    member.save
  end
  
  before_create :set_default_title
  def set_default_title
    member = organisation.members.find(parameters['member_id'])
    member_class = organisation.member_classes.find(parameters['member_class_id'])
    self.title ||= "Change member class of #{member.name} from #{member.member_class.name} to #{member_class.name}"
  end
  
  def member_id
    parameters['member_id']
  end
  
  def member_id=(member_id)
    parameters['member_id'] = member_id.to_i
  end
  
  def member_class_id
    parameters['member_class_id']
  end
  
  def member_class_id=(member_class_id)
    parameters['member_class_id'] = member_class_id.to_i
  end
  
  def member
    organisation.members.find(member_id)
  end
end