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:
+
+
+ <% object.errors.full_messages.each do |msg| %>
+ - <%= msg %>
+ <% end %>
+
+ <% object.kalibro_errors.each do |msg| %>
+ - <%= msg %>
+ <% end %>
+
+
+<% 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