From c519a55a168a2cc1f4c7c9756f9e8480150f48d5 Mon Sep 17 00:00:00 2001 From: Dan Matthews Date: Sun, 27 Oct 2013 13:32:05 -0400 Subject: [PATCH] Adding Follow model to represent when one user follows another and a blank FollowsController#index --- .gitignore | 1 + app/assets/javascripts/follows.js.coffee | 3 +++ app/assets/stylesheets/follows.css.scss | 3 +++ app/controllers/follows_controller.rb | 7 ++++++ app/helpers/follows_helper.rb | 2 ++ app/models/follow.rb | 7 ++++++ app/models/user.rb | 2 ++ app/views/follows/index.html.erb | 0 config/routes.rb | 7 +++++- db/migrate/20131027165351_create_follows.rb | 10 +++++++++ db/schema.rb | 9 +++++++- spec/controllers/follows_controller_spec.rb | 24 +++++++++++++++++++++ spec/factories/follows.rb | 8 +++++++ spec/helpers/follows_helper_spec.rb | 14 ++++++++++++ spec/models/follow_spec.rb | 21 ++++++++++++++++++ spec/models/user_spec.rb | 4 ++++ spec/support/devise.rb | 4 ++++ 17 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 app/assets/javascripts/follows.js.coffee create mode 100644 app/assets/stylesheets/follows.css.scss create mode 100644 app/controllers/follows_controller.rb create mode 100644 app/helpers/follows_helper.rb create mode 100644 app/models/follow.rb create mode 100644 app/views/follows/index.html.erb create mode 100644 db/migrate/20131027165351_create_follows.rb create mode 100644 spec/controllers/follows_controller_spec.rb create mode 100644 spec/factories/follows.rb create mode 100644 spec/helpers/follows_helper_spec.rb create mode 100644 spec/models/follow_spec.rb create mode 100644 spec/support/devise.rb diff --git a/.gitignore b/.gitignore index 470ad2f..dfaa3f9 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ rerun.txt pickle-email-*.html .project config/initializers/secret_token.rb +.DS_Store diff --git a/app/assets/javascripts/follows.js.coffee b/app/assets/javascripts/follows.js.coffee new file mode 100644 index 0000000..24f83d1 --- /dev/null +++ b/app/assets/javascripts/follows.js.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/stylesheets/follows.css.scss b/app/assets/stylesheets/follows.css.scss new file mode 100644 index 0000000..8256bfb --- /dev/null +++ b/app/assets/stylesheets/follows.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the Follows controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/follows_controller.rb b/app/controllers/follows_controller.rb new file mode 100644 index 0000000..e2c82fb --- /dev/null +++ b/app/controllers/follows_controller.rb @@ -0,0 +1,7 @@ +class FollowsController < ApplicationController + before_filter :authenticate_user! + + def index + + end +end diff --git a/app/helpers/follows_helper.rb b/app/helpers/follows_helper.rb new file mode 100644 index 0000000..244dbc5 --- /dev/null +++ b/app/helpers/follows_helper.rb @@ -0,0 +1,2 @@ +module FollowsHelper +end diff --git a/app/models/follow.rb b/app/models/follow.rb new file mode 100644 index 0000000..5bededc --- /dev/null +++ b/app/models/follow.rb @@ -0,0 +1,7 @@ +class Follow < ActiveRecord::Base + belongs_to :following, :class_name => "User" + belongs_to :user + + validates :following, :presence => true + validates :user, :presence => true +end diff --git a/app/models/user.rb b/app/models/user.rb index e58f995..a870228 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -2,6 +2,8 @@ class User < ActiveRecord::Base devise :database_authenticatable, :registerable, :lockable, :recoverable, :rememberable, :trackable, :validatable + has_many :follows + validates :name, :presence => true validates :username, :presence => true, :uniqueness => true end diff --git a/app/views/follows/index.html.erb b/app/views/follows/index.html.erb new file mode 100644 index 0000000..e69de29 diff --git a/config/routes.rb b/config/routes.rb index 32fab2a..24359e8 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -3,8 +3,13 @@ # The priority is based upon order of creation: first created -> highest priority. # See how all your routes lay out with "rake routes". + authenticated :user do + resources :follows + root :to => 'discover#index', :as => :user_root + end + # You can have the root of your site routed with "root" - root 'home#index' + root :to => 'home#index' # Example of regular route: # get 'products/:id' => 'catalog#view' diff --git a/db/migrate/20131027165351_create_follows.rb b/db/migrate/20131027165351_create_follows.rb new file mode 100644 index 0000000..8532b8c --- /dev/null +++ b/db/migrate/20131027165351_create_follows.rb @@ -0,0 +1,10 @@ +class CreateFollows < ActiveRecord::Migration + def change + create_table :follows do |t| + t.integer :user_id + t.integer :following_id + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 9e2bce2..901ca24 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,14 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20131026231121) do +ActiveRecord::Schema.define(version: 20131027165351) do + + create_table "follows", force: true do |t| + t.integer "user_id" + t.integer "following_id" + t.datetime "created_at" + t.datetime "updated_at" + end create_table "users", force: true do |t| t.string "email", default: "", null: false diff --git a/spec/controllers/follows_controller_spec.rb b/spec/controllers/follows_controller_spec.rb new file mode 100644 index 0000000..9feef2d --- /dev/null +++ b/spec/controllers/follows_controller_spec.rb @@ -0,0 +1,24 @@ +require 'spec_helper' + +describe FollowsController do + context "when no user is logged in" do + describe "GET index" do + subject { response } + before { get :index } + + it { should_not be_successful } + end + end + + context "when a user is logged in" do + describe "GET index" do + subject { response } + before do + sign_in FactoryGirl.create(:user) + get :index + end + + it { should be_successful } + end + end +end diff --git a/spec/factories/follows.rb b/spec/factories/follows.rb new file mode 100644 index 0000000..e79471c --- /dev/null +++ b/spec/factories/follows.rb @@ -0,0 +1,8 @@ +# Read about factories at https://github.com/thoughtbot/factory_girl + +FactoryGirl.define do + factory :follow do + user { FactoryGirl.create(:user) } + following { FactoryGirl.create(:user) } + end +end diff --git a/spec/helpers/follows_helper_spec.rb b/spec/helpers/follows_helper_spec.rb new file mode 100644 index 0000000..62cb537 --- /dev/null +++ b/spec/helpers/follows_helper_spec.rb @@ -0,0 +1,14 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the FollowsHelper. For example: +# +# describe FollowsHelper 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 FollowsHelper do +end diff --git a/spec/models/follow_spec.rb b/spec/models/follow_spec.rb new file mode 100644 index 0000000..0325751 --- /dev/null +++ b/spec/models/follow_spec.rb @@ -0,0 +1,21 @@ +require 'spec_helper' + +describe Follow do + context "associations" do + it { should belong_to :user } + it { should belong_to :following } + end + + context "factories" do + describe "#follow" do + subject { FactoryGirl.build(:follow) } + + it { should be_valid } + end + end + + context "validations" do + it { should validate_presence_of :following } + it { should validate_presence_of :user } + end +end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 022f7a2..2fb7e89 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -1,6 +1,10 @@ require 'spec_helper' describe User do + context "associations" do + it { should have_many :follows } + end + context "factories" do describe "#user" do subject { FactoryGirl.build(:user) } diff --git a/spec/support/devise.rb b/spec/support/devise.rb new file mode 100644 index 0000000..55f27f1 --- /dev/null +++ b/spec/support/devise.rb @@ -0,0 +1,4 @@ +# see: https://github.com/plataformatec/devise#test-helpers +RSpec.configure do |config| + config.include Devise::TestHelpers, :type => :controller +end