Commit 13cbdd9c02f6a18025f69578fd1e767b9c9c47ed
Committed by
Rafael Manzo
1 parent
b925ec18
Exists in
colab
and in
4 other branches
repository scaffold, alter routes for nested resources
Showing
39 changed files
with
994 additions
and
3 deletions
Show diff stats
| @@ -0,0 +1,69 @@ | @@ -0,0 +1,69 @@ | ||
| 1 | +body { | ||
| 2 | + background-color: #fff; | ||
| 3 | + color: #333; | ||
| 4 | + font-family: verdana, arial, helvetica, sans-serif; | ||
| 5 | + font-size: 13px; | ||
| 6 | + line-height: 18px; | ||
| 7 | +} | ||
| 8 | + | ||
| 9 | +p, ol, ul, td { | ||
| 10 | + font-family: verdana, arial, helvetica, sans-serif; | ||
| 11 | + font-size: 13px; | ||
| 12 | + line-height: 18px; | ||
| 13 | +} | ||
| 14 | + | ||
| 15 | +pre { | ||
| 16 | + background-color: #eee; | ||
| 17 | + padding: 10px; | ||
| 18 | + font-size: 11px; | ||
| 19 | +} | ||
| 20 | + | ||
| 21 | +a { | ||
| 22 | + color: #000; | ||
| 23 | + &:visited { | ||
| 24 | + color: #666; | ||
| 25 | + } | ||
| 26 | + &:hover { | ||
| 27 | + color: #fff; | ||
| 28 | + background-color: #000; | ||
| 29 | + } | ||
| 30 | +} | ||
| 31 | + | ||
| 32 | +div { | ||
| 33 | + &.field, &.actions { | ||
| 34 | + margin-bottom: 10px; | ||
| 35 | + } | ||
| 36 | +} | ||
| 37 | + | ||
| 38 | +#notice { | ||
| 39 | + color: green; | ||
| 40 | +} | ||
| 41 | + | ||
| 42 | +.field_with_errors { | ||
| 43 | + padding: 2px; | ||
| 44 | + background-color: red; | ||
| 45 | + display: table; | ||
| 46 | +} | ||
| 47 | + | ||
| 48 | +#error_explanation { | ||
| 49 | + width: 450px; | ||
| 50 | + border: 2px solid red; | ||
| 51 | + padding: 7px; | ||
| 52 | + padding-bottom: 0; | ||
| 53 | + margin-bottom: 20px; | ||
| 54 | + background-color: #f0f0f0; | ||
| 55 | + h2 { | ||
| 56 | + text-align: left; | ||
| 57 | + font-weight: bold; | ||
| 58 | + padding: 5px 5px 5px 15px; | ||
| 59 | + font-size: 12px; | ||
| 60 | + margin: -7px; | ||
| 61 | + margin-bottom: 0px; | ||
| 62 | + background-color: #c00; | ||
| 63 | + color: #fff; | ||
| 64 | + } | ||
| 65 | + ul li { | ||
| 66 | + font-size: 12px; | ||
| 67 | + list-style: square; | ||
| 68 | + } | ||
| 69 | +} |
app/controllers/projects_controller.rb
| @@ -34,6 +34,8 @@ class ProjectsController < ApplicationController | @@ -34,6 +34,8 @@ class ProjectsController < ApplicationController | ||
| 34 | # GET /project/1 | 34 | # GET /project/1 |
| 35 | # GET /project/1.json | 35 | # GET /project/1.json |
| 36 | def show | 36 | def show |
| 37 | + @project_repositories = Repository.repositories_of(params[:id]) | ||
| 38 | + @project = Project.find(params[:id]) | ||
| 37 | set_project | 39 | set_project |
| 38 | end | 40 | end |
| 39 | 41 |
| @@ -0,0 +1,75 @@ | @@ -0,0 +1,75 @@ | ||
| 1 | +class ProjectsController < ApplicationController | ||
| 2 | + | ||
| 3 | + # GET /projects/new | ||
| 4 | + def new | ||
| 5 | + @project = Project.new | ||
| 6 | + end | ||
| 7 | + | ||
| 8 | + # GET /projects | ||
| 9 | + # GET /projects.json | ||
| 10 | + def index | ||
| 11 | + @projects = Project.all | ||
| 12 | + end | ||
| 13 | + | ||
| 14 | + # POST /projects | ||
| 15 | + # POST /projects.json | ||
| 16 | + def create | ||
| 17 | + @project = Project.new(project_params) | ||
| 18 | + | ||
| 19 | + respond_to do |format| | ||
| 20 | + if @project.save | ||
| 21 | + format.html { redirect_to project_path(@project.id), notice: 'Project was successfully created.' } | ||
| 22 | + format.json { render action: 'show', status: :created, location: @project } | ||
| 23 | + else | ||
| 24 | + format.html { render action: 'new' } | ||
| 25 | + format.json { render json: @project.errors, status: :unprocessable_entity } | ||
| 26 | + end | ||
| 27 | + end | ||
| 28 | + end | ||
| 29 | + | ||
| 30 | + # GET /project/1 | ||
| 31 | + # GET /project/1.json | ||
| 32 | + def show | ||
| 33 | + @project_repositories = Repository.repositories_of(params[:id]) | ||
| 34 | + @project_id = (params[:id]) | ||
| 35 | + set_project | ||
| 36 | + end | ||
| 37 | + | ||
| 38 | + # GET /projects/1/edit | ||
| 39 | + # GET /projects/1/edit.json | ||
| 40 | + def edit | ||
| 41 | + set_project | ||
| 42 | + end | ||
| 43 | + | ||
| 44 | + def update | ||
| 45 | + set_project | ||
| 46 | + if @project.update(params[:project]) | ||
| 47 | + redirect_to(project_path(@project.id)) | ||
| 48 | + else | ||
| 49 | + render "edit" | ||
| 50 | + end | ||
| 51 | + end | ||
| 52 | + | ||
| 53 | + # DELETE /project/1 | ||
| 54 | + # DELETE /project/1.json | ||
| 55 | + def destroy | ||
| 56 | + set_project | ||
| 57 | + @project.destroy | ||
| 58 | + respond_to do |format| | ||
| 59 | + format.html { redirect_to projects_url } | ||
| 60 | + format.json { head :no_content } | ||
| 61 | + end | ||
| 62 | + end | ||
| 63 | + | ||
| 64 | + private | ||
| 65 | + # Use callbacks to share common setup or constraints between actions. | ||
| 66 | + def set_project | ||
| 67 | + @project = Project.find(params[:id]) | ||
| 68 | + end | ||
| 69 | + | ||
| 70 | + # Never trust parameters from the scary internet, only allow the white list through. | ||
| 71 | + def project_params | ||
| 72 | + params[:project] | ||
| 73 | + end | ||
| 74 | + | ||
| 75 | +end |
| @@ -0,0 +1,76 @@ | @@ -0,0 +1,76 @@ | ||
| 1 | +class RepositoriesController < ApplicationController | ||
| 2 | + before_action :set_repository, only: [:show, :edit, :update, :destroy] | ||
| 3 | + | ||
| 4 | + # GET /repositories | ||
| 5 | + # GET /repositories.json | ||
| 6 | + def index | ||
| 7 | + @project = Project.find(params[:project_id]) | ||
| 8 | + @repositories = Repository.repositories_of(params[:project_id]) | ||
| 9 | + end | ||
| 10 | + | ||
| 11 | + # GET /repositories/1 | ||
| 12 | + # GET /repositories/1.json | ||
| 13 | + def show | ||
| 14 | + end | ||
| 15 | + | ||
| 16 | + # GET /repositories/new | ||
| 17 | + def new | ||
| 18 | + @repository = Repository.new | ||
| 19 | + @project = Project.find(params[:project_id]) | ||
| 20 | + end | ||
| 21 | + | ||
| 22 | + # GET /repositories/1/edit | ||
| 23 | + def edit | ||
| 24 | + end | ||
| 25 | + | ||
| 26 | + # POST /repositories | ||
| 27 | + # POST /repositories.json | ||
| 28 | + def create | ||
| 29 | + @repository = Repository.new(repository_params) | ||
| 30 | + | ||
| 31 | + respond_to do |format| | ||
| 32 | + if @repository.save | ||
| 33 | + format.html { redirect_to @repository, notice: 'Repository was successfully created.' } | ||
| 34 | + format.json { render action: 'show', status: :created, location: @repository } | ||
| 35 | + else | ||
| 36 | + format.html { render action: 'new' } | ||
| 37 | + format.json { render json: @repository.errors, status: :unprocessable_entity } | ||
| 38 | + end | ||
| 39 | + end | ||
| 40 | + end | ||
| 41 | + | ||
| 42 | + # PATCH/PUT /repositories/1 | ||
| 43 | + # PATCH/PUT /repositories/1.json | ||
| 44 | + def update | ||
| 45 | + respond_to do |format| | ||
| 46 | + if @repository.update(repository_params) | ||
| 47 | + format.html { redirect_to @repository, notice: 'Repository was successfully updated.' } | ||
| 48 | + format.json { head :no_content } | ||
| 49 | + else | ||
| 50 | + format.html { render action: 'edit' } | ||
| 51 | + format.json { render json: @repository.errors, status: :unprocessable_entity } | ||
| 52 | + end | ||
| 53 | + end | ||
| 54 | + end | ||
| 55 | + | ||
| 56 | + # DELETE /repositories/1 | ||
| 57 | + # DELETE /repositories/1.json | ||
| 58 | + def destroy | ||
| 59 | + @repository.destroy | ||
| 60 | + respond_to do |format| | ||
| 61 | + format.html { redirect_to repositories_url } | ||
| 62 | + format.json { head :no_content } | ||
| 63 | + end | ||
| 64 | + end | ||
| 65 | + | ||
| 66 | + private | ||
| 67 | + # Use callbacks to share common setup or constraints between actions. | ||
| 68 | + def set_repository | ||
| 69 | + @repository = Repository.find(params[:id]) | ||
| 70 | + end | ||
| 71 | + | ||
| 72 | + # Never trust parameters from the scary internet, only allow the white list through. | ||
| 73 | + def repository_params | ||
| 74 | + params.require(:repository).permit(:name) | ||
| 75 | + end | ||
| 76 | +end |
| @@ -0,0 +1,76 @@ | @@ -0,0 +1,76 @@ | ||
| 1 | +class RepositoriesController < ApplicationController | ||
| 2 | + before_action :set_repository, only: [:show, :edit, :update, :destroy] | ||
| 3 | + | ||
| 4 | + # GET /repositories | ||
| 5 | + # GET /repositories.json | ||
| 6 | + def index | ||
| 7 | + @project = Project.find(params[:project_id]) | ||
| 8 | + @repositories = Repository.repositories_of(params[:project_id]) | ||
| 9 | + end | ||
| 10 | + | ||
| 11 | + # GET /repositories/1 | ||
| 12 | + # GET /repositories/1.json | ||
| 13 | + def show | ||
| 14 | + end | ||
| 15 | + | ||
| 16 | + # GET /repositories/new | ||
| 17 | + def new | ||
| 18 | + @repository = Repository.new | ||
| 19 | + @project = Project.find(params[:id]) | ||
| 20 | + end | ||
| 21 | + | ||
| 22 | + # GET /repositories/1/edit | ||
| 23 | + def edit | ||
| 24 | + end | ||
| 25 | + | ||
| 26 | + # POST /repositories | ||
| 27 | + # POST /repositories.json | ||
| 28 | + def create | ||
| 29 | + @repository = Repository.new(repository_params) | ||
| 30 | + | ||
| 31 | + respond_to do |format| | ||
| 32 | + if @repository.save | ||
| 33 | + format.html { redirect_to @repository, notice: 'Repository was successfully created.' } | ||
| 34 | + format.json { render action: 'show', status: :created, location: @repository } | ||
| 35 | + else | ||
| 36 | + format.html { render action: 'new' } | ||
| 37 | + format.json { render json: @repository.errors, status: :unprocessable_entity } | ||
| 38 | + end | ||
| 39 | + end | ||
| 40 | + end | ||
| 41 | + | ||
| 42 | + # PATCH/PUT /repositories/1 | ||
| 43 | + # PATCH/PUT /repositories/1.json | ||
| 44 | + def update | ||
| 45 | + respond_to do |format| | ||
| 46 | + if @repository.update(repository_params) | ||
| 47 | + format.html { redirect_to @repository, notice: 'Repository was successfully updated.' } | ||
| 48 | + format.json { head :no_content } | ||
| 49 | + else | ||
| 50 | + format.html { render action: 'edit' } | ||
| 51 | + format.json { render json: @repository.errors, status: :unprocessable_entity } | ||
| 52 | + end | ||
| 53 | + end | ||
| 54 | + end | ||
| 55 | + | ||
| 56 | + # DELETE /repositories/1 | ||
| 57 | + # DELETE /repositories/1.json | ||
| 58 | + def destroy | ||
| 59 | + @repository.destroy | ||
| 60 | + respond_to do |format| | ||
| 61 | + format.html { redirect_to repositories_url } | ||
| 62 | + format.json { head :no_content } | ||
| 63 | + end | ||
| 64 | + end | ||
| 65 | + | ||
| 66 | + private | ||
| 67 | + # Use callbacks to share common setup or constraints between actions. | ||
| 68 | + def set_repository | ||
| 69 | + @repository = Repository.find(params[:id]) | ||
| 70 | + end | ||
| 71 | + | ||
| 72 | + # Never trust parameters from the scary internet, only allow the white list through. | ||
| 73 | + def repository_params | ||
| 74 | + params.require(:repository).permit(:name) | ||
| 75 | + end | ||
| 76 | +end |
| @@ -0,0 +1,17 @@ | @@ -0,0 +1,17 @@ | ||
| 1 | +class Repository < KalibroEntities::Entities::Repository | ||
| 2 | + | ||
| 3 | + include ActiveModel::Validations | ||
| 4 | + include ActiveModel::Conversion | ||
| 5 | + extend ActiveModel::Naming | ||
| 6 | + delegate :url_helpers, to: 'Rails.application.routes' | ||
| 7 | + | ||
| 8 | + def persisted? | ||
| 9 | + Project.exists?(self.id) unless self.id.nil? | ||
| 10 | + end | ||
| 11 | + | ||
| 12 | + def update(attributes = {}) | ||
| 13 | + attributes.each { |field, value| send("#{field}=", value) if self.class.is_valid?(field) } | ||
| 14 | + self.save | ||
| 15 | + end | ||
| 16 | + | ||
| 17 | +end |
app/views/projects/index.html.erb
| @@ -0,0 +1,26 @@ | @@ -0,0 +1,26 @@ | ||
| 1 | +<h1>Listing Projects</h1> | ||
| 2 | + | ||
| 3 | +<table> | ||
| 4 | + <thead> | ||
| 5 | + <tr> | ||
| 6 | + <th>Name</th> | ||
| 7 | + <th>Description</th> | ||
| 8 | + <th></th> | ||
| 9 | + </tr> | ||
| 10 | + </thead> | ||
| 11 | + | ||
| 12 | + <tbody> | ||
| 13 | + <% @projects.each do |project| %> | ||
| 14 | + <tr> | ||
| 15 | + <td><%= project.name %></td> | ||
| 16 | + <td><%= project.description %></td> | ||
| 17 | + <td><%= link_to 'Show', project_path(project.id) %></td> | ||
| 18 | + <td><%= link_to 'Edit', edit_project_path(project.id) %></td> | ||
| 19 | + </tr> | ||
| 20 | + <% end %> | ||
| 21 | + </tbody> | ||
| 22 | +</table> | ||
| 23 | + | ||
| 24 | +<br> | ||
| 25 | + | ||
| 26 | +<%= link_to 'New Project', new_project_path %> |
app/views/projects/show.html.erb
| @@ -8,6 +8,28 @@ | @@ -8,6 +8,28 @@ | ||
| 8 | <%= @project.description %> | 8 | <%= @project.description %> |
| 9 | </p> | 9 | </p> |
| 10 | 10 | ||
| 11 | +<h2>Repositories</h2> | ||
| 12 | + | ||
| 13 | +<%= link_to 'New Repository', new_project_repository_path(@project)%> | ||
| 14 | + | ||
| 15 | +<table border="1" width="30%"> | ||
| 16 | + <thead> | ||
| 17 | + <tr> | ||
| 18 | + <th>Name</th> | ||
| 19 | + <th>Type</th> | ||
| 20 | + </tr> | ||
| 21 | + </thead> | ||
| 22 | + | ||
| 23 | + <tbody> | ||
| 24 | + <% @project_repositories.each do |repository| %> | ||
| 25 | + <tr> | ||
| 26 | + <td align="center"><%= repository.name %></td> | ||
| 27 | + <td align="center"><%= repository.type %></td> | ||
| 28 | + </tr> | ||
| 29 | + <% end %> | ||
| 30 | + </tbody> | ||
| 31 | +</table> | ||
| 32 | + | ||
| 11 | <p> | 33 | <p> |
| 12 | <% if project_owner? @project.id %> | 34 | <% if project_owner? @project.id %> |
| 13 | <%= link_to 'Destroy', project_path(@project.id), method: :delete, data: { confirm: 'Are you sure?' }, class: 'btn btn-danger' %> | 35 | <%= link_to 'Destroy', project_path(@project.id), method: :delete, data: { confirm: 'Are you sure?' }, class: 'btn btn-danger' %> |
| @@ -0,0 +1,37 @@ | @@ -0,0 +1,37 @@ | ||
| 1 | +<p> | ||
| 2 | + <strong>Name:</strong> | ||
| 3 | + <%= @project.name %> | ||
| 4 | +</p> | ||
| 5 | + | ||
| 6 | +<p> | ||
| 7 | + <strong>Description:</strong> | ||
| 8 | + <%= @project.description %> | ||
| 9 | +</p> | ||
| 10 | + | ||
| 11 | +<h2>Repositories</h2> | ||
| 12 | + | ||
| 13 | +<%= link_to 'New Repository', new_project_repository_path(@project_id)%> | ||
| 14 | + | ||
| 15 | +<table border="1" width="30%"> | ||
| 16 | + <thead> | ||
| 17 | + <tr> | ||
| 18 | + <th>Name</th> | ||
| 19 | + <th>Type</th> | ||
| 20 | + </tr> | ||
| 21 | + </thead> | ||
| 22 | + | ||
| 23 | + <tbody> | ||
| 24 | + <% @project_repositories.each do |repository| %> | ||
| 25 | + <tr> | ||
| 26 | + <td align="center"><%= repository.name %></td> | ||
| 27 | + <td align="center"><%= repository.type %></td> | ||
| 28 | + </tr> | ||
| 29 | + <% end %> | ||
| 30 | + </tbody> | ||
| 31 | +</table> | ||
| 32 | + | ||
| 33 | +<p> | ||
| 34 | + <%= link_to 'Destroy', project_path(@project.id), method: :delete, data: { confirm: 'Are you sure?' } %> | ||
| 35 | +</p> | ||
| 36 | + | ||
| 37 | +<%= link_to 'Back', projects_path %> |
| @@ -0,0 +1,36 @@ | @@ -0,0 +1,36 @@ | ||
| 1 | +<%= form_for(@repository) do |f| %> | ||
| 2 | + <% if @repository.errors.any? %> | ||
| 3 | + <div id="error_explanation"> | ||
| 4 | + <h2><%= pluralize(@repository.errors.count, "error") %> prohibited this repository from being saved:</h2> | ||
| 5 | + | ||
| 6 | + <ul> | ||
| 7 | + <% @repository.errors.full_messages.each do |msg| %> | ||
| 8 | + <li><%= msg %></li> | ||
| 9 | + <% end %> | ||
| 10 | + </ul> | ||
| 11 | + </div> | ||
| 12 | + <% end %> | ||
| 13 | + | ||
| 14 | + <div class="field"> | ||
| 15 | + <%= f.label :name %><br> | ||
| 16 | + <%= f.text_field :name %> | ||
| 17 | + </div> | ||
| 18 | + | ||
| 19 | + <div class="field"> | ||
| 20 | + <%= f.label :type %><br> | ||
| 21 | + <%= f.text_field :type %> | ||
| 22 | + </div> | ||
| 23 | + | ||
| 24 | + <div class="field"> | ||
| 25 | + <%= f.label :addres %><br> | ||
| 26 | + <%= f.text_field :address %> | ||
| 27 | + </div> | ||
| 28 | + | ||
| 29 | + <div class="field"> | ||
| 30 | + <%= f.label :configuration %><br> | ||
| 31 | + <%= f.text_field :configuration_id %> | ||
| 32 | + </div> | ||
| 33 | + <div class="actions"> | ||
| 34 | + <%= f.submit %> | ||
| 35 | + </div> | ||
| 36 | +<% end %> |
| @@ -0,0 +1,36 @@ | @@ -0,0 +1,36 @@ | ||
| 1 | +<%= form_for(@repository) do |f| %> | ||
| 2 | + <% if @repository.errors.any? %> | ||
| 3 | + <div id="error_explanation"> | ||
| 4 | + <h2><%= pluralize(@repository.errors.count, "error") %> prohibited this repository from being saved:</h2> | ||
| 5 | + | ||
| 6 | + <ul> | ||
| 7 | + <% @repository.errors.full_messages.each do |msg| %> | ||
| 8 | + <li><%= msg %></li> | ||
| 9 | + <% end %> | ||
| 10 | + </ul> | ||
| 11 | + </div> | ||
| 12 | + <% end %> | ||
| 13 | + | ||
| 14 | + <div class="field"> | ||
| 15 | + <%= f.label :name %><br> | ||
| 16 | + <%= f.text_field :name %> | ||
| 17 | + </div> | ||
| 18 | + | ||
| 19 | + <div class="field"> | ||
| 20 | + <%= f.label :type %><br> | ||
| 21 | + <%= f.text_field :type %> | ||
| 22 | + </div> | ||
| 23 | + | ||
| 24 | + <div class="field"> | ||
| 25 | + <%= f.label :addres %><br> | ||
| 26 | + <%= f.text_field :address %> | ||
| 27 | + </div> | ||
| 28 | + | ||
| 29 | + <div class="field"> | ||
| 30 | + <%= f.label :configuration %><br> | ||
| 31 | + <%= f.text_field :configuration %> | ||
| 32 | + </div> | ||
| 33 | + <div class="actions"> | ||
| 34 | + <%= f.submit %> | ||
| 35 | + </div> | ||
| 36 | +<% end %> |
| @@ -0,0 +1,27 @@ | @@ -0,0 +1,27 @@ | ||
| 1 | +<h1>Listing repositories</h1> | ||
| 2 | + | ||
| 3 | +<table> | ||
| 4 | + <thead> | ||
| 5 | + <tr> | ||
| 6 | + <th>Name</th> | ||
| 7 | + <th></th> | ||
| 8 | + <th></th> | ||
| 9 | + <th></th> | ||
| 10 | + </tr> | ||
| 11 | + </thead> | ||
| 12 | + | ||
| 13 | + <tbody> | ||
| 14 | + <% @repositories.each do |repository| %> | ||
| 15 | + <tr> | ||
| 16 | + <td><%= repository.name %></td> | ||
| 17 | + <td><%= link_to 'Show', repository %></td> | ||
| 18 | + <td><%= link_to 'Edit', edit_repository_path(repository) %></td> | ||
| 19 | + <td><%= link_to 'Destroy', repository, method: :delete, data: { confirm: 'Are you sure?' } %></td> | ||
| 20 | + </tr> | ||
| 21 | + <% end %> | ||
| 22 | + </tbody> | ||
| 23 | +</table> | ||
| 24 | + | ||
| 25 | +<br> | ||
| 26 | + | ||
| 27 | +<%= link_to 'New Repository', new_project_repository_path(@project) %> |
| @@ -0,0 +1,27 @@ | @@ -0,0 +1,27 @@ | ||
| 1 | +<h1>Listing repositories</h1> | ||
| 2 | + | ||
| 3 | +<table> | ||
| 4 | + <thead> | ||
| 5 | + <tr> | ||
| 6 | + <th>Name</th> | ||
| 7 | + <th></th> | ||
| 8 | + <th></th> | ||
| 9 | + <th></th> | ||
| 10 | + </tr> | ||
| 11 | + </thead> | ||
| 12 | + | ||
| 13 | + <tbody> | ||
| 14 | + <% @repositories.each do |repository| %> | ||
| 15 | + <tr> | ||
| 16 | + <td><%= repository.name %></td> | ||
| 17 | + <td><%= link_to 'Show', repository %></td> | ||
| 18 | + <td><%= link_to 'Edit', edit_repository_path(repository) %></td> | ||
| 19 | + <td><%= link_to 'Destroy', repository, method: :delete, data: { confirm: 'Are you sure?' } %></td> | ||
| 20 | + </tr> | ||
| 21 | + <% end %> | ||
| 22 | + </tbody> | ||
| 23 | +</table> | ||
| 24 | + | ||
| 25 | +<br> | ||
| 26 | + | ||
| 27 | +<%= link_to 'New Repository', new_repository_path %> |
| @@ -0,0 +1 @@ | @@ -0,0 +1 @@ | ||
| 1 | +json.extract! @repository, :name, :created_at, :updated_at |
| @@ -0,0 +1,41 @@ | @@ -0,0 +1,41 @@ | ||
| 1 | + development: | ||
| 2 | + adapter: sqlite3 | ||
| 3 | + database: db/development.sqlite3 | ||
| 4 | + pool: 5 | ||
| 5 | + timeout: 5000 | ||
| 6 | + | ||
| 7 | +#development: | ||
| 8 | +# adapter: postgresql | ||
| 9 | +# host: localhost | ||
| 10 | +# encoding: utf8 | ||
| 11 | +# database: mezuro | ||
| 12 | +# username: mezuro | ||
| 13 | +# password: mezuro | ||
| 14 | + | ||
| 15 | + test: | ||
| 16 | + adapter: sqlite3 | ||
| 17 | + database: db/test.sqlite3 | ||
| 18 | + pool: 5 | ||
| 19 | + timeout: 5000 | ||
| 20 | + | ||
| 21 | +# test: | ||
| 22 | +# adapter: postgresql | ||
| 23 | +# host: localhost | ||
| 24 | +# encoding: utf8 | ||
| 25 | +# database: mezuro | ||
| 26 | +# username: mezuro | ||
| 27 | +# password: mezuro | ||
| 28 | + | ||
| 29 | +production: | ||
| 30 | + adapter: sqlite3 | ||
| 31 | + database: db/production.sqlite3 | ||
| 32 | + pool: 5 | ||
| 33 | + timeout: 5000 | ||
| 34 | + | ||
| 35 | +#production: | ||
| 36 | +# adapter: postgresql | ||
| 37 | +# host: localhost | ||
| 38 | +# encoding: utf8 | ||
| 39 | +# database: mezuro | ||
| 40 | +# username: mezuro | ||
| 41 | +# password: mezuro |
config/routes.rb
| 1 | Mezuro::Application.routes.draw do | 1 | Mezuro::Application.routes.draw do |
| 2 | + #resources :repositories | ||
| 3 | + | ||
| 2 | devise_for :users | 4 | devise_for :users |
| 3 | 5 | ||
| 4 | root "home#index" | 6 | root "home#index" |
| 5 | - resources :projects | 7 | + #resources :projects |
| 8 | + | ||
| 9 | + resources :projects do | ||
| 10 | + resources :repositories | ||
| 11 | + end | ||
| 6 | # The priority is based upon order of creation: first created -> highest priority. | 12 | # The priority is based upon order of creation: first created -> highest priority. |
| 7 | # See how all your routes lay out with "rake routes". | 13 | # See how all your routes lay out with "rake routes". |
| 8 | 14 |
| @@ -0,0 +1,62 @@ | @@ -0,0 +1,62 @@ | ||
| 1 | +Mezuro::Application.routes.draw do | ||
| 2 | + resources :repositories | ||
| 3 | + | ||
| 4 | + devise_for :users | ||
| 5 | + | ||
| 6 | + root "home#index" | ||
| 7 | + resources :projects | ||
| 8 | + # The priority is based upon order of creation: first created -> highest priority. | ||
| 9 | + # See how all your routes lay out with "rake routes". | ||
| 10 | + | ||
| 11 | + # You can have the root of your site routed with "root" | ||
| 12 | + # root 'welcome#index' | ||
| 13 | + | ||
| 14 | + # Example of regular route: | ||
| 15 | + # get 'products/:id' => 'catalog#view' | ||
| 16 | + | ||
| 17 | + # Example of named route that can be invoked with purchase_url(id: product.id) | ||
| 18 | + # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase | ||
| 19 | + | ||
| 20 | + # Example resource route (maps HTTP verbs to controller actions automatically): | ||
| 21 | + # resources :products | ||
| 22 | + | ||
| 23 | + # Example resource route with options: | ||
| 24 | + # resources :products do | ||
| 25 | + # member do | ||
| 26 | + # get 'short' | ||
| 27 | + # post 'toggle' | ||
| 28 | + # end | ||
| 29 | + # | ||
| 30 | + # collection do | ||
| 31 | + # get 'sold' | ||
| 32 | + # end | ||
| 33 | + # end | ||
| 34 | + | ||
| 35 | + # Example resource route with sub-resources: | ||
| 36 | + # resources :products do | ||
| 37 | + # resources :comments, :sales | ||
| 38 | + # resource :seller | ||
| 39 | + # end | ||
| 40 | + | ||
| 41 | + # Example resource route with more complex sub-resources: | ||
| 42 | + # resources :products do | ||
| 43 | + # resources :comments | ||
| 44 | + # resources :sales do | ||
| 45 | + # get 'recent', on: :collection | ||
| 46 | + # end | ||
| 47 | + # end | ||
| 48 | + | ||
| 49 | + # Example resource route with concerns: | ||
| 50 | + # concern :toggleable do | ||
| 51 | + # post 'toggle' | ||
| 52 | + # end | ||
| 53 | + # resources :posts, concerns: :toggleable | ||
| 54 | + # resources :photos, concerns: :toggleable | ||
| 55 | + | ||
| 56 | + # Example resource route within a namespace: | ||
| 57 | + # namespace :admin do | ||
| 58 | + # # Directs /admin/products/* to Admin::ProductsController | ||
| 59 | + # # (app/controllers/admin/products_controller.rb) | ||
| 60 | + # resources :products | ||
| 61 | + # end | ||
| 62 | +end |
db/schema.rb
| @@ -16,9 +16,12 @@ ActiveRecord::Schema.define(version: 20130826211404) do | @@ -16,9 +16,12 @@ ActiveRecord::Schema.define(version: 20130826211404) do | ||
| 16 | create_table "project_ownerships", force: true do |t| | 16 | create_table "project_ownerships", force: true do |t| |
| 17 | t.integer "user_id" | 17 | t.integer "user_id" |
| 18 | t.integer "project_id" | 18 | t.integer "project_id" |
| 19 | + | ||
| 20 | + create_table "repositories", force: true do |t| | ||
| 21 | + t.string "name" | ||
| 19 | t.datetime "created_at" | 22 | t.datetime "created_at" |
| 20 | t.datetime "updated_at" | 23 | t.datetime "updated_at" |
| 21 | - end | 24 | + |
| 22 | 25 | ||
| 23 | create_table "users", force: true do |t| | 26 | create_table "users", force: true do |t| |
| 24 | t.string "name", default: "", null: false | 27 | t.string "name", default: "", null: false |
| @@ -0,0 +1,160 @@ | @@ -0,0 +1,160 @@ | ||
| 1 | +require 'spec_helper' | ||
| 2 | + | ||
| 3 | +# This spec was generated by rspec-rails when you ran the scaffold generator. | ||
| 4 | +# It demonstrates how one might use RSpec to specify the controller code that | ||
| 5 | +# was generated by Rails when you ran the scaffold generator. | ||
| 6 | +# | ||
| 7 | +# It assumes that the implementation code is generated by the rails scaffold | ||
| 8 | +# generator. If you are using any extension libraries to generate different | ||
| 9 | +# controller code, this generated spec may or may not pass. | ||
| 10 | +# | ||
| 11 | +# It only uses APIs available in rails and/or rspec-rails. There are a number | ||
| 12 | +# of tools you can use to make these specs even more expressive, but we're | ||
| 13 | +# sticking to rails and rspec-rails APIs to keep things simple and stable. | ||
| 14 | +# | ||
| 15 | +# Compared to earlier versions of this generator, there is very limited use of | ||
| 16 | +# stubs and message expectations in this spec. Stubs are only used when there | ||
| 17 | +# is no simpler way to get a handle on the object needed for the example. | ||
| 18 | +# Message expectations are only used when there is no simpler way to specify | ||
| 19 | +# that an instance is receiving a specific message. | ||
| 20 | + | ||
| 21 | +describe RepositoriesController do | ||
| 22 | + | ||
| 23 | + # This should return the minimal set of attributes required to create a valid | ||
| 24 | + # Repository. As you add validations to Repository, be sure to | ||
| 25 | + # adjust the attributes here as well. | ||
| 26 | + let(:valid_attributes) { { "name" => "MyString" } } | ||
| 27 | + | ||
| 28 | + # This should return the minimal set of values that should be in the session | ||
| 29 | + # in order to pass any filters (e.g. authentication) defined in | ||
| 30 | + # RepositoriesController. Be sure to keep this updated too. | ||
| 31 | + let(:valid_session) { {} } | ||
| 32 | + | ||
| 33 | + describe "GET index" do | ||
| 34 | + it "assigns all repositories as @repositories" do | ||
| 35 | + repository = Repository.create! valid_attributes | ||
| 36 | + get :index, {}, valid_session | ||
| 37 | + assigns(:repositories).should eq([repository]) | ||
| 38 | + end | ||
| 39 | + end | ||
| 40 | + | ||
| 41 | + describe "GET show" do | ||
| 42 | + it "assigns the requested repository as @repository" do | ||
| 43 | + repository = Repository.create! valid_attributes | ||
| 44 | + get :show, {:id => repository.to_param}, valid_session | ||
| 45 | + assigns(:repository).should eq(repository) | ||
| 46 | + end | ||
| 47 | + end | ||
| 48 | + | ||
| 49 | + describe "GET new" do | ||
| 50 | + it "assigns a new repository as @repository" do | ||
| 51 | + get :new, {}, valid_session | ||
| 52 | + assigns(:repository).should be_a_new(Repository) | ||
| 53 | + end | ||
| 54 | + end | ||
| 55 | + | ||
| 56 | + describe "GET edit" do | ||
| 57 | + it "assigns the requested repository as @repository" do | ||
| 58 | + repository = Repository.create! valid_attributes | ||
| 59 | + get :edit, {:id => repository.to_param}, valid_session | ||
| 60 | + assigns(:repository).should eq(repository) | ||
| 61 | + end | ||
| 62 | + end | ||
| 63 | + | ||
| 64 | + describe "POST create" do | ||
| 65 | + describe "with valid params" do | ||
| 66 | + it "creates a new Repository" do | ||
| 67 | + expect { | ||
| 68 | + post :create, {:repository => valid_attributes}, valid_session | ||
| 69 | + }.to change(Repository, :count).by(1) | ||
| 70 | + end | ||
| 71 | + | ||
| 72 | + it "assigns a newly created repository as @repository" do | ||
| 73 | + post :create, {:repository => valid_attributes}, valid_session | ||
| 74 | + assigns(:repository).should be_a(Repository) | ||
| 75 | + assigns(:repository).should be_persisted | ||
| 76 | + end | ||
| 77 | + | ||
| 78 | + it "redirects to the created repository" do | ||
| 79 | + post :create, {:repository => valid_attributes}, valid_session | ||
| 80 | + response.should redirect_to(Repository.last) | ||
| 81 | + end | ||
| 82 | + end | ||
| 83 | + | ||
| 84 | + describe "with invalid params" do | ||
| 85 | + it "assigns a newly created but unsaved repository as @repository" do | ||
| 86 | + # Trigger the behavior that occurs when invalid params are submitted | ||
| 87 | + Repository.any_instance.stub(:save).and_return(false) | ||
| 88 | + post :create, {:repository => { "name" => "invalid value" }}, valid_session | ||
| 89 | + assigns(:repository).should be_a_new(Repository) | ||
| 90 | + end | ||
| 91 | + | ||
| 92 | + it "re-renders the 'new' template" do | ||
| 93 | + # Trigger the behavior that occurs when invalid params are submitted | ||
| 94 | + Repository.any_instance.stub(:save).and_return(false) | ||
| 95 | + post :create, {:repository => { "name" => "invalid value" }}, valid_session | ||
| 96 | + response.should render_template("new") | ||
| 97 | + end | ||
| 98 | + end | ||
| 99 | + end | ||
| 100 | + | ||
| 101 | + describe "PUT update" do | ||
| 102 | + describe "with valid params" do | ||
| 103 | + it "updates the requested repository" do | ||
| 104 | + repository = Repository.create! valid_attributes | ||
| 105 | + # Assuming there are no other repositories in the database, this | ||
| 106 | + # specifies that the Repository created on the previous line | ||
| 107 | + # receives the :update_attributes message with whatever params are | ||
| 108 | + # submitted in the request. | ||
| 109 | + Repository.any_instance.should_receive(:update).with({ "name" => "MyString" }) | ||
| 110 | + put :update, {:id => repository.to_param, :repository => { "name" => "MyString" }}, valid_session | ||
| 111 | + end | ||
| 112 | + | ||
| 113 | + it "assigns the requested repository as @repository" do | ||
| 114 | + repository = Repository.create! valid_attributes | ||
| 115 | + put :update, {:id => repository.to_param, :repository => valid_attributes}, valid_session | ||
| 116 | + assigns(:repository).should eq(repository) | ||
| 117 | + end | ||
| 118 | + | ||
| 119 | + it "redirects to the repository" do | ||
| 120 | + repository = Repository.create! valid_attributes | ||
| 121 | + put :update, {:id => repository.to_param, :repository => valid_attributes}, valid_session | ||
| 122 | + response.should redirect_to(repository) | ||
| 123 | + end | ||
| 124 | + end | ||
| 125 | + | ||
| 126 | + describe "with invalid params" do | ||
| 127 | + it "assigns the repository as @repository" do | ||
| 128 | + repository = Repository.create! valid_attributes | ||
| 129 | + # Trigger the behavior that occurs when invalid params are submitted | ||
| 130 | + Repository.any_instance.stub(:save).and_return(false) | ||
| 131 | + put :update, {:id => repository.to_param, :repository => { "name" => "invalid value" }}, valid_session | ||
| 132 | + assigns(:repository).should eq(repository) | ||
| 133 | + end | ||
| 134 | + | ||
| 135 | + it "re-renders the 'edit' template" do | ||
| 136 | + repository = Repository.create! valid_attributes | ||
| 137 | + # Trigger the behavior that occurs when invalid params are submitted | ||
| 138 | + Repository.any_instance.stub(:save).and_return(false) | ||
| 139 | + put :update, {:id => repository.to_param, :repository => { "name" => "invalid value" }}, valid_session | ||
| 140 | + response.should render_template("edit") | ||
| 141 | + end | ||
| 142 | + end | ||
| 143 | + end | ||
| 144 | + | ||
| 145 | + describe "DELETE destroy" do | ||
| 146 | + it "destroys the requested repository" do | ||
| 147 | + repository = Repository.create! valid_attributes | ||
| 148 | + expect { | ||
| 149 | + delete :destroy, {:id => repository.to_param}, valid_session | ||
| 150 | + }.to change(Repository, :count).by(-1) | ||
| 151 | + end | ||
| 152 | + | ||
| 153 | + it "redirects to the repositories list" do | ||
| 154 | + repository = Repository.create! valid_attributes | ||
| 155 | + delete :destroy, {:id => repository.to_param}, valid_session | ||
| 156 | + response.should redirect_to(repositories_url) | ||
| 157 | + end | ||
| 158 | + end | ||
| 159 | + | ||
| 160 | +end |
| @@ -0,0 +1,15 @@ | @@ -0,0 +1,15 @@ | ||
| 1 | +require 'spec_helper' | ||
| 2 | + | ||
| 3 | +# Specs in this file have access to a helper object that includes | ||
| 4 | +# the RepositoriesHelper. For example: | ||
| 5 | +# | ||
| 6 | +# describe RepositoriesHelper do | ||
| 7 | +# describe "string concat" do | ||
| 8 | +# it "concats two strings with spaces" do | ||
| 9 | +# expect(helper.concat_strings("this","that")).to eq("this that") | ||
| 10 | +# end | ||
| 11 | +# end | ||
| 12 | +# end | ||
| 13 | +describe RepositoriesHelper do | ||
| 14 | + pending "add some examples to (or delete) #{__FILE__}" | ||
| 15 | +end |
| @@ -0,0 +1,11 @@ | @@ -0,0 +1,11 @@ | ||
| 1 | +require 'spec_helper' | ||
| 2 | + | ||
| 3 | +describe "Repositories" do | ||
| 4 | + describe "GET /repositories" do | ||
| 5 | + it "works! (now write some real specs)" do | ||
| 6 | + # Run the generator again with the --webrat flag if you want to use webrat methods/matchers | ||
| 7 | + get repositories_path | ||
| 8 | + response.status.should be(200) | ||
| 9 | + end | ||
| 10 | + end | ||
| 11 | +end |
| @@ -0,0 +1,35 @@ | @@ -0,0 +1,35 @@ | ||
| 1 | +require "spec_helper" | ||
| 2 | + | ||
| 3 | +describe RepositoriesController do | ||
| 4 | + describe "routing" do | ||
| 5 | + | ||
| 6 | + it "routes to #index" do | ||
| 7 | + get("/repositories").should route_to("repositories#index") | ||
| 8 | + end | ||
| 9 | + | ||
| 10 | + it "routes to #new" do | ||
| 11 | + get("/repositories/new").should route_to("repositories#new") | ||
| 12 | + end | ||
| 13 | + | ||
| 14 | + it "routes to #show" do | ||
| 15 | + get("/repositories/1").should route_to("repositories#show", :id => "1") | ||
| 16 | + end | ||
| 17 | + | ||
| 18 | + it "routes to #edit" do | ||
| 19 | + get("/repositories/1/edit").should route_to("repositories#edit", :id => "1") | ||
| 20 | + end | ||
| 21 | + | ||
| 22 | + it "routes to #create" do | ||
| 23 | + post("/repositories").should route_to("repositories#create") | ||
| 24 | + end | ||
| 25 | + | ||
| 26 | + it "routes to #update" do | ||
| 27 | + put("/repositories/1").should route_to("repositories#update", :id => "1") | ||
| 28 | + end | ||
| 29 | + | ||
| 30 | + it "routes to #destroy" do | ||
| 31 | + delete("/repositories/1").should route_to("repositories#destroy", :id => "1") | ||
| 32 | + end | ||
| 33 | + | ||
| 34 | + end | ||
| 35 | +end |
| @@ -0,0 +1,18 @@ | @@ -0,0 +1,18 @@ | ||
| 1 | +require 'spec_helper' | ||
| 2 | + | ||
| 3 | +describe "repositories/edit" do | ||
| 4 | + before(:each) do | ||
| 5 | + @repository = assign(:repository, stub_model(Repository, | ||
| 6 | + :name => "MyString" | ||
| 7 | + )) | ||
| 8 | + end | ||
| 9 | + | ||
| 10 | + it "renders the edit repository form" do | ||
| 11 | + render | ||
| 12 | + | ||
| 13 | + # Run the generator again with the --webrat flag if you want to use webrat matchers | ||
| 14 | + assert_select "form[action=?][method=?]", repository_path(@repository), "post" do | ||
| 15 | + assert_select "input#repository_name[name=?]", "repository[name]" | ||
| 16 | + end | ||
| 17 | + end | ||
| 18 | +end |
| @@ -0,0 +1,20 @@ | @@ -0,0 +1,20 @@ | ||
| 1 | +require 'spec_helper' | ||
| 2 | + | ||
| 3 | +describe "repositories/index" do | ||
| 4 | + before(:each) do | ||
| 5 | + assign(:repositories, [ | ||
| 6 | + stub_model(Repository, | ||
| 7 | + :name => "Name" | ||
| 8 | + ), | ||
| 9 | + stub_model(Repository, | ||
| 10 | + :name => "Name" | ||
| 11 | + ) | ||
| 12 | + ]) | ||
| 13 | + end | ||
| 14 | + | ||
| 15 | + it "renders a list of repositories" do | ||
| 16 | + render | ||
| 17 | + # Run the generator again with the --webrat flag if you want to use webrat matchers | ||
| 18 | + assert_select "tr>td", :text => "Name".to_s, :count => 2 | ||
| 19 | + end | ||
| 20 | +end |
| @@ -0,0 +1,18 @@ | @@ -0,0 +1,18 @@ | ||
| 1 | +require 'spec_helper' | ||
| 2 | + | ||
| 3 | +describe "repositories/new" do | ||
| 4 | + before(:each) do | ||
| 5 | + assign(:repository, stub_model(Repository, | ||
| 6 | + :name => "MyString" | ||
| 7 | + ).as_new_record) | ||
| 8 | + end | ||
| 9 | + | ||
| 10 | + it "renders new repository form" do | ||
| 11 | + render | ||
| 12 | + | ||
| 13 | + # Run the generator again with the --webrat flag if you want to use webrat matchers | ||
| 14 | + assert_select "form[action=?][method=?]", repositories_path, "post" do | ||
| 15 | + assert_select "input#repository_name[name=?]", "repository[name]" | ||
| 16 | + end | ||
| 17 | + end | ||
| 18 | +end |
| @@ -0,0 +1,15 @@ | @@ -0,0 +1,15 @@ | ||
| 1 | +require 'spec_helper' | ||
| 2 | + | ||
| 3 | +describe "repositories/show" do | ||
| 4 | + before(:each) do | ||
| 5 | + @repository = assign(:repository, stub_model(Repository, | ||
| 6 | + :name => "Name" | ||
| 7 | + )) | ||
| 8 | + end | ||
| 9 | + | ||
| 10 | + it "renders attributes in <p>" do | ||
| 11 | + render | ||
| 12 | + # Run the generator again with the --webrat flag if you want to use webrat matchers | ||
| 13 | + rendered.should match(/Name/) | ||
| 14 | + end | ||
| 15 | +end |