sidekiq_adhoc_job 0.1.3 → 0.1.4

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: 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