sidekiq_adhoc_job 2.0.0 → 2.1.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: c08df33b8e1dd616b297a6cc7af3b8e6a5766619bef5175a5d4bbbf673d14ca1
4
- data.tar.gz: 9b8adc3d77092e4901e379b9b73c3ae65f25dac7e301b3334b55a0f109903757
3
+ metadata.gz: ece8cf911f7c7046c4d59ad86410a7bc872134b5bf6f547c83e2455c8a10bc6c
4
+ data.tar.gz: b19931f872a2f0b2cfb0bcae70fba1d536442d6b162f9a8a0696a1e125ebfd71
5
5
  SHA512:
6
- metadata.gz: f74a004d5b115ed9a545aa10eba699368e23e332da01dacab2e0cc09a0c786df67f5bab224213068f417fd878597018fe309d01299d45e0ef5b6cf60f6799c38
7
- data.tar.gz: 2249e2a24c8ff5eb6e9e65fa487e2bab255a7e176723b57f822cd8ca1158be6b437ee6d57600c879243daed97bf53340758bfab3dda271983a525c8e41955f9a
6
+ metadata.gz: 5b47320bbb8f31dcc3ad5726cc2394f3b15388fbb0a62b5cc137e32ba87972f971569c8a36b33a6d7ab5c3b58ecebe42f5c978d8d4cee97124fd74a34dfd7b81
7
+ data.tar.gz: 35bd8f61906e60b27da27bbea92016a868ad38d7a5d0bd2597c034b1820b214afbb13945773725f1c6f05aeafe12c6821ac06fffb9c4a33b7132f5f5b929ab07
@@ -10,28 +10,43 @@ module SidekiqAdhocJob
10
10
  end
11
11
  @worker_klass = WorkerClassesLoader.find_worker_klass(job_name)
12
12
  @worker_klass_inspector = Utils::ClassInspector.new(worker_klass)
13
- @allowed_params = worker_klass_inspector.required_parameters(:perform) + worker_klass_inspector.optional_parameters(:perform)
14
13
 
15
14
  parse_params
16
15
  end
17
16
 
18
17
  def call
19
- SidekiqAdhocJob.config.strategy.perform_async(worker_klass, *worker_params)
18
+ SidekiqAdhocJob.config.strategy.perform_async(worker_klass, *worker_positional_params, **worker_keyword_params)
20
19
  end
21
20
 
22
21
  private
23
22
 
24
- attr_reader :request_params, :worker_klass, :worker_klass_inspector,
25
- :allowed_params, :worker_params
23
+ attr_reader :request_params, :worker_klass, :worker_klass_inspector, :worker_positional_params, :worker_keyword_params
26
24
 
27
25
  def parse_params
28
- @worker_params = allowed_params
26
+ @worker_positional_params = positional_params
29
27
  .reject { |key| request_params[key].empty? }
30
28
  .map { |key| StringUtil.parse(request_params[key], symbolize: true) }
29
+ @worker_keyword_params = keyword_params
30
+ .each_with_object({}) { |key, obj| obj[key.to_sym] = request_params[key] }
31
+ .compact
31
32
  if !!request_params[:rest_args] && !request_params[:rest_args].empty?
32
- @worker_params << StringUtil.parse_json(request_params[:rest_args].strip, symbolize: true)
33
+ @worker_positional_params << StringUtil.parse_json(request_params[:rest_args].strip, symbolize: true)
33
34
  end
34
35
  end
35
36
 
37
+ def allowed_params
38
+ worker_positional_params + worker_keyword_params
39
+ end
40
+
41
+ def positional_params
42
+ worker_klass_inspector.required_parameters(:perform) +
43
+ worker_klass_inspector.optional_parameters(:perform)
44
+ end
45
+
46
+ def keyword_params
47
+ worker_klass_inspector.required_kw_parameters(:perform) +
48
+ worker_klass_inspector.optional_kw_parameters(:perform)
49
+ end
50
+
36
51
  end
37
52
  end
@@ -11,8 +11,8 @@ module SidekiqAdhocJob
11
11
  klass_name.queue_name
12
12
  end
13
13
 
14
- def perform_async(klass, *params)
15
- klass.perform_later(*params)
14
+ def perform_async(klass, *params, **kw_params)
15
+ klass.perform_later(*params, **kw_params)
16
16
  end
17
17
  end
18
18
  end
@@ -11,8 +11,8 @@ module SidekiqAdhocJob
11
11
  klass_name.sidekiq_options['queue']
12
12
  end
13
13
 
14
- def perform_async(klass, *params)
15
- klass.perform_async(*params)
14
+ def perform_async(klass, *params, **kw_params)
15
+ klass.perform_async(*params, **kw_params)
16
16
  end
17
17
  end
18
18
  end
@@ -11,8 +11,8 @@ module SidekiqAdhocJob
11
11
  klass_name.queue_name
12
12
  end
13
13
 
14
- def perform_async(klass, *params)
15
- klass.perform_later(*params)
14
+ def perform_async(klass, *params, **kw_params)
15
+ klass.perform_later(*params, **kw_params)
16
16
  end
17
17
  end
18
18
  end
@@ -35,12 +35,20 @@ module SidekiqAdhocJob
35
35
  parameters(method_name)[:opt] || []
36
36
  end
37
37
 
38
+ def required_kw_parameters(method_name)
39
+ parameters(method_name)[:keyreq] || []
40
+ end
41
+
42
+ def optional_kw_parameters(method_name)
43
+ parameters(method_name)[:key] || []
44
+ end
45
+
38
46
  def has_rest_parameter?(method_name)
39
47
  !!parameters(method_name)[:rest]
40
48
  end
41
49
 
42
50
  def klass_method(method)
43
- return method unless method.super_method
51
+ return method if method.owner == klass_name
44
52
 
45
53
  klass_method(method.super_method)
46
54
  end
@@ -1,3 +1,3 @@
1
1
  module SidekiqAdhocJob
2
- VERSION = '2.0.0'.freeze
2
+ VERSION = '2.1.0'.freeze
3
3
  end
@@ -4,7 +4,7 @@ module SidekiqAdhocJob
4
4
  class JobPresenter
5
5
  include Sidekiq::WebHelpers
6
6
 
7
- attr_reader :name, :path_name, :queue, :required_args, :optional_args, :has_rest_args
7
+ attr_reader :name, :path_name, :queue, :required_args, :optional_args, :required_kw_args, :optional_kw_args, :has_rest_args
8
8
 
9
9
  StringUtil ||= ::SidekiqAdhocJob::Utils::String
10
10
 
@@ -15,6 +15,8 @@ module SidekiqAdhocJob
15
15
  @queue = queue
16
16
  @required_args = args[:req] || []
17
17
  @optional_args = args[:opt] || []
18
+ @required_kw_args = args[:keyreq] || []
19
+ @optional_kw_args = args[:key] || []
18
20
  @has_rest_args = !!args[:rest]
19
21
  end
20
22
 
@@ -43,6 +45,10 @@ module SidekiqAdhocJob
43
45
  new(klass_name, path_name, queue, args)
44
46
  end
45
47
 
48
+ def no_arguments?
49
+ required_args.empty? && optional_args.empty? && required_kw_args.empty? && optional_kw_args.empty? && !has_rest_args
50
+ end
51
+
46
52
  end
47
53
  end
48
54
  end
@@ -1,6 +1,8 @@
1
1
  en:
2
2
  adhoc_jobs: Adhoc Jobs
3
3
  adhoc_jobs_actions: Actions
4
+ adhoc_jobs_required_keyword_arguments: Required Keyword Arguments
5
+ adhoc_jobs_optional_keyword_arguments: Optional Keyword Arguments
4
6
  adhoc_jobs_required_arguments: Required Arguments
5
7
  adhoc_jobs_optional_arguments: Optional Arguments
6
8
  adhoc_jobs_go_back: Go Back
@@ -8,6 +8,8 @@
8
8
  <th><%= t('adhoc_jobs_queue') %></th>
9
9
  <th><%= t('adhoc_jobs_required_arguments') %></th>
10
10
  <th><%= t('adhoc_jobs_optional_arguments') %></th>
11
+ <th><%= t('adhoc_jobs_required_keyword_arguments') %></th>
12
+ <th><%= t('adhoc_jobs_optional_keyword_arguments') %></th>
11
13
  <th><%= t('adhoc_jobs_has_rest_arguments') %></th>
12
14
  <th><%= t('adhoc_jobs_actions') %></th>
13
15
  </tr>
@@ -20,6 +22,8 @@
20
22
  <td><%= job.queue %></td>
21
23
  <td><%= job.required_args.join(', ') %></td>
22
24
  <td><%= job.optional_args.join(', ') %></td>
25
+ <td><%= job.required_kw_args.join(', ') %></td>
26
+ <td><%= job.optional_kw_args.join(', ') %></td>
23
27
  <td><%= job.has_rest_args %></td>
24
28
  <td class="text-center">
25
29
  <a class="btn btn-warn btn-xs" href="<%= root_path %>adhoc-jobs/<%= CGI.escape(job.path_name) %>">
@@ -4,7 +4,7 @@
4
4
 
5
5
  <form method="POST" action="<%= root_path %>adhoc-jobs/<%= CGI.escape(@presented_job.path_name) %>/schedule">
6
6
  <input type="hidden" name="authenticity_token" value="<%= @csrf_token %>" />
7
- <% if @presented_job.required_args.empty? && @presented_job.optional_args.empty? && !@presented_job.has_rest_args %>
7
+ <% if @presented_job.no_arguments? %>
8
8
  <p>No job arguments</p>
9
9
  <% else %>
10
10
  <% @presented_job.required_args.each do |arg| %>
@@ -23,6 +23,22 @@
23
23
  </div>
24
24
  </div>
25
25
  <% end %>
26
+ <% @presented_job.required_kw_args.each do |arg| %>
27
+ <div class="form-group row">
28
+ <label class="col-sm-2 col-form-label" for="<%= arg %>"><%= arg %>:</label>
29
+ <div class="col-sm-4">
30
+ <input class="form-control" type="text" name="<%= arg %>" id="<%= arg %>" required/>
31
+ </div>
32
+ </div>
33
+ <% end %>
34
+ <% @presented_job.optional_kw_args.each do |arg| %>
35
+ <div class="form-group row">
36
+ <label class="col-sm-2 col-form-label" for="<%= arg %>"><%= arg %>:</label>
37
+ <div class="col-sm-4">
38
+ <input class="form-control" type="text" name="<%= arg %>" id="<%= arg %>"/>
39
+ </div>
40
+ </div>
41
+ <% end %>
26
42
  <% if @presented_job.has_rest_args %>
27
43
  <div class="form-group row">
28
44
  <label class="col-sm-2 col-form-label" for="rest_args">Rest arguments (please provide a json string representing the arguments):</label>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq_adhoc_job
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Goh Khoon Hiang