Class: Dragonfly::Job
- Inherits:
-
Object
show all
- Extended by:
- Forwardable
- Defined in:
- lib/dragonfly/job.rb
Defined Under Namespace
Modules: OverrideInstanceMethods
Classes: AppDoesNotMatch, Encode, Fetch, FetchFile, FetchUrl, Generate, IncorrectSHA, InvalidArray, JobAlreadyApplied, NoContent, NoSHAGiven, NothingToEncode, NothingToProcess, Process, Step
Constant Summary
- STEPS =
[
Fetch,
Process,
Encode,
Generate,
FetchFile,
FetchUrl
]
Instance Attribute Summary (collapse)
Class Method Summary
(collapse)
Instance Method Summary
(collapse)
Constructor Details
- (Job) initialize(app, content = nil, meta = {}, url_attrs = {})
Returns a new instance of Job
228
229
230
231
232
233
234
235
|
# File 'lib/dragonfly/job.rb', line 228
def initialize(app, content=nil, meta={}, url_attrs={})
@app = app
@steps = []
@next_step_index = 0
@previous_temp_objects = []
update(content, meta) if content
self.url_attrs = url_attrs
end
|
Instance Attribute Details
Returns the value of attribute app
245
246
247
|
# File 'lib/dragonfly/job.rb', line 245
def app
@app
end
|
Returns the value of attribute steps
245
246
247
|
# File 'lib/dragonfly/job.rb', line 245
def steps
@steps
end
|
- (Object) temp_object
Returns the value of attribute temp_object
246
247
248
|
# File 'lib/dragonfly/job.rb', line 246
def temp_object
@temp_object
end
|
- (Object) url_attrs
Returns the value of attribute url_attrs
336
337
338
|
# File 'lib/dragonfly/job.rb', line 336
def url_attrs
@url_attrs
end
|
Class Method Details
+ (Object) deserialize(string, app)
181
182
183
184
185
186
187
188
189
190
191
192
|
# File 'lib/dragonfly/job.rb', line 181
def deserialize(string, app)
array = begin
Serializer.json_decode(string)
rescue Serializer::BadString
if app.allow_legacy_urls
Serializer.marshal_decode(string, :check_malicious => true)
else
raise
end
end
from_a(array, app)
end
|
+ (Object) from_a(steps_array, app)
168
169
170
171
172
173
174
175
176
177
178
179
|
# File 'lib/dragonfly/job.rb', line 168
def from_a(steps_array, app)
unless steps_array.is_a?(Array) &&
steps_array.all?{|s| s.is_a?(Array) && step_abbreviations[s.first.to_s] }
raise InvalidArray, "can't define a job from #{steps_array.inspect}"
end
job = app.new_job
steps_array.each do |step_array|
step_class = step_abbreviations[step_array.shift.to_s]
job.steps << step_class.new(job, *step_array)
end
job
end
|
+ (Object) step_abbreviations
194
195
196
|
# File 'lib/dragonfly/job.rb', line 194
def step_abbreviations
@step_abbreviations ||= STEPS.inject({}){|hash, step_class| hash[step_class.abbreviation] = step_class; hash }
end
|
+ (Object) step_names
198
199
200
|
# File 'lib/dragonfly/job.rb', line 198
def step_names
@step_names ||= STEPS.map{|step_class| step_class.step_name }
end
|
Instance Method Details
- (Object) analyse(method, *args)
269
270
271
|
# File 'lib/dragonfly/job.rb', line 269
def analyse(method, *args)
analyser.analyse(result, method, *args)
end
|
- (Boolean) applied?
281
282
283
|
# File 'lib/dragonfly/job.rb', line 281
def applied?
next_step_index == steps.length
end
|
- (Object) applied_steps
285
286
287
|
# File 'lib/dragonfly/job.rb', line 285
def applied_steps
steps[0...next_step_index]
end
|
275
276
277
278
279
|
# File 'lib/dragonfly/job.rb', line 275
def apply
pending_steps.each{|step| step.apply }
self.next_step_index = steps.length
self
end
|
- (Object) b64_data
338
339
340
|
# File 'lib/dragonfly/job.rb', line 338
def b64_data
"data:#{mime_type};base64,#{Base64.encode64(data)}"
end
|
413
414
415
416
|
# File 'lib/dragonfly/job.rb', line 413
def close
previous_temp_objects.each{|temp_object| temp_object.close }
temp_object.close if temp_object
end
|
- (Object) encode_step
386
387
388
|
# File 'lib/dragonfly/job.rb', line 386
def encode_step
last_step_of_type(Encode)
end
|
- (Object) fetch_file_step
374
375
376
|
# File 'lib/dragonfly/job.rb', line 374
def fetch_file_step
last_step_of_type(FetchFile)
end
|
- (Object) fetch_step
366
367
368
|
# File 'lib/dragonfly/job.rb', line 366
def fetch_step
last_step_of_type(Fetch)
end
|
- (Object) fetch_url_step
378
379
380
|
# File 'lib/dragonfly/job.rb', line 378
def fetch_url_step
last_step_of_type(FetchUrl)
end
|
- (Object) generate_step
370
371
372
|
# File 'lib/dragonfly/job.rb', line 370
def generate_step
last_step_of_type(Generate)
end
|
- (Object) initialize_copy(other)
Used by 'dup' and 'clone'
238
239
240
241
242
243
|
# File 'lib/dragonfly/job.rb', line 238
def initialize_copy(other)
self.url_attrs = other.url_attrs.dup
self.steps = other.steps.map do |step|
step.class.new(self, *step.args)
end
end
|
401
402
403
|
# File 'lib/dragonfly/job.rb', line 401
def inspect
"<Dragonfly::Job app=#{app.name.inspect}, steps=#{steps.inspect}, temp_object=#{temp_object.inspect}, steps applied:#{applied_steps.length}/#{steps.length} >"
end
|
- (Object) pending_steps
289
290
291
|
# File 'lib/dragonfly/job.rb', line 289
def pending_steps
steps[next_step_index..-1]
end
|
- (Object) process_steps
382
383
384
|
# File 'lib/dragonfly/job.rb', line 382
def process_steps
steps.select{|s| s.is_a?(Process) }
end
|
- (Object) serialize
303
304
305
|
# File 'lib/dragonfly/job.rb', line 303
def serialize
Serializer.json_encode(to_a)
end
|
311
312
313
|
# File 'lib/dragonfly/job.rb', line 311
def sha
Digest::SHA1.hexdigest("#{to_unique_s}#{app.secret}")[0...8]
end
|
- (Object) step_types
390
391
392
|
# File 'lib/dragonfly/job.rb', line 390
def step_types
steps.map{|s| s.class.step_name }
end
|
- (Object) store(opts = {})
396
397
398
399
|
# File 'lib/dragonfly/job.rb', line 396
def store(opts={})
temp_object = result
app.store(temp_object, opts_for_store.merge(opts).merge(:meta => temp_object.meta))
end
|
293
294
295
|
# File 'lib/dragonfly/job.rb', line 293
def to_a
steps.map{|step| step.to_a }
end
|
344
345
346
|
# File 'lib/dragonfly/job.rb', line 344
def to_app
JobEndpoint.new(self)
end
|
- (Object) to_fetched_job(uid)
352
353
354
355
356
357
|
# File 'lib/dragonfly/job.rb', line 352
def to_fetched_job(uid)
new_job = self.class.new(app, temp_object, meta, url_attrs)
new_job.fetch!(uid)
new_job.next_step_index = 1
new_job
end
|
- (Object) to_response(env = {"REQUEST_METHOD" => "GET"})
348
349
350
|
# File 'lib/dragonfly/job.rb', line 348
def to_response(env={"REQUEST_METHOD" => "GET"})
to_app.call(env)
end
|
- (Object) to_unique_s
299
300
301
|
# File 'lib/dragonfly/job.rb', line 299
def to_unique_s
to_a.to_dragonfly_unique_s
end
|
361
362
363
364
|
# File 'lib/dragonfly/job.rb', line 361
def uid
step = fetch_step
step.uid if step
end
|
- (Object) unique_signature
307
308
309
|
# File 'lib/dragonfly/job.rb', line 307
def unique_signature
Digest::SHA1.hexdigest(to_unique_s)
end
|
- (Object) update(content, new_meta)
405
406
407
408
409
410
411
|
# File 'lib/dragonfly/job.rb', line 405
def update(content, new_meta)
if new_meta
new_meta.merge!(new_meta.delete(:meta)) if new_meta[:meta]
end
old_meta = temp_object ? temp_object.meta : {}
self.temp_object = TempObject.new(content, old_meta.merge(new_meta || {}))
end
|
- (Object) url(opts = {})
328
329
330
|
# File 'lib/dragonfly/job.rb', line 328
def url(opts={})
app.url_for(self, attributes_for_url.merge(opts)) unless steps.empty?
end
|
- (Object) validate_sha!(sha)
315
316
317
318
319
320
321
322
323
324
|
# File 'lib/dragonfly/job.rb', line 315
def validate_sha!(sha)
case sha
when nil
raise NoSHAGiven
when self.sha
self
else
raise IncorrectSHA, sha
end
end
|