brainiac-fizzy 0.0.18 → 0.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 34a03eed47ca8ae2a7de8ec8351962c5a3aa59652d7466c14221d4919866519f
4
- data.tar.gz: e18090ad45a15ce328c6c1fdabc267e32c29868bd28e36f6540af7ed1ace6436
3
+ metadata.gz: 17a740230d941e1cf3afaceba18f6828ba264e0b4ef9603e95f6ae3ae9fa1189
4
+ data.tar.gz: 128ada1e609fcbf9bf1708103278a12b6779d7833adad09f418d3f2545324d8f
5
5
  SHA512:
6
- metadata.gz: 4db395ff509a514e144c4237affb376ac43de3d2a04ed0a5e89a12f5260c7b02ad144344b3bab5e471f9a617df1af3bbcc99ed29c2151c2e3b61d99df6f5f9c4
7
- data.tar.gz: d9c0cfdcec762022846ed40cc2e8713504f55c6206df41024c484ec9eade1378d60d82e3dd593ebdf76261d7cbcb8bde25f10dfb863830af2e76aca431b960c2
6
+ metadata.gz: 0ddfc0b84306b839424e49a8cc8bcd7e86de1e4933712543df498cc02fe0f5c213df4a56db74a177e98d3071cec8f6d2f83e0ee97a926dff8f4c00f23bcffc9f
7
+ data.tar.gz: a51a4194f8f9281faae2ad5374db1f7c9218bffc9fcf882ed0e0eba9ba303641a2a020846ee16eea8d61cd87033c010a3e13c48a2107d0346d7a2d69b90d139b
@@ -133,11 +133,11 @@ module Brainiac
133
133
  puts "================="
134
134
  puts ""
135
135
 
136
- board = board_setup_select_board
136
+ board = board_setup_select_or_create_board
137
137
  return unless board
138
138
 
139
139
  board_key = board_setup_choose_key(board["name"])
140
- column_map = board_setup_map_columns(board["id"], board["name"])
140
+ column_map = board_setup_columns(board["id"], board["name"])
141
141
  secret = board_setup_ask_secret(board_key)
142
142
 
143
143
  config = board_setup_save(board_key, board["id"], column_map, secret)
@@ -153,7 +153,7 @@ module Brainiac
153
153
  puts " brainiac fizzy board assign <project-key> #{board_key}"
154
154
  end
155
155
 
156
- def board_setup_select_board
156
+ def board_setup_select_or_create_board
157
157
  boards_json = run_fizzy("board", "list", "--all", "--json")
158
158
  unless boards_json
159
159
  puts "Error: Could not fetch boards from Fizzy CLI."
@@ -163,21 +163,42 @@ module Brainiac
163
163
  end
164
164
 
165
165
  boards = JSON.parse(boards_json)["data"] || []
166
- if boards.empty?
167
- puts "No boards found in your Fizzy account."
168
- return nil
169
- end
170
166
 
171
167
  puts "Available boards:"
172
168
  boards.each_with_index do |board, i|
173
169
  puts " #{i + 1}) #{board["name"]} (#{board["id"]})"
174
170
  end
171
+ puts " #{boards.size + 1}) ✨ Create a new board"
175
172
  puts ""
176
173
  print "Select board number: "
177
174
  choice = $stdin.gets&.chomp&.to_i
178
- return puts("Cancelled.") unless choice&.positive? && choice <= boards.size
175
+ return puts("Cancelled.") unless choice&.positive? && choice <= boards.size + 1
179
176
 
180
- boards[choice - 1]
177
+ if choice == boards.size + 1
178
+ board_setup_create_board
179
+ else
180
+ boards[choice - 1]
181
+ end
182
+ end
183
+
184
+ def board_setup_create_board
185
+ print "New board name: "
186
+ name = $stdin.gets&.chomp
187
+ return puts("Cancelled.") if name.nil? || name.empty?
188
+
189
+ print "Allow all team members access? [Y/n]: "
190
+ all_access = $stdin.gets&.chomp&.downcase != "n"
191
+
192
+ args = ["board", "create", "--name", name, "--all_access", all_access.to_s, "--json"]
193
+ output = run_fizzy(*args)
194
+ unless output
195
+ puts "Error: Failed to create board."
196
+ return nil
197
+ end
198
+
199
+ board_data = JSON.parse(output)["data"]
200
+ puts "✓ Created board \"#{name}\" (#{board_data["id"]})"
201
+ board_data
181
202
  end
182
203
 
183
204
  def board_setup_choose_key(board_name)
@@ -188,31 +209,69 @@ module Brainiac
188
209
  board_key
189
210
  end
190
211
 
191
- def board_setup_map_columns(board_id, board_name)
212
+ def board_setup_columns(board_id, board_name)
192
213
  columns_json = run_fizzy("column", "list", "--board", board_id, "--json")
193
214
  columns = columns_json ? (JSON.parse(columns_json)["data"] || []) : []
194
215
  custom_columns = columns.reject { |c| c["pseudo"] }
195
216
 
196
217
  puts ""
197
- puts "Columns for \"#{board_name}\":"
198
- if columns.empty?
199
- puts " (no columns found)"
200
- else
218
+ if custom_columns.any?
219
+ puts "Existing columns for \"#{board_name}\":"
201
220
  columns.each do |col|
202
221
  pseudo_tag = col["pseudo"] ? " [built-in]" : ""
203
222
  puts " • #{col["name"]} (#{col["id"]})#{pseudo_tag}"
204
223
  end
224
+ puts ""
225
+ print "Create brainiac lifecycle columns (right_now, needs_review, uat)? [y/N]: "
226
+ custom_columns = board_setup_create_lifecycle_columns(board_id, custom_columns) if $stdin.gets&.chomp&.downcase == "y"
227
+ else
228
+ puts "No custom columns on \"#{board_name}\" yet."
229
+ print "Create brainiac lifecycle columns (right_now, needs_review, uat)? [Y/n]: "
230
+ custom_columns = board_setup_create_lifecycle_columns(board_id, custom_columns) if $stdin.gets&.chomp&.downcase != "n"
205
231
  end
206
232
 
207
233
  puts ""
208
- puts "Which columns should brainiac track? Enter config names for each."
209
- puts "(These map to column transitions like right_now, needs_review, uat, etc.)"
210
- puts "Leave blank to skip a column."
234
+ puts "Map columns to brainiac config keys:"
235
+ puts "(These control lifecycle transitions: right_now, needs_review, uat)"
236
+ puts "Leave blank to accept suggestion, '-' to skip."
211
237
  puts ""
212
238
 
213
239
  prompt_column_mapping(custom_columns)
214
240
  end
215
241
 
242
+ def board_setup_create_lifecycle_columns(board_id, existing_columns)
243
+ lifecycle = [
244
+ { config_key: "right_now", default_name: "Right Now", color: "blue" },
245
+ { config_key: "needs_review", default_name: "Needs Review", color: "yellow" },
246
+ { config_key: "uat", default_name: "UAT", color: "lime" }
247
+ ]
248
+
249
+ existing_names = existing_columns.map { |c| c["name"].downcase }
250
+
251
+ lifecycle.each do |col_def|
252
+ if existing_names.include?(col_def[:default_name].downcase)
253
+ puts " ✓ \"#{col_def[:default_name]}\" already exists"
254
+ next
255
+ end
256
+
257
+ print " Name for #{col_def[:config_key]} column [#{col_def[:default_name]}]: "
258
+ name = $stdin.gets&.chomp
259
+ name = col_def[:default_name] if name.nil? || name.empty?
260
+
261
+ output = run_fizzy("column", "create", "--board", board_id,
262
+ "--name", name, "--color", col_def[:color], "--json")
263
+ if output
264
+ col_data = JSON.parse(output)["data"]
265
+ puts " ✓ Created \"#{name}\" (#{col_data["id"]})"
266
+ existing_columns << col_data
267
+ else
268
+ puts " ⚠ Failed to create \"#{name}\""
269
+ end
270
+ end
271
+
272
+ existing_columns
273
+ end
274
+
216
275
  def board_setup_ask_secret(board_key)
217
276
  puts ""
218
277
  puts "Webhook setup:"
@@ -3,7 +3,7 @@
3
3
  module Brainiac
4
4
  module Plugins
5
5
  module Fizzy
6
- VERSION = "0.0.18"
6
+ VERSION = "0.0.19"
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brainiac-fizzy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.18
4
+ version: 0.0.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Davis