Class: Resque::Reports::BaseReport
- Inherits:
-
Object
- Object
- Resque::Reports::BaseReport
- Extended by:
- Forwardable
- Includes:
- Extensions
- Defined in:
- lib/resque/reports/base_report.rb
Overview
Class describes base report class for inheritance. BaseReport successor must implement “write(io, force)” method and may specify file extension with “extension” method call example:
class CustomTypeReport < Resque::Reports::BaseReport
extension :type # specify that report file must ends
# with '.type', e.g. 'abc.type'
# Method specifies how to output report data
def write(io, force)
io << 'Hello World!'
end
end
BaseReport provides followed DSL, example:
class CustomReport < CustomTypeReport
queue :custom_reports # Resque queue name
source :select_data # method called to retrieve report data
encoding UTF8 # file encoding
# Specify in which directory to keep this type files
directory File.join(Dir.tmpdir, 'resque-reports')
# Describe table using 'column' method
table do |element|
column 'Column 1 Header', :decorate_one
column 'Column 2 Header', decorate_two(element[1])
column 'Column 3 Header', 'Column 3 Cell'
end
# Class initialize
# NOTE: must be used instead of define 'initialize' method
create do |param|
@main_param = param
end
# decorate method, called by symbol-name
def decorate_one(element)
"decorate_one: #{element[0]}"
end
# decorate method, called directly when filling cell
def decorate_two(text)
"decorate_two: #{text}"
end
# method returns report data Enumerable
def select_data
[[0, 'text0'], [1, 'text1']]
end
end
Direct Known Subclasses
Constant Summary collapse
- DEFAULT_EXTENSION =
– Constants # ++
'txt'- DEFAULT_QUEUE =
:base
Instance Method Summary collapse
-
#bg_build(force = false) ⇒ Object
Builds report in background, returns job_id, to watch progress.
-
#build(force = false) ⇒ Object
Builds report synchronously.
-
#initialize(*args) ⇒ BaseReport
constructor
– Public instance methods ++.
Methods included from Extensions
Constructor Details
#initialize(*args) ⇒ BaseReport
– Public instance methods ++
139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
# File 'lib/resque/reports/base_report.rb', line 139 def initialize(*args) # TODO: Check consistance, fail if user initialized wrong object set_instance(self) if create_block define_singleton_method(:create_dispatch, create_block) create_dispatch(*args) end @args = args init_cache_file init_table end |
Instance Method Details
#bg_build(force = false) ⇒ Object
Builds report in background, returns job_id, to watch progress
162 163 164 165 166 167 168 169 170 171 172 |
# File 'lib/resque/reports/base_report.rb', line 162 def bg_build(force = false) report_class = self.class.to_s args_json = [*@args, force].to_json # Check report if it already in progress and tring return its job_id... job_id = ReportJob.enqueued?(report_class, args_json).try(:meta_id) # ...and start new job otherwise job_id || ReportJob.enqueue_to(job_queue || DEFAULT_QUEUE, report_class, args_json).try(:meta_id) end |
#build(force = false) ⇒ Object
Builds report synchronously
155 156 157 158 159 |
# File 'lib/resque/reports/base_report.rb', line 155 def build(force = false) init_table if force @cache_file.open(force) { |file| write(file, force) } end |