Class: Dragonfly::Server
- Inherits:
-
Object
- Object
- Dragonfly::Server
- Extended by:
- Forwardable
- Includes:
- Configurable, Loggable
- Defined in:
- lib/dragonfly/server.rb
Defined Under Namespace
Classes: JobNotAllowed
Instance Attribute Summary
Attributes included from Loggable
Configuration Summary
Configurable attributes
Configurable attributes for an object in generalobject
can be configured either by using something like
object.configure do |c| c.some_configurable_attribute = "some value" c.some_other_configurable_attribute = 42 ... endor
object.some_configurable_attribute = "some value"
Configurable attributes for instances of Dragonfly::Server
-
allow_fetch_file
- defaultfalse
-
allow_fetch_url
- defaultfalse
-
dragonfly_url
- default"/dragonfly"
-
protect_from_dos_attacks
- defaultfalse
-
url_format
- default"/:job/:basename.:format"
-
url_host
- defaultnil
Instance Method Summary (collapse)
- - (Object) before_serve(&block)
- - (Object) call(env)
-
- (Server) initialize(app)
constructor
A new instance of Server.
- - (Object) url_for(job, opts = {})
Methods included from Configurable
Methods included from Loggable
Constructor Details
- (Server) initialize(app)
Returns a new instance of Server
20 21 22 23 24 |
# File 'lib/dragonfly/server.rb', line 20 def initialize(app) @app = app use_same_log_as(app) use_as_fallback_config(app) end |
Instance Method Details
- (Object) before_serve(&block)
26 27 28 |
# File 'lib/dragonfly/server.rb', line 26 def before_serve(&block) self.before_serve_callback = block end |
- (Object) call(env)
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/dragonfly/server.rb', line 31 def call(env) if dragonfly_url == env["PATH_INFO"] dragonfly_response elsif (params = url_mapper.params_for(env["PATH_INFO"], env["QUERY_STRING"])) && params['job'] job = Job.deserialize(params['job'], app) validate_job!(job) job.validate_sha!(params['sha']) if protect_from_dos_attacks response = Response.new(job, env) catch(:halt) do if before_serve_callback && response.will_be_served? before_serve_callback.call(job, env) end response.to_response end else [404, {'Content-Type' => 'text/plain', 'X-Cascade' => 'pass'}, ['Not found']] end rescue Job::NoSHAGiven => e [400, {"Content-Type" => 'text/plain'}, ["You need to give a SHA parameter"]] rescue Job::IncorrectSHA => e [400, {"Content-Type" => 'text/plain'}, ["The SHA parameter you gave (#{e}) is incorrect"]] rescue JobNotAllowed => e log.warn(e.) [403, {"Content-Type" => 'text/plain'}, ["Forbidden"]] rescue Serializer::BadString, Serializer::MaliciousString, Job::InvalidArray => e log.warn(e.) [404, {'Content-Type' => 'text/plain'}, ['Not found']] end |
- (Object) url_for(job, opts = {})
60 61 62 63 64 65 66 67 68 |
# File 'lib/dragonfly/server.rb', line 60 def url_for(job, opts={}) opts = opts.dup host = opts.delete(:host) || url_host params = stringify_keys(opts) params['job'] = job.serialize params['sha'] = job.sha if protect_from_dos_attacks url = url_mapper.url_for(params) "#{host}#{url}" end |