Sha256: a7c1402109248ac5a2123b58b7549f5f177b16c031089b133872e7d819ab3d5a

Contents?: true

Size: 1.6 KB

Versions: 20

Compression:

Stored size: 1.6 KB

Contents

class ForestLiana::Router
  def call(env)
    params = env['action_dispatch.request.path_parameters']
    collection_name = params[:collection]
    resource = ForestLiana::SchemaUtils.find_model_from_collection_name(collection_name, true)

    if resource.nil?
      FOREST_LOGGER.error "Routing error: Resource not found for collection #{collection_name}."
      FOREST_LOGGER.error "If this is a Smart Collection, please ensure your Smart Collection routes are defined before the mounted ForestLiana::Engine?"
      ForestLiana::ApplicationController.action(:route_not_found).call(env)
    else
      begin
        component_prefix = ForestLiana.component_prefix(resource)
        controller_name = "#{component_prefix}Controller"

        controller = "ForestLiana::UserSpace::#{controller_name}".constantize
        action = nil

        case env['REQUEST_METHOD']
        when 'GET'
          if params[:id]
            action = 'show'
          elsif env['PATH_INFO'] == "/#{collection_name}/count"
            action = 'count'
          else
            action = 'index'
          end
        when 'PUT'
          action = 'update'
        when 'POST'
          action = 'create'
        when 'DELETE'
          if params[:id]
            action = 'destroy'
          else
            action = 'destroy_bulk'
          end
        end

        controller.action(action.to_sym).call(env)
      rescue NoMethodError => exception
        FOREST_LOGGER.error "Routing error: #{exception}\n#{exception.backtrace.join("\n\t")}"
        ForestLiana::ApplicationController.action(:route_not_found).call(env)
      end
    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
forest_liana-5.4.4 app/controllers/forest_liana/router.rb
forest_liana-5.4.3 app/controllers/forest_liana/router.rb
forest_liana-5.4.2 app/controllers/forest_liana/router.rb
forest_liana-5.4.1 app/controllers/forest_liana/router.rb
forest_liana-5.4.0 app/controllers/forest_liana/router.rb
forest_liana-6.0.0.pre.beta.1 app/controllers/forest_liana/router.rb
forest_liana-5.3.3 app/controllers/forest_liana/router.rb
forest_liana-5.3.2 app/controllers/forest_liana/router.rb
forest_liana-5.3.1 app/controllers/forest_liana/router.rb
forest_liana-5.3.0 app/controllers/forest_liana/router.rb
forest_liana-5.2.3 app/controllers/forest_liana/router.rb
forest_liana-5.2.2 app/controllers/forest_liana/router.rb
forest_liana-5.2.1 app/controllers/forest_liana/router.rb
forest_liana-5.2.0 app/controllers/forest_liana/router.rb
forest_liana-5.1.3 app/controllers/forest_liana/router.rb
forest_liana-5.1.2 app/controllers/forest_liana/router.rb
forest_liana-5.1.1 app/controllers/forest_liana/router.rb
forest_liana-5.1.0 app/controllers/forest_liana/router.rb
forest_liana-5.0.0 app/controllers/forest_liana/router.rb
forest_liana-5.0.0.pre.beta.0 app/controllers/forest_liana/router.rb