From 692f12d47dc4ec8a0904b496b8a39369f9730d9f Mon Sep 17 00:00:00 2001 From: Louis Knapp Date: Sun, 24 Jul 2016 07:53:54 -0500 Subject: [PATCH] lk | adds links to previous and next bikes on bike edit page and removes bike#show route --- app/controllers/bikes_controller.rb | 16 ++++------ app/views/bikes/edit.html.haml | 10 ++++-- app/views/bikes/new.html.haml | 4 ++- config/routes.rb | 2 +- spec/controllers/bikes_controller_spec.rb | 37 +++++++++++++++++------ 5 files changed, 45 insertions(+), 24 deletions(-) diff --git a/app/controllers/bikes_controller.rb b/app/controllers/bikes_controller.rb index d42760a..8f9f19e 100644 --- a/app/controllers/bikes_controller.rb +++ b/app/controllers/bikes_controller.rb @@ -7,14 +7,16 @@ class BikesController < ApplicationController @unsold_bikes = @bikes.select{|bike| bike.date_sold.nil? && bike.purpose == "Sale"} end - def show; end - def new @bike = Bike.new - @log_number = Bike.order(:log_number).last.log_number + 1 + @previous_bike = Bike.order(:log_number).last + @log_number = @previous_bike.log_number + 1 end - def edit; end + def edit + @next_bike = Bike.where(log_number: @bike.log_number + 1).first + @previous_bike = Bike.where(log_number: @bike.log_number - 1).first + end def print_select @bikes = Bike.where.not(purpose: "Freecyclery").order(:log_number).reverse_order.paginate(:page => params[:page], :per_page => 30) @@ -45,7 +47,6 @@ class BikesController < ApplicationController end def update - if @bike.update(bike_params) redirect_to @bike, notice: 'Bike was successfully updated.' else @@ -53,11 +54,6 @@ class BikesController < ApplicationController end end - def destroy - @bike.destroy - redirect_to bikes_url - end - def mark_as_sold current_date = Time.new.strftime("%Y-%m-%d") @bike = Bike.find(params[:id]) diff --git a/app/views/bikes/edit.html.haml b/app/views/bikes/edit.html.haml index 1f61eec..636027e 100644 --- a/app/views/bikes/edit.html.haml +++ b/app/views/bikes/edit.html.haml @@ -5,6 +5,12 @@ .col-sm-3.col-sm-offset-3 =button_to "Mark as sold", {action: "mark_as_sold", id: @bike.id}, method: :patch, class: "btn btn-default" = render 'edit_form' - = link_to 'Show', @bike + - if @next_bike + = link_to 'Next Bike', edit_bike_path(@next_bike) + - else + = link_to 'New Bike', new_bike_path | - = link_to 'Back', bikes_path + = link_to 'All Bikes', bikes_path + - if @previous_bike + | + = link_to 'Previous Bike', edit_bike_path(@previous_bike) diff --git a/app/views/bikes/new.html.haml b/app/views/bikes/new.html.haml index 3ab88d0..32f8e6b 100644 --- a/app/views/bikes/new.html.haml +++ b/app/views/bikes/new.html.haml @@ -1,4 +1,6 @@ .container %h1 New bike = render 'new_form' - = link_to 'Back', bikes_path + = link_to 'All Bikes', bikes_path + | + = link_to 'Previous Bike', edit_bike_path(@previous_bike) diff --git a/config/routes.rb b/config/routes.rb index 156b52d..cb08c13 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -6,7 +6,7 @@ Bikedb::Application.routes.draw do mount Sidekiq::Web => '/sidekiq' - resources :bikes do + resources :bikes, except: [:show, :destroy] do get 'search' => 'bikes#search', on: :collection get 'print_select' => 'bikes#print_select', on: :collection get 'print_labels' => 'bikes#print_labels', on: :collection diff --git a/spec/controllers/bikes_controller_spec.rb b/spec/controllers/bikes_controller_spec.rb index 5dcd174..92d9930 100644 --- a/spec/controllers/bikes_controller_spec.rb +++ b/spec/controllers/bikes_controller_spec.rb @@ -2,40 +2,57 @@ require 'spec_helper' describe BikesController do - let(:user){FactoryGirl.create(:user)} - let(:bike){FactoryGirl.create(:bike)} + let(:user){ create :user } + let(:bike){ create :bike } before :each do sign_in user end - describe "GET #index" do + describe "#index" do it "assignes unsold bikes" do - bike = FactoryGirl.create(:bike, date_sold: nil, purpose: "Sale") + bike = create :bike, date_sold: nil, purpose: "Sale" get :index expect(assigns(:unsold_bikes)).to eq([bike]) end end - describe "POST #create" do + describe "#create" do it "creates a new bike with valid credentials" do expect{ - post :create, bike: FactoryGirl.attributes_for(:bike) + post :create, bike: attributes_for(:bike) }.to change(Bike, :count).by(1) end it "redirects to new bike path" do - expect(post :create, bike: FactoryGirl.attributes_for(:bike)).to redirect_to(new_bike_path) + expect(post :create, bike: attributes_for(:bike)).to redirect_to(new_bike_path) end end - describe "GET #new" do + describe "#new" do it "assigns a log number" do - FactoryGirl.create(:bike, log_number: 3) + create :bike, log_number: 3 get :new expect(assigns(:log_number)).to eq(4) end + it "assigns the previous bike" do + previous_bike = create :bike, log_number: 3 + get :new + expect(assigns(:previous_bike)).to eq(previous_bike) + end end - + describe "#edit" do + before do + @previous_bike = create :bike, log_number: 2 + @current_bike = create :bike, log_number: 3 + @next_bike = create :bike, log_number: 4 + end + it "assigns the current, previous, and next bikes" do + get :edit, id: @current_bike.id + expect(assigns(:previous_bike)).to eq(@previous_bike) + expect(assigns(:bike)).to eq(@current_bike) + expect(assigns(:next_bike)).to eq(@next_bike) + end + end end