console_buddy 0.1.11 → 0.2.0

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: f06e8299de73ca38c3034fe6b769da6e0abe43d5cd139495afcba9009408b1dc
4
- data.tar.gz: 9ae2d7489bf7eecd165cfa24ed388dfaf32ef9fc0a85a4402c5c6f951c0f2ae7
3
+ metadata.gz: 821a188d27921a77f9b97c567f51d48affc3d3868ca502fe1feef3c58e500905
4
+ data.tar.gz: 0ce397777a079e04d14dc5debbceccce227302b2477400f7fc83f4cbcb35ed51
5
5
  SHA512:
6
- metadata.gz: 5bf025aac5e410b334475f5dcaab699cb5ca0692e690c686038f971595844250d772245d0f87662ed0e20b423b2c9a7fba82f12868cb267c243dcc64c32023cd
7
- data.tar.gz: ae5ff5b1c1d1fd00bfea0ae195f5d061a0c698f050c8d7530544f086114b23cac318e5250c3a243a5a95f796375bb75abcc61045e6cd9631493de064e5271b3d
6
+ metadata.gz: 87f7f8f39518800ff5bca51db854c0a4691f55023c1a232d2303af1ff91c267f438ed6cfb89a52a0c856fc01de552293824813b2c3f3f6090962d079eb95cdd4
7
+ data.tar.gz: 477afa87ea90865b2925e1dbddadf325a0418634df0e6b2c858957345c7df38f67703fd76679c7ad72ab550bd25bd592fc0291542c636b2c894115e2fe2313b6
@@ -2,7 +2,6 @@
2
2
 
3
3
  require_relative "csv"
4
4
  require_relative "http_request"
5
- require_relative "one_off_job"
6
5
  require_relative "report"
7
6
 
8
7
  module ConsoleBuddy
@@ -3,8 +3,10 @@
3
3
  require_relative "../one_off_job"
4
4
 
5
5
  # Example Usage: ConsoleBuddy::Jobs::Sidekiq.perform_later("foo", "bar")
6
- #
6
+ #
7
7
  # This class is used to integrate the ConsoleBuddy::OneOffJob with Sidekiq.
8
+ # Set ConsoleBuddy.one_off_job_sidekiq_queue in .console_buddy/config.rb when your
9
+ # app forbids the default queue (e.g. queue governance / Sidekiq Pro).
8
10
  module ConsoleBuddy
9
11
  module Jobs
10
12
  class Sidekiq
@@ -13,6 +15,40 @@ module ConsoleBuddy
13
15
  def perform(*args)
14
16
  ::ConsoleBuddy::OneOffJob.perform(*args)
15
17
  end
18
+
19
+ class << self
20
+ def perform_async(*args)
21
+ q = configured_sidekiq_queue
22
+ if q.present?
23
+ if respond_to?(:set)
24
+ set(queue: q).perform_async(*args)
25
+ else
26
+ push_with_queue(args, q)
27
+ end
28
+ else
29
+ super
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def configured_sidekiq_queue
36
+ return unless defined?(::ConsoleBuddy) && ::ConsoleBuddy.respond_to?(:one_off_job_sidekiq_queue)
37
+
38
+ q = ::ConsoleBuddy.one_off_job_sidekiq_queue
39
+ return if q.nil? || (q.respond_to?(:empty?) && q.empty?)
40
+
41
+ q.respond_to?(:to_sym) ? q.to_sym : q
42
+ end
43
+
44
+ def push_with_queue(args, queue)
45
+ ::Sidekiq::Client.push(
46
+ "class" => name,
47
+ "args" => args,
48
+ "queue" => queue.to_s
49
+ )
50
+ end
51
+ end
16
52
  end
17
53
  end
18
54
  end
@@ -5,6 +5,18 @@ require 'rails/railtie'
5
5
  # Load console buddy when the Rails console is started
6
6
  module ConsoleBuddy
7
7
  class Railtie < ::Rails::Railtie
8
+ # Queue linters and Sidekiq boot load worker classes without running `rails console`, so
9
+ # `.console_buddy/config.rb` never runs. Set CONSOLE_BUDDY_SIDEKIQ_QUEUE to an allowed queue name
10
+ # (e.g. in .env or your process manager) so ConsoleBuddy::Jobs::Sidekiq is not registered on `default`.
11
+ initializer "console_buddy.sidekiq_queue_from_env" do
12
+ next unless defined?(::ConsoleBuddy::Jobs::Sidekiq)
13
+
14
+ queue = ENV["CONSOLE_BUDDY_SIDEKIQ_QUEUE"].to_s.strip
15
+ next if queue.empty?
16
+
17
+ ::ConsoleBuddy::Jobs::Sidekiq.sidekiq_options queue: queue.to_sym
18
+ end
19
+
8
20
  console do
9
21
  ::ConsoleBuddy.start!
10
22
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ConsoleBuddy
4
- VERSION = "0.1.11"
4
+ VERSION = "0.2.0"
5
5
  end
data/lib/console_buddy.rb CHANGED
@@ -14,44 +14,19 @@ require_relative "console_buddy/helpers"
14
14
  require_relative "console_buddy/irb"
15
15
  require_relative "console_buddy/version"
16
16
 
17
- require_relative "console_buddy/one_off_job"
18
- require_relative "console_buddy/job"
19
-
20
17
  rspec_present = false
21
- # Only load the one-off job classes if the gems are installed
22
- #
23
- begin
24
- require 'sidekiq'
25
- require_relative "console_buddy/jobs/sidekiq"
26
- rescue LoadError
27
- # puts "Sidekiq gem not installed, skipping sidekiq job integration."
28
- end
29
-
30
- begin
31
- require 'resque'
32
- require_relative "console_buddy/jobs/resque"
33
- rescue LoadError
34
- # puts "Resque gem not installed, skipping resque job integration."
35
- end
36
-
37
- begin
38
- require 'activejob'
39
- require_relative "console_buddy/jobs/active_job"
40
- rescue LoadError
41
- # puts "ActiveJob gem not installed, skipping active job integration."
42
- end
43
18
 
44
19
  begin
45
20
  require 'rspec'
46
21
  rspec_present = true
47
22
  rescue LoadError
48
23
  rspec_present = false
49
- # puts "RSpec gem not installed, skipping rspec integration."
50
24
  end
51
25
 
52
26
  module ConsoleBuddy
53
27
  class << self
54
- attr_accessor :verbose_console, :allowed_envs, :use_in_debuggers, :ignore_startup_errors, :use_in_tests, :one_off_job_service_type
28
+ attr_accessor :verbose_console, :allowed_envs, :use_in_debuggers, :ignore_startup_errors, :use_in_tests, :one_off_job_service_type,
29
+ :one_off_job_sidekiq_queue, :enable_one_off_jobs
55
30
 
56
31
  def store
57
32
  @store ||= ::ConsoleBuddy::MethodStore.new
@@ -64,6 +39,7 @@ module ConsoleBuddy
64
39
  return unless console_buddy_directory_exists?
65
40
  # Check if there is a .console_buddy/config file
66
41
  load_console_buddy_config
42
+ load_one_off_job_integrations
67
43
 
68
44
  # Only start the buddy in the allowed environments. e.g. development, test
69
45
  return if !allowed_env?
@@ -99,7 +75,9 @@ module ConsoleBuddy
99
75
  @use_in_debuggers = false
100
76
  @ignore_startup_errors = false
101
77
  @allowed_envs = %w[development test]
78
+ @enable_one_off_jobs = false
102
79
  @one_off_job_service_type = :inline
80
+ @one_off_job_sidekiq_queue = nil
103
81
  end
104
82
 
105
83
  # Only start the buddy in the allowed environments
@@ -146,6 +124,48 @@ module ConsoleBuddy
146
124
  end
147
125
  end
148
126
 
127
+ # Loads one-off job integration files and syncs Sidekiq options.
128
+ # Only runs when enable_one_off_jobs is true in config.
129
+ def load_one_off_job_integrations
130
+ return unless enable_one_off_jobs
131
+
132
+ require_relative "console_buddy/one_off_job"
133
+ require_relative "console_buddy/job"
134
+
135
+ begin
136
+ require 'sidekiq'
137
+ require_relative "console_buddy/jobs/sidekiq"
138
+ rescue LoadError
139
+ # Sidekiq gem not installed, skipping sidekiq job integration.
140
+ end
141
+
142
+ begin
143
+ require 'resque'
144
+ require_relative "console_buddy/jobs/resque"
145
+ rescue LoadError
146
+ # Resque gem not installed, skipping resque job integration.
147
+ end
148
+
149
+ begin
150
+ require 'activejob'
151
+ require_relative "console_buddy/jobs/active_job"
152
+ rescue LoadError
153
+ # ActiveJob gem not installed, skipping active job integration.
154
+ end
155
+
156
+ apply_sidekiq_queue_to_worker
157
+ end
158
+
159
+ # Sync Sidekiq worker metadata so queue auditors and Sidekiq see a real queue (not the default queue).
160
+ def apply_sidekiq_queue_to_worker
161
+ return unless defined?(::ConsoleBuddy::Jobs::Sidekiq)
162
+
163
+ q = ConsoleBuddy.one_off_job_sidekiq_queue
164
+ return if q.blank?
165
+
166
+ ::ConsoleBuddy::Jobs::Sidekiq.sidekiq_options queue: q.to_sym
167
+ end
168
+
149
169
  # Loads all the files in the .console_buddy folder
150
170
  # .console_buddy folder should be in the root of the project
151
171
  def load_console_buddy_files
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+ require "sidekiq"
5
+ require_relative "../../../lib/console_buddy/jobs/sidekiq"
6
+
7
+ RSpec.describe ConsoleBuddy::Jobs::Sidekiq do
8
+ describe ".perform_async" do
9
+ after { ConsoleBuddy.one_off_job_sidekiq_queue = nil }
10
+
11
+ context "when ConsoleBuddy.one_off_job_sidekiq_queue is set" do
12
+ before { ConsoleBuddy.one_off_job_sidekiq_queue = :general_2m }
13
+
14
+ it "uses Sidekiq set(queue:) when available" do
15
+ setter = double("sidekiq_setter")
16
+ expect(described_class).to receive(:set).with(queue: :general_2m).and_return(setter)
17
+ expect(setter).to receive(:perform_async).with("a", 1)
18
+ described_class.perform_async("a", 1)
19
+ end
20
+ end
21
+
22
+ end
23
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: console_buddy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.11
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Micah Bowie
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2026-03-09 00:00:00.000000000 Z
12
+ date: 2026-04-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -201,6 +201,7 @@ files:
201
201
  - spec/console_buddy/http_request_spec.rb
202
202
  - spec/console_buddy/irb_spec.rb
203
203
  - spec/console_buddy/job_spec.rb
204
+ - spec/console_buddy/jobs/sidekiq_spec.rb
204
205
  - spec/console_buddy/method_store_spec.rb
205
206
  - spec/console_buddy/report_spec.rb
206
207
  - spec/spec_helper.rb