lib/rails/routing_mapper.rb in para-0.4.0 vs lib/rails/routing_mapper.rb in para-0.5.0

- old
+ new

@@ -1,27 +1,86 @@ module ActionDispatch module Routing class Mapper def para_at(mount_location, &block) Para::Routes.new(self).draw(mount_location, &block) + + Para::Config.plugins.each do |plugin| + draw_plugin_routes(plugin) + end end def para_plugin(plugin_name) routes = ['', plugin_name.to_s.camelize, 'Routes'].join('::').constantize routes.new(self).draw end def component(component_name, options = {}, &block) + as, controller, endpoint = component_informations_from( + component_name, options + ) + + get endpoint => "#{ controller }#show", as: as + scope(endpoint, as: component_name, &block) if block + end + + def crud_component(component_name, options = {}, &block) + as, controller, endpoint = component_informations_from( + component_name, options + ) + + controller = [component_name.to_s.singularize, 'resources'].join('_') + + scope endpoint, as: as do + resources :resources, controller: controller do + scope options[:scope] do + collection do + patch :order + patch :tree + get :export + post :import + end + + member do + post :clone + end + + instance_eval(&block) if block + end + end + end + end + + def singleton_resource_component(component_name, options = {}, &block) + as, _, endpoint = component_informations_from( + component_name, options + ) + + controller = [component_name, 'resources'].join('_') + + scope endpoint, as: as do + resource :resource, controller: controller, only: [:show, :create, :update] + end + end + + private + + def draw_plugin_routes(identifier) + routes = [ + Para::Plugins.module_name_for(identifier), + 'Routes' + ].join('::').constantize + + routes.new(self).draw + end + + def component_informations_from(component_name, options) path = options.fetch(:path, component_name.to_s) as = options.fetch(:as, component_name) controller = options.fetch(:controller, "#{ component_name }_component") - endpoint = "#{ path }/:component_id" - get endpoint => "#{ controller }#show", as: as - delete endpoint => "#{ controller }#destroy", as: "destroy_#{as}" - - scope(endpoint, as: component_name, &block) if block + [as, controller, endpoint] end end end end