Class: Lutaml::Cli::InteractiveShell::QueryCommands

Inherits:
CommandBase
  • Object
show all
Defined in:
lib/lutaml/cli/interactive_shell/query_commands.rb

Instance Attribute Summary

Attributes inherited from CommandBase

#shell

Instance Method Summary collapse

Methods inherited from CommandBase

#bookmarks, #config, #current_path, #current_path=, #initialize, #last_results, #last_results=, #path_history, #repository

Constructor Details

This class inherits a constructor from Lutaml::Cli::InteractiveShell::CommandBase

Instance Method Details

#cmd_find(args) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/lutaml/cli/interactive_shell/query_commands.rb', line 10

def cmd_find(args)
  if args.empty?
    puts OutputFormatter.warning("Usage: find CLASS_NAME")
    return
  end

  query = args.join(" ")
  results = repository.search(query, types: [:class])

  if results[:class].empty?
    puts OutputFormatter.warning("No classes found matching '#{query}'")
  else
    puts OutputFormatter.colorize(
      "Found #{results[:class].size} class(es):", :cyan
    )
    display_class_results(results[:class])
  end
end

#cmd_results(_args) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/lutaml/cli/interactive_shell/query_commands.rb', line 67

def cmd_results(_args)
  if last_results.nil? || last_results.empty?
    puts OutputFormatter.warning("No previous results")
  else
    puts OutputFormatter.colorize(
      "Last results (#{last_results.size}):", :cyan
    )
    last_results.each_with_index do |item, i|
      puts "  #{i + 1}. #{item}"
    end
  end
end

#cmd_search(args) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/lutaml/cli/interactive_shell/query_commands.rb', line 51

def cmd_search(args)
  if args.empty?
    puts OutputFormatter.warning("Usage: search QUERY")
    return
  end

  query = args.join(" ")
  results = repository.search(query)

  if results.values.all?(&:empty?)
    puts OutputFormatter.warning("No results found for '#{query}'")
  else
    display_search_results(results)
  end
end

#cmd_show(args) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/lutaml/cli/interactive_shell/query_commands.rb', line 29

def cmd_show(args)
  if args.empty?
    puts OutputFormatter.warning(
      "Usage: show class QNAME | show package PATH | show NUMBER",
    )
    return
  end

  subcommand = args[0].downcase

  case subcommand
  when "class"
    show_class(args[1..].join(" "))
  when "package"
    show_package(args[1..].join(" "))
  when /^\d+$/
    show_numbered_result(subcommand.to_i)
  else
    show_class(args.join(" "))
  end
end

#display_search_results(results) ⇒ Object



123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# File 'lib/lutaml/cli/interactive_shell/query_commands.rb', line 123

def display_search_results(results)
  results.each do |type, items|
    next if items.empty?

    puts ""
    puts OutputFormatter.colorize(
      "#{type.to_s.capitalize} Results (#{items.size}):", :cyan
    )

    case type
    when :class
      display_class_results(items)
    when :attribute
      display_attribute_results(items)
    when :association
      display_association_results(items)
    end
  end
end

#show_class(qname) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/lutaml/cli/interactive_shell/query_commands.rb', line 80

def show_class(qname)
  cls = repository.find_class(qname)

  unless cls
    puts OutputFormatter.error("Class not found: #{qname}")
    return
  end

  if config[:icons]
    puts EnhancedFormatter.format_class_details_enhanced(cls)
  else
    display_class_plain(cls, qname)
  end
end

#show_numbered_result(number) ⇒ Object



108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/lutaml/cli/interactive_shell/query_commands.rb', line 108

def show_numbered_result(number)
  if last_results.nil? || last_results.empty?
    puts OutputFormatter.warning("No previous results")
    return
  end

  index = number - 1
  if index.negative? || index >= last_results.size
    puts OutputFormatter.error("Invalid result number: #{number}")
    return
  end

  show_class(last_results[index])
end

#show_package(path) ⇒ Object



95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/lutaml/cli/interactive_shell/query_commands.rb', line 95

def show_package(path)
  nav = shell.navigation
  path = nav.resolve_path(path)
  pkg = repository.find_package(path)

  unless pkg
    puts OutputFormatter.error("Package not found: #{path}")
    return
  end

  display_package_contents(pkg, path)
end