mirego/camaraderie

View on GitHub
lib/camaraderie/membership.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Camaraderie
  module Membership
    extend ActiveSupport::Concern
    included do
      # Associations
      belongs_to :user, validate: true, class_name: Camaraderie.user_class, inverse_of: :memberships
      belongs_to :organization, class_name: Camaraderie.organization_class, inverse_of: :memberships

      # Validations
      validates :user, presence: true
      validates :organization, presence: true
      validates :membership_type, presence: true, inclusion: { in: Camaraderie.membership_types }, uniqueness: { scope: [:user_id, :organization_id] }

      # Scopes
      Camaraderie.membership_types.each do |type|
        scope type.pluralize, lambda { where(membership_type: type) }
      end

      # Nested attributes
      accepts_nested_attributes_for :user
      accepts_nested_attributes_for :organization
    end
  end
end