changeset 1192:3c9ca27c2d3d feature_564

Add approximate back-of-envelope calculation of project maturity
author Chris Cannam <chris.cannam@soundsoftware.ac.uk>
date Tue, 22 Jan 2013 16:51:56 +0000
parents 99fa295c1df2
children d67ed1030451
files app/helpers/projects_helper.rb
diffstat 1 files changed, 26 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/app/helpers/projects_helper.rb	Tue Jan 22 16:10:53 2013 +0000
+++ b/app/helpers/projects_helper.rb	Tue Jan 22 16:51:56 2013 +0000
@@ -269,4 +269,30 @@
     sharing = 'none' unless Version::VERSION_SHARINGS.include?(sharing)
     l("label_version_sharing_#{sharing}")
   end
+
+  def score_maturity(project)
+    nr_changes = (project.repository.nil? ? 0 : project.repository.changesets.count)
+    downloadables = [project.attachments,
+                     project.versions.collect { |v| v.attachments },
+                     project.documents.collect { |d| d.attachments }].flatten
+    nr_downloadables = downloadables.count
+    nr_downloads = downloadables.map do |d| d.downloads end.sum
+    nr_members = project.members.count
+    nr_publications = if project.respond_to? :publications
+                      then project.publications.count else 0 end
+    Math.log(1 + nr_changes) +
+      Math.log(1 + nr_downloadables) +
+      Math.log(1 + nr_downloads) +
+      Math.sqrt(nr_members > 1 ? (nr_members - 1) : 0) +
+      Math.sqrt(nr_publications)
+  end
+
+  def all_maturity_scores()
+    phash = Hash.new
+    pp = Project.visible(User.anonymous)
+    pp.each do |p| 
+      phash[p] = score_maturity p
+    end
+    phash
+  end
 end