sidekiq_adhoc_job 1.0.1 → 2.1.1

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: 66953581bfb24c498a01eaaf26fabdd822e39195179b9e3624b8eb4fd2dab287
4
- data.tar.gz: 67dedc0f7f9e1d6e053f5df711c16c489e3c9e1b3996da84243e164dc224ddf5
3
+ metadata.gz: fc98e44d532226e46f53fbe1b7bdb0d5ad300d28298b0288f4d190d7f08cb3e3
4
+ data.tar.gz: 03de6a6069557e9368c4f118783ea114202262418142acb4805c441d475b25e1
5
5
  SHA512:
6
- metadata.gz: bbc917b706c381e9a49d29cdd46d30efc4840d4f52a6dc4506dd05b567df8a5f86f7ba17dd09d2765931131d1bec008cf28cbd6be1bce17ecf5a7780e35c3d75
7
- data.tar.gz: 371a29635a981a812fb5dd31412d656d85e2723a158dedad143610eccdc382ba5f1f3c53312ce2d4b1a229b1e49ace6f33c027aa467779b223475adc01a59980
6
+ metadata.gz: 56847a1d3e01b8f5b185bdc2610ae132801bd036ef99a093f99a70d85683980518d7f39cd636d7e74da7e55d9c964c587b55d17313e99aa40cb8a72130c52cfb
7
+ data.tar.gz: ffca00494c55f11bce5fde758b0d4ad0c3e07ac61e5d53a668abc0607c29d90b138095bf0a55084c3b2861752eb44fbd79b4dd2450ca6f460489456ecf2c712d
@@ -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 = '1.0.1'.freeze
2
+ VERSION = '2.1.1'.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
@@ -5,7 +5,7 @@ module SidekiqAdhocJob
5
5
 
6
6
  def self.register(app)
7
7
  app.get '/adhoc-jobs' do
8
- @presented_jobs = SidekiqAdhocJob::Web::JobPresenter.build_collection
8
+ @presented_jobs = SidekiqAdhocJob::Web::JobPresenter.build_collection.sort_by { |j| j.name.to_s }
9
9
 
10
10
  erb File.read(File.join(VIEW_PATH, 'jobs/index.html.erb'))
11
11
  end
@@ -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,9 +22,11 @@
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
- <a class="btn btn-warn btn-xs" href="<%= root_path %>adhoc-jobs/<%= URI.escape(job.path_name) %>">
29
+ <a class="btn btn-warn btn-xs" href="<%= root_path %>adhoc-jobs/<%= CGI.escape(job.path_name) %>">
26
30
  <%= t('adhoc_jobs_view_job') %>
27
31
  </a>
28
32
  </td>
@@ -2,9 +2,9 @@
2
2
 
3
3
  <h4><%= SidekiqAdhocJob::Utils::String.classify(@presented_job.path_name) %></h4>
4
4
 
5
- <form method="POST" action="<%= root_path %>adhoc-jobs/<%= URI.escape(@presented_job.path_name) %>/schedule">
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,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sidekiq_adhoc_job
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Goh Khoon Hiang
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-12-18 00:00:00.000000000 Z
11
+ date: 2022-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
@@ -145,9 +145,9 @@ require_paths:
145
145
  - lib
146
146
  required_ruby_version: !ruby/object:Gem::Requirement
147
147
  requirements:
148
- - - "~>"
148
+ - - ">="
149
149
  - !ruby/object:Gem::Version
150
- version: '2.6'
150
+ version: '0'
151
151
  required_rubygems_version: !ruby/object:Gem::Requirement
152
152
  requirements:
153
153
  - - ">="