Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add valid #26

Merged
merged 3 commits into from
Nov 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions lib/minds.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
require_relative "minds/config/base"
require_relative "minds/datasources"
require_relative "minds/minds"
require_relative "minds/validators"

module Minds
class MiddlewareErrors < Faraday::Middleware
Expand Down
2 changes: 2 additions & 0 deletions lib/minds/datasources.rb
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ def initialize(client:)
def create(ds_config, update = false)
name = ds_config.name

Validators.validate_datasource_name!(name)

path = "datasources"
path += "/#{name}" if update

Expand Down
5 changes: 4 additions & 1 deletion lib/minds/errors.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# frozen_string_literal: true

module Minds
class Error < StandardError; end
class ValidationError < Error; end
class ObjectNotFound < Error; end
class ObjectNotSupported < Error; end
class MindNameInvalid < Error; end
class DatasourceNameInvalid < Error; end
end
3 changes: 3 additions & 0 deletions lib/minds/minds.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ def initialize(client, attributes = {})
# @param parameters [Hash, nil] Alter other parameters of the mind (optional)
# @return [void]
def update(name: nil, model_name: nil, provider: nil, prompt_template: nil, datasources: nil, parameters: nil)
Validators.validate_mind_name!(name) if !name.nil?
data = {}
ds_names = []
datasources.each do |ds|
Expand Down Expand Up @@ -210,6 +211,8 @@ def destroy(name)
# )
#
def create(name:, model_name: nil, provider: nil, prompt_template: nil, datasources: nil, parameters: nil, replace: false, update: false)
Validators.validate_mind_name!(name) if !name.nil?

if replace
find(name)
destroy(name)
Expand Down
57 changes: 57 additions & 0 deletions lib/minds/validators.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# frozen_string_literal: true

module Minds
module Validators
class << self
# Validates a mind name according to naming rules
#
# @param name [String] The mind name to validate
# @return [Boolean] Returns true if valid
# @raise [MindNameInvalid] If the mind name is invalid
#
# @example Valid mind names
# validate_mind_name!("my_mind_1") # => true
#
# @example Invalid mind names
# validate_mind_name!("123_mind") # raises MindNameInvalid
# validate_mind_name!("my mind") # raises MindNameInvalid
# validate_mind_name!("very_very_long_mind_name_over_32_chars") # raises MindNameInvalid
#
# @note Mind name rules:
# - Must start with a letter
# - Can contain only letters, numbers, or underscores
# - Maximum length of 32 characters
# - Cannot contain spaces
def validate_mind_name!(name)
unless name.match?(/\A[a-zA-Z][a-zA-Z0-9_]{0,31}\z/)
raise MindNameInvalid, "Mind name '#{name}' is invalid. It must start with a letter, contain only letters, numbers, or underscores, and be 32 characters or less."
end
end

# Validates a datasource name according to naming rules
#
# @param name [String] The datasource name to validate
# @return [Boolean] Returns true if valid
# @raise [DatasourceNameInvalid] If the datasource name is invalid
#
# @example Valid datasource names
# validate_datasource_name!("my_database") # => true
#
# @example Invalid datasource names
# validate_datasource_name!("123_db") # raises DatasourceNameInvalid
# validate_datasource_name!("my database") # raises DatasourceNameInvalid
# validate_datasource_name!("very_very_long_database_name_over_62_characters_not_allowed") # raises DatasourceNameInvalid
#
# @note Datasource name rules:
# - Must start with a letter
# - Can contain only letters, numbers, or underscores
# - Maximum length of 62 characters
# - Cannot contain spaces
def validate_datasource_name!(name)
unless name.match?(/\A[a-zA-Z][a-zA-Z0-9_]{0,61}\z/)
raise DatasourceNameInvalid, "Datasource name '#{name}' is invalid. It must start with a letter, contain only letters, numbers, or underscores, and be 62 characters or less."
end
end
end
end
end