78 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require "mongoid"
 | |
| 
 | |
| module Devops
 | |
|   module Model
 | |
|     class Role
 | |
| 
 | |
|       include ::Mongoid::Document
 | |
|       include ::Mongoid::Timestamps::CreatedInt
 | |
|       include ::ActiveModel::Validations
 | |
| 
 | |
|       store_in collection: "roles"
 | |
| 
 | |
|       SUPER_USER_ROLE = 'super_user'
 | |
| 
 | |
|       field :_id, as: :'id', overwrite: true, type: String, default: ->{ self.name.downcase.gsub(%r(\s+), "_") if self.name }
 | |
|       field :name, type: String
 | |
|       field :description, type: String
 | |
|       field :policies, type: Array, default: ->{ [] }
 | |
| 
 | |
|       validates_presence_of :id, message: "'id' is undefined"
 | |
|       validates_uniqueness_of :id, on: :create
 | |
| 
 | |
|       validates_presence_of :name, message: "'name' is undefined"
 | |
|       validates_format_of :name, with: /\A[\w\s]{1,99}\z/, message: "invalid name"
 | |
| 
 | |
|       validates_length_of :description, maximum: 500
 | |
| 
 | |
|       validates_presence_of :policies, message: "'policies' is undefined"
 | |
| 
 | |
|       validate :validate_policies
 | |
| 
 | |
|       def initialize hash
 | |
|         raise InvalidRecord.new("Parameter 'name' is not a string") unless hash["name"].is_a?(String)
 | |
|         raise InvalidRecord.new("Parameter 'description' is not a string") unless hash["description"].is_a?(String)
 | |
|         raise InvalidRecord.new("Parameter 'policies' is not an array") unless hash["policies"].is_a?(Array)
 | |
|         super(hash)
 | |
|       end
 | |
| 
 | |
|       def validate_policies
 | |
|         res = self.class.check_policies(self.policies)
 | |
|         errors.add(:policies, res) unless res.nil?
 | |
|       end
 | |
| 
 | |
|       def to_hash
 | |
|         hash = self.attributes
 | |
|         hash["id"] = hash.delete("_id")
 | |
| #        hash["created_at"] = hash.delete("created_at").to_i if hash["created_at"]
 | |
|         hash
 | |
|       end
 | |
| 
 | |
|       def self.check_policies policies
 | |
|         if policies.nil?
 | |
|           return "Policies parameter can not be null, it must be an array"
 | |
|         end
 | |
|         available_policies = Devops::Api3.policies.keys
 | |
|         if policies.include?("all")
 | |
|           policies.clear
 | |
|           policies.push 'all'
 | |
|         else
 | |
|           invalid_policies = []
 | |
|           policies.each do |p|
 | |
|             if p.is_a?(String)
 | |
|               invalid_policies.push(p) unless available_policies.include?(p.to_sym)
 | |
|             else
 | |
|               return "Invalid value '#{p}': policy must be a string"
 | |
|             end
 | |
|           end
 | |
|           unless invalid_policies.empty?
 | |
|             return "Invalid policies: #{invalid_policies.join(', ')}"
 | |
|           end
 | |
|         end
 | |
|         return nil
 | |
|       end
 | |
| 
 | |
|     end
 | |
|   end
 | |
| end
 | 
