Class: Girb::Tools::RailsModelInfo

Inherits:
Base
  • Object
show all
Defined in:
lib/girb/tools/rails_tools.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

to_gemini_tool, tool_name

Class Method Details

.available?Boolean

Returns:

  • (Boolean)


67
68
69
# File 'lib/girb/tools/rails_tools.rb', line 67

def available?
  defined?(ActiveRecord::Base)
end

.descriptionObject



71
72
73
# File 'lib/girb/tools/rails_tools.rb', line 71

def description
  "Get Rails ActiveRecord model information including associations, validations, callbacks, and scopes."
end

.parametersObject



75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/girb/tools/rails_tools.rb', line 75

def parameters
  {
    type: "object",
    properties: {
      model_name: {
        type: "string",
        description: "The model class name (e.g., 'User', 'Order', 'Product')"
      }
    },
    required: ["model_name"]
  }
end

Instance Method Details

#execute(binding, model_name:) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/girb/tools/rails_tools.rb', line 89

def execute(binding, model_name:)
  klass = binding.eval(model_name)

  unless klass < ActiveRecord::Base
    return { error: "#{model_name} is not an ActiveRecord model" }
  end

  {
    model: model_name,
    table_name: klass.table_name,
    primary_key: klass.primary_key,
    columns: get_columns(klass),
    associations: get_associations(klass),
    validations: get_validations(klass),
    callbacks: get_callbacks(klass),
    scopes: get_scopes(klass)
  }
rescue NameError => e
  { error: "Model not found: #{e.message}" }
rescue StandardError => e
  { error: "#{e.class}: #{e.message}" }
end