My opinionated ruby on rails template
1# frozen_string_literal: true
2
3say 'Setting up Blazer for BI dashboard...', :green
4
5gem 'blazer'
6
7after_bundle do
8 say ' Running Blazer install...', :cyan
9 rails_command 'generate blazer:install'
10end
11
12say ' Creating Blazer initializer...', :cyan
13file 'config/initializers/blazer.rb', <<~RUBY
14 # frozen_string_literal: true
15
16 # Blazer configuration is in config/blazer.yml
17 # This file handles additional Ruby-based config
18
19 # Ensure Blazer uses the correct database
20 # Blazer.settings["data_sources"]["main"]["url"] = ENV["DATABASE_URL"]
21RUBY
22
23say ' Creating Blazer config...', :cyan
24file 'config/blazer.yml', <<~YAML, force: true
25 # Blazer configuration
26 # https://github.com/ankane/blazer
27
28 data_sources:
29 main:
30 url: <%= ENV["DATABASE_URL"] %>
31
32 # Statement timeout (in seconds)
33 timeout: 15
34
35 # Caching (requires cache store)
36 cache:
37 mode: slow # or "all"
38 expires_in: 60 # seconds
39
40 # Smart variables (dropdown filters in queries)
41 smart_variables:
42 user_id: "SELECT id, email FROM users ORDER BY email"
43 # state: "SELECT DISTINCT state FROM orders"
44
45 # Linked columns (make values clickable)
46 linked_columns:
47 user_id: "/admin/users/{value}"
48 # order_id: "/admin/orders/{value}"
49
50 # Smart columns (format output)
51 smart_columns:
52 created_at: datetime
53 updated_at: datetime
54 # amount: currency
55
56 # Audit logging
57 audit: true
58
59 # Check queries for anomalies
60 check_schedules:
61 - "1 day"
62 - "1 week"
63 - "1 month"
64YAML
65
66say 'Blazer BI dashboard configured!', :green
67say ' Access at /admin/blazer (admin only)', :cyan
68say ' Run migrations: rails db:migrate', :yellow
69say ' Configure data sources in config/blazer.yml', :cyan