From 0e3d2fdd45490ef5c6d5129d758357605fb71c45 Mon Sep 17 00:00:00 2001 From: Kyle Cline Date: Mon, 27 Jan 2014 13:40:55 -0600 Subject: [PATCH] Create synapse associations with nifty-generators --- Gemfile | 6 ++++++ Gemfile.lock | 6 ++++++ app/controllers/synapses_controller.rb | 17 +++++++++++++++ app/helpers/synapses_helper.rb | 2 ++ app/models/synapse.rb | 4 ++++ app/models/user.rb | 5 +++++ app/views/users/index.html.erb | 7 ++++++- app/views/users/show.html.erb | 16 ++++++++++++++ config/routes.rb | 2 ++ db/migrate/20140127184714_create_synapses.rb | 13 ++++++++++++ db/schema.rb | 20 +++++++++++++++++- test/fixtures/synapses.yml | 7 +++++++ test/functional/synapses_controller_test.rb | 22 ++++++++++++++++++++ test/unit/synapse_test.rb | 7 +++++++ 14 files changed, 132 insertions(+), 2 deletions(-) create mode 100644 app/controllers/synapses_controller.rb create mode 100644 app/helpers/synapses_helper.rb create mode 100644 app/models/synapse.rb create mode 100644 db/migrate/20140127184714_create_synapses.rb create mode 100644 test/fixtures/synapses.yml create mode 100644 test/functional/synapses_controller_test.rb create mode 100644 test/unit/synapse_test.rb diff --git a/Gemfile b/Gemfile index 2e94b22..1e90bfa 100644 --- a/Gemfile +++ b/Gemfile @@ -37,6 +37,10 @@ group :production do gem 'rails_12factor' end +group :development do + gem 'nifty-generators' +end + # Bootstrap gem 'bootstrap-sass', '2.3.2.0' @@ -58,3 +62,5 @@ gem 'faker', '1.1.2' # Use debugger # gem 'debugger', group: [:development, :test] + +gem "mocha", group: :test \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock index c1f7878..4c7f499 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -56,9 +56,13 @@ GEM mail (2.5.4) mime-types (~> 1.16) treetop (~> 1.4.8) + metaclass (0.0.2) mime-types (1.25.1) minitest (4.7.5) + mocha (1.0.0) + metaclass (~> 0.0.1) multi_json (1.8.4) + nifty-generators (0.4.6) pg (0.17.1) polyglot (0.3.3) rack (1.5.2) @@ -128,6 +132,8 @@ DEPENDENCIES faker (= 1.1.2) jbuilder (~> 1.2) jquery-rails + mocha + nifty-generators pg rails (= 4.0.2) rails_12factor diff --git a/app/controllers/synapses_controller.rb b/app/controllers/synapses_controller.rb new file mode 100644 index 0000000..f757d9c --- /dev/null +++ b/app/controllers/synapses_controller.rb @@ -0,0 +1,17 @@ +class SynapsesController < ApplicationController + def create + @synapse = current_user.synapses.build(:other_user_id => params[:other_user_id]) + if @synapse.save + redirect_to root_url, :notice => "Successfully added!" + else + flash[:error] = "Sorry, something went wrong. We're working on it." + redirect_to root_url + end + end + + def destroy + @synapse = current_user.synapses.find(params[:id]) + @synapse.destroy + redirect_to current_user, :notice => "Removed connection." + end +end diff --git a/app/helpers/synapses_helper.rb b/app/helpers/synapses_helper.rb new file mode 100644 index 0000000..58508a3 --- /dev/null +++ b/app/helpers/synapses_helper.rb @@ -0,0 +1,2 @@ +module SynapsesHelper +end diff --git a/app/models/synapse.rb b/app/models/synapse.rb new file mode 100644 index 0000000..c9f0c39 --- /dev/null +++ b/app/models/synapse.rb @@ -0,0 +1,4 @@ +class Synapse < ActiveRecord::Base + belongs_to :user + belongs_to :other_user, :class_name => "User" +end diff --git a/app/models/user.rb b/app/models/user.rb index a755e66..a2494cc 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,6 +1,11 @@ class User < ActiveRecord::Base has_many :posts, dependent: :destroy + has_many :synapses + has_many :other_users, :through => :synapses + has_many :inverse_synapses, :class_name => "Synapse", :foreign_key => "other_user_id" + has_many :inverse_other_users, :through => :inverse_synapses, :source => :user + before_save { self.email = email.downcase } before_create :create_remember_token diff --git a/app/views/users/index.html.erb b/app/views/users/index.html.erb index 2062069..e68a783 100644 --- a/app/views/users/index.html.erb +++ b/app/views/users/index.html.erb @@ -2,5 +2,10 @@

All users

\ No newline at end of file diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb index cb515ec..725a2a3 100644 --- a/app/views/users/show.html.erb +++ b/app/views/users/show.html.erb @@ -4,6 +4,22 @@

<%= @user.name %>

+
+

Connections

+ +
<% if @user.posts.any? %> diff --git a/config/routes.rb b/config/routes.rb index c1183ee..2d4cac7 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -12,6 +12,8 @@ resources :posts, only: [:create, :destroy] + resources :synapses + # The priority is based upon order of creation: first created -> highest priority. # See how all your routes lay out with "rake routes". diff --git a/db/migrate/20140127184714_create_synapses.rb b/db/migrate/20140127184714_create_synapses.rb new file mode 100644 index 0000000..6a0264c --- /dev/null +++ b/db/migrate/20140127184714_create_synapses.rb @@ -0,0 +1,13 @@ +class CreateSynapses < ActiveRecord::Migration + def self.up + create_table :synapses do |t| + t.integer :user_id + t.integer :other_user_id + t.timestamps + end + end + + def self.down + drop_table :synapses + end +end diff --git a/db/schema.rb b/db/schema.rb index dcc5418..52bba6e 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20140122232133) do +ActiveRecord::Schema.define(version: 20140127184714) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -27,6 +27,24 @@ add_index "posts", ["user_id", "created_at"], name: "index_posts_on_user_id_and_created_at", using: :btree + create_table "relationships", force: true do |t| + t.integer "follower_id" + t.integer "followed_id" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "relationships", ["followed_id"], name: "index_relationships_on_followed_id", using: :btree + add_index "relationships", ["follower_id", "followed_id"], name: "index_relationships_on_follower_id_and_followed_id", unique: true, using: :btree + add_index "relationships", ["follower_id"], name: "index_relationships_on_follower_id", using: :btree + + create_table "synapses", force: true do |t| + t.integer "user_id" + t.integer "other_user_id" + t.datetime "created_at" + t.datetime "updated_at" + end + create_table "users", force: true do |t| t.string "email" t.string "name" diff --git a/test/fixtures/synapses.yml b/test/fixtures/synapses.yml new file mode 100644 index 0000000..43af7cd --- /dev/null +++ b/test/fixtures/synapses.yml @@ -0,0 +1,7 @@ +one: + user_id: + other_user_id: + +two: + user_id: + other_user_id: diff --git a/test/functional/synapses_controller_test.rb b/test/functional/synapses_controller_test.rb new file mode 100644 index 0000000..fd080fb --- /dev/null +++ b/test/functional/synapses_controller_test.rb @@ -0,0 +1,22 @@ +require 'test_helper' + +class SynapsesControllerTest < ActionController::TestCase + def test_create_invalid + Synapse.any_instance.stubs(:valid?).returns(false) + post :create + assert_template 'new' + end + + def test_create_valid + Synapse.any_instance.stubs(:valid?).returns(true) + post :create + assert_redirected_to root_url + end + + def test_destroy + synapse = Synapse.first + delete :destroy, :id => synapse + assert_redirected_to root_url + assert !Synapse.exists?(synapse.id) + end +end diff --git a/test/unit/synapse_test.rb b/test/unit/synapse_test.rb new file mode 100644 index 0000000..9ab7eeb --- /dev/null +++ b/test/unit/synapse_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class SynapseTest < ActiveSupport::TestCase + def test_should_be_valid + assert Synapse.new.valid? + end +end