Class: Solrengine::Generators::ProgramGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Defined in:
lib/generators/solrengine/program/program_generator.rb

Instance Method Summary collapse

Instance Method Details

#copy_idlObject



20
21
22
23
24
25
26
27
# File 'lib/generators/solrengine/program/program_generator.rb', line 20

def copy_idl
  destination = "config/idl/#{program_snake}.json"
  if File.exist?(File.join(destination_root, destination))
    say_skipped(destination)
  else
    copy_file idl_path, destination
  end
end

#create_account_modelsObject



29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/generators/solrengine/program/program_generator.rb', line 29

def 
  @idl.accounts.each do ||
    destination = "app/models/#{program_snake}/#{.name.underscore}.rb"
    if File.exist?(File.join(destination_root, destination))
      say_skipped(destination)
    else
      @account = 
      @program_id = @idl.program_id
      template "account.rb.erb", destination
    end
  end
end

#create_instruction_buildersObject



42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/generators/solrengine/program/program_generator.rb', line 42

def create_instruction_builders
  @idl.instructions.each do |instruction|
    destination = "app/services/#{program_snake}/#{instruction.name}_instruction.rb"
    if File.exist?(File.join(destination_root, destination))
      say_skipped(destination)
    else
      @instruction = instruction
      @program_id = @idl.program_id
      template "instruction.rb.erb", destination
    end
  end
end

#create_stimulus_controllerObject



55
56
57
58
59
60
61
62
63
# File 'lib/generators/solrengine/program/program_generator.rb', line 55

def create_stimulus_controller
  destination = "app/javascript/controllers/#{program_snake}_controller.js"
  if File.exist?(File.join(destination_root, destination))
    say_skipped(destination)
  else
    @idl_instance = @idl
    template "stimulus_controller.js.erb", destination
  end
end

#parse_idlObject



11
12
13
14
15
16
17
18
# File 'lib/generators/solrengine/program/program_generator.rb', line 11

def parse_idl
  unless File.exist?(idl_path)
    raise Thor::Error, "IDL file not found: #{idl_path}"
  end

  @idl = Solrengine::Programs::IdlParser.parse_file(idl_path)
  say "Parsed IDL: #{@idl.name} (#{@idl.instructions.size} instructions, #{@idl.accounts.size} accounts)"
end

#show_summaryObject



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/generators/solrengine/program/program_generator.rb', line 65

def show_summary
  say ""
  say "Program '#{program_class}' generated successfully!", :green
  say ""
  say "Generated files:"
  say "  config/idl/#{program_snake}.json"
  @idl.accounts.each do |acct|
    say "  app/models/#{program_snake}/#{acct.name.underscore}.rb"
  end
  @idl.instructions.each do |ix|
    say "  app/services/#{program_snake}/#{ix.name}_instruction.rb"
  end
  say "  app/javascript/controllers/#{program_snake}_controller.js"
  say ""
  say "Next steps:"
  say "  1. Add custom query methods to your account models"
  say "  2. Register the Stimulus controller in your index.js"
  say "  3. Create Rails controller endpoints for instruction building"
end