Sha256: 0c0f3567ff34e0851789214dafb56a6bd9a2238488c3b286d887e06f35e2435a

Contents?: true

Size: 1.27 KB

Versions: 1

Compression:

Stored size: 1.27 KB

Contents

module Clubhouse
  module Concerns
    module Models
      module Organization
        extend ActiveSupport::Concern

        include Emailable

        NAME_REGEX = /\A[a-z][a-z\d\-]*\z/

        included do
          has_many :invitations
          has_many :memberships
          has_many :members, through: :memberships, class_name: Clubhouse.config.member_model

          before_validation :normalize_name

          validates :name, presence: true,
                           length: { maximum: 30 },
                           format: NAME_REGEX,
                           uniqueness: true
        end

        module ClassMethods
          def locate(id_or_name)
            located(id_or_name).first
          end

          def locate!(id_or_name)
            located(id_or_name).first!
          end

          def located(id_or_name)
            field = Clubhouse.is_id?(id_or_name) ? :id : :name
            where(field => id_or_name)
          end
        end

        def member?(member)
          memberships.exists?(member: member)
        end

        def admin?(member)
          memberships.exists?(admin: true, member: member)
        end

        private
        def normalize_name
          self.name = Clubhouse.normalize_name(name)
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
clubhouse-0.1.0 lib/clubhouse/concerns/models/organization.rb