jobler 0.0.10 → 0.0.14
Sign up to get free protection for your applications and to get access to all the features.
- 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
|