Group entity. Group has many projects
This commit is contained in:
parent
2e1c3c52bc
commit
fa3ae24ca7
8 changed files with 116 additions and 1 deletions
22
app/models/group.rb
Normal file
22
app/models/group.rb
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
# == Schema Information
|
||||||
|
#
|
||||||
|
# Table name: groups
|
||||||
|
#
|
||||||
|
# id :integer not null, primary key
|
||||||
|
# name :string(255) not null
|
||||||
|
# code :string(255) not null
|
||||||
|
# owner_id :integer not null
|
||||||
|
# created_at :datetime not null
|
||||||
|
# updated_at :datetime not null
|
||||||
|
#
|
||||||
|
|
||||||
|
class Group < ActiveRecord::Base
|
||||||
|
attr_accessible :code, :name, :owner_id
|
||||||
|
|
||||||
|
has_many :projects
|
||||||
|
belongs_to :owner, class_name: "User"
|
||||||
|
|
||||||
|
validates :name, presence: true, uniqueness: true
|
||||||
|
validates :code, presence: true, uniqueness: true
|
||||||
|
validates :owner_id, presence: true
|
||||||
|
end
|
|
@ -11,6 +11,7 @@ class Project < ActiveRecord::Base
|
||||||
attr_accessor :error_code
|
attr_accessor :error_code
|
||||||
|
|
||||||
# Relations
|
# Relations
|
||||||
|
belongs_to :group
|
||||||
belongs_to :owner, class_name: "User"
|
belongs_to :owner, class_name: "User"
|
||||||
has_many :users, through: :users_projects
|
has_many :users, through: :users_projects
|
||||||
has_many :events, dependent: :destroy
|
has_many :events, dependent: :destroy
|
||||||
|
@ -173,4 +174,6 @@ end
|
||||||
# wall_enabled :boolean default(TRUE), not null
|
# wall_enabled :boolean default(TRUE), not null
|
||||||
# merge_requests_enabled :boolean default(TRUE), not null
|
# merge_requests_enabled :boolean default(TRUE), not null
|
||||||
# wiki_enabled :boolean default(TRUE), not null
|
# wiki_enabled :boolean default(TRUE), not null
|
||||||
|
# group_id :integer
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
11
db/migrate/20121002150926_create_groups.rb
Normal file
11
db/migrate/20121002150926_create_groups.rb
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
class CreateGroups < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
create_table :groups do |t|
|
||||||
|
t.string :name, null: false
|
||||||
|
t.string :code, null: false
|
||||||
|
t.integer :owner_id, null: false
|
||||||
|
|
||||||
|
t.timestamps
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
5
db/migrate/20121002151033_add_group_id_to_project.rb
Normal file
5
db/migrate/20121002151033_add_group_id_to_project.rb
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
class AddGroupIdToProject < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
add_column :projects, :group_id, :integer
|
||||||
|
end
|
||||||
|
end
|
11
db/schema.rb
11
db/schema.rb
|
@ -11,7 +11,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended to check this file into your version control system.
|
# It's strongly recommended to check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema.define(:version => 20120905043334) do
|
ActiveRecord::Schema.define(:version => 20121002151033) do
|
||||||
|
|
||||||
create_table "events", :force => true do |t|
|
create_table "events", :force => true do |t|
|
||||||
t.string "target_type"
|
t.string "target_type"
|
||||||
|
@ -25,6 +25,14 @@ ActiveRecord::Schema.define(:version => 20120905043334) do
|
||||||
t.integer "author_id"
|
t.integer "author_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
create_table "groups", :force => true do |t|
|
||||||
|
t.string "name", :null => false
|
||||||
|
t.string "code", :null => false
|
||||||
|
t.integer "owner_id", :null => false
|
||||||
|
t.datetime "created_at", :null => false
|
||||||
|
t.datetime "updated_at", :null => false
|
||||||
|
end
|
||||||
|
|
||||||
create_table "issues", :force => true do |t|
|
create_table "issues", :force => true do |t|
|
||||||
t.string "title"
|
t.string "title"
|
||||||
t.integer "assignee_id"
|
t.integer "assignee_id"
|
||||||
|
@ -108,6 +116,7 @@ ActiveRecord::Schema.define(:version => 20120905043334) do
|
||||||
t.boolean "wall_enabled", :default => true, :null => false
|
t.boolean "wall_enabled", :default => true, :null => false
|
||||||
t.boolean "merge_requests_enabled", :default => true, :null => false
|
t.boolean "merge_requests_enabled", :default => true, :null => false
|
||||||
t.boolean "wiki_enabled", :default => true, :null => false
|
t.boolean "wiki_enabled", :default => true, :null => false
|
||||||
|
t.integer "group_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "protected_branches", :force => true do |t|
|
create_table "protected_branches", :force => true do |t|
|
||||||
|
|
21
spec/factories/groups.rb
Normal file
21
spec/factories/groups.rb
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
# == Schema Information
|
||||||
|
#
|
||||||
|
# Table name: groups
|
||||||
|
#
|
||||||
|
# id :integer not null, primary key
|
||||||
|
# name :string(255) not null
|
||||||
|
# code :string(255) not null
|
||||||
|
# owner_id :integer not null
|
||||||
|
# created_at :datetime not null
|
||||||
|
# updated_at :datetime not null
|
||||||
|
#
|
||||||
|
|
||||||
|
# Read about factories at https://github.com/thoughtbot/factory_girl
|
||||||
|
|
||||||
|
FactoryGirl.define do
|
||||||
|
factory :group do
|
||||||
|
name "MyString"
|
||||||
|
code "MyString"
|
||||||
|
owner_id 1
|
||||||
|
end
|
||||||
|
end
|
22
spec/models/group_spec.rb
Normal file
22
spec/models/group_spec.rb
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
# == Schema Information
|
||||||
|
#
|
||||||
|
# Table name: groups
|
||||||
|
#
|
||||||
|
# id :integer not null, primary key
|
||||||
|
# name :string(255) not null
|
||||||
|
# code :string(255) not null
|
||||||
|
# owner_id :integer not null
|
||||||
|
# created_at :datetime not null
|
||||||
|
# updated_at :datetime not null
|
||||||
|
#
|
||||||
|
|
||||||
|
require 'spec_helper'
|
||||||
|
|
||||||
|
describe Group do
|
||||||
|
it { should have_many :projects }
|
||||||
|
it { should validate_presence_of :name }
|
||||||
|
it { should validate_uniqueness_of(:name) }
|
||||||
|
it { should validate_presence_of :code }
|
||||||
|
it { should validate_uniqueness_of(:code) }
|
||||||
|
it { should validate_presence_of :owner_id }
|
||||||
|
end
|
|
@ -1,7 +1,29 @@
|
||||||
|
# == Schema Information
|
||||||
|
#
|
||||||
|
# Table name: projects
|
||||||
|
#
|
||||||
|
# id :integer not null, primary key
|
||||||
|
# name :string(255)
|
||||||
|
# path :string(255)
|
||||||
|
# description :text
|
||||||
|
# created_at :datetime not null
|
||||||
|
# updated_at :datetime not null
|
||||||
|
# private_flag :boolean default(TRUE), not null
|
||||||
|
# code :string(255)
|
||||||
|
# owner_id :integer
|
||||||
|
# default_branch :string(255)
|
||||||
|
# issues_enabled :boolean default(TRUE), not null
|
||||||
|
# wall_enabled :boolean default(TRUE), not null
|
||||||
|
# merge_requests_enabled :boolean default(TRUE), not null
|
||||||
|
# wiki_enabled :boolean default(TRUE), not null
|
||||||
|
# group_id :integer
|
||||||
|
#
|
||||||
|
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Project do
|
describe Project do
|
||||||
describe "Associations" do
|
describe "Associations" do
|
||||||
|
it { should belong_to(:group) }
|
||||||
it { should belong_to(:owner).class_name('User') }
|
it { should belong_to(:owner).class_name('User') }
|
||||||
it { should have_many(:users) }
|
it { should have_many(:users) }
|
||||||
it { should have_many(:events).dependent(:destroy) }
|
it { should have_many(:events).dependent(:destroy) }
|
||||||
|
|
Loading…
Reference in a new issue