Sha256: e88d106b945cd1287802470123cf8654ce4b5d15438d4787d6c0fb77bb1c2dd9

Contents?: true

Size: 1.18 KB

Versions: 3

Compression:

Stored size: 1.18 KB

Contents

require 'useless/doc/client'

module Useless
  module Doc
    class Rack

      # +Doc::Rack::Subject+ retrieves a +Doc::Core+ entity based upon
      # 'useless.doc.url', from a environment-appropriate +Doc::Client+,
      # and sets it to 'useless.doc.subject'.
      #
      class Subject
        def initialize(app)
          @app = app
        end

        def call(env)
          client = case ENV['RACK_ENV']
            when 'production'; Useless::Doc::Client.standard
            else               Useless::Doc::Client.stub
          end

          if env['useless.doc.logger']
            env['useless.doc.logger'].debug "selected Client: #{client.inspect}"
          end

          if env['useless.doc.subject'] = client.get(env['useless.doc.url'])
            if env['useless.doc.logger']
              env['useless.doc.logger'].info "retrieved subject for #{env['useless.doc.url']}"
              env['useless.doc.logger'].debug "retrieved subject: #{env['useless.doc.subject'].inspect}"
            end

            @app.call(env)
          else
            [404, {'Content-Type' => 'text/plain'}, ['Could not retrieve documentation.']]
          end
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
useless-doc-0.4.0 lib/useless/doc/rack/subject.rb
useless-doc-0.3.1 lib/useless/doc/rack/subject.rb
useless-doc-0.3.0 lib/useless/doc/rack/subject.rb