Sha256: ebd24f416f6b66587d22f506841b91ea8b1d59d2400cc4420b3d285080763a33

Contents?: true

Size: 1.52 KB

Versions: 1

Compression:

Stored size: 1.52 KB

Contents

module SimpleRoles
  module Configuration
    extend self

    attr_writer :strategy, :user_models

    def user_models
      @user_models ||= []
    end

    def valid_roles *vr
      if vr.any?
        self.valid_roles = vr.flatten
      end

      @valid_roles ||= default_roles
    end

    def valid_roles= vr
      check_roles(vr)

      @valid_roles = vr

      distribute_methods
    end

    def default_roles
      [:user, :admin]
    end

    def strategy st = nil
      if st
        self.strategy = st
      end

      @strategy ||= default_strategy
    end

    def strategy= st
      check_strategy st

      @strategy = st
    end

    def available_strategies
      strategies.keys
    end

    def strategy_class _strategy = nil
      strategies[_strategy || strategy]
    end

    def strategies
      {
        :one => SimpleRoles::One,
        :many => SimpleRoles::Many
      }
    end

    private

    def distribute_methods
      user_models.each(&:register_dynamic_methods)
    end

    def check_strategy strategy
      raise "Wrong strategy!" unless available_strategies.include? strategy
    end

    def check_roles rolez = valid_roles
      raise "There should be an array of valid roles" unless rolez.kind_of?(Array)

      rolez.map do |rolle|
        begin
          Role.find_by_name! rolle.to_s
        rescue
          puts "SimpleRoles warning: Couldn't find Role for #{rolle}. Maybe you need to re-run migrations?"
        end
      end if strategy == :many
    end

    def default_strategy
      :one
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
simple_roles-0.0.12 lib/simple_roles/configuration.rb