require "db/mongo/models/model_with_provider" require "db/validators/stack_template/template_content" module Devops module Model class StackTemplateBase < MongoModel include ModelWithProvider attr_accessor :id, :template_body, :provider, :owner # should be a hash like {'param_name' => {type: 'String', description: 'Description'}} attr_accessor :available_parameters types id: {type: String, empty: false}, provider: {type: String, empty: false}, template_body: {type: String, empty: false}, owner: {type: String, empty: false} set_field_validators :id, [::Validators::FieldValidator::NotNil, ::Validators::FieldValidator::FieldType::String, ::Validators::FieldValidator::NotEmpty, ::Validators::FieldValidator::Name] set_field_validators :provider, [::Validators::FieldValidator::NotNil, ::Validators::FieldValidator::FieldType::String, ::Validators::FieldValidator::NotEmpty] set_field_validators :template_body, [::Validators::FieldValidator::NotNil, ::Validators::FieldValidator::FieldType::String, ::Validators::FieldValidator::NotEmpty] set_field_validators :owner, [::Validators::FieldValidator::NotNil, ::Validators::FieldValidator::FieldType::String, ::Validators::FieldValidator::NotEmpty] set_validators ::Validators::StackTemplate::TemplateContent def initialize(attrs) self.id = attrs['id'] self.template_body = attrs['template_body'] self.provider = attrs['provider'] self.owner = attrs['owner'] self.available_parameters = attrs['available_parameters'] self end def to_hash_without_id { 'provider' => provider, 'template_body' => template_body, 'owner' => owner, 'available_parameters' => available_parameters } end def parse_parameters {} end # attrs should include: # - id (String) # - provider (String) # - template_body (String) def self.create(attrs) template = new(attrs) template.available_parameters = template.parse_parameters template end def self.build_from_bson(attrs) attrs['id'] = attrs["_id"] self.new(attrs) end end end end