jobler 0.0.10 → 0.0.14
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 +5 -5
- data/README.md +1 -0
- data/Rakefile +1 -1
- data/app/controllers/jobler/downloads_controller.rb +5 -1
- data/app/controllers/jobler/jobs_controller.rb +6 -1
- data/app/joblers/jobler/models/destroyer_jobler.rb +3 -3
- data/app/models/jobler/job.rb +2 -1
- data/app/models/jobler/result.rb +2 -0
- data/app/views/jobler/jobs/show.html.erb +5 -1
- data/lib/jobler/base_controller.rb +1 -1
- data/lib/jobler/base_jobler.rb +71 -19
- data/lib/jobler/file_download.rb +8 -4
- data/lib/jobler/job_runner.rb +12 -8
- data/lib/jobler/message.rb +7 -0
- data/lib/jobler/version.rb +1 -1
- data/lib/jobler.rb +1 -0
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 5cedd67bb154c2d2c93da4f460ea0d9eaa106d8017448a2b8c11476fc94fc618
|
4
|
+
data.tar.gz: 8c3aa61ccc372188fbdbd16395488a8e1f94a891c8ebd120fdf31efd1e1c5ed8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b8dc4e2afb5cc0d84d4c058990323b1409ed0d8797eedc8700a5fcb02aab2740e34b824b79744d9cb1ed433bb919b2db5ca37945bf94b60e442a83e4447ab1c0
|
7
|
+
data.tar.gz: 5e32f79d3b67c6405eff5f729799d80a4f45b2598d8ffba677b6935183674180a8e4721ad2efab829cbce7ff639824bce9567f5ea17107c82db750173a85c283
|
data/README.md
CHANGED
data/Rakefile
CHANGED
@@ -14,7 +14,7 @@ RDoc::Task.new(:rdoc) do |rdoc|
|
|
14
14
|
rdoc.rdoc_files.include("lib/**/*.rb")
|
15
15
|
end
|
16
16
|
|
17
|
-
APP_RAKEFILE = File.expand_path("
|
17
|
+
APP_RAKEFILE = File.expand_path("spec/dummy/Rakefile", __dir__)
|
18
18
|
load "rails/tasks/engine.rake"
|
19
19
|
|
20
20
|
load "rails/tasks/statistics.rake"
|
@@ -4,7 +4,11 @@ class Jobler::DownloadsController < Jobler::ApplicationController
|
|
4
4
|
@result = @job.jobler.result
|
5
5
|
|
6
6
|
if @result.is_a?(Jobler::FileDownload)
|
7
|
-
|
7
|
+
if @result.url.present?
|
8
|
+
redirect_to @result.url
|
9
|
+
else
|
10
|
+
send_file @result.temp_file.path, disposition: "attachment", filename: @result.file_name
|
11
|
+
end
|
8
12
|
else
|
9
13
|
flash[:error] = "The result wasn't a file download"
|
10
14
|
redirect_to :back
|
@@ -18,7 +18,12 @@ class Jobler::JobsController < Jobler::ApplicationController
|
|
18
18
|
@job.jobler.format = format
|
19
19
|
|
20
20
|
@result = @job.jobler.result
|
21
|
-
|
21
|
+
|
22
|
+
if @result.is_a?(Jobler::RedirectTo)
|
23
|
+
format.html { redirect_to @result.url }
|
24
|
+
else
|
25
|
+
format.html
|
26
|
+
end
|
22
27
|
else
|
23
28
|
format.html
|
24
29
|
end
|
@@ -45,11 +45,11 @@ private
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def model
|
48
|
-
@
|
48
|
+
@model ||= model_class.find(args.fetch(:model_id))
|
49
49
|
end
|
50
50
|
|
51
51
|
def relationships
|
52
|
-
@
|
52
|
+
@relationships ||= begin
|
53
53
|
result = []
|
54
54
|
|
55
55
|
model_class.reflections.each_value do |reflection|
|
@@ -60,6 +60,6 @@ private
|
|
60
60
|
end
|
61
61
|
|
62
62
|
result
|
63
|
-
end
|
63
|
+
end
|
64
64
|
end
|
65
65
|
end
|
data/app/models/jobler/job.rb
CHANGED
@@ -6,7 +6,7 @@ class Jobler::Job < ActiveRecord::Base # rubocop:disable Rails/ApplicationRecord
|
|
6
6
|
before_validation :set_slug
|
7
7
|
|
8
8
|
def jobler
|
9
|
-
@
|
9
|
+
@jobler ||= jobler_type.constantize.new(args: YAML.load(parameters), job: self) # rubocop:disable Security/YAMLLoad
|
10
10
|
end
|
11
11
|
|
12
12
|
def completed?
|
@@ -19,6 +19,7 @@ class Jobler::Job < ActiveRecord::Base # rubocop:disable Rails/ApplicationRecord
|
|
19
19
|
|
20
20
|
def to_param
|
21
21
|
raise "No slug" unless slug?
|
22
|
+
|
22
23
|
slug
|
23
24
|
end
|
24
25
|
|
data/app/models/jobler/result.rb
CHANGED
@@ -4,7 +4,11 @@
|
|
4
4
|
|
5
5
|
<% if @job.completed? %>
|
6
6
|
<% if @result.is_a?(Jobler::FileDownload) %>
|
7
|
-
|
7
|
+
<% if @result.url.present? %>
|
8
|
+
<%= link_to "Download", @result.url %>
|
9
|
+
<% else %>
|
10
|
+
<%= link_to "Download", download_path(@job) %>
|
11
|
+
<% end %>
|
8
12
|
<% elsif @result.is_a?(Jobler::PageRender) %>
|
9
13
|
<%= @result.body.html_safe %>
|
10
14
|
<% end %>
|
@@ -1,2 +1,2 @@
|
|
1
|
-
class Jobler::BaseController < ActionController::Base
|
1
|
+
class Jobler::BaseController < ActionController::Base # rubocop:disable Rails/ApplicationController
|
2
2
|
end
|
data/lib/jobler/base_jobler.rb
CHANGED
@@ -2,24 +2,55 @@ class Jobler::BaseJobler
|
|
2
2
|
attr_accessor :controller, :format
|
3
3
|
attr_reader :args, :job
|
4
4
|
|
5
|
-
def
|
6
|
-
|
7
|
-
|
5
|
+
def self.before_jobling(&blk)
|
6
|
+
@@before_jobling ||= [] # rubocop:disable Style/ClassVars
|
7
|
+
@@before_jobling << blk
|
8
8
|
end
|
9
9
|
|
10
|
-
def
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
def self.after_jobling(&blk)
|
11
|
+
@@after_jobling ||= [] # rubocop:disable Style/ClassVars
|
12
|
+
@@after_jobling << blk
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(args:, job:)
|
16
|
+
@args = args
|
17
|
+
@job = job
|
18
|
+
|
19
|
+
@@before_jobling ||= [] # rubocop:disable Style/ClassVars:
|
20
|
+
@@after_jobling ||= [] # rubocop:disable Style/ClassVars:
|
21
|
+
end
|
22
|
+
|
23
|
+
def call_before_callbacks
|
24
|
+
@@before_jobling&.each do |before_callback|
|
25
|
+
instance_eval(&before_callback)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def call_after_callbacks
|
30
|
+
@@after_jobling&.each do |after_callback|
|
31
|
+
instance_eval(&after_callback)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def create_result!(content: nil, name:, result: nil, temp_file: nil, save_in_database: false)
|
36
|
+
jobler_result = job.results.new(name: name)
|
37
|
+
|
38
|
+
if content && !temp_file
|
39
|
+
temp_file = Tempfile.new(name)
|
40
|
+
temp_file.write(content)
|
41
|
+
temp_file.close
|
42
|
+
end
|
43
|
+
|
44
|
+
if result
|
45
|
+
jobler_result.result = result
|
15
46
|
else
|
16
|
-
|
47
|
+
raise "No tempfile could be found" unless temp_file
|
48
|
+
|
49
|
+
handle_file(jobler_result: jobler_result, save_in_database: save_in_database, temp_file: temp_file)
|
17
50
|
end
|
18
51
|
|
19
|
-
|
20
|
-
|
21
|
-
result: content
|
22
|
-
)
|
52
|
+
jobler_result.save!
|
53
|
+
jobler_result
|
23
54
|
end
|
24
55
|
|
25
56
|
def execute!
|
@@ -52,7 +83,7 @@ class Jobler::BaseJobler
|
|
52
83
|
end
|
53
84
|
|
54
85
|
if update
|
55
|
-
job.
|
86
|
+
job.update!(progress: new_progress)
|
56
87
|
@_current_progress = new_progress
|
57
88
|
end
|
58
89
|
end
|
@@ -74,7 +105,7 @@ class Jobler::BaseJobler
|
|
74
105
|
controller.request = request
|
75
106
|
controller.response = ActionDispatch::Response.new
|
76
107
|
|
77
|
-
render_result = controller.
|
108
|
+
render_result = controller.render_to_string(template_path, layout: false, locals: {jobler: self}.merge(locals))
|
78
109
|
|
79
110
|
if render_result.is_a?(String)
|
80
111
|
# Rails 5 behaviour
|
@@ -89,10 +120,9 @@ class Jobler::BaseJobler
|
|
89
120
|
raise NoMethodError, "You should define the 'result' method on #{self.class.name}"
|
90
121
|
end
|
91
122
|
|
92
|
-
def temp_file_for_result(
|
93
|
-
job_result = job.results.where(name:
|
94
|
-
|
95
|
-
raise "No result by that name: #{args.fetch(:name)}" unless job_result
|
123
|
+
def temp_file_for_result(name:)
|
124
|
+
job_result = job.results.where(name: name).first
|
125
|
+
raise "No result by that name: #{name}" unless job_result
|
96
126
|
|
97
127
|
temp_file = ::Tempfile.new("jobler_tempfile")
|
98
128
|
temp_file.binmode
|
@@ -100,4 +130,26 @@ class Jobler::BaseJobler
|
|
100
130
|
temp_file.close
|
101
131
|
temp_file
|
102
132
|
end
|
133
|
+
|
134
|
+
def url_for_result(name:)
|
135
|
+
job_result = job.results.where(name: name).first
|
136
|
+
raise "No result by that name: #{name}" unless job_result
|
137
|
+
|
138
|
+
Rails.application.routes.url_helpers.rails_blob_path(job_result.file.attachment, only_path: true)
|
139
|
+
end
|
140
|
+
|
141
|
+
private
|
142
|
+
|
143
|
+
def handle_file(jobler_result:, save_in_database:, temp_file:)
|
144
|
+
if save_in_database
|
145
|
+
temp_file.close unless temp_file.closed?
|
146
|
+
content = File.read(temp_file.path)
|
147
|
+
jobler_result.result = content
|
148
|
+
else
|
149
|
+
jobler_result.file.attach(
|
150
|
+
filename: File.basename(temp_file.path),
|
151
|
+
io: File.open(temp_file.path)
|
152
|
+
)
|
153
|
+
end
|
154
|
+
end
|
103
155
|
end
|
data/lib/jobler/file_download.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
class Jobler::FileDownload
|
2
|
-
attr_reader :file_name, :temp_file
|
2
|
+
attr_reader :file_name, :temp_file, :url
|
3
3
|
|
4
|
-
def initialize(
|
5
|
-
|
6
|
-
|
4
|
+
def initialize(file_name: nil, temp_file: nil, url: nil)
|
5
|
+
raise "Temp file or URL should be given" if !temp_file && !url
|
6
|
+
raise "No filename given with temp-file" if temp_file && file_name.blank?
|
7
|
+
|
8
|
+
@file_name = file_name
|
9
|
+
@temp_file = temp_file
|
10
|
+
@url = url
|
7
11
|
end
|
8
12
|
end
|
data/lib/jobler/job_runner.rb
CHANGED
@@ -3,16 +3,22 @@ class Jobler::JobRunner < ActiveJob::Base # rubocop:disable Rails/ApplicationJob
|
|
3
3
|
|
4
4
|
def perform(job_id)
|
5
5
|
@job = Jobler::Job.find(job_id)
|
6
|
-
@job.
|
6
|
+
@job.update!(started_at: Time.zone.now, state: "started")
|
7
7
|
|
8
8
|
begin
|
9
9
|
with_locale do
|
10
|
-
@job.jobler.
|
10
|
+
@job.jobler.call_before_callbacks
|
11
|
+
|
12
|
+
begin
|
13
|
+
@job.jobler.execute!
|
14
|
+
ensure
|
15
|
+
@job.jobler.call_after_callbacks
|
16
|
+
end
|
11
17
|
end
|
12
18
|
|
13
|
-
@job.
|
19
|
+
@job.update!(ended_at: Time.zone.now, progress: 1.0, state: "completed")
|
14
20
|
rescue Exception => e # rubocop:disable Lint/RescueException
|
15
|
-
@job.
|
21
|
+
@job.update!(
|
16
22
|
ended_at: Time.zone.now,
|
17
23
|
error_message: e.message,
|
18
24
|
error_type: e.class.name,
|
@@ -24,11 +30,9 @@ class Jobler::JobRunner < ActiveJob::Base # rubocop:disable Rails/ApplicationJob
|
|
24
30
|
|
25
31
|
private
|
26
32
|
|
27
|
-
def with_locale
|
33
|
+
def with_locale(&blk)
|
28
34
|
if @job.locale?
|
29
|
-
I18n.with_locale(@job.locale)
|
30
|
-
yield
|
31
|
-
end
|
35
|
+
I18n.with_locale(@job.locale, &blk)
|
32
36
|
else
|
33
37
|
yield
|
34
38
|
end
|
data/lib/jobler/version.rb
CHANGED
data/lib/jobler.rb
CHANGED
@@ -6,6 +6,7 @@ module Jobler
|
|
6
6
|
autoload :FileDownload, "#{path}/file_download"
|
7
7
|
autoload :JobScheduler, "#{path}/job_scheduler"
|
8
8
|
autoload :JobRunner, "#{path}/job_runner"
|
9
|
+
autoload :Message, "#{path}/message"
|
9
10
|
autoload :PageRender, "#{path}/page_render"
|
10
11
|
autoload :RedirectTo, "#{path}/redirect_to"
|
11
12
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jobler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kaspernj
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-10-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 6.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 6.0.0
|
27
27
|
description: Generate pages or files in the background
|
28
28
|
email:
|
29
29
|
- kaspernj@gmail.com
|
@@ -62,6 +62,7 @@ files:
|
|
62
62
|
- lib/jobler/file_download.rb
|
63
63
|
- lib/jobler/job_runner.rb
|
64
64
|
- lib/jobler/job_scheduler.rb
|
65
|
+
- lib/jobler/message.rb
|
65
66
|
- lib/jobler/page_render.rb
|
66
67
|
- lib/jobler/redirect_to.rb
|
67
68
|
- lib/jobler/version.rb
|
@@ -78,15 +79,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
78
79
|
requirements:
|
79
80
|
- - ">="
|
80
81
|
- !ruby/object:Gem::Version
|
81
|
-
version: '
|
82
|
+
version: '2.5'
|
82
83
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
84
|
requirements:
|
84
85
|
- - ">="
|
85
86
|
- !ruby/object:Gem::Version
|
86
87
|
version: '0'
|
87
88
|
requirements: []
|
88
|
-
|
89
|
-
rubygems_version: 2.6.13
|
89
|
+
rubygems_version: 3.1.6
|
90
90
|
signing_key:
|
91
91
|
specification_version: 4
|
92
92
|
summary: Generate pages or files in the background
|