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 |