Module: LanguageOperator::Dsl::Helpers

Included in:
Context, ExecutionContext, ToolDefinition
Defined in:
lib/language_operator/dsl/helpers.rb

Overview

Common helper methods for MCP tools

Provides validation, formatting, and utility methods that can be used within tool execute blocks. All methods are instance methods that get mixed into the tool execution context.

Examples:

Using helpers in a tool

tool "send_email" do
  execute do |params|
    error = validate_email(params["email"])
    return error if error
    # email is valid, proceed...
  end
end

Instance Method Summary collapse

Instance Method Details

#env_get(*keys, default: nil) ⇒ Object

Get environment variable with fallbacks



76
77
78
79
80
81
82
# File 'lib/language_operator/dsl/helpers.rb', line 76

def env_get(*keys, default: nil)
  keys.each do |key|
    value = ENV.fetch(key, nil)
    return value if value
  end
  default
end

#env_required(*vars) ⇒ Object

Check required environment variables



68
69
70
71
72
73
# File 'lib/language_operator/dsl/helpers.rb', line 68

def env_required(*vars)
  missing = vars.reject { |v| ENV.fetch(v, nil) }
  return "Error: Missing required environment variables: #{missing.join(', ')}" unless missing.empty?

  nil
end

#error(message) ⇒ Object

Format error message



99
100
101
# File 'lib/language_operator/dsl/helpers.rb', line 99

def error(message)
  "Error: #{message}"
end

#parse_csv(str) ⇒ Object

Parse comma-separated values



92
93
94
95
96
# File 'lib/language_operator/dsl/helpers.rb', line 92

def parse_csv(str)
  return [] if str.nil? || str.empty?

  str.split(',').map(&:strip).reject(&:empty?)
end

#run_command(_cmd) ⇒ Object

Deprecated.

This method has been removed for security reasons. Use Shell.run instead.

Run a command and return structured result

Raises:



63
64
65
# File 'lib/language_operator/dsl/helpers.rb', line 63

def run_command(_cmd)
  raise SecurityError, 'run_command has been removed for security reasons. Use Shell.run instead.'
end

#shell_escape(str) ⇒ Object

Deprecated.

This method is deprecated and will be removed for security reasons

Shell escape for backtick execution (deprecated - use Shell.run instead)



55
56
57
58
# File 'lib/language_operator/dsl/helpers.rb', line 55

def shell_escape(str)
  warn 'DEPRECATION WARNING: shell_escape is deprecated and should not be used'
  Shellwords.escape(str.to_s)
end

#success(message) ⇒ Object

Format success message



104
105
106
# File 'lib/language_operator/dsl/helpers.rb', line 104

def success(message)
  message
end

#truncate(text, max_length: 2000, suffix: '...') ⇒ Object

Truncate text to a maximum length



85
86
87
88
89
# File 'lib/language_operator/dsl/helpers.rb', line 85

def truncate(text, max_length: 2000, suffix: '...')
  return text if text.length <= max_length

  text[0...max_length] + suffix
end

#validate_email(email) ⇒ String?

Validate email address format

Parameters:

  • email (String)

    Email address to validate

Returns:

  • (String, nil)

    Error message if invalid, nil if valid



47
48
49
50
51
# File 'lib/language_operator/dsl/helpers.rb', line 47

def validate_email(email)
  return 'Error: Invalid email format' unless email =~ /\A[\w+\-.]+@[a-z\d-]+(\.[a-z\d-]+)*\.[a-z]+\z/i

  nil
end

#validate_phone(number) ⇒ String?

Validate phone number in E.164 format

Parameters:

  • number (String)

    Phone number to validate

Returns:

  • (String, nil)

    Error message if invalid, nil if valid



37
38
39
40
41
# File 'lib/language_operator/dsl/helpers.rb', line 37

def validate_phone(number)
  return 'Error: Invalid phone number format. Use E.164 format (e.g., +1234567890)' unless number =~ /^\+\d{10,15}$/

  nil
end

#validate_url(url) ⇒ String?

Validate URL format

Parameters:

  • url (String)

    URL to validate

Returns:

  • (String, nil)

    Error message if invalid, nil if valid



27
28
29
30
31
# File 'lib/language_operator/dsl/helpers.rb', line 27

def validate_url(url)
  return 'Error: Invalid URL. Must start with http:// or https://' unless url =~ %r{^https?://}

  nil
end