jobify 0.1.1 → 0.3.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 +4 -4
- data/.rubocop.yml +2 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +8 -0
- data/Gemfile +0 -4
- data/Gemfile.lock +5 -4
- data/jobify.gemspec +44 -0
- data/lib/jobify/version.rb +1 -1
- data/lib/jobify.rb +37 -18
- metadata +34 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8c34bf93e6019d918312706b17ed0503044d2dc4ea16de824702223afa879d49
|
4
|
+
data.tar.gz: 2328a20bc2654f9053d85694d062bda712762d00100747f0a68166436df56729
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ed50a875bdff43a912fa392cc852c4f80ddc43c10d453037ecc5c64c1407a93d83a23f3ae078d27a6ba63d8588ef3d2c5bdc3dd148a5e190e0e19020c577ce5
|
7
|
+
data.tar.gz: 9dd6f7b8765756f3ec85979e75564254970ac8851b42d23431b8434f24a79d5114a6bb61aa181b230d6889c2d4aa906cecb9c2fd349c5d878586d97fb63f79a3
|
data/.rubocop.yml
CHANGED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.7.6
|
data/CHANGELOG.md
CHANGED
@@ -8,3 +8,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
8
8
|
|
9
9
|
## [0.1.0] - 2022-10-25
|
10
10
|
- Initial release
|
11
|
+
|
12
|
+
## [0.2.0] - 2022-10-27
|
13
|
+
- Add support for my_method?
|
14
|
+
- Add support for my_method!
|
15
|
+
- Allow POROs with same-name class and instance methods to jobify class methods
|
16
|
+
|
17
|
+
## [0.3.0] - 2022-11-13
|
18
|
+
- Add support for private methods
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
jobify (0.
|
4
|
+
jobify (0.3.0)
|
5
5
|
activejob
|
6
6
|
activesupport
|
7
7
|
|
@@ -31,14 +31,14 @@ GEM
|
|
31
31
|
rake (13.0.6)
|
32
32
|
regexp_parser (2.6.0)
|
33
33
|
rexml (3.2.5)
|
34
|
-
rubocop (1.
|
34
|
+
rubocop (1.38.0)
|
35
35
|
json (~> 2.3)
|
36
36
|
parallel (~> 1.10)
|
37
37
|
parser (>= 3.1.2.1)
|
38
38
|
rainbow (>= 2.2.2, < 4.0)
|
39
39
|
regexp_parser (>= 1.8, < 3.0)
|
40
40
|
rexml (>= 3.2.5, < 4.0)
|
41
|
-
rubocop-ast (>= 1.
|
41
|
+
rubocop-ast (>= 1.23.0, < 2.0)
|
42
42
|
ruby-progressbar (~> 1.7)
|
43
43
|
unicode-display_width (>= 1.4.0, < 3.0)
|
44
44
|
rubocop-ast (1.23.0)
|
@@ -50,6 +50,7 @@ GEM
|
|
50
50
|
|
51
51
|
PLATFORMS
|
52
52
|
x86_64-darwin-20
|
53
|
+
x86_64-darwin-21
|
53
54
|
x86_64-linux
|
54
55
|
|
55
56
|
DEPENDENCIES
|
@@ -59,4 +60,4 @@ DEPENDENCIES
|
|
59
60
|
rubocop (~> 1.21)
|
60
61
|
|
61
62
|
BUNDLED WITH
|
62
|
-
2.3.
|
63
|
+
2.3.18
|
data/jobify.gemspec
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "lib/jobify/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "jobify"
|
7
|
+
spec.version = Jobify::VERSION
|
8
|
+
spec.authors = ["Søren Houen"]
|
9
|
+
spec.email = ["s@houen.net"]
|
10
|
+
|
11
|
+
spec.summary = "Turn any method into a background job (`jobify :hello_world` generates `def perform_hello_world_later`"
|
12
|
+
spec.homepage = "https://github.com/houen/jobify"
|
13
|
+
|
14
|
+
spec.license = "MIT"
|
15
|
+
spec.required_ruby_version = ">= 2.6.0"
|
16
|
+
|
17
|
+
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
18
|
+
|
19
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
20
|
+
spec.metadata["source_code_uri"] = "https://github.com/houen/jobify"
|
21
|
+
spec.metadata["changelog_uri"] = "https://github.com/houen/jobify/CHANGELOG.md"
|
22
|
+
|
23
|
+
# Specify which files should be added to the gem when it is released.
|
24
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
25
|
+
spec.files = Dir.chdir(__dir__) do
|
26
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
27
|
+
(f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
|
28
|
+
end
|
29
|
+
end
|
30
|
+
spec.bindir = "exe"
|
31
|
+
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
32
|
+
spec.require_paths = ["lib"]
|
33
|
+
|
34
|
+
# Uncomment to register a new dependency of your gem
|
35
|
+
spec.add_dependency "activejob"
|
36
|
+
spec.add_dependency "activesupport"
|
37
|
+
|
38
|
+
spec.add_development_dependency "minitest", "~> 5.0"
|
39
|
+
spec.add_development_dependency "rubocop", "~> 1.21"
|
40
|
+
|
41
|
+
# For more information and examples about making a new gem, check out our
|
42
|
+
# guide at: https://bundler.io/guides/creating_gem.html
|
43
|
+
spec.metadata["rubygems_mfa_required"] = "true"
|
44
|
+
end
|
data/lib/jobify/version.rb
CHANGED
data/lib/jobify.rb
CHANGED
@@ -17,33 +17,43 @@ module Jobify
|
|
17
17
|
|
18
18
|
included do
|
19
19
|
@jobified_methods = {
|
20
|
-
instance:
|
20
|
+
instance: {},
|
21
21
|
singleton: {}
|
22
22
|
}
|
23
23
|
|
24
|
-
def self.jobify(method_name, job_method_name:
|
24
|
+
def self.jobify(method_name, job_method_name: nil)
|
25
25
|
raise "method name cannot be blank" if method_name.blank?
|
26
26
|
|
27
|
-
method_name
|
27
|
+
method_name = method_name.to_s
|
28
|
+
job_method_name = job_method_name(method_name, job_method_name)
|
28
29
|
|
29
|
-
if
|
30
|
+
if has_class_method?(method_name) && !@jobified_methods[:singleton][method_name]
|
31
|
+
# Class methods are jobified first,
|
32
|
+
# so that class methods can be jobified by POROs with same-name instance methods
|
33
|
+
params = method(method_name).parameters
|
34
|
+
_define_job_class(method_name, job_method_name, params, singleton_method: true)
|
35
|
+
@jobified_methods[:singleton][method_name] = true
|
36
|
+
elsif has_instance_method?(method_name) && !@jobified_methods[:instance][method_name]
|
30
37
|
# Instance method
|
31
38
|
params = instance_method(method_name).parameters
|
32
|
-
_define_job_class(method_name, job_method_name, params, false)
|
39
|
+
_define_job_class(method_name, job_method_name, params, singleton_method: false)
|
33
40
|
@jobified_methods[:instance][method_name] = true
|
34
|
-
elsif respond_to?(method_name) && !@jobified_methods[:singleton][method_name]
|
35
|
-
# Singleton method (Class method)
|
36
|
-
params = method(method_name).parameters
|
37
|
-
_define_job_class(method_name, job_method_name, params, true)
|
38
|
-
@jobified_methods[:singleton][method_name] = true
|
39
41
|
end
|
40
42
|
end
|
41
43
|
|
42
|
-
def self.
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
44
|
+
def self.job_method_name(method_name, job_method_name)
|
45
|
+
return method_name unless job_method_name.nil?
|
46
|
+
return "perform_#{method_name[0..-2]}_later?" if method_name.end_with?('?')
|
47
|
+
return "perform_#{method_name[0..-2]}_later!" if method_name.end_with?('!')
|
48
|
+
"perform_#{method_name}_later"
|
49
|
+
end
|
50
|
+
|
51
|
+
def self._define_job_class(method_name, job_method_name, params, singleton_method:)
|
52
|
+
method_name_for_class_constant = method_name.gsub('?', '_question_').gsub('!', '_bang_')
|
53
|
+
job_class_name = singleton_method ? "JobifyClassMethod_#{method_name_for_class_constant}_Job" : "JobifyInstanceMethod_#{method_name_for_class_constant}_Job"
|
54
|
+
parent_class = defined?(ApplicationJob) ? ApplicationJob : ActiveJob::Base
|
55
|
+
job_class = Class.new(parent_class)
|
56
|
+
caller_class = self
|
47
57
|
const_set(job_class_name, job_class)
|
48
58
|
|
49
59
|
# Define perform method on job class
|
@@ -59,9 +69,9 @@ module Jobify
|
|
59
69
|
def self.singleton__define_job_perform_method(job_class, caller_class, method_name)
|
60
70
|
job_class.define_method(:perform) do |*args, **kw_args|
|
61
71
|
if kw_args.empty?
|
62
|
-
caller_class.
|
72
|
+
caller_class.send(method_name, *args)
|
63
73
|
else
|
64
|
-
caller_class.
|
74
|
+
caller_class.send(method_name, *args, **kw_args)
|
65
75
|
end
|
66
76
|
end
|
67
77
|
end
|
@@ -88,7 +98,7 @@ module Jobify
|
|
88
98
|
raise "Something has gone wrong. Record id is required" unless id
|
89
99
|
|
90
100
|
record = caller_class.find(id)
|
91
|
-
record.
|
101
|
+
record.send(method_name, *args, **kw_args)
|
92
102
|
end
|
93
103
|
end
|
94
104
|
|
@@ -129,5 +139,14 @@ module Jobify
|
|
129
139
|
def ensure_all_args_present!(req_args, args)
|
130
140
|
self.class.ensure_all_args_present!(req_args, args)
|
131
141
|
end
|
142
|
+
|
143
|
+
def self.has_class_method?(method_name)
|
144
|
+
respond_to?(method_name, true)
|
145
|
+
end
|
146
|
+
|
147
|
+
def self.has_instance_method?(method_name)
|
148
|
+
method_defined?(method_name) || private_method_defined?(method_name)
|
149
|
+
end
|
150
|
+
|
132
151
|
end
|
133
152
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jobify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Søren Houen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-11-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activejob
|
@@ -38,6 +38,34 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '5.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '5.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubocop
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.21'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.21'
|
41
69
|
description:
|
42
70
|
email:
|
43
71
|
- s@houen.net
|
@@ -46,12 +74,14 @@ extensions: []
|
|
46
74
|
extra_rdoc_files: []
|
47
75
|
files:
|
48
76
|
- ".rubocop.yml"
|
77
|
+
- ".ruby-version"
|
49
78
|
- CHANGELOG.md
|
50
79
|
- Gemfile
|
51
80
|
- Gemfile.lock
|
52
81
|
- LICENSE.txt
|
53
82
|
- README.md
|
54
83
|
- Rakefile
|
84
|
+
- jobify.gemspec
|
55
85
|
- lib/jobify.rb
|
56
86
|
- lib/jobify/version.rb
|
57
87
|
- sig/jobify.rbs
|
@@ -63,6 +93,7 @@ metadata:
|
|
63
93
|
homepage_uri: https://github.com/houen/jobify
|
64
94
|
source_code_uri: https://github.com/houen/jobify
|
65
95
|
changelog_uri: https://github.com/houen/jobify/CHANGELOG.md
|
96
|
+
rubygems_mfa_required: 'true'
|
66
97
|
post_install_message:
|
67
98
|
rdoc_options: []
|
68
99
|
require_paths:
|
@@ -78,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
78
109
|
- !ruby/object:Gem::Version
|
79
110
|
version: '0'
|
80
111
|
requirements: []
|
81
|
-
rubygems_version: 3.
|
112
|
+
rubygems_version: 3.1.6
|
82
113
|
signing_key:
|
83
114
|
specification_version: 4
|
84
115
|
summary: Turn any method into a background job (`jobify :hello_world` generates `def
|