lib/doorkeeper/rails/routes.rb



require 'doorkeeper/rails/routes/mapping'
require 'doorkeeper/rails/routes/mapper'

module Doorkeeper
  module Rails
    class Routes
      module Helper
        # TODO: options hash is not being used
        def use_doorkeeper(options = {}, &block)
          Doorkeeper::Rails::Routes.new(self, &block).generate_routes!(options)
        end
      end

      def self.install!
        ActionDispatch::Routing::Mapper.send :include, Doorkeeper::Rails::Routes::Helper
      end

      def self.warn_if_using_mount_method!
        if File.read(::Rails.root + 'config/routes.rb') =~ %r[mount Doorkeeper::Engine]
          warn "\n[DOORKEEPER] `mount Doorkeeper::Engine` is not being used anymore. Please replace it with `use_doorkeeper` in your /config/routes.rb file\n"
        end
      end

      attr_accessor :routes

      def initialize(routes, &options)
        @routes, @options = routes, options
      end

      def generate_routes!(options)
        @mapping = Mapper.new.map(&@options)
        routes.scope 'oauth', :as => 'oauth' do
          map_route(:authorizations, :authorization_routes)
          map_route(:tokens, :token_routes)
          map_route(:applications, :application_routes)
          map_route(:authorized_applications, :authorized_applications_routes)
          map_route(:token_info, :token_info_routes)
        end
      end

    private
      def map_route(name, method)
        unless @mapping.skipped?(name)
          send method, @mapping[name]
        end
      end

      def authorization_routes(mapping)
        routes.scope :controller => mapping[:controllers] do
          routes.match 'authorize/:code', :via => :get,    :action => :show,    :as => "#{mapping[:as]}_code"
          routes.match 'authorize',       :via => :get,    :action => :new,     :as => mapping[:as]
          routes.match 'authorize',       :via => :post,   :action => :create,  :as => mapping[:as]
          routes.match 'authorize',       :via => :delete, :action => :destroy, :as => mapping[:as]
        end
      end

      def token_routes(mapping)
        routes.scope :controller => mapping[:controllers] do
          routes.match 'token', :via => :post, :action => :create, :as => mapping[:as]
        end
      end

      def token_info_routes(mapping)
        routes.scope :controller => mapping[:controllers] do
          routes.match 'token/info', :via => :get, :action => :show, :as => mapping[:as]
        end
      end

      def application_routes(mapping)
        routes.resources :applications, :controller => mapping[:controllers]
      end

      def authorized_applications_routes(mapping)
        routes.resources :authorized_applications, :only => [:index, :destroy], :controller => mapping[:controllers]
      end
    end
  end
end