sidekiq_adhoc_job 0.1.3 → 0.1.4

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: d343fd5493049cf0f38225bfde6a3d5329e1bf9aa97d9c57a78b2896cd615ad1
4
- data.tar.gz: 3e5b08a0e5a81ab52070158ec10e64c6f92a34726244d356a096259981a0d62d
3
+ metadata.gz: df66102de04a00d471d9fb6227e4c60b0223062dda40be414cfc2f3b4e8278e6
4
+ data.tar.gz: 132225f4c811811c85ecc971a7a9f34cff0cf2d9b0d6b2f83218c76e2653c367
5
5
  SHA512:
6
- metadata.gz: f0b0a21ab330712ab59a2c0a356f5ca6c1c31ff9a704b9c08ab3b5ced2f22d11deee0a831c4e1bac51592e9420f74cbfea18aa4bab5f184e44e51f9e36c17d2a
7
- data.tar.gz: c37d32257e371b2cf4851733ee3f9f32a31d495e372801411c6c491aae2ce482f654e409561e8300dfa602d63d01506b6962a4e6201fcd817d8bb18fbd360964
6
+ metadata.gz: 459e2d8b32611520ea08e696ddb2daa6716059eaa966e6f3f2208b6c81679c46be0cfd88e0da94b1ab9f2a31de794b6be583dd170c293625782e02af21b43406
7
+ data.tar.gz: 5aa2a6a2e5d7c9f8c4fa6163114a8d0573ed7cfa4c3dadbeebdd4c2d6523924590e9a73d98e148730f7d80429aa79aa300e2daff1046a8dc141e50210fc1ed41
@@ -2,6 +2,7 @@ require 'sidekiq'
2
2
  require 'sidekiq/web'
3
3
 
4
4
  require 'sidekiq_adhoc_job/utils/string'
5
+ require 'sidekiq_adhoc_job/utils/class_inspector'
5
6
  require 'sidekiq_adhoc_job/worker_classes_loader'
6
7
  require 'sidekiq_adhoc_job/web/job_presenter'
7
8
  require 'sidekiq_adhoc_job/services/schedule_adhoc_job'
@@ -9,6 +9,9 @@ module SidekiqAdhocJob
9
9
  acc
10
10
  end
11
11
  @worker_klass = WorkerClassesLoader.find_worker_klass(job_name)
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
+
12
15
  parse_params
13
16
  end
14
17
 
@@ -18,10 +21,10 @@ module SidekiqAdhocJob
18
21
 
19
22
  private
20
23
 
21
- attr_reader :request_params, :worker_klass, :allowed_params, :worker_params
24
+ attr_reader :request_params, :worker_klass, :worker_klass_inspector,
25
+ :allowed_params, :worker_params
22
26
 
23
27
  def parse_params
24
- @allowed_params = worker_klass.new.method(:perform).parameters.reject { |type, _| type == :rest }.flat_map(&:last)
25
28
  @worker_params = allowed_params.map { |key| StringUtil.parse(request_params[key]) }
26
29
  if !!request_params[:rest_args] && !request_params[:rest_args].empty?
27
30
  @worker_params += request_params[:rest_args].split(',').map { |arg| StringUtil.parse(arg.strip) }
@@ -0,0 +1,50 @@
1
+ module SidekiqAdhocJob
2
+ module Utils
3
+ class ClassInspector
4
+
5
+ attr_reader :klass_name, :klass_obj, :method_parameters
6
+
7
+ def initialize(klass_name)
8
+ @klass_name = klass_name
9
+ @klass_obj = klass_name.new
10
+ @method_parameters = {}
11
+ end
12
+
13
+ def parameters(method_name)
14
+ return method_parameters[method_name] if method_parameters[method_name]
15
+
16
+ klass_method = klass_method(klass_obj.method(method_name))
17
+ params = klass_method
18
+ .parameters
19
+ .group_by { |type, _| type }
20
+ .inject({}) do |acc, (type, params)|
21
+ acc[type] = params.map(&:last)
22
+ acc
23
+ end
24
+
25
+ method_parameters[method_name] = params
26
+
27
+ params
28
+ end
29
+
30
+ def required_parameters(method_name)
31
+ parameters(method_name)[:req] || []
32
+ end
33
+
34
+ def optional_parameters(method_name)
35
+ parameters(method_name)[:opt] || []
36
+ end
37
+
38
+ def has_rest_parameter?(method_name)
39
+ !!parameters(method_name)[:rest]
40
+ end
41
+
42
+ def klass_method(method)
43
+ return method unless method.super_method
44
+
45
+ klass_method(method.super_method)
46
+ end
47
+
48
+ end
49
+ end
50
+ end
@@ -82,10 +82,14 @@ module SidekiqAdhocJob
82
82
  true
83
83
  elsif input == 'false'
84
84
  false
85
+ elsif input == 'nil'
86
+ nil
85
87
  elsif (i = parse_integer(input))
86
88
  i
87
89
  elsif (f = parse_float(input))
88
90
  f
91
+ elsif (j = parse_json(input))
92
+ j
89
93
  else
90
94
  input
91
95
  end
@@ -103,6 +107,12 @@ module SidekiqAdhocJob
103
107
  nil
104
108
  end
105
109
 
110
+ def self.parse_json(input)
111
+ JSON.parse(input)
112
+ rescue JSON::ParserError => _e
113
+ nil
114
+ end
115
+
106
116
  end
107
117
  end
108
118
  end
@@ -1,3 +1,3 @@
1
1
  module SidekiqAdhocJob
2
- VERSION = '0.1.3'.freeze
2
+ VERSION = '0.1.4'.freeze
3
3
  end
@@ -38,16 +38,9 @@ module SidekiqAdhocJob
38
38
  end
39
39
 
40
40
  def self.convert_klass_name_to_presenter(path_name, klass_name)
41
- klass_obj = klass_name.new
42
41
  queue = klass_name.sidekiq_options['queue']
43
- args = klass_obj
44
- .method(:perform)
45
- .parameters
46
- .group_by { |type, _| type }
47
- .inject({}) do |acc, (type, params)|
48
- acc[type] = params.map(&:last)
49
- acc
50
- end
42
+ class_inspector = SidekiqAdhocJob::Utils::ClassInspector.new(klass_name)
43
+ args = class_inspector.parameters(:perform)
51
44
  new(klass_name, path_name, queue, args)
52
45
  end
53
46
 
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: 0.1.3
4
+ version: 0.1.4
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: 2019-06-06 00:00:00.000000000 Z
11
+ date: 2019-06-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
@@ -117,6 +117,7 @@ extra_rdoc_files: []
117
117
  files:
118
118
  - lib/sidekiq_adhoc_job.rb
119
119
  - lib/sidekiq_adhoc_job/services/schedule_adhoc_job.rb
120
+ - lib/sidekiq_adhoc_job/utils/class_inspector.rb
120
121
  - lib/sidekiq_adhoc_job/utils/string.rb
121
122
  - lib/sidekiq_adhoc_job/version.rb
122
123
  - lib/sidekiq_adhoc_job/web.rb