Sha256: 1e879e73b158c6efcb5b7f766d7be395fa034881d745dfe2eb56a2be427bfc43

Contents?: true

Size: 1.14 KB

Versions: 2

Compression:

Stored size: 1.14 KB

Contents

module Riiif
  class Routes
    ALLOW_DOTS ||= /[\w.]+/
    SIZES ||= /(!|pct:)?[\w.,]+/

    def initialize(router, options)
      @router = router
      @options = options
    end

    def add_routes(&blk)
      @router.instance_exec(@options, &blk)
    end

    def draw
      add_routes do |options|
        resource = options.fetch(:resource)
        route_prefix = options[:at]
        route_prefix ||= "/#{options[:as]}" if options[:as]
        get "#{route_prefix}/:id/:region/:size/:rotation/:quality.:format" => 'riiif/images#show',
          constraints: { rotation: ALLOW_DOTS, size: SIZES },
          defaults: { format: 'jpg', rotation: '0', region: 'full', quality: 'default', model: resource },
          as: options[:as] || 'image'

        get "#{route_prefix}/:id/info.json" => 'riiif/images#info', defaults: { format: 'json', model: resource  }, as: [options[:as], 'info'].compact.join('_')

        # This doesn't work presently
        # get "#{route_prefix}/:id", to: redirect("#{route_prefix}/%{id}/info.json")
        get "#{route_prefix}/:id" => 'riiif/images#redirect', as: [options[:as], 'base'].compact.join('_')
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
riiif-1.1.1 lib/riiif/routes.rb
riiif-1.1.0 lib/riiif/routes.rb