From e54f7b437f9ca7fb6177fe3d679aeef3f1703d46 Mon Sep 17 00:00:00 2001 From: Andrew Cockerham Date: Thu, 6 Jun 2013 05:41:13 -0500 Subject: [PATCH] Add jQuery with Masonry --- app/assets/javascripts/application.js | 1 + app/assets/javascripts/jobs.js.coffee | 3 + app/assets/javascripts/pins.js.coffee | 4 + app/assets/stylesheets/styles.css.scss | 26 ++++++ app/controllers/jobs_controller.rb | 92 +++++++++++++++++++ app/controllers/pins_controller.rb | 3 +- app/helpers/jobs_helper.rb | 2 + app/models/job.rb | 18 ++++ app/models/user.rb | 3 +- app/views/jobs/_form.html.erb | 11 +++ app/views/jobs/_job.html.erb | 7 ++ app/views/jobs/edit.html.erb | 6 ++ app/views/jobs/index.html.erb | 21 +++++ app/views/jobs/new.html.erb | 5 + app/views/jobs/show.html.erb | 14 +++ app/views/layouts/_header.html.erb | 3 +- app/views/pins/_pin.html.erb | 24 +++-- app/views/pins/index.html.erb | 24 +---- config/routes.rb | 3 + db/migrate/20130606015341_create_jobs.rb | 10 ++ .../20130606030659_add_user_id_to_jobs.rb | 6 ++ db/schema.rb | 12 ++- test/fixtures/jobs.yml | 9 ++ test/functional/jobs_controller_test.rb | 49 ++++++++++ test/unit/helpers/jobs_helper_test.rb | 4 + test/unit/job_test.rb | 7 ++ .../assets/javascripts/jquery.masonry.min.js | 10 ++ 27 files changed, 344 insertions(+), 33 deletions(-) create mode 100644 app/assets/javascripts/jobs.js.coffee create mode 100644 app/controllers/jobs_controller.rb create mode 100644 app/helpers/jobs_helper.rb create mode 100644 app/models/job.rb create mode 100644 app/views/jobs/_form.html.erb create mode 100644 app/views/jobs/_job.html.erb create mode 100644 app/views/jobs/edit.html.erb create mode 100644 app/views/jobs/index.html.erb create mode 100644 app/views/jobs/new.html.erb create mode 100644 app/views/jobs/show.html.erb create mode 100644 db/migrate/20130606015341_create_jobs.rb create mode 100644 db/migrate/20130606030659_add_user_id_to_jobs.rb create mode 100644 test/fixtures/jobs.yml create mode 100644 test/functional/jobs_controller_test.rb create mode 100644 test/unit/helpers/jobs_helper_test.rb create mode 100644 test/unit/job_test.rb create mode 100644 vendor/assets/javascripts/jquery.masonry.min.js diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index 8c515ad..4e97bff 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -12,5 +12,6 @@ // //= require jquery //= require jquery_ujs +//= require jquery.masonry.min.js //= require bootstrap //= require_tree . diff --git a/app/assets/javascripts/jobs.js.coffee b/app/assets/javascripts/jobs.js.coffee new file mode 100644 index 0000000..7615679 --- /dev/null +++ b/app/assets/javascripts/jobs.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://jashkenas.github.com/coffee-script/ diff --git a/app/assets/javascripts/pins.js.coffee b/app/assets/javascripts/pins.js.coffee index 7615679..7d0be3f 100644 --- a/app/assets/javascripts/pins.js.coffee +++ b/app/assets/javascripts/pins.js.coffee @@ -1,3 +1,7 @@ # 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://jashkenas.github.com/coffee-script/ + +jQuery -> + $('#pins').imagesLoaded -> + $('#pins').masonry itemSelector: ".box" \ No newline at end of file diff --git a/app/assets/stylesheets/styles.css.scss b/app/assets/stylesheets/styles.css.scss index 69dcfb3..97f536f 100644 --- a/app/assets/stylesheets/styles.css.scss +++ b/app/assets/stylesheets/styles.css.scss @@ -23,4 +23,30 @@ body { a { color: $gray; } +} + +/* Required for jQuery Masonry */ + +.box { + margin: 5px; + padding: 5px; + font-size: 11px; + line-height: 1.4em; + float: left; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + box-shadow: 1px 1px 10px #444; + width: 214px; +} + +.box img { + width: 100%; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} + +.description { + margin: 10px 0 5px; } \ No newline at end of file diff --git a/app/controllers/jobs_controller.rb b/app/controllers/jobs_controller.rb new file mode 100644 index 0000000..fb3d17f --- /dev/null +++ b/app/controllers/jobs_controller.rb @@ -0,0 +1,92 @@ +class JobsController < ApplicationController + before_filter :authenticate_user! + + # GET /jobs + # GET /jobs.json + def index + @jobs = Job.all + + respond_to do |format| + format.html # index.html.erb + format.json { render json: @jobs } + end + end + + # GET /jobs/1 + # GET /jobs/1.json + def show + @job = Job.find(params[:id]) + + respond_to do |format| + format.html # show.html.erb + format.json { render json: @job } + end + end + + # GET /jobs/new + # GET /jobs/new.json + def new + @job = current_user.jobs.new + #@job = Job.new + + respond_to do |format| + format.html # new.html.erb + format.json { render json: @job } + end + end + + # GET /jobs/1/edit + def edit + @job = Job.find(params[:id]) + end + + # POST /jobs + # POST /jobs.json + def create + @job = current_user.jobs.new(params[:job]) + #@job = Job.new(params[:job]) + + respond_to do |format| + if @job.user.hirer + if @job.save + format.html { redirect_to @job, notice: 'Job was successfully created.' } + format.json { render json: @job, status: :created, location: @job } + else + format.html { render action: "new" } + format.json { render json: @job.errors, status: :unprocessable_entity } + end + else + format.html { redirect_to @job, notice: 'Only HR members can post jobs.' } + format.json { render json: @job.errors, status: :unprocessable_entity } + end + end + end + + # PUT /jobs/1 + # PUT /jobs/1.json + def update + @job = Job.find(params[:id]) + + respond_to do |format| + if @job.update_attributes(params[:job]) + format.html { redirect_to @job, notice: 'Job was successfully updated.' } + format.json { head :no_content } + else + format.html { render action: "edit" } + format.json { render json: @job.errors, status: :unprocessable_entity } + end + end + end + + # DELETE /jobs/1 + # DELETE /jobs/1.json + def destroy + @job = Job.find(params[:id]) + @job.destroy + + respond_to do |format| + format.html { redirect_to jobs_url } + format.json { head :no_content } + end + end +end diff --git a/app/controllers/pins_controller.rb b/app/controllers/pins_controller.rb index 41427b6..1cd8fd3 100644 --- a/app/controllers/pins_controller.rb +++ b/app/controllers/pins_controller.rb @@ -4,7 +4,8 @@ class PinsController < ApplicationController # GET /pins # GET /pins.json def index - @pins = Pin.all + @pins = Pin.order("created_at desc") + #@pins = Pin.all # @pins = current_user.pins.all # if @pins.empty? diff --git a/app/helpers/jobs_helper.rb b/app/helpers/jobs_helper.rb new file mode 100644 index 0000000..44c7bf6 --- /dev/null +++ b/app/helpers/jobs_helper.rb @@ -0,0 +1,2 @@ +module JobsHelper +end diff --git a/app/models/job.rb b/app/models/job.rb new file mode 100644 index 0000000..3fc77d5 --- /dev/null +++ b/app/models/job.rb @@ -0,0 +1,18 @@ +class Job < ActiveRecord::Base + attr_accessible :description, :title + + belongs_to :user + + validates :description, presence: true, :length => { :maximum => 1000 } + validates :title, presence: true + validates :user_id, presence: true + + #validates @job.user.hirer = true + #with_options :if => :is_hirer? do |hirer| + # hirer.validates :password, :length => { :minimum => 10 } + #hirer.validates :email, :presence => true + #end + + #validates :hirer, :inclusion => { :in => [true, false] } + #validates :hirer, presence: true #(user.hirer = true) +end diff --git a/app/models/user.rb b/app/models/user.rb index cb89728..70bdd70 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -9,5 +9,6 @@ class User < ActiveRecord::Base attr_accessible :email, :password, :password_confirmation, :remember_me, :name, :hirer # attr_accessible :title, :body - has_many :pins + has_many :pins, :dependent => :destroy + has_many :jobs, :dependent => :destroy end diff --git a/app/views/jobs/_form.html.erb b/app/views/jobs/_form.html.erb new file mode 100644 index 0000000..a4e120f --- /dev/null +++ b/app/views/jobs/_form.html.erb @@ -0,0 +1,11 @@ +<%= simple_form_for(@job, html: { class: "form-horizontal"}) do |f| %> + <%= f.error_notification %> + + <%= f.input :title %> + <%= f.input :description, as: :text, input_html: { rows: "10" } %> + + +
+ <%= f.button :submit, class: "btn btn-primary" %> +
+<% end %> diff --git a/app/views/jobs/_job.html.erb b/app/views/jobs/_job.html.erb new file mode 100644 index 0000000..db389b6 --- /dev/null +++ b/app/views/jobs/_job.html.erb @@ -0,0 +1,7 @@ + + <%= job.title %> + <%= job.description %> + <%= link_to 'Show', job %> + <%= link_to 'Edit', edit_job_path(job) %> + <%= link_to 'Destroy', job, method: :delete, data: { confirm: 'Are you sure?' } %> + \ No newline at end of file diff --git a/app/views/jobs/edit.html.erb b/app/views/jobs/edit.html.erb new file mode 100644 index 0000000..cb6c58a --- /dev/null +++ b/app/views/jobs/edit.html.erb @@ -0,0 +1,6 @@ +

Editing job

+ +<%= render 'form' %> + +<%= link_to 'Show', @job %> | +<%= link_to 'Back', jobs_path %> diff --git a/app/views/jobs/index.html.erb b/app/views/jobs/index.html.erb new file mode 100644 index 0000000..17ad18d --- /dev/null +++ b/app/views/jobs/index.html.erb @@ -0,0 +1,21 @@ +

Job Listings

+ + + + + + + + + + + + + + <%= render @jobs %> + +
TitleDescription
+ +
+ +<%= link_to 'New Job', new_job_path %> diff --git a/app/views/jobs/new.html.erb b/app/views/jobs/new.html.erb new file mode 100644 index 0000000..9979013 --- /dev/null +++ b/app/views/jobs/new.html.erb @@ -0,0 +1,5 @@ +

New job

+ +<%= render 'form' %> + +<%= link_to 'Back', jobs_path %> diff --git a/app/views/jobs/show.html.erb b/app/views/jobs/show.html.erb new file mode 100644 index 0000000..70d7f9b --- /dev/null +++ b/app/views/jobs/show.html.erb @@ -0,0 +1,14 @@ +
+
+
+

+ <%= @job.title %> +

+

+ <%= @job.description %> +

+ <%= link_to 'Edit', edit_job_path(@job) %> | + <%= link_to 'Back', jobs_path %> +
+
+
diff --git a/app/views/layouts/_header.html.erb b/app/views/layouts/_header.html.erb index 335710b..9e33a68 100644 --- a/app/views/layouts/_header.html.erb +++ b/app/views/layouts/_header.html.erb @@ -26,12 +26,13 @@ <% end %> <% if user_signed_in? && current_user.hirer %> -
  • <%= link_to "Post a Job", job_post_path %>
  • +
  • <%= link_to "Post a Job", new_job_path %>
  • <% end %>