Class: Dragonfly::Job
- Inherits:
-
Object
show all
- Extended by:
- Forwardable
- Defined in:
- lib/dragonfly/job.rb,
lib/dragonfly/job/step.rb,
lib/dragonfly/job/fetch.rb,
lib/dragonfly/job/process.rb,
lib/dragonfly/job/generate.rb,
lib/dragonfly/job/fetch_url.rb,
lib/dragonfly/job/fetch_file.rb
Defined Under Namespace
Classes: AppDoesNotMatch, CannotGenerateSha, Fetch, FetchFile, FetchUrl, Generate, IncorrectSHA, InvalidArray, JobAlreadyApplied, NoSHAGiven, NothingToProcess, Process, Step
Constant Summary
collapse
- STEPS =
[
Fetch,
Process,
Generate,
FetchFile,
FetchUrl
]
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(app, content = "", meta = {}) ⇒ Job
Returns a new instance of Job.
81
82
83
84
85
86
87
|
# File 'lib/dragonfly/job.rb', line 81
def initialize(app, content="", meta={})
@app = app
@next_step_index = 0
@steps = []
@content = Content.new(app, content, meta)
@url_attributes = UrlAttributes.new
end
|
Instance Attribute Details
Returns the value of attribute app.
98
99
100
|
# File 'lib/dragonfly/job.rb', line 98
def app
@app
end
|
Returns the value of attribute content.
98
99
100
|
# File 'lib/dragonfly/job.rb', line 98
def content
@content
end
|
Returns the value of attribute steps.
98
99
100
|
# File 'lib/dragonfly/job.rb', line 98
def steps
@steps
end
|
#url_attributes ⇒ Object
Returns the value of attribute url_attributes.
179
180
181
|
# File 'lib/dragonfly/job.rb', line 179
def url_attributes
@url_attributes
end
|
Class Method Details
.deserialize(string, app) ⇒ Object
.from_a(steps_array, app) ⇒ Object
45
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/dragonfly/job.rb', line 45
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
|
.step_abbreviations ⇒ Object
71
72
73
|
# File 'lib/dragonfly/job.rb', line 71
def step_abbreviations
@step_abbreviations ||= STEPS.inject({}){|hash, step_class| hash[step_class.abbreviation] = step_class; hash }
end
|
.step_names ⇒ Object
75
76
77
|
# File 'lib/dragonfly/job.rb', line 75
def step_names
@step_names ||= STEPS.map{|step_class| step_class.step_name }
end
|
Instance Method Details
#applied? ⇒ Boolean
124
125
126
|
# File 'lib/dragonfly/job.rb', line 124
def applied?
next_step_index == steps.length
end
|
#applied_steps ⇒ Object
128
129
130
|
# File 'lib/dragonfly/job.rb', line 128
def applied_steps
steps[0...next_step_index]
end
|
118
119
120
121
122
|
# File 'lib/dragonfly/job.rb', line 118
def apply
pending_steps.each{|step| step.apply }
self.next_step_index = steps.length
self
end
|
#fetch_file_step ⇒ Object
220
221
222
|
# File 'lib/dragonfly/job.rb', line 220
def fetch_file_step
last_step_of_type(FetchFile)
end
|
#fetch_step ⇒ Object
212
213
214
|
# File 'lib/dragonfly/job.rb', line 212
def fetch_step
last_step_of_type(Fetch)
end
|
#fetch_url_step ⇒ Object
224
225
226
|
# File 'lib/dragonfly/job.rb', line 224
def fetch_url_step
last_step_of_type(FetchUrl)
end
|
#generate_step ⇒ Object
216
217
218
|
# File 'lib/dragonfly/job.rb', line 216
def generate_step
last_step_of_type(Generate)
end
|
#initialize_copy(other) ⇒ Object
Used by ‘dup’ and ‘clone’
90
91
92
93
94
95
96
|
# File 'lib/dragonfly/job.rb', line 90
def initialize_copy(other)
@steps = other.steps.map do |step|
step.class.new(self, *step.args)
end
@content = other.content.dup
@url_attributes = other.url_attributes.dup
end
|
238
239
240
|
# File 'lib/dragonfly/job.rb', line 238
def inspect
"<Dragonfly::Job app=#{app.name.inspect}, steps=#{steps.inspect}, content=#{content.inspect}, steps applied:#{applied_steps.length}/#{steps.length} >"
end
|
#pending_steps ⇒ Object
132
133
134
|
# File 'lib/dragonfly/job.rb', line 132
def pending_steps
steps[next_step_index..-1]
end
|
#process_steps ⇒ Object
228
229
230
|
# File 'lib/dragonfly/job.rb', line 228
def process_steps
steps.select{|s| s.is_a?(Process) }
end
|
154
155
156
157
158
159
160
|
# File 'lib/dragonfly/job.rb', line 154
def sha
unless app.secret
raise CannotGenerateSha, "A secret is required to sign and verify Dragonfly job requests. "\
"Use `secret '...'` or `verify_urls false` (not recommended!) in your config."
end
OpenSSL::HMAC.hexdigest('SHA256', app.secret, to_unique_s)[0,16]
end
|
#signature ⇒ Object
150
151
152
|
# File 'lib/dragonfly/job.rb', line 150
def signature
Digest::SHA1.hexdigest(to_unique_s)
end
|
#step_types ⇒ Object
232
233
234
|
# File 'lib/dragonfly/job.rb', line 232
def step_types
steps.map{|s| s.class.step_name }
end
|
136
137
138
|
# File 'lib/dragonfly/job.rb', line 136
def to_a
steps.map{|step| step.to_a }
end
|
189
190
191
|
# File 'lib/dragonfly/job.rb', line 189
def to_app
JobEndpoint.new(self)
end
|
#to_fetched_job(uid) ⇒ Object
197
198
199
200
201
202
203
|
# File 'lib/dragonfly/job.rb', line 197
def to_fetched_job(uid)
new_job = dup
new_job.steps = []
new_job.fetch!(uid)
new_job.next_step_index = 1
new_job
end
|
#to_response(env = {"REQUEST_METHOD" => "GET"}) ⇒ Object
193
194
195
|
# File 'lib/dragonfly/job.rb', line 193
def to_response(env={"REQUEST_METHOD" => "GET"})
to_app.call(env)
end
|
#to_unique_s ⇒ Object
142
143
144
|
# File 'lib/dragonfly/job.rb', line 142
def to_unique_s
to_a.to_dragonfly_unique_s
end
|
207
208
209
210
|
# File 'lib/dragonfly/job.rb', line 207
def uid
step = fetch_step
step.uid if step
end
|
#update_url_attributes(hash) ⇒ Object
181
182
183
184
185
|
# File 'lib/dragonfly/job.rb', line 181
def update_url_attributes(hash)
hash.each do |key, value|
url_attributes.send("#{key}=", value)
end
end
|
#url(opts = {}) ⇒ Object
175
176
177
|
# File 'lib/dragonfly/job.rb', line 175
def url(opts={})
app.url_for(self, opts) unless steps.empty?
end
|
#validate_sha!(sha) ⇒ Object
162
163
164
165
166
167
168
169
170
171
|
# File 'lib/dragonfly/job.rb', line 162
def validate_sha!(sha)
case sha
when nil
raise NoSHAGiven
when self.sha
self
else
raise IncorrectSHA, sha
end
end
|