diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-06-04 18:36:22 +0300 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2013-06-04 18:36:22 +0300 |
commit | bcc4e4dc7ed0740e92a61fc82c3c669f8f2d8d30 (patch) | |
tree | 1df3e2d68cd524af4dce107b2e4227778bb3945d /app/models | |
parent | 211e435ade337c968fab11c52427c172adcec99a (diff) | |
parent | e0af7cefb4c92b474d14116b40927d70c13e78cc (diff) | |
download | gitlab-ce-bcc4e4dc7ed0740e92a61fc82c3c669f8f2d8d30.tar.gz |
Merge branch 'gist' of https://github.com/Andrew8xx8/gitlabhq into Andrew8xx8-gist
Conflicts:
Gemfile.lock
app/models/ability.rb
app/models/project.rb
app/views/snippets/_form.html.haml
db/schema.rb
features/steps/shared/paths.rb
spec/factories.rb
spec/models/project_spec.rb
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/ability.rb | 14 | ||||
-rw-r--r-- | app/models/event.rb | 4 | ||||
-rw-r--r-- | app/models/note.rb | 6 | ||||
-rw-r--r-- | app/models/personal_snippet.rb | 18 | ||||
-rw-r--r-- | app/models/project.rb | 2 | ||||
-rw-r--r-- | app/models/project_snippet.rb | 27 | ||||
-rw-r--r-- | app/models/snippet.rb | 14 | ||||
-rw-r--r-- | app/models/user.rb | 1 |
8 files changed, 72 insertions, 14 deletions
diff --git a/app/models/ability.rb b/app/models/ability.rb index 8f0a6141b75..24b6ad182b4 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -7,7 +7,8 @@ class Ability when "Project" then project_abilities(user, subject) when "Issue" then issue_abilities(user, subject) when "Note" then note_abilities(user, subject) - when "Snippet" then snippet_abilities(user, subject) + when "ProjectSnippet" then project_snippet_abilities(user, subject) + when "PersonalSnippet" then personal_snippet_abilities(user, subject) when "MergeRequest" then merge_request_abilities(user, subject) when "Group", "Namespace" then group_abilities(user, subject) when "UserTeam" then user_team_abilities(user, subject) @@ -54,7 +55,7 @@ class Ability :read_wiki, :read_issue, :read_milestone, - :read_snippet, + :read_project_snippet, :read_team_member, :read_merge_request, :read_note, @@ -67,8 +68,8 @@ class Ability def project_report_rules project_guest_rules + [ :download_code, - :write_snippet, :fork_project + :write_project_snippet ] end @@ -84,11 +85,11 @@ class Ability project_dev_rules + [ :push_code_to_protected_branches, :modify_issue, - :modify_snippet, + :modify_project_snippet, :modify_merge_request, :admin_issue, :admin_milestone, - :admin_snippet, + :admin_project_snippet, :admin_team_member, :admin_merge_request, :admin_note, @@ -135,8 +136,7 @@ class Ability rules.flatten end - - [:issue, :note, :snippet, :merge_request].each do |name| + [:issue, :note, :project_snippet, :personal_snippet, :merge_request].each do |name| define_method "#{name}_abilities" do |user, subject| if subject.author == user [ diff --git a/app/models/event.rb b/app/models/event.rb index 97f96ac8f9e..4b75087dc2a 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -241,6 +241,10 @@ class Event < ActiveRecord::Base target.noteable_type == "Commit" end + def note_project_snippet? + target.noteable_type == "Snippet" + end + def note_target target.noteable end diff --git a/app/models/note.rb b/app/models/note.rb index 7b7e6e99df4..9a3481faaaa 100644 --- a/app/models/note.rb +++ b/app/models/note.rb @@ -159,4 +159,10 @@ class Note < ActiveRecord::Base "wall" end end + + # FIXME: Hack for polymorphic associations with STI + # For more information wisit http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#label-Polymorphic+Associations + def noteable_type=(sType) + super(sType.to_s.classify.constantize.base_class.to_s) + end end diff --git a/app/models/personal_snippet.rb b/app/models/personal_snippet.rb new file mode 100644 index 00000000000..d581c6092aa --- /dev/null +++ b/app/models/personal_snippet.rb @@ -0,0 +1,18 @@ +# == Schema Information +# +# Table name: snippets +# +# id :integer not null, primary key +# title :string(255) +# content :text +# author_id :integer not null +# project_id :integer not null +# created_at :datetime not null +# updated_at :datetime not null +# file_name :string(255) +# expires_at :datetime +# type :string(255) +# private :boolean + +class PersonalSnippet < Snippet +end diff --git a/app/models/project.rb b/app/models/project.rb index 9147aed3d40..8cb290f6601 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -57,7 +57,7 @@ class Project < ActiveRecord::Base has_many :milestones, dependent: :destroy has_many :users_projects, dependent: :destroy has_many :notes, dependent: :destroy - has_many :snippets, dependent: :destroy + has_many :snippets, dependent: :destroy, class_name: "ProjectSnippet" has_many :hooks, dependent: :destroy, class_name: "ProjectHook" has_many :protected_branches, dependent: :destroy has_many :user_team_project_relationships, dependent: :destroy diff --git a/app/models/project_snippet.rb b/app/models/project_snippet.rb new file mode 100644 index 00000000000..a86f2e7a32f --- /dev/null +++ b/app/models/project_snippet.rb @@ -0,0 +1,27 @@ +# == Schema Information +# +# Table name: snippets +# +# id :integer not null, primary key +# title :string(255) +# content :text +# author_id :integer not null +# project_id :integer not null +# created_at :datetime not null +# updated_at :datetime not null +# file_name :string(255) +# expires_at :datetime +# type :string(255) +# private :boolean + +class ProjectSnippet < Snippet + belongs_to :project + belongs_to :author, class_name: "User" + + validates :project, presence: true + + # Scopes + scope :fresh, -> { order("created_at DESC") } + scope :non_expired, -> { where(["expires_at IS NULL OR expires_at > ?", Time.current]) } + scope :expired, -> { where(["expires_at IS NOT NULL AND expires_at < ?", Time.current]) } +end diff --git a/app/models/snippet.rb b/app/models/snippet.rb index c4ee35e0556..1b37ffe8339 100644 --- a/app/models/snippet.rb +++ b/app/models/snippet.rb @@ -11,29 +11,31 @@ # updated_at :datetime not null # file_name :string(255) # expires_at :datetime -# +# type :string(255) +# private :boolean class Snippet < ActiveRecord::Base include Linguist::BlobHelper - attr_accessible :title, :content, :file_name, :expires_at + attr_accessible :title, :content, :file_name, :expires_at, :private - belongs_to :project belongs_to :author, class_name: "User" + has_many :notes, as: :noteable, dependent: :destroy delegate :name, :email, to: :author, prefix: true, allow_nil: true validates :author, presence: true - validates :project, presence: true validates :title, presence: true, length: { within: 0..255 } validates :file_name, presence: true, length: { within: 0..255 } validates :content, presence: true # Scopes - scope :fresh, -> { order("created_at DESC") } - scope :non_expired, -> { where(["expires_at IS NULL OR expires_at > ?", Time.current]) } + scope :public, -> { where(private: false) } + scope :private, -> { where(private: true) } + scope :fresh, -> { order("created_at DESC") } scope :expired, -> { where(["expires_at IS NOT NULL AND expires_at < ?", Time.current]) } + scope :non_expired, -> { where(["expires_at IS NULL OR expires_at > ?", Time.current]) } def self.content_types [ diff --git a/app/models/user.rb b/app/models/user.rb index 82a49c8dcca..0aed0ada757 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -78,6 +78,7 @@ class User < ActiveRecord::Base has_many :team_projects, through: :user_team_project_relationships # Projects + has_many :snippets, dependent: :destroy, foreign_key: :author_id, class_name: "Snippet" has_many :users_projects, dependent: :destroy has_many :issues, dependent: :destroy, foreign_key: :author_id has_many :notes, dependent: :destroy, foreign_key: :author_id |