summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorRobert Speicher <rspeicher@gmail.com>2012-09-01 23:39:28 -0400
committerRobert Speicher <rspeicher@gmail.com>2012-09-02 13:40:07 -0400
commit8db2a59d0b6959a78ea7be4663dd9a858dff9f98 (patch)
treef93ac13153e00c20cf66331827f7fa19b4fb1a00 /app
parent877aa5458627d42d03a7f204d02db9d326af006c (diff)
downloadgitlab-ce-8db2a59d0b6959a78ea7be4663dd9a858dff9f98.tar.gz
Add StaticModel role, and add it to Commit model
Instead of doing this: link_to(commit.id, project_commit_path(project, id: commit.id)) Note.create(noteable_id: commit.id, noteable_type: "Commit", ...) It lets us do this: link_to(commit.id, project_commit_path(project, commit)) Note.create(noteable: commit, ...)
Diffstat (limited to 'app')
-rw-r--r--app/models/commit.rb12
-rw-r--r--app/roles/static_model.rb35
2 files changed, 39 insertions, 8 deletions
diff --git a/app/models/commit.rb b/app/models/commit.rb
index 5c6b4d88d96..15afedcb101 100644
--- a/app/models/commit.rb
+++ b/app/models/commit.rb
@@ -1,6 +1,7 @@
class Commit
include ActiveModel::Conversion
include Gitlab::Encode
+ include StaticModel
extend ActiveModel::Naming
attr_accessor :commit
@@ -22,8 +23,7 @@ class Commit
:to_patch,
to: :commit
-
- class << self
+ class << self
def find_or_first(repo, commit_id = nil, root_ref)
commit = if commit_id
repo.commit(commit_id)
@@ -85,7 +85,7 @@ class Commit
first = project.commit(to.try(:strip))
last = project.commit(from.try(:strip))
- result = {
+ result = {
commits: [],
diffs: [],
commit: nil
@@ -105,10 +105,6 @@ class Commit
end
end
- def persisted?
- false
- end
-
def initialize(raw_commit, head = nil)
@commit = raw_commit
@head = head
@@ -155,7 +151,7 @@ class Commit
prev_commit.try :id
end
- def parents_count
+ def parents_count
parents && parents.count || 0
end
end
diff --git a/app/roles/static_model.rb b/app/roles/static_model.rb
new file mode 100644
index 00000000000..d26c8f47501
--- /dev/null
+++ b/app/roles/static_model.rb
@@ -0,0 +1,35 @@
+# Provides an ActiveRecord-like interface to a model whose data is not persisted to a database.
+module StaticModel
+ extend ActiveSupport::Concern
+
+ module ClassMethods
+ # Used by ActiveRecord's polymorphic association to set object_id
+ def primary_key
+ 'id'
+ end
+
+ # Used by ActiveRecord's polymorphic association to set object_type
+ def base_class
+ self
+ end
+ end
+
+ # Used by AR for fetching attributes
+ #
+ # Pass it along if we respond to it.
+ def [](key)
+ send(key) if respond_to?(key)
+ end
+
+ def to_param
+ id
+ end
+
+ def persisted?
+ false
+ end
+
+ def destroyed?
+ false
+ end
+end