From a835d0f1c911a62d1a8702a646ebdacbef99f89f Mon Sep 17 00:00:00 2001 From: oyeAnuj Date: Wed, 26 Jul 2017 18:00:59 -0700 Subject: [PATCH 1/2] Add missing api_controller that Rails 5 generator expects --- .../serializer/templates/api_controller.rb | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 lib/active_model/serializer/generators/serializer/templates/api_controller.rb diff --git a/lib/active_model/serializer/generators/serializer/templates/api_controller.rb b/lib/active_model/serializer/generators/serializer/templates/api_controller.rb new file mode 100644 index 000000000..3d68aaeed --- /dev/null +++ b/lib/active_model/serializer/generators/serializer/templates/api_controller.rb @@ -0,0 +1,93 @@ +<% if namespaced? -%> +require_dependency "<%= namespaced_file_path %>/application_controller" + +<% end -%> +<% module_namespacing do -%> +class <%= controller_class_name %>Controller < ApplicationController + before_action :set_<%= singular_table_name %>, only: [:show, :edit, :update, :destroy] + + # GET <%= route_url %> + # GET <%= route_url %>.json + def index + @<%= plural_table_name %> = <%= orm_class.all(class_name) %> + + respond_to do |format| + format.html # index.html.erb + format.json { render json: <%= "@#{plural_table_name}" %> } + end + end + + # GET <%= route_url %>/1 + # GET <%= route_url %>/1.json + def show + respond_to do |format| + format.html # show.html.erb + format.json { render json: <%= "@#{singular_table_name}" %> } + end + end + + # GET <%= route_url %>/new + def new + @<%= singular_table_name %> = <%= orm_class.build(class_name) %> + end + + # GET <%= route_url %>/1/edit + def edit + end + + # POST <%= route_url %> + # POST <%= route_url %>.json + def create + @<%= singular_table_name %> = <%= orm_class.build(class_name, "#{singular_table_name}_params") %> + + respond_to do |format| + if @<%= orm_instance.save %> + format.html { redirect_to @<%= singular_table_name %>, notice: <%= "'#{human_name} was successfully created.'" %> } + format.json { render json: <%= "@#{singular_table_name}" %>, status: :created } + else + format.html { render action: 'new' } + format.json { render json: <%= "@#{orm_instance.errors}" %>, status: :unprocessable_entity } + end + end + end + + # PATCH/PUT <%= route_url %>/1 + # PATCH/PUT <%= route_url %>/1.json + def update + respond_to do |format| + if @<%= orm_instance.update("#{singular_table_name}_params") %> + format.html { redirect_to @<%= singular_table_name %>, notice: <%= "'#{human_name} was successfully updated.'" %> } + format.json { head :no_content } + else + format.html { render action: 'edit' } + format.json { render json: <%= "@#{orm_instance.errors}" %>, status: :unprocessable_entity } + end + end + end + + # DELETE <%= route_url %>/1 + # DELETE <%= route_url %>/1.json + def destroy + @<%= orm_instance.destroy %> + respond_to do |format| + format.html { redirect_to <%= index_helper %>_url } + format.json { head :no_content } + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_<%= singular_table_name %> + @<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %> + end + + # Never trust parameters from the scary internet, only allow the white list through. + def <%= "#{singular_table_name}_params" %> + <%- if attributes_names.empty? -%> + params[<%= ":#{singular_table_name}" %>] + <%- else -%> + params.require(<%= ":#{singular_table_name}" %>).permit(<%= attributes_names.map { |name| ":#{name}" }.join(', ') %>) + <%- end -%> + end +end +<% end -%> From 19e93aa7556b5ba03d61ccbdd8cf653039927ad3 Mon Sep 17 00:00:00 2001 From: oyeAnuj Date: Thu, 7 Sep 2017 17:30:34 -0700 Subject: [PATCH 2/2] Update API controller template to be actually API rather than previously regular controller template --- .../serializer/templates/api_controller.rb | 62 +++++-------------- 1 file changed, 15 insertions(+), 47 deletions(-) diff --git a/lib/active_model/serializer/generators/serializer/templates/api_controller.rb b/lib/active_model/serializer/generators/serializer/templates/api_controller.rb index 3d68aaeed..400afec6d 100644 --- a/lib/active_model/serializer/generators/serializer/templates/api_controller.rb +++ b/lib/active_model/serializer/generators/serializer/templates/api_controller.rb @@ -1,78 +1,46 @@ <% if namespaced? -%> -require_dependency "<%= namespaced_file_path %>/application_controller" +require_dependency "<%= namespaced_path %>/application_controller" <% end -%> <% module_namespacing do -%> class <%= controller_class_name %>Controller < ApplicationController - before_action :set_<%= singular_table_name %>, only: [:show, :edit, :update, :destroy] + before_action :set_<%= singular_table_name %>, only: [:show, :update, :destroy] # GET <%= route_url %> - # GET <%= route_url %>.json def index @<%= plural_table_name %> = <%= orm_class.all(class_name) %> - respond_to do |format| - format.html # index.html.erb - format.json { render json: <%= "@#{plural_table_name}" %> } - end + render json: <%= "@#{plural_table_name}" %> end # GET <%= route_url %>/1 - # GET <%= route_url %>/1.json def show - respond_to do |format| - format.html # show.html.erb - format.json { render json: <%= "@#{singular_table_name}" %> } - end - end - - # GET <%= route_url %>/new - def new - @<%= singular_table_name %> = <%= orm_class.build(class_name) %> - end - - # GET <%= route_url %>/1/edit - def edit + render json: <%= "@#{singular_table_name}" %> end # POST <%= route_url %> - # POST <%= route_url %>.json def create @<%= singular_table_name %> = <%= orm_class.build(class_name, "#{singular_table_name}_params") %> - respond_to do |format| - if @<%= orm_instance.save %> - format.html { redirect_to @<%= singular_table_name %>, notice: <%= "'#{human_name} was successfully created.'" %> } - format.json { render json: <%= "@#{singular_table_name}" %>, status: :created } - else - format.html { render action: 'new' } - format.json { render json: <%= "@#{orm_instance.errors}" %>, status: :unprocessable_entity } - end + if @<%= orm_instance.save %> + render json: <%= "@#{singular_table_name}" %>, status: :created, location: <%= "@#{singular_table_name}" %> + else + render json: <%= "@#{orm_instance.errors}" %>, status: :unprocessable_entity end end # PATCH/PUT <%= route_url %>/1 - # PATCH/PUT <%= route_url %>/1.json def update - respond_to do |format| - if @<%= orm_instance.update("#{singular_table_name}_params") %> - format.html { redirect_to @<%= singular_table_name %>, notice: <%= "'#{human_name} was successfully updated.'" %> } - format.json { head :no_content } - else - format.html { render action: 'edit' } - format.json { render json: <%= "@#{orm_instance.errors}" %>, status: :unprocessable_entity } - end + if @<%= orm_instance.update("#{singular_table_name}_params") %> + render json: <%= "@#{singular_table_name}" %> + else + render json: <%= "@#{orm_instance.errors}" %>, status: :unprocessable_entity end end # DELETE <%= route_url %>/1 - # DELETE <%= route_url %>/1.json def destroy @<%= orm_instance.destroy %> - respond_to do |format| - format.html { redirect_to <%= index_helper %>_url } - format.json { head :no_content } - end end private @@ -81,12 +49,12 @@ def set_<%= singular_table_name %> @<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %> end - # Never trust parameters from the scary internet, only allow the white list through. + # Only allow a trusted parameter "white list" through. def <%= "#{singular_table_name}_params" %> <%- if attributes_names.empty? -%> - params[<%= ":#{singular_table_name}" %>] + params.fetch(:<%= singular_table_name %>, {}) <%- else -%> - params.require(<%= ":#{singular_table_name}" %>).permit(<%= attributes_names.map { |name| ":#{name}" }.join(', ') %>) + params.require(:<%= singular_table_name %>).permit(<%= attributes_names.map { |name| ":#{name}" }.join(', ') %>) <%- end -%> end end