Class: Solrengine::InstallGenerator

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

Instance Method Summary collapse

Instance Method Details

#add_tailwind_gem_sourcesObject



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/generators/solrengine/install_generator.rb', line 69

def add_tailwind_gem_sources
  css_file = "app/assets/stylesheets/application.tailwind.css"
  return unless File.exist?(css_file)

  content = File.read(css_file)
  return if content.include?("solrengine")

  # Find gem paths for Tailwind to scan
  gem_paths = %w[solrengine-auth].filter_map do |gem_name|
    spec = Gem.loaded_specs[gem_name] || Bundler.load.specs.find { |s| s.name == gem_name }
    spec&.full_gem_path
  end

  return if gem_paths.empty?

  source_lines = gem_paths.map { |p| "@source \"#{p}/app\";" }.join("\n")

  append_to_file css_file, "\n/* SolRengine gem views */\n#{source_lines}\n"
end

#create_env_fileObject



25
26
27
# File 'lib/generators/solrengine/install_generator.rb', line 25

def create_env_file
  template "env", ".env" unless File.exist?(".env")
end

#create_realtime_initializerObject



16
17
18
# File 'lib/generators/solrengine/install_generator.rb', line 16

def create_realtime_initializer
  template "solrengine_realtime.rb", "config/initializers/solrengine_realtime.rb"
end

#create_rpc_initializerObject



12
13
14
# File 'lib/generators/solrengine/install_generator.rb', line 12

def create_rpc_initializer
  template "solrengine_rpc.rb", "config/initializers/solrengine_rpc.rb"
end

#create_solana_monitorObject



20
21
22
23
# File 'lib/generators/solrengine/install_generator.rb', line 20

def create_solana_monitor
  template "solana_monitor", "bin/solana_monitor"
  chmod "bin/solana_monitor", 0o755
end


108
109
110
111
112
113
114
115
116
117
118
# File 'lib/generators/solrengine/install_generator.rb', line 108

def fix_stylesheet_link
  layout = "app/views/layouts/application.html.erb"
  if File.exist?(layout)
    content = File.read(layout)
    if content.include?("stylesheet_link_tag :app")
      gsub_file layout,
        "stylesheet_link_tag :app",
        'stylesheet_link_tag "application"'
    end
  end
end

#install_stimulus_controllersObject



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/generators/solrengine/install_generator.rb', line 89

def install_stimulus_controllers
  # Register shared controllers from @solrengine/wallet-utils
  index_js = "app/javascript/controllers/index.js"
  if File.exist?(index_js)
    content = File.read(index_js)
    unless content.include?("WalletController")
      append_to_file index_js, <<~JS

        import { WalletController } from "@solrengine/wallet-utils/controllers"
        application.register("wallet", WalletController)
      JS
    end
  end

  # Remove local wallet_controller.js if it exists (now in npm package)
  local_wallet = "app/javascript/controllers/wallet_controller.js"
  remove_file local_wallet if File.exist?(local_wallet)
end

#run_sub_generatorsObject



4
5
6
7
8
9
10
# File 'lib/generators/solrengine/install_generator.rb', line 4

def run_sub_generators
  generate "solrengine:auth:install"
  sleep 1 # Ensure unique migration timestamps
  generate "solrengine:tokens:install"
  sleep 1
  generate "solrengine:transactions:install"
end

#setup_cache_ymlObject



59
60
61
62
63
64
65
66
67
# File 'lib/generators/solrengine/install_generator.rb', line 59

def setup_cache_yml
  cache_yml = "config/cache.yml"
  if File.exist?(cache_yml)
    content = File.read(cache_yml)
    unless content.include?("database: cache")
      gsub_file cache_yml, "development:\n  <<: *default", "development:\n  database: cache\n  <<: *default"
    end
  end
end

#setup_multi_databaseObject



29
30
31
# File 'lib/generators/solrengine/install_generator.rb', line 29

def setup_multi_database
  template "database.yml", "config/database.yml", force: true
end

#setup_solid_cableObject



55
56
57
# File 'lib/generators/solrengine/install_generator.rb', line 55

def setup_solid_cable
  template "cable.yml", "config/cable.yml", force: true
end

#setup_solid_queue_in_developmentObject



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/generators/solrengine/install_generator.rb', line 33

def setup_solid_queue_in_development
  dev_rb = "config/environments/development.rb"
  content = File.read(dev_rb)

  unless content.include?("solid_queue")
    inject_into_file dev_rb, after: "config.active_job.verbose_enqueue_logs = true\n" do
      <<~RUBY

        # SolRengine: Use Solid Queue for background jobs
        config.active_job.queue_adapter = :solid_queue
        config.solid_queue.connects_to = { database: { writing: :queue } }
      RUBY
    end
  end

  unless content.include?("solid_cache_store")
    gsub_file dev_rb,
      "config.cache_store = :memory_store",
      "config.cache_store = :solid_cache_store"
  end
end

#show_post_installObject



128
129
130
131
132
133
134
135
136
137
138
# File 'lib/generators/solrengine/install_generator.rb', line 128

def show_post_install
  say "\n  SolRengine installed!", :green
  say ""
  say "  Next steps:"
  say "    1. rails db:prepare"
  say "    2. yarn add @solrengine/wallet-utils @solana/kit @wallet-standard/app @solana/wallet-standard-features @rails/actioncable"
  say "    3. Configure .env with your RPC URLs"
  say "    4. bin/dev"
  say "    5. Visit /auth/login"
  say ""
end

#update_procfileObject



120
121
122
123
124
125
126
# File 'lib/generators/solrengine/install_generator.rb', line 120

def update_procfile
  procfile = "Procfile.dev"
  if File.exist?(procfile)
    append_to_file procfile, "jobs: bin/jobs\n" unless File.read(procfile).include?("jobs:")
    append_to_file procfile, "ws: bin/solana_monitor\n" unless File.read(procfile).include?("ws:")
  end
end