Sha256: aaf279acb560d88c26d33e38d84529c3dfd563d011881307594e91b7982f889c

Contents?: true

Size: 1.29 KB

Versions: 1

Compression:

Stored size: 1.29 KB

Contents

require 'camaraderie/version'

require 'active_support'
require 'active_record'
require 'ostruct'

require 'camaraderie/user'
require 'camaraderie/organization'
require 'camaraderie/membership'

module Camaraderie
  # Yield a block to edit the @configuration variable
  def self.configure
    @configuration = OpenStruct.new
    yield(@configuration)
  end

  # Return the allowed membership types
  def self.membership_types
    @configuration.membership_types.try(:map, &:to_s) || %w(member)
  end

  # Return the class name to use for the organizations association
  def self.organization_class
    @configuration.organization_class.try(:to_s) || 'Organization'
  end

  # Return the class name to use for the users association
  def self.user_class
    @configuration.user_class.try(:to_s) || 'User'
  end

  # Return a block that can be injected into a class
  def self.inject_into_active_record
    @inject_into_active_record ||= Proc.new do
      def self.acts_as_user
        self.send :include, Camaraderie::User
      end

      def self.acts_as_organization
        self.send :include, Camaraderie::Organization
      end

      def self.acts_as_membership
        self.send :include, Camaraderie::Membership
      end
    end
  end
end

ActiveRecord::Base.class_eval(&Camaraderie.inject_into_active_record)

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
camaraderie-0.2.1 lib/camaraderie.rb