Sha256: 1876401f673eb5324dfa7826abb42b8363b8d37724e093b4484ff72febca4318

Contents?: true

Size: 1.44 KB

Versions: 8

Compression:

Stored size: 1.44 KB

Contents

module Petergate
  module ActiveRecord
    module Base
      def self.included(base)
        base.extend(ClassMethods)
      end

      module ClassMethods
        def petergate(roles: [:admin], multiple: true)
          if multiple
            serialize :roles
            after_initialize do
              self[:roles] ||= [:user]
            end
          else
            after_initialize do
              self[:roles] ||= :user 
            end
          end

          instance_eval do
            const_set('ROLES', (roles + [:user]).uniq)
          end


          class_eval do
            def available_roles
              self.class::ROLES
            end

            if multiple
              def roles=(v)
                self[:roles] = (Array(v).map(&:to_sym).select{|r| r.size > 0 && available_roles.include?(r)} + [:user]).uniq
              end
            else
              def roles=(v)
                self[:roles] = case v.class.to_s
                               when "String", "Symbol"
                                 v
                               when "Array"
                                 v.first
                               end
              end

              def roles
                Array(self[:roles].to_sym)
              end
            end

            def role
              roles.first
            end
          end
        end
      end
    end
  end
end

class ActiveRecord::Base
  include Petergate::ActiveRecord::Base
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
petergate-1.5.1 lib/petergate/active_record/base.rb
petergate-1.3.6 lib/petergate/active_record/base.rb
petergate-1.3.5 lib/petergate/active_record/base.rb
petergate-1.3.0 lib/petergate/active_record/base.rb
petergate-1.2.6 lib/petergate/active_record/base.rb
petergate-1.2.5 lib/petergate/active_record/base.rb
petergate-1.2.1 lib/petergate/active_record/base.rb
petergate-1.2.0 lib/petergate/active_record/base.rb