diff --git a/Gemfile b/Gemfile index 253dec3..b07d1c3 100755 --- a/Gemfile +++ b/Gemfile @@ -20,6 +20,8 @@ group :development do gem 'rack-livereload' gem 'rb-fsevent' gem 'travis-lint' + gem 'better_errors' + gem 'binding_of_caller' end gem 'gauntlt' diff --git a/Gemfile.lock b/Gemfile.lock index 8bf624c..66398cd 100755 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -35,6 +35,11 @@ GEM cucumber (>= 1.1.1) rspec-expectations (>= 2.7.0) bcrypt-ruby (3.0.1) + better_errors (1.0.1) + coderay (>= 1.0.0) + erubis (>= 2.6.6) + binding_of_caller (0.7.2) + debug_inspector (>= 0.0.1) brakeman (1.9.5) erubis (~> 2.6) fastercsv (~> 1.5) @@ -72,6 +77,7 @@ GEM gherkin (~> 2.12.0) multi_json (~> 1.3) database_cleaner (1.0.1) + debug_inspector (0.0.2) diff-lcs (1.2.4) em-websocket (0.5.0) eventmachine (>= 0.12.9) @@ -247,6 +253,8 @@ PLATFORMS DEPENDENCIES aruba bcrypt-ruby + better_errors + binding_of_caller brakeman bundler-audit capybara diff --git a/app/controllers/messages_controller.rb b/app/controllers/messages_controller.rb new file mode 100644 index 0000000..95fd22d --- /dev/null +++ b/app/controllers/messages_controller.rb @@ -0,0 +1,40 @@ +class MessagesController < ApplicationController + + def index + @messages = current_user.messages + end + + def show + @message = Message.where(:id => params[:id]).first + end + + def destroy + message = Message.where(:id => params[:id]).first + + if message.destroy + flash[:success] = "Your message has been deleted." + redirect_to user_messages_path(:user_id => current_user.user_id) + else + flash[:error] = "Could not delete message." + end + end + + def new + @message = Message.new + end + + def create + if Message.create(params[:message]) + respond_to do |format| + format.html { redirect_to user_messages_path(:user_id => current_user.user_id) } + format.json { render :json => {:msg => "success"} } + end + else + respond_to do |format| + format.html { redirect_to user_messages_path } + format.json { render :json => {:msg => "failure"} } + end + end + end + +end \ No newline at end of file diff --git a/app/helpers/messages_helper.rb b/app/helpers/messages_helper.rb new file mode 100644 index 0000000..f1bca9f --- /dev/null +++ b/app/helpers/messages_helper.rb @@ -0,0 +1,2 @@ +module MessagesHelper +end diff --git a/app/models/message.rb b/app/models/message.rb new file mode 100644 index 0000000..7894ae9 --- /dev/null +++ b/app/models/message.rb @@ -0,0 +1,10 @@ +class Message < ActiveRecord::Base + belongs_to :user + attr_accessible :creator_id, :message, :read, :receiver_id + validates_presence_of :creator_id, :receiver_id, :message + + def creator_name + creator = User.where(:id => self.creator_id).first + creator.full_name + end +end \ No newline at end of file diff --git a/app/models/user.rb b/app/models/user.rb index 0e982e2..58e93b2 100755 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -17,7 +17,7 @@ class User < ActiveRecord::Base has_one :paid_time_off, :foreign_key => :user_id, :primary_key => :user_id, :dependent => :destroy has_one :work_info, :foreign_key => :user_id, :primary_key => :user_id, :dependent => :destroy has_many :performance, :foreign_key => :user_id, :primary_key => :user_id, :dependent => :destroy - + has_many :messages, :foreign_key => :receiver_id, :primary_key => :user_id, :dependent => :destroy def build_benefits_data @@ -26,13 +26,13 @@ class User < ActiveRecord::Base build_work_info(POPULATE_WORK_INFO.shuffle.first) performance.build(POPULATE_PERFORMANCE.shuffle.first) end - - private def full_name "#{self.first_name} #{self.last_name}" end +private + def self.authenticate(email, password) auth = nil user = find_by_email(email) diff --git a/app/views/layouts/shared/_sidebar.html.erb b/app/views/layouts/shared/_sidebar.html.erb index bc6e77a..1add2e3 100755 --- a/app/views/layouts/shared/_sidebar.html.erb +++ b/app/views/layouts/shared/_sidebar.html.erb @@ -58,6 +58,14 @@ Performance <% end %> +
  • + <%= link_to user_messages_path(:user_id => current_user.user_id) do %> +
    + +
    + Messages + <% end %> +
  • diff --git a/app/views/messages/index.html.erb b/app/views/messages/index.html.erb new file mode 100644 index 0000000..c5b93ca --- /dev/null +++ b/app/views/messages/index.html.erb @@ -0,0 +1,44 @@ +
    +
    +
    +
    +
    +
    +
    + Messages for <%= current_user.full_name %> + +
    +
    +
    + + + + + + + + + + + + <% if @messages.empty? %> + + <% end %> + <% @messages.each do |message| %> + + + + + + + <% end %> +
    From:DateMessageActions
    <%= "No messages!" %><%= message.creator_name %><%= message.created_at.to_date %><%= message.message %><%= link_to "Details", user_message_path(:id => message.id), {:class => "btn btn-info pull-left"}%> + <%= link_to "Delete", user_message_path(:id => message.id), {:method => 'delete', :class => "btn btn-danger pull-left"}%>
    +
    +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/app/views/messages/new.html.erb b/app/views/messages/new.html.erb new file mode 100644 index 0000000..a1d002a --- /dev/null +++ b/app/views/messages/new.html.erb @@ -0,0 +1,88 @@ +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + New Message +
    +
    +
    + <%= form_for @message, :url => user_messages_path, :method => :post, :html => {:id => "send_message"} do |f|%> + <%= f.hidden_field :creator_id, :value => current_user.id %> + <%= f.hidden_field :read, :value => '0' %> +
    + <%= f.label "To:", nil, {:class => "control-label"}%> + <%= f.select(:receiver_id, options_from_collection_for_select(User.all, :id, :full_name)) %> +
    + +
    + <%= f.label :message, nil, {:class => "control-label"}%> + <%= f.text_area :message, {:class => "span12"} %> +
    + +
    + <%= f.submit "Submit", {:id => 'submit_button', :class => "btn btn-info pull-right"} %> +
    + +
    + <% end %> +
    +
    +
    +
    + +<%= javascript_include_tag ('validation.js')%> + + + + + + diff --git a/app/views/messages/show.html.erb b/app/views/messages/show.html.erb new file mode 100644 index 0000000..5bdb6af --- /dev/null +++ b/app/views/messages/show.html.erb @@ -0,0 +1,171 @@ +
    +
    +
    +
    +
    +
    +
    + Messages for <%= current_user.full_name %> +
    +
    +
    + + + + + + + + + + + + + + + + + +
    From:DateMessageActions
    <%= @message.creator_name %><%= @message.created_at.to_date %><%= @message.message %><%= link_to "Delete", user_message_path, {:id => "@message.id", :method => 'delete', :class => "btn btn-danger pull-left"}%>
    +
    +
    +
    +
    +
    +
    + + +
    + + + + + + + + + + \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 7cac899..5770161 100755 --- a/config/routes.rb +++ b/config/routes.rb @@ -28,6 +28,9 @@ resources :users do end + resources :messages do + end + end get "download" => "benefit_forms#download" diff --git a/db/migrate/20131011180207_create_messages.rb b/db/migrate/20131011180207_create_messages.rb new file mode 100644 index 0000000..3657a81 --- /dev/null +++ b/db/migrate/20131011180207_create_messages.rb @@ -0,0 +1,12 @@ +class CreateMessages < ActiveRecord::Migration + def change + create_table :messages do |t| + t.integer :creator_id + t.integer :receiver_id + t.text :message + t.boolean :read + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index ba16163..2adcc14 100755 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,13 +11,22 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20130708202859) do +ActiveRecord::Schema.define(:version => 20131011180207) do create_table "benefits", :force => true do |t| t.datetime "created_at", :null => false t.datetime "updated_at", :null => false end + create_table "messages", :force => true do |t| + t.integer "creator_id" + t.integer "receiver_id" + t.text "message" + t.boolean "read" + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false + end + create_table "paid_time_offs", :force => true do |t| t.integer "user_id" t.integer "sick_days_taken" diff --git a/db/seeds.rb b/db/seeds.rb index 13cd4ae..3533d20 100755 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -234,7 +234,34 @@ paid_time_off = [ :date_submitted => Date.new(2013, 01, 01), :score => 2 } - ] + ] + + messages = [ + { + :receiver_id => 2, + :creator_id => 5, + :message => 'Your benefits have been updated.', + :read => false + }, + { + :receiver_id => 3, + :creator_id => 4, + :message => 'Please update your profile.', + :read => false + }, + { + :receiver_id => 4, + :creator_id => 3, + :message => 'Welcome to Railsgoat.', + :read => false + }, + { + :receiver_id => 5, + :creator_id => 2, + :message => 'Hello friend.', + :read => false + } + ] users.each do |user_info| @@ -273,3 +300,9 @@ performance.each do |perf| p.user_id = perf[:user_id] p.save end + +messages.each do |message| + m = Message.new(message.reject {|k| k == :creator_id}) + m.creator_id = message[:creator_id] + m.save +end diff --git a/spec/controllers/messages_controller_spec.rb b/spec/controllers/messages_controller_spec.rb new file mode 100644 index 0000000..503cc98 --- /dev/null +++ b/spec/controllers/messages_controller_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe MessagesController do + +end diff --git a/spec/helpers/messages_helper_spec.rb b/spec/helpers/messages_helper_spec.rb new file mode 100644 index 0000000..a29b665 --- /dev/null +++ b/spec/helpers/messages_helper_spec.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +# Specs in this file have access to a helper object that includes +# the MessagesHelper. For example: +# +# describe MessagesHelper 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 MessagesHelper do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/benefits_spec.rb b/spec/models/benefits_spec.rb new file mode 100644 index 0000000..56b9625 --- /dev/null +++ b/spec/models/benefits_spec.rb @@ -0,0 +1,25 @@ +require 'spec_helper.rb' + +describe User do + before(:all) do + UserFixture.reset_all_users + DatabaseCleaner.strategy = :transaction + end + + after(:all) do + DatabaseCleaner.strategy = :truncation + end + + it "can be instantiated" do + Benefits.new.should be_an_instance_of(Benefits) + end + + + it "name can be updated" do + new_name = "Bobby" + user = User.all.first + user.first_name = new_name + user.save! + User.all.first.first_name.should == new_name + end +end \ No newline at end of file diff --git a/spec/models/message_spec.rb b/spec/models/message_spec.rb new file mode 100644 index 0000000..a5f59dd --- /dev/null +++ b/spec/models/message_spec.rb @@ -0,0 +1,5 @@ +require 'spec_helper' + +describe Message do + pending "add some examples to (or delete) #{__FILE__}" +end