Mercurial > hg > soundsoftware-site
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