From 37f150e1cc8c1bf39c89982d6b39311efc6c3b3f Mon Sep 17 00:00:00 2001 From: Dan Elbert Date: Wed, 6 Jul 2016 21:00:35 -0500 Subject: [PATCH] start work on logs --- app/controllers/logs_controller.rb | 79 ++++++++++++++++++++++++ app/models/log.rb | 13 ++++ app/views/logs/_form.html.erb | 11 ++++ app/views/logs/index.html.erb | 0 app/views/logs/new.html.erb | 0 config/routes.rb | 4 +- db/migrate/20160707011314_create_logs.rb | 13 ++++ spec/factories/logs.rb | 8 +++ spec/models/log_spec.rb | 4 ++ 9 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 app/controllers/logs_controller.rb create mode 100644 app/models/log.rb create mode 100644 app/views/logs/_form.html.erb create mode 100644 app/views/logs/index.html.erb create mode 100644 app/views/logs/new.html.erb create mode 100644 db/migrate/20160707011314_create_logs.rb create mode 100644 spec/factories/logs.rb create mode 100644 spec/models/log_spec.rb diff --git a/app/controllers/logs_controller.rb b/app/controllers/logs_controller.rb new file mode 100644 index 0000000..35ad1dd --- /dev/null +++ b/app/controllers/logs_controller.rb @@ -0,0 +1,79 @@ +class LogsController < ApplicationController + + before_action :set_log, only: [:show, :edit, :update, :destroy] + before_action :set_recipe, only: [:index, :new, :create] + before_action :require_recipe, only: [:new, :create] + + before_filter :ensure_valid_user + + def index + @logs = Log.for_user(current_user) + if @recipe + @logs = @logs.for_recipe(@recipe) + end + end + + def show + ensure_owner(@log) + end + + def edit + ensure_owner(@log) + end + + def update + ensure_owner(@log) do + if @log.update(log_params) + redirect_to @log, notice: 'Log Entry was successfully updated.' + else + render :edit + end + end + end + + def new + @log = Log.new + end + + def create + @log = Recipe.new(log_params) + @log.user = current_user + @log.souce_recipe = @recipe + + if @log.save + redirect_to @log, notice: 'Log Entry was successfully created.' + else + render :new + end + end + + def destroy + ensure_owner(@log) do + @log.destroy + redirect_to logs_url, notice: 'Log Entry was successfully destroyed.' + end + end + + private + + def set_log + @log = Log.find(params[:id]) + end + + def set_recipe + if params[:recipe_id].present? + @recipe = Recipe.find(params[:recipe_id]) + end + end + + def require_recepe + unless @recipe + raise ActiveRecord::RecordNotFound + end + end + + def log_params + params.require(:log).permit() + end + +end \ No newline at end of file diff --git a/app/models/log.rb b/app/models/log.rb new file mode 100644 index 0000000..01be794 --- /dev/null +++ b/app/models/log.rb @@ -0,0 +1,13 @@ +class Log < ActiveRecord::Base + + belongs_to :recipe + belongs_to :source_recipe, class_name: 'Recipe' + belongs_to :user + + validates :date, presence: true + validates :user_id, presence: true + + scope :for_user, ->(user) { where(user: user) } + scope :for_recipe, ->(recipe) { where(source_recipe: recipe) } + +end diff --git a/app/views/logs/_form.html.erb b/app/views/logs/_form.html.erb new file mode 100644 index 0000000..d84b0f7 --- /dev/null +++ b/app/views/logs/_form.html.erb @@ -0,0 +1,11 @@ + +<%= form_for(@log) do |f| %> + + <%= render partial: 'shared/error_list', locals: {model: @log} %> + +
+ <%= f.label :name, class: 'control-label' %> + <%= f.text_field :name, class: 'form-control name', autofocus: true %> +
+ +<% end %> \ No newline at end of file diff --git a/app/views/logs/index.html.erb b/app/views/logs/index.html.erb new file mode 100644 index 0000000..e69de29 diff --git a/app/views/logs/new.html.erb b/app/views/logs/new.html.erb new file mode 100644 index 0000000..e69de29 diff --git a/config/routes.rb b/config/routes.rb index 9c7b3be..2e214fa 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,9 +1,11 @@ Rails.application.routes.draw do resources :recipes do - + resources :logs, only: [:index, :new, :create] end + resources :logs, except: [:new, :create] + resources :ingredients, except: [:show] do collection do get :usda_food_search diff --git a/db/migrate/20160707011314_create_logs.rb b/db/migrate/20160707011314_create_logs.rb new file mode 100644 index 0000000..a789ef3 --- /dev/null +++ b/db/migrate/20160707011314_create_logs.rb @@ -0,0 +1,13 @@ +class CreateLogs < ActiveRecord::Migration + def change + create_table :logs do |t| + t.integer :user_id + t.integer :recipe_id + t.integer :source_recipe_id + t.datetime :date + t.integer :rating + + t.timestamps null: false + end + end +end diff --git a/spec/factories/logs.rb b/spec/factories/logs.rb new file mode 100644 index 0000000..a86aa96 --- /dev/null +++ b/spec/factories/logs.rb @@ -0,0 +1,8 @@ +FactoryGirl.define do + factory :log do + recipe_id 1 +date "2016-07-06 20:13:14" +rating 1 + end + +end diff --git a/spec/models/log_spec.rb b/spec/models/log_spec.rb new file mode 100644 index 0000000..6844e95 --- /dev/null +++ b/spec/models/log_spec.rb @@ -0,0 +1,4 @@ +require 'rails_helper' + +RSpec.describe Log, type: :model do +end