sidekiq_adhoc_job 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
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