lib/dynamic_controller.rb in dynamic_controller-0.0.1 vs lib/dynamic_controller.rb in dynamic_controller-0.0.2
- old
+ new
@@ -1,180 +1,12 @@
-require 'dynamic_controller/version'
-require 'ransack'
-require 'kaminari'
-
-module DynamicController
-
- module ClassMethods
-
- attr_reader :dynamic_options
-
- def has_crud_actions(options={})
- send :include, CrudActions
- before_filter :load_nested if options[:nested_of]
- @dynamic_options = options
- end
-
- end
-
- module CrudActions
-
- def self.included(base)
- base.helper_method [:resource_class, :controller_namespace]
- base.respond_to :html, :json
- base.rescue_from StandardError, with: :handle_error
- end
-
- def index
- if parent_model
- self.collection = parent_model.send(controller_name).search(params[:q]).result.page(params[:page])
- else
- self.collection = resource_class.search(params[:q]).result.page(params[:page])
- end
-
- respond_with collection
- end
-
- def show
- if parent_model
- self.model = parent_model.send(controller_name).find(params[:id])
- else
- self.model = resource_class.find(params[:id])
- end
-
- respond_with model
- end
-
- def new
- if parent_model
- self.model = parent_model.send(controller_name).build
- else
- self.model = resource_class.new
- end
- end
-
- def edit
- if parent_model
- self.model = parent_model.send(controller_name).find(params[:id])
- else
- self.model = resource_class.find(params[:id])
- end
- end
-
- def create
- if parent_model
- self.model = parent_model.send(controller_name).build(params[resource_class.model_name.underscore])
- else
- self.model = resource_class.new(params[resource_class.model_name.underscore])
- end
-
- if model.save
- flash_message = "#{resource_class.model_name.human} successfully created"
- if params[:save_and_new]
- flash[:success] = flash_message
- redirect_to action: :new
- else
- flash.now[:success] = flash_message
- respond_to do |format|
- format.html { redirect_to url_for([parent_model, model].compact) }
- format.json { render json: model, status: :created }
- end
- end
- else
- respond_to do |format|
- format.html { render :new }
- format.json { render json: model.errors, status: :unprocessable_entity }
- end
- end
- end
-
- def update
- if parent_model
- self.model = parent_model.send(controller_name).find(params[:id])
- else
- self.model = resource_class.find(params[:id])
- end
-
- if model.update_attributes(params[resource_class.model_name.underscore])
- flash.now[:success] = "#{resource_class.model_name.human} successfully updated"
- respond_to do |format|
- format.html { redirect_to url_for([parent_model, model].compact) }
- format.json { head :no_content }
- end
- else
- respond_to do |format|
- format.html { render :edit }
- format.json { render json: model.errors, status: :unprocessable_entity }
- end
- end
- end
-
- def destroy
- if parent_model
- self.model = parent_model.send(controller_name).find(params[:id])
- else
- self.model = resource_class.find(params[:id])
- end
-
- if model.destroy
- flash[:warning] = "#{resource_class.model_name.human} successfully removed"
- respond_to do |format|
- format.html { redirect_to action: :index }
- format.json { head :no_content }
- end
- else
- flash[:danger] = "#{resource_class.model_name.human} could not be deleted"
- respond_to do |format|
- format.html { redirect_to action: :index }
- format.json { render json: model.errors, status: :unprocessable_entity }
- end
- end
- end
-
- def resource_class
- @resource_class ||= controller_name.classify.constantize
- end
-
- def controller_namespace
- @controller_namespace ||= self.class.name.split('::')[0..-2].map(&:underscore).join('_') unless self.class.name.split('::')[0..-2].empty?
- end
-
- private
-
- def collection=(value)
- instance_variable_set("@#{controller_name}", value)
- end
-
- def collection
- instance_variable_get("@#{controller_name}")
- end
-
- def model=(value)
- instance_variable_set("@#{controller_name.singularize}", value)
- end
-
- def model
- instance_variable_get("@#{controller_name.singularize}")
- end
-
- def load_nested
- parent_klass = self.class.dynamic_options[:nested_of]
- instance_variable_set("@#{parent_klass.to_s.underscore}", parent_klass.find(params["#{parent_klass.to_s.underscore}_id"]))
- end
-
- def parent_model
- instance_variable_get("@#{self.class.dynamic_options[:nested_of].to_s.underscore}")
- end
-
- def handle_error(error)
- respond_to do |format|
- format.html { raise error }
- format.json { render json: error.message, status: :internal_server_error }
- end
- end
-
- end
-
-end
-
-ActionController::Base.send :extend, DynamicController::ClassMethods
-
+require 'ransack'
+require 'kaminari'
+
+require 'dynamic_controller/version'
+require 'dynamic_controller/resource'
+require 'dynamic_controller/responder'
+require 'dynamic_controller/helper_methods'
+require 'dynamic_controller/class_methods'
+require 'dynamic_controller/instance_methods'
+
+ActionController::Base.send :extend, DynamicController::ClassMethods
+