Sha256: 44f7ddbac142830bfadd0a4fdbb92b7797352918041b7c636be68a27b20359a6

Contents?: true

Size: 1.88 KB

Versions: 5

Compression:

Stored size: 1.88 KB

Contents

module Roles::Base
  def valid_roles_are(*role_list)
    strategy_class.valid_roles = role_list.to_symbols
  end
end

module Roles
  module Mongoid  
    def self.included(base) 
      base.extend Roles::Base
      base.extend ClassMethods
      base.orm_name = :mongoid
    end

    module ClassMethods
      
      MAP = {
        :admin_flag   => "field :admin_flag, :type => Boolean",
        
        :many_roles   => "references_many :many_roles, :stored_as => :array, :class_name => 'Role'",
        :one_role     => "referenced_in :one_role, :class_name => 'Role'",

        :embed_many_roles   => "embeds_many :many_roles, :class_name => 'Role'",
        :embed_one_role     => "embeds_one :one_role, :class_name => 'Role'",

        :roles_mask   => "field :roles_mask, :type => Integer, :default => 0",
        :role_string  => "field :role_string, :type => String",
        :role_strings => "field :role_strings, :type => Array",
        :roles_string => "field :roles_string, :type => String"
      }
      
      def strategy name, options = {}
        if (options == :default || options[:config] == :default) && MAP[name]
          instance_eval MAP[name] 
        end
        if !options.kind_of? Symbol
          role_class = options[:role_class] ? options[:role_class].to_s.camelize.constantize : (Role if defined? Role)
        end

        case name
        when :embed_one_role
          raise ArgumentError, "#strategy class method must take :role_class option when using an embedded role strategy" if !role_class
          role_class.embedded_in :user, :inverse_of => :one_role
        when :embed_many_roles
          raise ArgumentError, "#strategy class method must take :role_class option when using an embedded role strategy" if !role_class
          role_class.embedded_in :user, :inverse_of => :many_roles
        end
        
        set_role_strategy name, options
      end    
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
roles_mongoid-0.3.6 lib/roles_mongoid/base.rb
roles_mongoid-0.3.5 lib/roles_mongoid/base.rb
roles_mongoid-0.3.4 lib/roles_mongoid/base.rb
roles_mongoid-0.3.3 lib/roles_mongoid/base.rb
roles_mongoid-0.3.2 lib/roles_mongoid/base.rb