Browse Source

add scaffold & bike form

vagrant
loos 10 years ago
parent
commit
71d2433334
  1. 2
      app/assets/javascripts/bikes.js
  2. 3
      app/assets/stylesheets/bikes.css.scss
  3. 69
      app/assets/stylesheets/scaffolds.css.scss
  4. BIN
      app/controllers/.bikes_controller.rb.swp
  5. 62
      app/controllers/bikes_controller.rb
  6. 2
      app/helpers/bikes_helper.rb
  7. 2
      app/models/bike.rb
  8. 51
      app/views/bikes/_form.html.erb
  9. 6
      app/views/bikes/edit.html.erb
  10. 25
      app/views/bikes/index.html.erb
  11. 4
      app/views/bikes/index.json.jbuilder
  12. 5
      app/views/bikes/new.html.erb
  13. 4
      app/views/bikes/show.html.erb
  14. 1
      app/views/bikes/show.json.jbuilder
  15. 55
      config/routes.rb
  16. BIN
      db/.schema.rb.swp
  17. 1
      db/migrate/20140118202104_create_bike_table.rb
  18. 6
      db/migrate/20140118205930_create_bikes.rb
  19. 137
      db/schema.rb
  20. 160
      spec/controllers/bikes_controller_spec.rb
  21. 6
      spec/factories/bikes.rb
  22. 15
      spec/helpers/bikes_helper_spec.rb
  23. 5
      spec/models/bike_spec.rb
  24. 11
      spec/requests/bikes_spec.rb
  25. 35
      spec/routing/bikes_routing_spec.rb
  26. 15
      spec/views/bikes/edit.html.erb_spec.rb
  27. 15
      spec/views/bikes/index.html.erb_spec.rb
  28. 15
      spec/views/bikes/new.html.erb_spec.rb
  29. 12
      spec/views/bikes/show.html.erb_spec.rb

2
app/assets/javascripts/bikes.js

@ -0,0 +1,2 @@
// Place all the behaviors and hooks related to the matching controller here.
// All this logic will automatically be available in application.js.

3
app/assets/stylesheets/bikes.css.scss

@ -0,0 +1,3 @@
// Place all the styles related to the Bikes controller here.
// They will automatically be included in application.css.
// You can use Sass (SCSS) here: http://sass-lang.com/

69
app/assets/stylesheets/scaffolds.css.scss

@ -0,0 +1,69 @@
body {
background-color: #fff;
color: #333;
font-family: verdana, arial, helvetica, sans-serif;
font-size: 13px;
line-height: 18px;
}
p, ol, ul, td {
font-family: verdana, arial, helvetica, sans-serif;
font-size: 13px;
line-height: 18px;
}
pre {
background-color: #eee;
padding: 10px;
font-size: 11px;
}
a {
color: #000;
&:visited {
color: #666;
}
&:hover {
color: #fff;
background-color: #000;
}
}
div {
&.field, &.actions {
margin-bottom: 10px;
}
}
#notice {
color: green;
}
.field_with_errors {
padding: 2px;
background-color: red;
display: table;
}
#error_explanation {
width: 450px;
border: 2px solid red;
padding: 7px;
padding-bottom: 0;
margin-bottom: 20px;
background-color: #f0f0f0;
h2 {
text-align: left;
font-weight: bold;
padding: 5px 5px 5px 15px;
font-size: 12px;
margin: -7px;
margin-bottom: 0px;
background-color: #c00;
color: #fff;
}
ul li {
font-size: 12px;
list-style: square;
}
}

BIN
app/controllers/.bikes_controller.rb.swp

Binary file not shown.

62
app/controllers/bikes_controller.rb

@ -0,0 +1,62 @@
class BikesController < ApplicationController
before_action :set_bike, only: [:show, :edit, :update, :destroy]
def index
@bikes = Bike.all
end
def show
end
def new
@bike = Bike.new
end
def edit
end
def create
@bike = Bike.new(bike_params)
respond_to do |format|
if @bike.save
format.html { redirect_to @bike, notice: 'Bike was successfully created.' }
format.json { render action: 'show', status: :created, location: @bike }
else
format.html { render action: 'new' }
format.json { render json: @bike.errors, status: :unprocessable_entity }
end
end
end
def update
respond_to do |format|
if @bike.update(bike_params)
format.html { redirect_to @bike, notice: 'Bike was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @bike.errors, status: :unprocessable_entity }
end
end
end
def destroy
@bike.destroy
respond_to do |format|
format.html { redirect_to bikes_url }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_bike
@bike = Bike.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def bike_params
params.require(:bike).permit(:entry_date, :brand, :model, :type, :color, :frame_size, :freecyclery, :sale, :serial_number, :notes, :tag_info, :repaired_by, :completion_date, :price, :created_at, :updated_at)
end
end

2
app/helpers/bikes_helper.rb

@ -0,0 +1,2 @@
module BikesHelper
end

2
app/models/bike.rb

@ -0,0 +1,2 @@
class Bike < ActiveRecord::Base
end

51
app/views/bikes/_form.html.erb

@ -0,0 +1,51 @@
<%= form_for(@bike) do |f| %>
<% if @bike.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@bike.errors.count, "error") %> prohibited this bike from being saved:</h2>
<ul>
<% @bike.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<%= f.label "Bike Entry Date:" %>
<%= f.text_field :entry_date %>
<br>
<%= f.label "Brand:" %>
<%= f.text_field :brand %>
<br>
<%= f.label "Type:" %>
<%= f.text_field :type %>
<br>
<%= f.label "Freecyclery?" %>
<%= f.check_box :freecyclery %>
<br>
<%= f.label "Sale?" %>
<%= f.check_box :sale %>
<br>
<%= f.label "Serial Number" %>
<%= f.text_field :serial_number %>
<br>
<%= f.label "Notes" %>
<%= f.text_area :notes %>
<br>
<%= f.label "Tag Info" %>
<%= f.text_area :tag_info %>
<br>
<%= f.label "Repaired by:" %>
<%= f.text_field :repaired_by %>
<br>
<%= f.label "Completion Date:" %>
<%= f.text_field :completion_date %>
<br>
<%= f.label "Price" %>
<%= f.text_field :price %>
<br>
<div class="actions">
<%= f.submit %>
</div>
<% end %>

6
app/views/bikes/edit.html.erb

@ -0,0 +1,6 @@
<h1>Editing bike</h1>
<%= render 'form' %>
<%= link_to 'Show', @bike %> |
<%= link_to 'Back', bikes_path %>

25
app/views/bikes/index.html.erb

@ -0,0 +1,25 @@
<h1>Listing bikes</h1>
<table>
<thead>
<tr>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<% @bikes.each do |bike| %>
<tr>
<td><%= link_to 'Show', bike %></td>
<td><%= link_to 'Edit', edit_bike_path(bike) %></td>
<td><%= link_to 'Destroy', bike, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
<br>
<%= link_to 'New Bike', new_bike_path %>

4
app/views/bikes/index.json.jbuilder

@ -0,0 +1,4 @@
json.array!(@bikes) do |bike|
json.extract! bike,
json.url bike_url(bike, format: :json)
end

5
app/views/bikes/new.html.erb

@ -0,0 +1,5 @@
<h1>New bike</h1>
<%= render 'form' %>
<%= link_to 'Back', bikes_path %>

4
app/views/bikes/show.html.erb

@ -0,0 +1,4 @@
<p id="notice"><%= notice %></p>
<%= link_to 'Edit', edit_bike_path(@bike) %> |
<%= link_to 'Back', bikes_path %>

1
app/views/bikes/show.json.jbuilder

@ -0,0 +1 @@
json.extract! @bike, :created_at, :updated_at

55
config/routes.rb

@ -1,56 +1,3 @@
Bikedb::Application.routes.draw do
# The priority is based upon order of creation: first created -> highest priority.
# See how all your routes lay out with "rake routes".
# You can have the root of your site routed with "root"
# root 'welcome#index'
# Example of regular route:
# get 'products/:id' => 'catalog#view'
# Example of named route that can be invoked with purchase_url(id: product.id)
# get 'products/:id/purchase' => 'catalog#purchase', as: :purchase
# Example resource route (maps HTTP verbs to controller actions automatically):
# resources :products
# Example resource route with options:
# resources :products do
# member do
# get 'short'
# post 'toggle'
# end
#
# collection do
# get 'sold'
# end
# end
# Example resource route with sub-resources:
# resources :products do
# resources :comments, :sales
# resource :seller
# end
# Example resource route with more complex sub-resources:
# resources :products do
# resources :comments
# resources :sales do
# get 'recent', on: :collection
# end
# end
# Example resource route with concerns:
# concern :toggleable do
# post 'toggle'
# end
# resources :posts, concerns: :toggleable
# resources :photos, concerns: :toggleable
# Example resource route within a namespace:
# namespace :admin do
# # Directs /admin/products/* to Admin::ProductsController
# # (app/controllers/admin/products_controller.rb)
# resources :products
# end
resources :bikes
end

BIN
db/.schema.rb.swp

Binary file not shown.

1
db/migrate/20140118202104_create_bike_table.rb

@ -13,7 +13,6 @@ class CreateBikeTable < ActiveRecord::Migration
t.text :notes
t.text :tag_info
t.string :repaired_by
t.string :repaired_for
t.string :completion_date
t.string :price
end

6
db/migrate/20140118205930_create_bikes.rb

@ -0,0 +1,6 @@
class CreateBikes < ActiveRecord::Migration
def change
add_column(:bikes, :created_at, :datetime)
add_column(:bikes, :updated_at, :datetime)
end
end

137
db/schema.rb

@ -11,137 +11,28 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20140118202104) do
ActiveRecord::Schema.define(version: 20140118205930) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
create_table "assignments", force: true do |t|
t.integer "attendee_id"
t.integer "task_id"
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "assignments", ["attendee_id", "task_id"], name: "index_assignments_on_attendee_id_and_task_id", unique: true, using: :btree
add_index "assignments", ["attendee_id"], name: "index_assignments_on_attendee_id", using: :btree
add_index "assignments", ["task_id"], name: "index_assignments_on_task_id", using: :btree
create_table "attendees", force: true do |t|
t.string "email"
t.integer "movement_id"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "event_id"
t.string "name"
end
add_index "attendees", ["event_id"], name: "index_attendees_on_event_id", using: :btree
create_table "bikes", force: true do |t|
t.string "entry_date"
t.string "brand"
t.string "model"
t.string "type"
t.string "color"
t.string "frame_size"
t.boolean "freecyclery"
t.boolean "sale"
t.string "serial_number"
t.text "notes"
t.text "tag_info"
t.string "repaired_by"
t.string "repaired_for"
t.string "completion_date"
t.string "price"
end
create_table "events", force: true do |t|
t.string "name"
t.string "entry_date"
t.string "brand"
t.string "model"
t.string "type"
t.string "color"
t.string "frame_size"
t.boolean "freecyclery"
t.boolean "sale"
t.string "serial_number"
t.text "notes"
t.string "address"
t.string "city"
t.string "zip"
t.integer "coordinator_id"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "movement_id"
t.float "latitude"
t.float "longitude"
t.string "date"
t.string "time"
end
add_index "events", ["movement_id"], name: "index_events_on_movement_id", using: :btree
create_table "movements", force: true do |t|
t.string "name"
t.string "category"
t.text "story"
t.datetime "created_at"
t.datetime "updated_at"
t.string "image_file_name"
t.string "image_content_type"
t.integer "image_file_size"
t.datetime "image_updated_at"
t.string "video"
t.integer "user_id"
end
add_index "movements", ["user_id"], name: "index_movements_on_user_id", using: :btree
create_table "tasks", force: true do |t|
t.string "description"
t.text "tag_info"
t.string "repaired_by"
t.string "completion_date"
t.string "price"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "movement_id"
t.boolean "small_event"
t.boolean "medium_event"
t.boolean "big_event"
end
add_index "tasks", ["movement_id"], name: "index_tasks_on_movement_id", using: :btree
create_table "users", force: true do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: ""
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip"
t.string "last_sign_in_ip"
t.datetime "created_at"
t.datetime "updated_at"
t.string "provider"
t.string "uid"
t.string "name"
t.string "oauth_token"
t.datetime "oauth_expires_at"
t.string "invitation_token"
t.datetime "invitation_created_at"
t.datetime "invitation_sent_at"
t.datetime "invitation_accepted_at"
t.integer "invitation_limit"
t.integer "invited_by_id"
t.string "invited_by_type"
t.integer "movement_id"
end
add_index "users", ["email"], name: "index_users_on_email", unique: true, using: :btree
add_index "users", ["invitation_token"], name: "index_users_on_invitation_token", unique: true, using: :btree
add_index "users", ["invited_by_id"], name: "index_users_on_invited_by_id", using: :btree
add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree
create_table "zipcodes", force: true do |t|
t.string "zip"
t.string "city"
t.string "state"
t.string "state_abbreviation"
t.float "latitude"
t.float "longitude"
end
end

160
spec/controllers/bikes_controller_spec.rb

@ -0,0 +1,160 @@
require 'spec_helper'
# This spec was generated by rspec-rails when you ran the scaffold generator.
# It demonstrates how one might use RSpec to specify the controller code that
# was generated by Rails when you ran the scaffold generator.
#
# It assumes that the implementation code is generated by the rails scaffold
# generator. If you are using any extension libraries to generate different
# controller code, this generated spec may or may not pass.
#
# It only uses APIs available in rails and/or rspec-rails. There are a number
# of tools you can use to make these specs even more expressive, but we're
# sticking to rails and rspec-rails APIs to keep things simple and stable.
#
# Compared to earlier versions of this generator, there is very limited use of
# stubs and message expectations in this spec. Stubs are only used when there
# is no simpler way to get a handle on the object needed for the example.
# Message expectations are only used when there is no simpler way to specify
# that an instance is receiving a specific message.
describe BikesController do
# This should return the minimal set of attributes required to create a valid
# Bike. As you add validations to Bike, be sure to
# adjust the attributes here as well.
let(:valid_attributes) { { } }
# This should return the minimal set of values that should be in the session
# in order to pass any filters (e.g. authentication) defined in
# BikesController. Be sure to keep this updated too.
let(:valid_session) { {} }
describe "GET index" do
it "assigns all bikes as @bikes" do
bike = Bike.create! valid_attributes
get :index, {}, valid_session
assigns(:bikes).should eq([bike])
end
end
describe "GET show" do
it "assigns the requested bike as @bike" do
bike = Bike.create! valid_attributes
get :show, {:id => bike.to_param}, valid_session
assigns(:bike).should eq(bike)
end
end
describe "GET new" do
it "assigns a new bike as @bike" do
get :new, {}, valid_session
assigns(:bike).should be_a_new(Bike)
end
end
describe "GET edit" do
it "assigns the requested bike as @bike" do
bike = Bike.create! valid_attributes
get :edit, {:id => bike.to_param}, valid_session
assigns(:bike).should eq(bike)
end
end
describe "POST create" do
describe "with valid params" do
it "creates a new Bike" do
expect {
post :create, {:bike => valid_attributes}, valid_session
}.to change(Bike, :count).by(1)
end
it "assigns a newly created bike as @bike" do
post :create, {:bike => valid_attributes}, valid_session
assigns(:bike).should be_a(Bike)
assigns(:bike).should be_persisted
end
it "redirects to the created bike" do
post :create, {:bike => valid_attributes}, valid_session
response.should redirect_to(Bike.last)
end
end
describe "with invalid params" do
it "assigns a newly created but unsaved bike as @bike" do
# Trigger the behavior that occurs when invalid params are submitted
Bike.any_instance.stub(:save).and_return(false)
post :create, {:bike => { }}, valid_session
assigns(:bike).should be_a_new(Bike)
end
it "re-renders the 'new' template" do
# Trigger the behavior that occurs when invalid params are submitted
Bike.any_instance.stub(:save).and_return(false)
post :create, {:bike => { }}, valid_session
response.should render_template("new")
end
end
end
describe "PUT update" do
describe "with valid params" do
it "updates the requested bike" do
bike = Bike.create! valid_attributes
# Assuming there are no other bikes in the database, this
# specifies that the Bike created on the previous line
# receives the :update_attributes message with whatever params are
# submitted in the request.
Bike.any_instance.should_receive(:update).with({ "these" => "params" })
put :update, {:id => bike.to_param, :bike => { "these" => "params" }}, valid_session
end
it "assigns the requested bike as @bike" do
bike = Bike.create! valid_attributes
put :update, {:id => bike.to_param, :bike => valid_attributes}, valid_session
assigns(:bike).should eq(bike)
end
it "redirects to the bike" do
bike = Bike.create! valid_attributes
put :update, {:id => bike.to_param, :bike => valid_attributes}, valid_session
response.should redirect_to(bike)
end
end
describe "with invalid params" do
it "assigns the bike as @bike" do
bike = Bike.create! valid_attributes
# Trigger the behavior that occurs when invalid params are submitted
Bike.any_instance.stub(:save).and_return(false)
put :update, {:id => bike.to_param, :bike => { }}, valid_session
assigns(:bike).should eq(bike)
end
it "re-renders the 'edit' template" do
bike = Bike.create! valid_attributes
# Trigger the behavior that occurs when invalid params are submitted
Bike.any_instance.stub(:save).and_return(false)
put :update, {:id => bike.to_param, :bike => { }}, valid_session
response.should render_template("edit")
end
end
end
describe "DELETE destroy" do
it "destroys the requested bike" do
bike = Bike.create! valid_attributes
expect {
delete :destroy, {:id => bike.to_param}, valid_session
}.to change(Bike, :count).by(-1)
end
it "redirects to the bikes list" do
bike = Bike.create! valid_attributes
delete :destroy, {:id => bike.to_param}, valid_session
response.should redirect_to(bikes_url)
end
end
end

6
spec/factories/bikes.rb

@ -0,0 +1,6 @@
# Read about factories at https://github.com/thoughtbot/factory_girl
FactoryGirl.define do
factory :bike do
end
end

15
spec/helpers/bikes_helper_spec.rb

@ -0,0 +1,15 @@
require 'spec_helper'
# Specs in this file have access to a helper object that includes
# the BikesHelper. For example:
#
# describe BikesHelper do
# describe "string concat" do
# it "concats two strings with spaces" do
# expect(helper.concat_strings("this","that")).to eq("this that")
# end
# end
# end
describe BikesHelper do
pending "add some examples to (or delete) #{__FILE__}"
end

5
spec/models/bike_spec.rb

@ -0,0 +1,5 @@
require 'spec_helper'
describe Bike do
pending "add some examples to (or delete) #{__FILE__}"
end

11
spec/requests/bikes_spec.rb

@ -0,0 +1,11 @@
require 'spec_helper'
describe "Bikes" do
describe "GET /bikes" do
it "works! (now write some real specs)" do
# Run the generator again with the --webrat flag if you want to use webrat methods/matchers
get bikes_path
response.status.should be(200)
end
end
end

35
spec/routing/bikes_routing_spec.rb

@ -0,0 +1,35 @@
require "spec_helper"
describe BikesController do
describe "routing" do
it "routes to #index" do
get("/bikes").should route_to("bikes#index")
end
it "routes to #new" do
get("/bikes/new").should route_to("bikes#new")
end
it "routes to #show" do
get("/bikes/1").should route_to("bikes#show", :id => "1")
end
it "routes to #edit" do
get("/bikes/1/edit").should route_to("bikes#edit", :id => "1")
end
it "routes to #create" do
post("/bikes").should route_to("bikes#create")
end
it "routes to #update" do
put("/bikes/1").should route_to("bikes#update", :id => "1")
end
it "routes to #destroy" do
delete("/bikes/1").should route_to("bikes#destroy", :id => "1")
end
end
end

15
spec/views/bikes/edit.html.erb_spec.rb

@ -0,0 +1,15 @@
require 'spec_helper'
describe "bikes/edit" do
before(:each) do
@bike = assign(:bike, stub_model(Bike))
end
it "renders the edit bike form" do
render
# Run the generator again with the --webrat flag if you want to use webrat matchers
assert_select "form[action=?][method=?]", bike_path(@bike), "post" do
end
end
end

15
spec/views/bikes/index.html.erb_spec.rb

@ -0,0 +1,15 @@
require 'spec_helper'
describe "bikes/index" do
before(:each) do
assign(:bikes, [
stub_model(Bike),
stub_model(Bike)
])
end
it "renders a list of bikes" do
render
# Run the generator again with the --webrat flag if you want to use webrat matchers
end
end

15
spec/views/bikes/new.html.erb_spec.rb

@ -0,0 +1,15 @@
require 'spec_helper'
describe "bikes/new" do
before(:each) do
assign(:bike, stub_model(Bike).as_new_record)
end
it "renders new bike form" do
render
# Run the generator again with the --webrat flag if you want to use webrat matchers
assert_select "form[action=?][method=?]", bikes_path, "post" do
end
end
end

12
spec/views/bikes/show.html.erb_spec.rb

@ -0,0 +1,12 @@
require 'spec_helper'
describe "bikes/show" do
before(:each) do
@bike = assign(:bike, stub_model(Bike))
end
it "renders attributes in <p>" do
render
# Run the generator again with the --webrat flag if you want to use webrat matchers
end
end
Loading…
Cancel
Save