Module: Brainiac::Plugins::Fizzy

Defined in:
lib/brainiac/plugins/fizzy.rb,
lib/brainiac/plugins/fizzy/cli.rb,
lib/brainiac/plugins/fizzy/hooks.rb,
lib/brainiac/plugins/fizzy/config.rb,
lib/brainiac/plugins/fizzy/helpers.rb,
lib/brainiac/plugins/fizzy/prompts.rb,
lib/brainiac/plugins/fizzy/version.rb,
lib/brainiac/plugins/fizzy/metadata.rb,
lib/brainiac/plugins/fizzy/planning.rb

Defined Under Namespace

Modules: Cli, Config, Helpers, Hooks, Planning, Prompts

Constant Summary collapse

VERSION =
"0.0.5"

Class Method Summary collapse

Class Method Details

.cli(args) ⇒ Object

Plugin CLI entry point — called by brainiac core's plugin delegation.



132
133
134
# File 'lib/brainiac/plugins/fizzy/cli.rb', line 132

def self.cli(args)
  Cli.run(args)
end

.completionsObject

Subcommand names for bash completion.



137
138
139
# File 'lib/brainiac/plugins/fizzy/cli.rb', line 137

def self.completions
  %w[config status setup]
end

.configured?Boolean

Returns true if Fizzy has at least one board configured.

Returns:

  • (Boolean)


12
13
14
15
16
17
18
19
20
# File 'lib/brainiac/plugins/fizzy/metadata.rb', line 12

def self.configured?
  config_file = File.join(ENV.fetch("BRAINIAC_DIR", File.join(Dir.home, ".brainiac")), "fizzy.json")
  return false unless File.exist?(config_file)

  config = JSON.parse(File.read(config_file))
  !(config["boards"] || {}).empty?
rescue StandardError
  false
end

.handle_publish_or_triage(action, payload) ⇒ Object



177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
# File 'lib/brainiac/plugins/fizzy.rb', line 177

def handle_publish_or_triage(action, payload)
  eventable = payload["eventable"] || {}
  card_number = eventable["number"]&.to_s

  if action == "card_triaged" && card_number
    return [200, { status: "ignored", reason: "self_move" }.to_json] if self_move_recent?(card_number)
    return [200, { status: "ignored", reason: "card_merged" }.to_json] if work_item_merged?(card_number)

    card_key = "card-#{card_number}"
    return [200, { status: "ignored", reason: "recently_completed" }.to_json] if recently_completed?(card_key)
  end

  if action == "card_published"
    assignees = eventable["assignees"] || []
    return handle_card_assigned(payload) if assignees.any? { |a| local_agent_names.include?(a["name"]) }
  end

  handle_card_published(payload)
end

.help_textObject

Help text shown in brainiac help when the plugin is installed.



23
24
25
# File 'lib/brainiac/plugins/fizzy/metadata.rb', line 23

def self.help_text
  "    brainiac fizzy <command>      Manage Fizzy boards"
end

.register(app) ⇒ Object

Called by Brainiac plugin system during server startup.

Parameters:

  • app (Sinatra::Application)

    The running Brainiac server



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/brainiac/plugins/fizzy.rb', line 27

def register(app)
  # Load Fizzy config
  Brainiac::Plugins::Fizzy::Config.load!

  # Register channel prompt
  Brainiac.register_channel_prompt(:fizzy,
                                   Brainiac::Plugins::Fizzy::Prompts::CHANNEL,
                                   pre_post_check: Brainiac::Plugins::Fizzy::Prompts::PRE_POST_CHECK)

  # Register lifecycle hooks
  Brainiac::Plugins::Fizzy::Hooks.register_all!

  # Set up webhook route
  setup_routes(app)

  LOG.info "[Fizzy] Plugin registered (webhook: /fizzy)"
end