fluke/devops-service/db/mongo/models/role.rb
Tim Lianov 03dc3d8d99 v3
2018-04-04 22:44:39 +03:00

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