Commit fa3ae24ca7a11f3d87c8838cf05a95dfecfa4c5c

Authored by Dmitriy Zaporozhets
1 parent 2e1c3c52

Group entity. Group has many projects

app/models/group.rb 0 → 100644
@@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
  1 +# == Schema Information
  2 +#
  3 +# Table name: groups
  4 +#
  5 +# id :integer not null, primary key
  6 +# name :string(255) not null
  7 +# code :string(255) not null
  8 +# owner_id :integer not null
  9 +# created_at :datetime not null
  10 +# updated_at :datetime not null
  11 +#
  12 +
  13 +class Group < ActiveRecord::Base
  14 + attr_accessible :code, :name, :owner_id
  15 +
  16 + has_many :projects
  17 + belongs_to :owner, class_name: "User"
  18 +
  19 + validates :name, presence: true, uniqueness: true
  20 + validates :code, presence: true, uniqueness: true
  21 + validates :owner_id, presence: true
  22 +end
app/models/project.rb
@@ -11,6 +11,7 @@ class Project &lt; ActiveRecord::Base @@ -11,6 +11,7 @@ class Project &lt; ActiveRecord::Base
11 attr_accessor :error_code 11 attr_accessor :error_code
12 12
13 # Relations 13 # Relations
  14 + belongs_to :group
14 belongs_to :owner, class_name: "User" 15 belongs_to :owner, class_name: "User"
15 has_many :users, through: :users_projects 16 has_many :users, through: :users_projects
16 has_many :events, dependent: :destroy 17 has_many :events, dependent: :destroy
@@ -173,4 +174,6 @@ end @@ -173,4 +174,6 @@ end
173 # wall_enabled :boolean default(TRUE), not null 174 # wall_enabled :boolean default(TRUE), not null
174 # merge_requests_enabled :boolean default(TRUE), not null 175 # merge_requests_enabled :boolean default(TRUE), not null
175 # wiki_enabled :boolean default(TRUE), not null 176 # wiki_enabled :boolean default(TRUE), not null
  177 +# group_id :integer
176 # 178 #
  179 +
db/migrate/20121002150926_create_groups.rb 0 → 100644
@@ -0,0 +1,11 @@ @@ -0,0 +1,11 @@
  1 +class CreateGroups < ActiveRecord::Migration
  2 + def change
  3 + create_table :groups do |t|
  4 + t.string :name, null: false
  5 + t.string :code, null: false
  6 + t.integer :owner_id, null: false
  7 +
  8 + t.timestamps
  9 + end
  10 + end
  11 +end
db/migrate/20121002151033_add_group_id_to_project.rb 0 → 100644
@@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
  1 +class AddGroupIdToProject < ActiveRecord::Migration
  2 + def change
  3 + add_column :projects, :group_id, :integer
  4 + end
  5 +end
@@ -11,7 +11,7 @@ @@ -11,7 +11,7 @@
11 # 11 #
12 # It's strongly recommended to check this file into your version control system. 12 # It's strongly recommended to check this file into your version control system.
13 13
14 -ActiveRecord::Schema.define(:version => 20120905043334) do 14 +ActiveRecord::Schema.define(:version => 20121002151033) do
15 15
16 create_table "events", :force => true do |t| 16 create_table "events", :force => true do |t|
17 t.string "target_type" 17 t.string "target_type"
@@ -25,6 +25,14 @@ ActiveRecord::Schema.define(:version =&gt; 20120905043334) do @@ -25,6 +25,14 @@ ActiveRecord::Schema.define(:version =&gt; 20120905043334) do
25 t.integer "author_id" 25 t.integer "author_id"
26 end 26 end
27 27
  28 + create_table "groups", :force => true do |t|
  29 + t.string "name", :null => false
  30 + t.string "code", :null => false
  31 + t.integer "owner_id", :null => false
  32 + t.datetime "created_at", :null => false
  33 + t.datetime "updated_at", :null => false
  34 + end
  35 +
28 create_table "issues", :force => true do |t| 36 create_table "issues", :force => true do |t|
29 t.string "title" 37 t.string "title"
30 t.integer "assignee_id" 38 t.integer "assignee_id"
@@ -108,6 +116,7 @@ ActiveRecord::Schema.define(:version =&gt; 20120905043334) do @@ -108,6 +116,7 @@ ActiveRecord::Schema.define(:version =&gt; 20120905043334) do
108 t.boolean "wall_enabled", :default => true, :null => false 116 t.boolean "wall_enabled", :default => true, :null => false
109 t.boolean "merge_requests_enabled", :default => true, :null => false 117 t.boolean "merge_requests_enabled", :default => true, :null => false
110 t.boolean "wiki_enabled", :default => true, :null => false 118 t.boolean "wiki_enabled", :default => true, :null => false
  119 + t.integer "group_id"
111 end 120 end
112 121
113 create_table "protected_branches", :force => true do |t| 122 create_table "protected_branches", :force => true do |t|
spec/factories/groups.rb 0 → 100644
@@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
  1 +# == Schema Information
  2 +#
  3 +# Table name: groups
  4 +#
  5 +# id :integer not null, primary key
  6 +# name :string(255) not null
  7 +# code :string(255) not null
  8 +# owner_id :integer not null
  9 +# created_at :datetime not null
  10 +# updated_at :datetime not null
  11 +#
  12 +
  13 +# Read about factories at https://github.com/thoughtbot/factory_girl
  14 +
  15 +FactoryGirl.define do
  16 + factory :group do
  17 + name "MyString"
  18 + code "MyString"
  19 + owner_id 1
  20 + end
  21 +end
spec/models/group_spec.rb 0 → 100644
@@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
  1 +# == Schema Information
  2 +#
  3 +# Table name: groups
  4 +#
  5 +# id :integer not null, primary key
  6 +# name :string(255) not null
  7 +# code :string(255) not null
  8 +# owner_id :integer not null
  9 +# created_at :datetime not null
  10 +# updated_at :datetime not null
  11 +#
  12 +
  13 +require 'spec_helper'
  14 +
  15 +describe Group do
  16 + it { should have_many :projects }
  17 + it { should validate_presence_of :name }
  18 + it { should validate_uniqueness_of(:name) }
  19 + it { should validate_presence_of :code }
  20 + it { should validate_uniqueness_of(:code) }
  21 + it { should validate_presence_of :owner_id }
  22 +end
spec/models/project_spec.rb
  1 +# == Schema Information
  2 +#
  3 +# Table name: projects
  4 +#
  5 +# id :integer not null, primary key
  6 +# name :string(255)
  7 +# path :string(255)
  8 +# description :text
  9 +# created_at :datetime not null
  10 +# updated_at :datetime not null
  11 +# private_flag :boolean default(TRUE), not null
  12 +# code :string(255)
  13 +# owner_id :integer
  14 +# default_branch :string(255)
  15 +# issues_enabled :boolean default(TRUE), not null
  16 +# wall_enabled :boolean default(TRUE), not null
  17 +# merge_requests_enabled :boolean default(TRUE), not null
  18 +# wiki_enabled :boolean default(TRUE), not null
  19 +# group_id :integer
  20 +#
  21 +
1 require 'spec_helper' 22 require 'spec_helper'
2 23
3 describe Project do 24 describe Project do
4 describe "Associations" do 25 describe "Associations" do
  26 + it { should belong_to(:group) }
5 it { should belong_to(:owner).class_name('User') } 27 it { should belong_to(:owner).class_name('User') }
6 it { should have_many(:users) } 28 it { should have_many(:users) }
7 it { should have_many(:events).dependent(:destroy) } 29 it { should have_many(:events).dependent(:destroy) }