diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 02fdf3a..51bc9d7 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -1,3 +1,35 @@ class ProjectsController < ApplicationController + # GET /projects/new + def new + @project = Project.new + end + + # POST /projects + # POST /projects.json + def create + @project = Project.new(project_params) + + respond_to do |format| + if @project.save + format.html { redirect_to @project, notice: 'Project was successfully created.' } + format.json { render action: 'show', status: :created, location: @project } + else + format.html { render action: 'new' } + format.json { render json: @project.errors, status: :unprocessable_entity } + end + end + end + + private + # Use callbacks to share common setup or constraints between actions. + def set_project + @project = Project.find(params[:id]) + end + + # Never trust parameters from the scary internet, only allow the white list through. + def project_params + params[:project] + end + end diff --git a/app/models/project.rb b/app/models/project.rb new file mode 100644 index 0000000..e246c3a --- /dev/null +++ b/app/models/project.rb @@ -0,0 +1,11 @@ +class Project < KalibroEntities::Entities::Project + include ActiveModel::Validations + include ActiveModel::Conversion + extend ActiveModel::Naming + + attr_accessor :name + + def persisted? + false + end +end diff --git a/app/views/home/index.html.erb b/app/views/home/index.html.erb index b79d1fb..d4e2a9c 100644 --- a/app/views/home/index.html.erb +++ b/app/views/home/index.html.erb @@ -1,5 +1,6 @@ <% if user_signed_in? %> <%= link_to('Edit', edit_user_registration_path) %> + <%= link_to('New Project', new_project_path) %> <%= link_to('Logout', destroy_user_session_path, :method => :delete) %> <% else %> <%= link_to('Login', new_user_session_path) %> diff --git a/app/views/projects/_form.html.erb b/app/views/projects/_form.html.erb new file mode 100644 index 0000000..49b4c0a --- /dev/null +++ b/app/views/projects/_form.html.erb @@ -0,0 +1,18 @@ + <% #raise @project.inspect %> +<%= form_for(@project) do |f| %> + <%= render :partial => 'shared/form_errors', :locals => {:object => @project} %> + +
+ <%= f.label :name %>
+ <%= f.text_field :name %> +
+ +
+ <%= f.label :description %>
+ <%= f.text_area :description %> +
+ +
+ <%= f.submit %> +
+<% end %> diff --git a/app/views/projects/new.html.erb b/app/views/projects/new.html.erb new file mode 100644 index 0000000..8965061 --- /dev/null +++ b/app/views/projects/new.html.erb @@ -0,0 +1,5 @@ +

New Project

+ +<%= render 'form' %> + +<%= link_to 'Back', root_path %> diff --git a/app/views/shared/_form_errors.html.erb b/app/views/shared/_form_errors.html.erb new file mode 100644 index 0000000..df0ff06 --- /dev/null +++ b/app/views/shared/_form_errors.html.erb @@ -0,0 +1,15 @@ +<% if object.errors.any? || object.kalibro_errors.any? %> +
+

<%= pluralize(object.errors.count + object.kalibro_errors.count, "error") %> prohibited this project from being saved:

+ + +
+<% end %> \ No newline at end of file diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb new file mode 100644 index 0000000..3c3e6c6 --- /dev/null +++ b/spec/controllers/projects_controller_spec.rb @@ -0,0 +1,48 @@ +require 'spec_helper' + +describe ProjectsController do + + describe 'new' do + before :each do + get :new + end + + it { should respond_with(:success) } + it { should render_template(:new) } + end + + describe 'create' do + + context 'with a valid fields' do + before :each do + @subject = FactoryGirl.build(:project) + + Project.expects(:new).at_least_once.with(@subject.to_hash).returns(@subject) + Project.any_instance.expects(:save).returns(true) + + post :create, :project => @subject.to_hash + end + + it 'should redirect to the show view' do + pending("Probably incompatibility between Rails 4 and RSpec. It isn't expecting an slash at the end." ) do + response.should redirect_to project_path(@subject) + end + end + + it { should respond_with(:redirect) } + end + + context 'with an invalid field' do + before :each do + @subject = FactoryGirl.build(:project) + + Project.expects(:new).at_least_once.with(@subject.to_hash).returns(@subject) + Project.any_instance.expects(:save).returns(false) + + post :create, :project => @subject.to_hash + end + + it { should render_template(:new) } + end + end +end diff --git a/spec/factories/projects.rb b/spec/factories/projects.rb new file mode 100644 index 0000000..13be045 --- /dev/null +++ b/spec/factories/projects.rb @@ -0,0 +1,6 @@ +# Read about factories at https://github.com/thoughtbot/factory_girl + +FactoryGirl.define do + factory :project do + end +end diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb new file mode 100644 index 0000000..a0efad5 --- /dev/null +++ b/spec/models/project_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe Project do + describe 'methods' do + describe 'persisted?' do + it 'should return false' do + subject.persisted?.should eq(false) + end + end + end +end -- libgit2 0.21.2