Sha256: e7c0106ea6768a2ca82d9b348ced2eddcf95484675d011d60abe801b20e79bbb

Contents?: true

Size: 924 Bytes

Versions: 1

Compression:

Stored size: 924 Bytes

Contents

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

      module ClassMethods
        def petergate(options = {roles: [:admin]})
          serialize :roles
          after_initialize do
            self[:roles] ||= []
          end

          instance_eval do
            const_set('ROLES', options[:roles])
          end


          class_eval do
            def available_roles
              self.class::ROLES
            end

            def roles=(v)
              self[:roles] = Array(v).map(&:to_sym).to_a.select{|r| r.size > 0 && available_roles.include?(r)}
            end

            def roles
              self[:roles] + [:user]
            end

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

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

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
petergate-1.1.8 lib/petergate/active_record/base.rb