<!DOCTYPE html>
<html>
<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<title>class Plan - DMPonline4 Documentation</title>
<link type="text/css" media="screen" href="./rdoc.css" rel="stylesheet">
<script type="text/javascript">
var rdoc_rel_prefix = "./";
</script>
<script type="text/javascript" charset="utf-8" src="./js/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="./js/navigation.js"></script>
<script type="text/javascript" charset="utf-8" src="./js/search_index.js"></script>
<script type="text/javascript" charset="utf-8" src="./js/search.js"></script>
<script type="text/javascript" charset="utf-8" src="./js/searcher.js"></script>
<script type="text/javascript" charset="utf-8" src="./js/darkfish.js"></script>
<body id="top" class="class">
<nav id="metadata">
<nav id="home-section" class="section">
<h3 class="section-header">
<a href="./index.html">Home</a>
<a href="./table_of_contents.html#classes">Classes</a>
<a href="./table_of_contents.html#methods">Methods</a>
</h3>
</nav>
<nav id="search-section" class="section project-section" class="initially-hidden">
<form action="#" method="get" accept-charset="utf-8">
<h3 class="section-header">
<input type="text" name="search" placeholder="Search" id="search-field"
title="Type to search, Up and Down to navigate, Enter to load">
</h3>
</form>
<ul id="search-results" class="initially-hidden"></ul>
</nav>
<div id="file-metadata">
<nav id="file-list-section" class="section">
<h3 class="section-header">Defined In</h3>
<ul>
<li>app/models/plan.rb
</ul>
</nav>
</div>
<div id="class-metadata">
<nav id="parent-class-section" class="section">
<h3 class="section-header">Parent</h3>
<p class="link">ActiveRecord::Base
</nav>
<!-- Method Quickref -->
<nav id="method-list-section" class="section">
<h3 class="section-header">Methods</h3>
<ul class="link-list">
<li><a href="#method-i-add_guidance_to_array">#add_guidance_to_array</a>
<li><a href="#method-i-administerable_by">#administerable_by</a>
<li><a href="#method-i-answer">#answer</a>
<li><a href="#method-i-delete_recent_locks">#delete_recent_locks</a>
<li><a href="#method-i-details">#details</a>
<li><a href="#method-i-dmptemplate">#dmptemplate</a>
<li><a href="#method-i-editable_by">#editable_by</a>
<li><a href="#method-i-estimate_space_used">#estimate_space_used</a>
<li><a href="#method-i-guidance_for_question">#guidance_for_question</a>
<li><a href="#method-i-height_of_text">#height_of_text</a>
<li><a href="#method-i-latest_update">#latest_update</a>
<li><a href="#method-i-lock_all_sections">#lock_all_sections</a>
<li><a href="#method-i-lock_section">#lock_section</a>
<li><a href="#method-i-locked">#locked</a>
<li><a href="#method-i-readable_by">#readable_by</a>
<li><a href="#method-i-section_answers">#section_answers</a>
<li><a href="#method-i-sections">#sections</a>
<li><a href="#method-i-settings">#settings</a>
<li><a href="#method-i-status">#status</a>
<li><a href="#method-i-super_settings">#super_settings</a>
<li><a href="#method-i-title">#title</a>
<li><a href="#method-i-unlock_all_sections">#unlock_all_sections</a>
<li><a href="#method-i-unlock_section">#unlock_section</a>
<li><a href="#method-i-warning">#warning</a>
</ul>
</nav>
</div>
<div id="project-metadata">
<nav id="fileindex-section" class="section project-section">
<h3 class="section-header">Pages</h3>
<ul>
<li class="file"><a href="./README_rdoc.html">README</a>
</ul>
</nav>
<nav id="classindex-section" class="section project-section">
<h3 class="section-header">Class and Module Index</h3>
<ul class="link-list">
<li><a href="./Settings.html">Settings</a>
<li><a href="./Settings/Dmptemplate.html">Settings::Dmptemplate</a>
<li><a href="./Settings/PlanList.html">Settings::PlanList</a>
<li><a href="./Settings/PlansController.html">Settings::PlansController</a>
<li><a href="./Settings/ProjectsController.html">Settings::ProjectsController</a>
<li><a href="./Settings/SettingsController.html">Settings::SettingsController</a>
<li><a href="./ActiveAdmin.html">ActiveAdmin</a>
<li><a href="./ActiveAdmin/Views.html">ActiveAdmin::Views</a>
<li><a href="./ActiveAdmin/Views/Pages.html">ActiveAdmin::Views::Pages</a>
<li><a href="./ActiveAdmin/Views/Pages/Base.html">ActiveAdmin::Views::Pages::Base</a>
<li><a href="./Users.html">Users</a>
<li><a href="./Users/OmniauthCallbacksController.html">Users::OmniauthCallbacksController</a>
<li><a href="./Users/OmniauthShibbolethRequestController.html">Users::OmniauthShibbolethRequestController</a>
<li><a href="./DMPonline4.html">DMPonline4</a>
<li><a href="./DMPonline4/Application.html">DMPonline4::Application</a>
<li><a href="./Ability.html">Ability</a>
<li><a href="./Answer.html">Answer</a>
<li><a href="./AnswersController.html">AnswersController</a>
<li><a href="./ApplicationController.html">ApplicationController</a>
<li><a href="./ApplicationHelper.html">ApplicationHelper</a>
<li><a href="./Comment.html">Comment</a>
<li><a href="./CommentsController.html">CommentsController</a>
<li><a href="./ConfirmationsController.html">ConfirmationsController</a>
<li><a href="./ContactsController.html">ContactsController</a>
<li><a href="./CustomFailure.html">CustomFailure</a>
<li><a href="./Dmptemplate.html">Dmptemplate</a>
<li><a href="./DmptemplatesController.html">DmptemplatesController</a>
<li><a href="./ExistingUsersController.html">ExistingUsersController</a>
<li><a href="./ExportedPlan.html">ExportedPlan</a>
<li><a href="./FileType.html">FileType</a>
<li><a href="./FileUpload.html">FileUpload</a>
<li><a href="./Guidance.html">Guidance</a>
<li><a href="./GuidanceGroup.html">GuidanceGroup</a>
<li><a href="./GuidanceGroupsController.html">GuidanceGroupsController</a>
<li><a href="./GuidancesController.html">GuidancesController</a>
<li><a href="./HomeController.html">HomeController</a>
<li><a href="./Object.html">Object</a>
<li><a href="./Option.html">Option</a>
<li><a href="./OptionWarning.html">OptionWarning</a>
<li><a href="./Organisation.html">Organisation</a>
<li><a href="./OrganisationType.html">OrganisationType</a>
<li><a href="./OrganisationUsersController.html">OrganisationUsersController</a>
<li><a href="./OrganisationsController.html">OrganisationsController</a>
<li><a href="./PasswordsController.html">PasswordsController</a>
<li><a href="./Phase.html">Phase</a>
<li><a href="./Plan.html">Plan</a>
<li><a href="./PlanSection.html">PlanSection</a>
<li><a href="./PlansController.html">PlansController</a>
<li><a href="./PlansHelper.html">PlansHelper</a>
<li><a href="./Project.html">Project</a>
<li><a href="./ProjectGroup.html">ProjectGroup</a>
<li><a href="./ProjectGroupsController.html">ProjectGroupsController</a>
<li><a href="./ProjectPartner.html">ProjectPartner</a>
<li><a href="./ProjectsController.html">ProjectsController</a>
<li><a href="./Question.html">Question</a>
<li><a href="./QuestionFormat.html">QuestionFormat</a>
<li><a href="./RegistrationsController.html">RegistrationsController</a>
<li><a href="./Role.html">Role</a>
<li><a href="./Section.html">Section</a>
<li><a href="./SessionsController.html">SessionsController</a>
<li><a href="./SplashLog.html">SplashLog</a>
<li><a href="./SplashLogsController.html">SplashLogsController</a>
<li><a href="./StaticPagesController.html">StaticPagesController</a>
<li><a href="./SuggestedAnswer.html">SuggestedAnswer</a>
<li><a href="./Theme.html">Theme</a>
<li><a href="./ThemesController.html">ThemesController</a>
<li><a href="./User.html">User</a>
<li><a href="./UserMailer.html">UserMailer</a>
<li><a href="./UserOrgRole.html">UserOrgRole</a>
<li><a href="./UserOrgRolesController.html">UserOrgRolesController</a>
<li><a href="./UserRoleType.html">UserRoleType</a>
<li><a href="./UserRoleTypesController.html">UserRoleTypesController</a>
<li><a href="./UserStatus.html">UserStatus</a>
<li><a href="./UserStatusesController.html">UserStatusesController</a>
<li><a href="./UserType.html">UserType</a>
<li><a href="./UserTypesController.html">UserTypesController</a>
<li><a href="./UsersController.html">UsersController</a>
<li><a href="./Version.html">Version</a>
</ul>
</nav>
</div>
</nav>
<div id="documentation">
<h1 class="class">class Plan</h1>
<div id="description" class="description">
</div><!-- description -->
<section id="5Buntitled-5D" class="documentation-section">
<!-- Constants -->
<section id="constants-list" class="section">
<h3 class="section-header">Constants</h3>
<dl>
<dt id="A4_PAGE_HEIGHT">A4_PAGE_HEIGHT
<dd class="description">
<dt id="A4_PAGE_WIDTH">A4_PAGE_WIDTH
<dd class="description">
<dt id="FONT_HEIGHT_CONVERSION_FACTOR">FONT_HEIGHT_CONVERSION_FACTOR
<dd class="description">
<dt id="FONT_WIDTH_HEIGHT_RATIO">FONT_WIDTH_HEIGHT_RATIO
<dd class="description">
<dt id="ROUNDING">ROUNDING
<dd class="description">
</dl>
</section>
<!-- Methods -->
<section id="public-instance-5Buntitled-5D-method-details" class="method-section section">
<h3 class="section-header">Public Instance Methods</h3>
<div id="method-i-add_guidance_to_array" class="method-detail ">
<div class="method-heading">
<span class="method-name">add_guidance_to_array</span><span
class="method-args">(guidance_array, guidance_group, theme, guidance)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="add_guidance_to_array-source">
<pre><span class="ruby-comment"># File app/models/plan.rb, line 119</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">add_guidance_to_array</span>(<span class="ruby-identifier">guidance_array</span>, <span class="ruby-identifier">guidance_group</span>, <span class="ruby-identifier">theme</span>, <span class="ruby-identifier">guidance</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">guidance_array</span>[<span class="ruby-identifier">guidance_group</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
<span class="ruby-identifier">guidance_array</span>[<span class="ruby-identifier">guidance_group</span>] = {}
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">theme</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">guidance_array</span>[<span class="ruby-identifier">guidance_group</span>][<span class="ruby-string">"no_theme"</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
<span class="ruby-identifier">guidance_array</span>[<span class="ruby-identifier">guidance_group</span>][<span class="ruby-string">"no_theme"</span>] = []
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">guidance_array</span>[<span class="ruby-identifier">guidance_group</span>][<span class="ruby-string">"no_theme"</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">guidance</span>) <span class="ruby-keyword">then</span>
<span class="ruby-identifier">guidance_array</span>[<span class="ruby-identifier">guidance_group</span>][<span class="ruby-string">"no_theme"</span>].<span class="ruby-identifier">push</span>(<span class="ruby-identifier">guidance</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">guidance_array</span>[<span class="ruby-identifier">guidance_group</span>][<span class="ruby-identifier">theme</span>].<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
<span class="ruby-identifier">guidance_array</span>[<span class="ruby-identifier">guidance_group</span>][<span class="ruby-identifier">theme</span>] = []
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">guidance_array</span>[<span class="ruby-identifier">guidance_group</span>][<span class="ruby-identifier">theme</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">guidance</span>) <span class="ruby-keyword">then</span>
<span class="ruby-identifier">guidance_array</span>[<span class="ruby-identifier">guidance_group</span>][<span class="ruby-identifier">theme</span>].<span class="ruby-identifier">push</span>(<span class="ruby-identifier">guidance</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">return</span> <span class="ruby-identifier">guidance_array</span>
<span class="ruby-keyword">end</span></pre>
</div><!-- add_guidance_to_array-source -->
</div>
</div><!-- add_guidance_to_array-method -->
<div id="method-i-administerable_by" class="method-detail ">
<div class="method-heading">
<span class="method-name">administerable_by</span><span
class="method-args">(user_id)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="administerable_by-source">
<pre><span class="ruby-comment"># File app/models/plan.rb, line 168</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">administerable_by</span>(<span class="ruby-identifier">user_id</span>)
<span class="ruby-keyword">return</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">readable_by</span>(<span class="ruby-identifier">user_id</span>)
<span class="ruby-keyword">end</span></pre>
</div><!-- administerable_by-source -->
</div>
</div><!-- administerable_by-method -->
<div id="method-i-answer" class="method-detail ">
<div class="method-heading">
<span class="method-name">answer</span><span
class="method-args">(qid, create_if_missing = true)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="answer-source">
<pre><span class="ruby-comment"># File app/models/plan.rb, line 53</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">answer</span>(<span class="ruby-identifier">qid</span>, <span class="ruby-identifier">create_if_missing</span> = <span class="ruby-keyword">true</span>)
<span class="ruby-identifier">answer</span> = <span class="ruby-identifier">answers</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:question_id</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">qid</span>).<span class="ruby-identifier">order</span>(<span class="ruby-string">"created_at DESC"</span>).<span class="ruby-identifier">first</span>
<span class="ruby-identifier">question</span> = <span class="ruby-constant">Question</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">qid</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">create_if_missing</span> <span class="ruby-keyword">then</span>
<span class="ruby-identifier">answer</span> = <span class="ruby-constant">Answer</span>.<span class="ruby-identifier">new</span>
<span class="ruby-identifier">answer</span>.<span class="ruby-identifier">plan_id</span> = <span class="ruby-identifier">id</span>
<span class="ruby-identifier">answer</span>.<span class="ruby-identifier">question_id</span> = <span class="ruby-identifier">qid</span>
<span class="ruby-identifier">answer</span>.<span class="ruby-identifier">text</span> = <span class="ruby-identifier">question</span>.<span class="ruby-identifier">default_value</span>
<span class="ruby-identifier">default_options</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
<span class="ruby-identifier">question</span>.<span class="ruby-identifier">options</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">option</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">option</span>.<span class="ruby-identifier">is_default</span>
<span class="ruby-identifier">default_options</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">option</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">answer</span>.<span class="ruby-identifier">options</span> = <span class="ruby-identifier">default_options</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">return</span> <span class="ruby-identifier">answer</span>
<span class="ruby-keyword">end</span></pre>
</div><!-- answer-source -->
</div>
</div><!-- answer-method -->
<div id="method-i-delete_recent_locks" class="method-detail ">
<div class="method-heading">
<span class="method-name">delete_recent_locks</span><span
class="method-args">(user_id)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="delete_recent_locks-source">
<pre><span class="ruby-comment"># File app/models/plan.rb, line 291</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">delete_recent_locks</span>(<span class="ruby-identifier">user_id</span>)
<span class="ruby-identifier">plan_sections</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:user_id</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">user_id</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">lock</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">lock</span>.<span class="ruby-identifier">delete</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div><!-- delete_recent_locks-source -->
</div>
</div><!-- delete_recent_locks-method -->
<div id="method-i-details" class="method-detail ">
<div class="method-heading">
<span class="method-name">details</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="details-source">
<pre><span class="ruby-comment"># File app/models/plan.rb, line 230</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">details</span>
<span class="ruby-identifier">details</span> = {
<span class="ruby-string">"project_title"</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">title</span>,
<span class="ruby-string">"phase_title"</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">version</span>.<span class="ruby-identifier">phase</span>.<span class="ruby-identifier">title</span>,
<span class="ruby-string">"sections"</span> =<span class="ruby-operator">></span> {}
}
<span class="ruby-identifier">sections</span>.<span class="ruby-identifier">sort_by</span>(&<span class="ruby-value">:"number"</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">details</span>[<span class="ruby-string">"sections"</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">number</span>] = {}
<span class="ruby-identifier">details</span>[<span class="ruby-string">"sections"</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">number</span>][<span class="ruby-string">"title"</span>] = <span class="ruby-identifier">s</span>.<span class="ruby-identifier">title</span>
<span class="ruby-identifier">details</span>[<span class="ruby-string">"sections"</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">number</span>][<span class="ruby-string">"questions"</span>] = {}
<span class="ruby-identifier">s</span>.<span class="ruby-identifier">questions</span>.<span class="ruby-identifier">order</span>(<span class="ruby-string">"number"</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">q</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">details</span>[<span class="ruby-string">"sections"</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">number</span>][<span class="ruby-string">"questions"</span>][<span class="ruby-identifier">q</span>.<span class="ruby-identifier">number</span>] = {}
<span class="ruby-identifier">details</span>[<span class="ruby-string">"sections"</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">number</span>][<span class="ruby-string">"questions"</span>][<span class="ruby-identifier">q</span>.<span class="ruby-identifier">number</span>][<span class="ruby-string">"question_text"</span>] = <span class="ruby-identifier">q</span>.<span class="ruby-identifier">text</span>
<span class="ruby-identifier">answer</span> = <span class="ruby-identifier">answer</span>(<span class="ruby-identifier">q</span>.<span class="ruby-identifier">id</span>, <span class="ruby-keyword">false</span>)
<span class="ruby-keyword">if</span> <span class="ruby-operator">!</span> <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
<span class="ruby-identifier">q_format</span> = <span class="ruby-identifier">q</span>.<span class="ruby-identifier">question_format</span>
<span class="ruby-keyword">if</span> (<span class="ruby-identifier">q_format</span>.<span class="ruby-identifier">title</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">t</span>(<span class="ruby-string">"helpers.checkbox"</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">q_format</span>.<span class="ruby-identifier">title</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">t</span>(<span class="ruby-string">"helpers.multi_select_box"</span>) <span class="ruby-operator">||</span>
<span class="ruby-identifier">q_format</span>.<span class="ruby-identifier">title</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">t</span>(<span class="ruby-string">"helpers.radio_buttons"</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">q_format</span>.<span class="ruby-identifier">title</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">t</span>(<span class="ruby-string">"helpers.dropdown"</span>)) <span class="ruby-keyword">then</span>
<span class="ruby-identifier">details</span>[<span class="ruby-string">"sections"</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">number</span>][<span class="ruby-string">"questions"</span>][<span class="ruby-identifier">q</span>.<span class="ruby-identifier">number</span>][<span class="ruby-string">"selections"</span>] = {}
<span class="ruby-identifier">answer</span>.<span class="ruby-identifier">options</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">o</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">details</span>[<span class="ruby-string">"sections"</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">number</span>][<span class="ruby-string">"questions"</span>][<span class="ruby-identifier">q</span>.<span class="ruby-identifier">number</span>][<span class="ruby-string">"selections"</span>][<span class="ruby-identifier">o</span>.<span class="ruby-identifier">number</span>] = <span class="ruby-identifier">o</span>.<span class="ruby-identifier">text</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">details</span>[<span class="ruby-string">"sections"</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">number</span>][<span class="ruby-string">"questions"</span>][<span class="ruby-identifier">q</span>.<span class="ruby-identifier">number</span>][<span class="ruby-string">"answer_text"</span>] = <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">text</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">return</span> <span class="ruby-identifier">details</span>
<span class="ruby-keyword">end</span></pre>
</div><!-- details-source -->
</div>
</div><!-- details-method -->
<div id="method-i-dmptemplate" class="method-detail ">
<div class="method-heading">
<span class="method-name">dmptemplate</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="dmptemplate-source">
<pre><span class="ruby-comment"># File app/models/plan.rb, line 36</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">dmptemplate</span>
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">project</span>.<span class="ruby-identifier">try</span>(<span class="ruby-value">:dmptemplate</span>) <span class="ruby-operator">||</span> <span class="ruby-constant">Dmptemplate</span>.<span class="ruby-identifier">new</span>
<span class="ruby-keyword">end</span></pre>
</div><!-- dmptemplate-source -->
</div>
</div><!-- dmptemplate-method -->
<div id="method-i-editable_by" class="method-detail ">
<div class="method-heading">
<span class="method-name">editable_by</span><span
class="method-args">(user_id)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="editable_by-source">
<pre><span class="ruby-comment"># File app/models/plan.rb, line 156</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">editable_by</span>(<span class="ruby-identifier">user_id</span>)
<span class="ruby-keyword">return</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">editable_by</span>(<span class="ruby-identifier">user_id</span>)
<span class="ruby-keyword">end</span></pre>
</div><!-- editable_by-source -->
</div>
</div><!-- editable_by-method -->
<div id="method-i-guidance_for_question" class="method-detail ">
<div class="method-heading">
<span class="method-name">guidance_for_question</span><span
class="method-args">(question)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="guidance_for_question-source">
<pre><span class="ruby-comment"># File app/models/plan.rb, line 81</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">guidance_for_question</span>(<span class="ruby-identifier">question</span>)
<span class="ruby-identifier">guidances</span> = {}
<span class="ruby-comment"># If project org isn't nil, get guidance by theme from any "non-subset" groups belonging to project org
</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">organisation</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
<span class="ruby-identifier">project</span>.<span class="ruby-identifier">organisation</span>.<span class="ruby-identifier">guidance_groups</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">group</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">group</span>.<span class="ruby-identifier">optional_subset</span> <span class="ruby-operator">&&</span> (<span class="ruby-identifier">group</span>.<span class="ruby-identifier">dmptemplates</span>.<span class="ruby-identifier">pluck</span>(<span class="ruby-value">:id</span>).<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">project</span>.<span class="ruby-identifier">dmptemplate_id</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">group</span>.<span class="ruby-identifier">dmptemplates</span>.<span class="ruby-identifier">count</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>) <span class="ruby-keyword">then</span>
<span class="ruby-identifier">group</span>.<span class="ruby-identifier">guidances</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">guidance</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">guidance</span>.<span class="ruby-identifier">themes</span>.<span class="ruby-identifier">where</span>(<span class="ruby-string">"id IN (?)"</span>, <span class="ruby-identifier">question</span>.<span class="ruby-identifier">theme_ids</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">theme</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">guidances</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">add_guidance_to_array</span>(<span class="ruby-identifier">guidances</span>, <span class="ruby-identifier">group</span>, <span class="ruby-identifier">theme</span>, <span class="ruby-identifier">guidance</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment"># Get guidance by theme from any guidance groups selected on creation
</span>
<span class="ruby-identifier">project</span>.<span class="ruby-identifier">guidance_groups</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">group</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">group</span>.<span class="ruby-identifier">dmptemplates</span>.<span class="ruby-identifier">pluck</span>(<span class="ruby-value">:id</span>).<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">project</span>.<span class="ruby-identifier">dmptemplate_id</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">group</span>.<span class="ruby-identifier">dmptemplates</span>.<span class="ruby-identifier">count</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-keyword">then</span>
<span class="ruby-identifier">group</span>.<span class="ruby-identifier">guidances</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">guidance</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">guidance</span>.<span class="ruby-identifier">themes</span>.<span class="ruby-identifier">where</span>(<span class="ruby-string">"id IN (?)"</span>, <span class="ruby-identifier">question</span>.<span class="ruby-identifier">theme_ids</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">theme</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">guidances</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">add_guidance_to_array</span>(<span class="ruby-identifier">guidances</span>, <span class="ruby-identifier">group</span>, <span class="ruby-identifier">theme</span>, <span class="ruby-identifier">guidance</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment"># Get guidance by question where guidance group was selected on creation or if group is organisation default
</span>
<span class="ruby-identifier">question</span>.<span class="ruby-identifier">guidances</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">guidance</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">guidance</span>.<span class="ruby-identifier">guidance_groups</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">group</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">if</span> (<span class="ruby-identifier">group</span>.<span class="ruby-identifier">organisation</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">organisation</span> <span class="ruby-operator">&&</span> <span class="ruby-operator">!</span><span class="ruby-identifier">group</span>.<span class="ruby-identifier">optional_subset</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">guidance_groups</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">group</span>) <span class="ruby-keyword">then</span>
<span class="ruby-identifier">guidances</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">add_guidance_to_array</span>(<span class="ruby-identifier">guidances</span>, <span class="ruby-identifier">group</span>, <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">guidance</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">return</span> <span class="ruby-identifier">guidances</span>
<span class="ruby-keyword">end</span></pre>
</div><!-- guidance_for_question-source -->
</div>
</div><!-- guidance_for_question-method -->
<div id="method-i-latest_update" class="method-detail ">
<div class="method-heading">
<span class="method-name">latest_update</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="latest_update-source">
<pre><span class="ruby-comment"># File app/models/plan.rb, line 321</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">latest_update</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">answers</span>.<span class="ruby-identifier">any?</span> <span class="ruby-keyword">then</span>
<span class="ruby-identifier">last_answered</span> = <span class="ruby-identifier">answers</span>.<span class="ruby-identifier">order</span>(<span class="ruby-string">"updated_at DESC"</span>).<span class="ruby-identifier">first</span>.<span class="ruby-identifier">updated_at</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">last_answered</span> <span class="ruby-operator">></span> <span class="ruby-identifier">updated_at</span> <span class="ruby-keyword">then</span>
<span class="ruby-keyword">return</span> <span class="ruby-identifier">last_answered</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">return</span> <span class="ruby-identifier">updated_at</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">return</span> <span class="ruby-identifier">updated_at</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div><!-- latest_update-source -->
</div>
</div><!-- latest_update-method -->
<div id="method-i-lock_all_sections" class="method-detail ">
<div class="method-heading">
<span class="method-name">lock_all_sections</span><span
class="method-args">(user_id)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="lock_all_sections-source">
<pre><span class="ruby-comment"># File app/models/plan.rb, line 279</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">lock_all_sections</span>(<span class="ruby-identifier">user_id</span>)
<span class="ruby-identifier">sections</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">lock_section</span>(<span class="ruby-identifier">s</span>.<span class="ruby-identifier">id</span>, <span class="ruby-identifier">user_id</span>, <span class="ruby-value">1800</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div><!-- lock_all_sections-source -->
</div>
</div><!-- lock_all_sections-method -->
<div id="method-i-lock_section" class="method-detail ">
<div class="method-heading">
<span class="method-name">lock_section</span><span
class="method-args">(section_id, user_id, release_time = 60)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="lock_section-source">
<pre><span class="ruby-comment"># File app/models/plan.rb, line 297</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">lock_section</span>(<span class="ruby-identifier">section_id</span>, <span class="ruby-identifier">user_id</span>, <span class="ruby-identifier">release_time</span> = <span class="ruby-value">60</span>)
<span class="ruby-identifier">status</span> = <span class="ruby-identifier">locked</span>(<span class="ruby-identifier">section_id</span>, <span class="ruby-identifier">user_id</span>)
<span class="ruby-keyword">if</span> <span class="ruby-operator">!</span> <span class="ruby-identifier">status</span>[<span class="ruby-string">"locked"</span>] <span class="ruby-keyword">then</span>
<span class="ruby-identifier">plan_section</span> = <span class="ruby-constant">PlanSection</span>.<span class="ruby-identifier">new</span>
<span class="ruby-identifier">plan_section</span>.<span class="ruby-identifier">plan_id</span> = <span class="ruby-identifier">id</span>
<span class="ruby-identifier">plan_section</span>.<span class="ruby-identifier">section_id</span> = <span class="ruby-identifier">section_id</span>
<span class="ruby-identifier">plan_section</span>.<span class="ruby-identifier">release_time</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">release_time</span>.<span class="ruby-identifier">seconds</span>
<span class="ruby-identifier">plan_section</span>.<span class="ruby-identifier">user_id</span> = <span class="ruby-identifier">user_id</span>
<span class="ruby-identifier">plan_section</span>.<span class="ruby-identifier">save</span>
<span class="ruby-keyword">elsif</span> <span class="ruby-identifier">status</span>[<span class="ruby-string">"current_user"</span>] <span class="ruby-keyword">then</span>
<span class="ruby-identifier">plan_section</span> = <span class="ruby-constant">PlanSection</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">status</span>[<span class="ruby-string">"id"</span>])
<span class="ruby-identifier">plan_section</span>.<span class="ruby-identifier">release_time</span> = <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">release_time</span>.<span class="ruby-identifier">seconds</span>
<span class="ruby-identifier">plan_section</span>.<span class="ruby-identifier">save</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div><!-- lock_section-source -->
</div>
</div><!-- lock_section-method -->
<div id="method-i-locked" class="method-detail ">
<div class="method-heading">
<span class="method-name">locked</span><span
class="method-args">(section_id, user_id)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="locked-source">
<pre><span class="ruby-comment"># File app/models/plan.rb, line 260</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">locked</span>(<span class="ruby-identifier">section_id</span>, <span class="ruby-identifier">user_id</span>)
<span class="ruby-identifier">plan_section</span> = <span class="ruby-identifier">plan_sections</span>.<span class="ruby-identifier">where</span>(<span class="ruby-string">"section_id = ? AND user_id != ? AND release_time > ?"</span>, <span class="ruby-identifier">section_id</span>, <span class="ruby-identifier">user_id</span>, <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>).<span class="ruby-identifier">last</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">plan_section</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
<span class="ruby-identifier">status</span> = {
<span class="ruby-string">"locked"</span> =<span class="ruby-operator">></span> <span class="ruby-keyword">false</span>,
<span class="ruby-string">"locked_by"</span> =<span class="ruby-operator">></span> <span class="ruby-keyword">nil</span>,
<span class="ruby-string">"timestamp"</span> =<span class="ruby-operator">></span> <span class="ruby-keyword">nil</span>,
<span class="ruby-string">"id"</span> =<span class="ruby-operator">></span> <span class="ruby-keyword">nil</span>
}
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">status</span> = {
<span class="ruby-string">"locked"</span> =<span class="ruby-operator">></span> <span class="ruby-keyword">true</span>,
<span class="ruby-string">"locked_by"</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">plan_section</span>.<span class="ruby-identifier">user</span>.<span class="ruby-identifier">name</span>,
<span class="ruby-string">"timestamp"</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">plan_section</span>.<span class="ruby-identifier">updated_at</span>,
<span class="ruby-string">"id"</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">plan_section</span>.<span class="ruby-identifier">id</span>
}
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div><!-- locked-source -->
</div>
</div><!-- locked-method -->
<div id="method-i-readable_by" class="method-detail ">
<div class="method-heading">
<span class="method-name">readable_by</span><span
class="method-args">(user_id)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="readable_by-source">
<pre><span class="ruby-comment"># File app/models/plan.rb, line 160</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">readable_by</span>(<span class="ruby-identifier">user_id</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">nil?</span>
<span class="ruby-keyword">return</span> <span class="ruby-keyword">false</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">return</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">readable_by</span>(<span class="ruby-identifier">user_id</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div><!-- readable_by-source -->
</div>
</div><!-- readable_by-method -->
<div id="method-i-section_answers" class="method-detail ">
<div class="method-heading">
<span class="method-name">section_answers</span><span
class="method-args">(section_id)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="section_answers-source">
<pre><span class="ruby-comment"># File app/models/plan.rb, line 334</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">section_answers</span>(<span class="ruby-identifier">section_id</span>)
<span class="ruby-identifier">section</span> = <span class="ruby-constant">Section</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">section_id</span>)
<span class="ruby-identifier">section_questions</span> = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
<span class="ruby-identifier">counter</span> = <span class="ruby-value">0</span>
<span class="ruby-identifier">section</span>.<span class="ruby-identifier">questions</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">q</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">section_questions</span>[<span class="ruby-identifier">counter</span>] = {}
<span class="ruby-identifier">section_questions</span>[<span class="ruby-identifier">counter</span>][<span class="ruby-string">"id"</span>] = <span class="ruby-identifier">q</span>.<span class="ruby-identifier">id</span>
<span class="ruby-comment">#section_questions[counter]["multiple_choice"] = q.multiple_choice
</span>
<span class="ruby-identifier">q_answer</span> = <span class="ruby-identifier">answer</span>(<span class="ruby-identifier">q</span>.<span class="ruby-identifier">id</span>, <span class="ruby-keyword">false</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">q_answer</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
<span class="ruby-identifier">section_questions</span>[<span class="ruby-identifier">counter</span>][<span class="ruby-string">"answer_id"</span>] = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">q</span>.<span class="ruby-identifier">suggested_answers</span>.<span class="ruby-identifier">find_by_organisation_id</span>(<span class="ruby-identifier">project</span>.<span class="ruby-identifier">organisation_id</span>).<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
<span class="ruby-identifier">section_questions</span>[<span class="ruby-identifier">counter</span>][<span class="ruby-string">"answer_text"</span>] = <span class="ruby-string">""</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">section_questions</span>[<span class="ruby-identifier">counter</span>][<span class="ruby-string">"answer_text"</span>] = <span class="ruby-identifier">q</span>.<span class="ruby-identifier">default_value</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">section_questions</span>[<span class="ruby-identifier">counter</span>][<span class="ruby-string">"answer_timestamp"</span>] = <span class="ruby-keyword">nil</span>
<span class="ruby-identifier">section_questions</span>[<span class="ruby-identifier">counter</span>][<span class="ruby-string">"answer_options"</span>] = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">section_questions</span>[<span class="ruby-identifier">counter</span>][<span class="ruby-string">"answer_id"</span>] = <span class="ruby-identifier">q_answer</span>.<span class="ruby-identifier">id</span>
<span class="ruby-identifier">section_questions</span>[<span class="ruby-identifier">counter</span>][<span class="ruby-string">"answer_text"</span>] = <span class="ruby-identifier">q_answer</span>.<span class="ruby-identifier">text</span>
<span class="ruby-identifier">section_questions</span>[<span class="ruby-identifier">counter</span>][<span class="ruby-string">"answer_timestamp"</span>] = <span class="ruby-identifier">q_answer</span>.<span class="ruby-identifier">created_at</span>
<span class="ruby-identifier">section_questions</span>[<span class="ruby-identifier">counter</span>][<span class="ruby-string">"answer_options"</span>] = <span class="ruby-identifier">q_answer</span>.<span class="ruby-identifier">options</span>.<span class="ruby-identifier">pluck</span>(<span class="ruby-value">:id</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">counter</span> = <span class="ruby-identifier">counter</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">return</span> <span class="ruby-identifier">section_questions</span>
<span class="ruby-keyword">end</span></pre>
</div><!-- section_answers-source -->
</div>
</div><!-- section_answers-method -->
<div id="method-i-sections" class="method-detail ">
<div class="method-heading">
<span class="method-name">sections</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="sections-source">
<pre><span class="ruby-comment"># File app/models/plan.rb, line 72</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">sections</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">organisation</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
<span class="ruby-identifier">sections</span> = <span class="ruby-identifier">version</span>.<span class="ruby-identifier">global_sections</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">organisation</span>.<span class="ruby-identifier">all_sections</span>(<span class="ruby-identifier">version_id</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">sections</span> = <span class="ruby-identifier">version</span>.<span class="ruby-identifier">global_sections</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">return</span> <span class="ruby-identifier">sections</span>.<span class="ruby-identifier">uniq</span>.<span class="ruby-identifier">sort_by</span> &<span class="ruby-value">:number</span>
<span class="ruby-keyword">end</span></pre>
</div><!-- sections-source -->
</div>
</div><!-- sections-method -->
<div id="method-i-settings" class="method-detail ">
<div class="method-heading">
<span class="method-name">settings</span><span
class="method-args">(key)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Proxy through to the template settings (or defaults if this plan
doesn't have an associated template) if there are no settings stored
for this plan. `key` is required by rails-settings, so it's required
here, too.</p>
<div class="method-source-code" id="settings-source">
<pre><span class="ruby-comment"># File app/models/plan.rb, line 29</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">settings</span>(<span class="ruby-identifier">key</span>)
<span class="ruby-identifier">self_settings</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">super_settings</span>(<span class="ruby-identifier">key</span>)
<span class="ruby-keyword">return</span> <span class="ruby-identifier">self_settings</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">self_settings</span>.<span class="ruby-identifier">value?</span>
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">dmptemplate</span>.<span class="ruby-identifier">settings</span>(<span class="ruby-identifier">key</span>)
<span class="ruby-keyword">end</span></pre>
</div><!-- settings-source -->
</div>
<div class="aliases">
Also aliased as: <a href="Plan.html#method-i-super_settings">super_settings</a>
</div>
</div><!-- settings-method -->
<div id="method-i-status" class="method-detail ">
<div class="method-heading">
<span class="method-name">status</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="status-source">
<pre><span class="ruby-comment"># File app/models/plan.rb, line 172</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">status</span>
<span class="ruby-identifier">status</span> = {
<span class="ruby-string">"num_questions"</span> =<span class="ruby-operator">></span> <span class="ruby-value">0</span>,
<span class="ruby-string">"num_answers"</span> =<span class="ruby-operator">></span> <span class="ruby-value">0</span>,
<span class="ruby-string">"sections"</span> =<span class="ruby-operator">></span> {},
<span class="ruby-string">"questions"</span> =<span class="ruby-operator">></span> {},
<span class="ruby-string">"space_used"</span> =<span class="ruby-operator">></span> <span class="ruby-value">0</span> <span class="ruby-comment"># percentage of available space in pdf used
</span>
}
<span class="ruby-identifier">space_used</span> = <span class="ruby-identifier">height_of_text</span>(<span class="ruby-keyword">self</span>.<span class="ruby-identifier">project</span>.<span class="ruby-identifier">title</span>, <span class="ruby-value">2</span>, <span class="ruby-value">2</span>)
<span class="ruby-identifier">sections</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">space_used</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">height_of_text</span>(<span class="ruby-identifier">s</span>.<span class="ruby-identifier">title</span>, <span class="ruby-value">1</span>, <span class="ruby-value">1</span>)
<span class="ruby-identifier">section_questions</span> = <span class="ruby-value">0</span>
<span class="ruby-identifier">section_answers</span> = <span class="ruby-value">0</span>
<span class="ruby-identifier">status</span>[<span class="ruby-string">"sections"</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">id</span>] = {}
<span class="ruby-identifier">status</span>[<span class="ruby-string">"sections"</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">id</span>][<span class="ruby-string">"questions"</span>] = <span class="ruby-constant">Array</span>.<span class="ruby-identifier">new</span>
<span class="ruby-identifier">s</span>.<span class="ruby-identifier">questions</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">q</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">status</span>[<span class="ruby-string">"num_questions"</span>] <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
<span class="ruby-identifier">section_questions</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
<span class="ruby-identifier">status</span>[<span class="ruby-string">"sections"</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">id</span>][<span class="ruby-string">"questions"</span>] <span class="ruby-operator"><<</span> <span class="ruby-identifier">q</span>.<span class="ruby-identifier">id</span>
<span class="ruby-identifier">status</span>[<span class="ruby-string">"questions"</span>][<span class="ruby-identifier">q</span>.<span class="ruby-identifier">id</span>] = {}
<span class="ruby-identifier">answer</span> = <span class="ruby-identifier">answer</span>(<span class="ruby-identifier">q</span>.<span class="ruby-identifier">id</span>, <span class="ruby-keyword">false</span>)
<span class="ruby-identifier">space_used</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">height_of_text</span>(<span class="ruby-identifier">q</span>.<span class="ruby-identifier">text</span>) <span class="ruby-keyword">unless</span> <span class="ruby-identifier">q</span>.<span class="ruby-identifier">text</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">title</span>
<span class="ruby-identifier">space_used</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">height_of_text</span>(<span class="ruby-identifier">answer</span>.<span class="ruby-identifier">try</span>(<span class="ruby-value">:text</span>) <span class="ruby-operator">||</span> <span class="ruby-constant">I18n</span>.<span class="ruby-identifier">t</span>(<span class="ruby-string">'helpers.plan.export.pdf.question_not_answered'</span>))
<span class="ruby-keyword">if</span> <span class="ruby-operator">!</span> <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
<span class="ruby-identifier">status</span>[<span class="ruby-string">"questions"</span>][<span class="ruby-identifier">q</span>.<span class="ruby-identifier">id</span>] = {
<span class="ruby-string">"answer_id"</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">id</span>,
<span class="ruby-string">"answer_created_at"</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">created_at</span>.<span class="ruby-identifier">to_i</span>,
<span class="ruby-string">"answer_text"</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">text</span>,
<span class="ruby-string">"answer_option_ids"</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">option_ids</span>,
<span class="ruby-string">"answered_by"</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">user</span>.<span class="ruby-identifier">name</span>
}
<span class="ruby-identifier">q_format</span> = <span class="ruby-identifier">q</span>.<span class="ruby-identifier">question_format</span>
<span class="ruby-identifier">status</span>[<span class="ruby-string">"num_answers"</span>] <span class="ruby-operator">+=</span> <span class="ruby-value">1</span> <span class="ruby-keyword">if</span> (<span class="ruby-identifier">q_format</span>.<span class="ruby-identifier">title</span> <span class="ruby-operator">==</span> <span class="ruby-constant">I18n</span>.<span class="ruby-identifier">t</span>(<span class="ruby-string">"helpers.checkbox"</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">q_format</span>.<span class="ruby-identifier">title</span> <span class="ruby-operator">==</span> <span class="ruby-constant">I18n</span>.<span class="ruby-identifier">t</span>(<span class="ruby-string">"helpers.multi_select_box"</span>) <span class="ruby-operator">||</span>
<span class="ruby-identifier">q_format</span>.<span class="ruby-identifier">title</span> <span class="ruby-operator">==</span> <span class="ruby-constant">I18n</span>.<span class="ruby-identifier">t</span>(<span class="ruby-string">"helpers.radio_buttons"</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">q_format</span>.<span class="ruby-identifier">title</span> <span class="ruby-operator">==</span> <span class="ruby-constant">I18n</span>.<span class="ruby-identifier">t</span>(<span class="ruby-string">"helpers.dropdown"</span>)) <span class="ruby-operator">||</span> <span class="ruby-identifier">answer</span>.<span class="ruby-identifier">text</span>.<span class="ruby-identifier">present?</span>
<span class="ruby-identifier">section_answers</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
<span class="ruby-comment">#TODO: include selected options in space estimate
</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">status</span>[<span class="ruby-string">"questions"</span>][<span class="ruby-identifier">q</span>.<span class="ruby-identifier">id</span>] = {
<span class="ruby-string">"answer_id"</span> =<span class="ruby-operator">></span> <span class="ruby-keyword">nil</span>,
<span class="ruby-string">"answer_created_at"</span> =<span class="ruby-operator">></span> <span class="ruby-keyword">nil</span>,
<span class="ruby-string">"answer_text"</span> =<span class="ruby-operator">></span> <span class="ruby-keyword">nil</span>,
<span class="ruby-string">"answer_option_ids"</span> =<span class="ruby-operator">></span> <span class="ruby-keyword">nil</span>,
<span class="ruby-string">"answered_by"</span> =<span class="ruby-operator">></span> <span class="ruby-keyword">nil</span>
}
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">status</span>[<span class="ruby-string">"sections"</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">id</span>][<span class="ruby-string">"num_questions"</span>] = <span class="ruby-identifier">section_questions</span>
<span class="ruby-identifier">status</span>[<span class="ruby-string">"sections"</span>][<span class="ruby-identifier">s</span>.<span class="ruby-identifier">id</span>][<span class="ruby-string">"num_answers"</span>] = <span class="ruby-identifier">section_answers</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">status</span>[<span class="ruby-string">'space_used'</span>] = <span class="ruby-identifier">estimate_space_used</span>(<span class="ruby-identifier">space_used</span>)
<span class="ruby-keyword">return</span> <span class="ruby-identifier">status</span>
<span class="ruby-keyword">end</span></pre>
</div><!-- status-source -->
</div>
</div><!-- status-method -->
<div id="method-i-super_settings" class="method-detail method-alias">
<div class="method-heading">
<span class="method-name">super_settings</span><span
class="method-args">(key)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
</div>
<div class="aliases">
Alias for: <a href="Plan.html#method-i-settings">settings</a>
</div>
</div><!-- super_settings-method -->
<div id="method-i-title" class="method-detail ">
<div class="method-heading">
<span class="method-name">title</span><span
class="method-args">()</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="title-source">
<pre><span class="ruby-comment"># File app/models/plan.rb, line 40</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">title</span>
<span class="ruby-identifier">logger</span>.<span class="ruby-identifier">debug</span> <span class="ruby-node">"Title in settings: #{self.settings(:export).title}"</span>
<span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">settings</span>(<span class="ruby-value">:export</span>).<span class="ruby-identifier">title</span> <span class="ruby-operator">==</span> <span class="ruby-string">""</span>
<span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-keyword">self</span>.<span class="ruby-identifier">version</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">&&</span> <span class="ruby-operator">!</span><span class="ruby-keyword">self</span>.<span class="ruby-identifier">version</span>.<span class="ruby-identifier">phase</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-operator">&&</span> <span class="ruby-operator">!</span><span class="ruby-keyword">self</span>.<span class="ruby-identifier">version</span>.<span class="ruby-identifier">phase</span>.<span class="ruby-identifier">title?</span> <span class="ruby-keyword">then</span>
<span class="ruby-keyword">return</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">version</span>.<span class="ruby-identifier">phase</span>.<span class="ruby-identifier">title</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">return</span> <span class="ruby-string">"DMP title"</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">return</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">settings</span>(<span class="ruby-value">:export</span>).<span class="ruby-identifier">title</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div><!-- title-source -->
</div>
</div><!-- title-method -->
<div id="method-i-unlock_all_sections" class="method-detail ">
<div class="method-heading">
<span class="method-name">unlock_all_sections</span><span
class="method-args">(user_id)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="unlock_all_sections-source">
<pre><span class="ruby-comment"># File app/models/plan.rb, line 285</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">unlock_all_sections</span>(<span class="ruby-identifier">user_id</span>)
<span class="ruby-identifier">plan_sections</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:user_id</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">user_id</span>).<span class="ruby-identifier">order</span>(<span class="ruby-string">"created_at DESC"</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">lock</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">lock</span>.<span class="ruby-identifier">delete</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div><!-- unlock_all_sections-source -->
</div>
</div><!-- unlock_all_sections-method -->
<div id="method-i-unlock_section" class="method-detail ">
<div class="method-heading">
<span class="method-name">unlock_section</span><span
class="method-args">(section_id, user_id)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="unlock_section-source">
<pre><span class="ruby-comment"># File app/models/plan.rb, line 315</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">unlock_section</span>(<span class="ruby-identifier">section_id</span>, <span class="ruby-identifier">user_id</span>)
<span class="ruby-identifier">plan_sections</span>.<span class="ruby-identifier">where</span>(<span class="ruby-value">:section_id</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">section_id</span>, <span class="ruby-value">:user_id</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">user_id</span>).<span class="ruby-identifier">order</span>(<span class="ruby-string">"created_at DESC"</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">lock</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">lock</span>.<span class="ruby-identifier">delete</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div><!-- unlock_section-source -->
</div>
</div><!-- unlock_section-method -->
<div id="method-i-warning" class="method-detail ">
<div class="method-heading">
<span class="method-name">warning</span><span
class="method-args">(option_id)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="warning-source">
<pre><span class="ruby-comment"># File app/models/plan.rb, line 148</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">warning</span>(<span class="ruby-identifier">option_id</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">organisation</span>.<span class="ruby-identifier">nil?</span>
<span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">return</span> <span class="ruby-identifier">project</span>.<span class="ruby-identifier">organisation</span>.<span class="ruby-identifier">warning</span>(<span class="ruby-identifier">option_id</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div><!-- warning-source -->
</div>
</div><!-- warning-method -->
</section><!-- public-instance-method-details -->
<section id="private-instance-5Buntitled-5D-method-details" class="method-section section">
<h3 class="section-header">Private Instance Methods</h3>
<div id="method-i-estimate_space_used" class="method-detail ">
<div class="method-heading">
<span class="method-name">estimate_space_used</span><span
class="method-args">(used_height)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Based on the height of the text gathered so far and the available vertical
space of the pdf, estimate a percentage of how much space has been used.
This is highly dependent on the layout in the pdf. A more accurate approach
would be to render the pdf and check how much space had been used, but that
could be very slow. NOTE: This is only an estimate, rounded up to the
nearest 5%; it is intended for guidance when editing plan data, not to be
100% accurate.</p>
<div class="method-source-code" id="estimate_space_used-source">
<pre><span class="ruby-comment"># File app/models/plan.rb, line 372</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">estimate_space_used</span>(<span class="ruby-identifier">used_height</span>)
<span class="ruby-ivar">@formatting</span> <span class="ruby-operator">||=</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">settings</span>(<span class="ruby-value">:export</span>).<span class="ruby-identifier">formatting</span>
<span class="ruby-keyword">return</span> <span class="ruby-value">0</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@formatting</span>[<span class="ruby-value">:font_size</span>] <span class="ruby-operator">></span> <span class="ruby-value">0</span>
<span class="ruby-identifier">margin_height</span> = <span class="ruby-ivar">@formatting</span>[<span class="ruby-value">:margin</span>][<span class="ruby-value">:top</span>].<span class="ruby-identifier">to_i</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@formatting</span>[<span class="ruby-value">:margin</span>][<span class="ruby-value">:bottom</span>].<span class="ruby-identifier">to_i</span>
<span class="ruby-identifier">page_height</span> = <span class="ruby-constant">A4_PAGE_HEIGHT</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">margin_height</span> <span class="ruby-comment"># 297mm for A4 portrait
</span>
<span class="ruby-identifier">available_height</span> = <span class="ruby-identifier">page_height</span> * <span class="ruby-keyword">self</span>.<span class="ruby-identifier">dmptemplate</span>.<span class="ruby-identifier">settings</span>(<span class="ruby-value">:export</span>).<span class="ruby-identifier">max_pages</span>
<span class="ruby-identifier">percentage</span> = (<span class="ruby-identifier">used_height</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">available_height</span>) * <span class="ruby-value">100</span>
(<span class="ruby-identifier">percentage</span> <span class="ruby-operator">/</span> <span class="ruby-constant">ROUNDING</span>).<span class="ruby-identifier">ceil</span> * <span class="ruby-constant">ROUNDING</span> <span class="ruby-comment"># round up to nearest five
</span>
<span class="ruby-keyword">end</span></pre>
</div><!-- estimate_space_used-source -->
</div>
</div><!-- estimate_space_used-method -->
<div id="method-i-height_of_text" class="method-detail ">
<div class="method-heading">
<span class="method-name">height_of_text</span><span
class="method-args">(text, font_size_inc = 0, vertical_margin = 0)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<p>Take a guess at the vertical height (in mm) of the given text based on the
font-size and left/right margins stored in the plan's settings. This
assumes a fixed-width for each glyph, which is obviously incorrect for the
font-face choices available; the idea is that they'll hopefully average
out to that in the long-run. Allows for hinting different font sizes
(offset from base via font_size_inc) and vertical margins (i.e. for heading
text)</p>
<div class="method-source-code" id="height_of_text-source">
<pre><span class="ruby-comment"># File app/models/plan.rb, line 392</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier">height_of_text</span>(<span class="ruby-identifier">text</span>, <span class="ruby-identifier">font_size_inc</span> = <span class="ruby-value">0</span>, <span class="ruby-identifier">vertical_margin</span> = <span class="ruby-value">0</span>)
<span class="ruby-ivar">@formatting</span> <span class="ruby-operator">||=</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">settings</span>(<span class="ruby-value">:export</span>).<span class="ruby-identifier">formatting</span>
<span class="ruby-ivar">@margin_width</span> <span class="ruby-operator">||=</span> <span class="ruby-ivar">@formatting</span>[<span class="ruby-value">:margin</span>][<span class="ruby-value">:left</span>].<span class="ruby-identifier">to_i</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@formatting</span>[<span class="ruby-value">:margin</span>][<span class="ruby-value">:right</span>].<span class="ruby-identifier">to_i</span>
<span class="ruby-ivar">@base_font_size</span> <span class="ruby-operator">||=</span> <span class="ruby-ivar">@formatting</span>[<span class="ruby-value">:font_size</span>]
<span class="ruby-keyword">return</span> <span class="ruby-value">0</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@base_font_size</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
<span class="ruby-identifier">font_height</span> = <span class="ruby-constant">FONT_HEIGHT_CONVERSION_FACTOR</span> * (<span class="ruby-ivar">@base_font_size</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">font_size_inc</span>)
<span class="ruby-identifier">font_width</span> = <span class="ruby-identifier">font_height</span> * <span class="ruby-constant">FONT_WIDTH_HEIGHT_RATIO</span> <span class="ruby-comment"># Assume glyph width averages at 2/5s the height
</span>
<span class="ruby-identifier">leading</span> = <span class="ruby-identifier">font_height</span> <span class="ruby-operator">/</span> <span class="ruby-value">2</span>
<span class="ruby-identifier">chars_in_line</span> = (<span class="ruby-constant">A4_PAGE_WIDTH</span> <span class="ruby-operator">-</span> <span class="ruby-ivar">@margin_width</span>) <span class="ruby-operator">/</span> <span class="ruby-identifier">font_width</span> <span class="ruby-comment"># 210mm for A4 portrait
</span>
<span class="ruby-identifier">num_lines</span> = (<span class="ruby-identifier">text</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">/</span> <span class="ruby-identifier">chars_in_line</span>).<span class="ruby-identifier">ceil</span>
(<span class="ruby-identifier">num_lines</span> * <span class="ruby-identifier">font_height</span>) <span class="ruby-operator">+</span> <span class="ruby-identifier">vertical_margin</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">leading</span>
<span class="ruby-keyword">end</span></pre>
</div><!-- height_of_text-source -->
</div>
</div><!-- height_of_text-method -->
</section><!-- private-instance-method-details -->
</section><!-- 5Buntitled-5D -->
</div><!-- documentation -->
<footer id="validator-badges">
<p><a href="http://validator.w3.org/check/referer">[Validate]</a>
<p>Generated by <a href="https://github.com/rdoc/rdoc">RDoc</a> 3.12.2.
<p>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish Rdoc Generator</a> 3.
</footer>