<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title> Class: Projects::ClientService — Documentation by YARD 0.8.7.6 </title> <link rel="stylesheet" href="../css/style.css" type="text/css" charset="utf-8" /> <link rel="stylesheet" href="../css/common.css" type="text/css" charset="utf-8" /> <script type="text/javascript" charset="utf-8"> hasFrames = window.top.frames.main ? true : false; relpath = '../'; framesUrl = "../frames.html#!Projects/ClientService.html"; </script> <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script> <script type="text/javascript" charset="utf-8" src="../js/app.js"></script> </head> <body> <div id="header"> <div id="menu"> <a href="../_index.html">Index (C)</a> » <span class='title'><span class='object_link'><a href="../Projects.html" title="Projects (module)">Projects</a></span></span> » <span class="title">ClientService</span> <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div> </div> <div id="search"> <a class="full_list_link" id="class_list_link" href="../class_list.html"> Class List </a> <a class="full_list_link" id="method_list_link" href="../method_list.html"> Method List </a> <a class="full_list_link" id="file_list_link" href="../file_list.html"> File List </a> </div> <div class="clear"></div> </div> <iframe id="search_frame"></iframe> <div id="content"><h1>Class: Projects::ClientService </h1> <dl class="box"> <dt class="r1">Inherits:</dt> <dd class="r1"> <span class="inheritName">Object</span> <ul class="fullTree"> <li>Object</li> <li class="next">Projects::ClientService</li> </ul> <a href="#" class="inheritanceTree">show all</a> </dd> <dt class="r2 last">Defined in:</dt> <dd class="r2 last">lib/projects/client_service.rb</dd> </dl> <div class="clear"></div> <h2>Overview</h2><div class="docstring"> <div class="discussion"> <p>For many projects, it's likely a common need to just create a new Perforce Client Workspace for a project for a particular user on a host.</p> <p>That's the job of this class, to assist in setting that up.</p> <p>Importantly, this class operates as the user in question.</p> <p>WARNING: This was implemented for a Helix Sync prototype. It may not be relevant.</p> </div> </div> <div class="tags"> </div> <h2>Instance Attribute Summary <small>(<a href="#" class="summary_toggle">collapse</a>)</small></h2> <ul class="summary"> <li class="public "> <span class="summary_signature"> <a href="#p4-instance_method" title="#p4 (instance method)">- (Object) <strong>p4</strong> </a> </span> <span class="summary_desc"><div class='inline'> <p>The user's connection to the Perforce server.</p> </div></span> </li> </ul> <h2> Instance Method Summary <small>(<a href="#" class="summary_toggle">collapse</a>)</small> </h2> <ul class="summary"> <li class="public "> <span class="summary_signature"> <a href="#create_workspace-instance_method" title="#create_workspace (instance method)">- (Object) <strong>create_workspace</strong>(project: nil, hostname: nil, root: nil, branch_id: nil) </a> </span> <span class="summary_desc"><div class='inline'> <p>Create a new workspace for the user.</p> </div></span> </li> <li class="public "> <span class="summary_signature"> <a href="#initialize-instance_method" title="#initialize (instance method)">- (ClientService) <strong>initialize</strong>(p4: nil) </a> </span> <span class="note title constructor">constructor</span> <span class="summary_desc"><div class='inline'> <p>A new instance of ClientService.</p> </div></span> </li> </ul> <div id="constructor_details" class="method_details_list"> <h2>Constructor Details</h2> <div class="method_details first"> <h3 class="signature first" id="initialize-instance_method"> - (<tt><span class='object_link'><a href="" title="Projects::ClientService (class)">ClientService</a></span></tt>) <strong>initialize</strong>(p4: nil) </h3><div class="docstring"> <div class="discussion"> <p>Returns a new instance of ClientService</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 18 19 20</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/projects/client_service.rb', line 18</span> <span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='label'>p4:</span> <span class='kw'>nil</span><span class='rparen'>)</span> <span class='ivar'>@p4</span> <span class='op'>=</span> <span class='id identifier rubyid_p4'>p4</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> </div> <div id="instance_attr_details" class="attr_details"> <h2>Instance Attribute Details</h2> <span id="p4=-instance_method"></span> <div class="method_details first"> <h3 class="signature first" id="p4-instance_method"> - (<tt>Object</tt>) <strong>p4</strong> </h3><div class="docstring"> <div class="discussion"> <p>The user's connection to the Perforce server.</p> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 16 17 18</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/projects/client_service.rb', line 16</span> <span class='kw'>def</span> <span class='id identifier rubyid_p4'>p4</span> <span class='ivar'>@p4</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> </div> <div id="instance_method_details" class="method_details_list"> <h2>Instance Method Details</h2> <div class="method_details first"> <h3 class="signature first" id="create_workspace-instance_method"> - (<tt>Object</tt>) <strong>create_workspace</strong>(project: nil, hostname: nil, root: nil, branch_id: nil) </h3><div class="docstring"> <div class="discussion"> <p>Create a new workspace for the user.</p> <p>Required options:</p> <ul><li> <p>project: The project ID or model</p> </li><li> <p>hostname: The client hostname to lock the client to</p> </li><li> <p>root: The root directory for the client</p> </li></ul> <p>Optional attributes:</p> <ul><li> <p>branch_id: The branch ID to use. By default, we'll just pick the first if not specified</p> </li></ul> </div> </div> <div class="tags"> </div><table class="source_code"> <tr> <td> <pre class="lines"> 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71</pre> </td> <td> <pre class="code"><span class="info file"># File 'lib/projects/client_service.rb', line 34</span> <span class='kw'>def</span> <span class='id identifier rubyid_create_workspace'>create_workspace</span><span class='lparen'>(</span><span class='label'>project:</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='label'>hostname:</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='label'>root:</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='label'>branch_id:</span> <span class='kw'>nil</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_project'>project</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='kw'>or</span> <span class='id identifier rubyid_hostname'>hostname</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='kw'>or</span> <span class='id identifier rubyid_root'>root</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='id identifier rubyid_raise'>raise</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>project, hostname, or working_directory is nil</span><span class='tstring_end'>'</span></span> <span class='kw'>end</span> <span class='id identifier rubyid_project'>project</span> <span class='op'>=</span> <span class='id identifier rubyid_find_project'>find_project</span><span class='lparen'>(</span><span class='id identifier rubyid_project'>project</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_project'>project</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>String</span><span class='rparen'>)</span> <span class='comment'># TODO membership authorization check on project by user </span> <span class='id identifier rubyid_client_name'>client_name</span> <span class='op'>=</span> <span class='id identifier rubyid_create_client_name'>create_client_name</span><span class='lparen'>(</span><span class='id identifier rubyid_project'>project</span><span class='rparen'>)</span> <span class='id identifier rubyid_spec'>spec</span> <span class='op'>=</span> <span class='id identifier rubyid_p4'>p4</span><span class='period'>.</span><span class='id identifier rubyid_fetch_client'>fetch_client</span><span class='lparen'>(</span><span class='id identifier rubyid_client_name'>client_name</span><span class='rparen'>)</span> <span class='id identifier rubyid_spec'>spec</span><span class='period'>.</span><span class='id identifier rubyid__host'>_host</span> <span class='op'>=</span> <span class='id identifier rubyid_hostname'>hostname</span> <span class='id identifier rubyid_spec'>spec</span><span class='period'>.</span><span class='id identifier rubyid__root'>_root</span> <span class='op'>=</span> <span class='id identifier rubyid_root'>root</span> <span class='comment'># This rule might be specific to Helix Sync. Not sure how else we want </span> <span class='comment'># to manage clients though. </span> <span class='id identifier rubyid_spec'>spec</span><span class='period'>.</span><span class='id identifier rubyid__options'>_options</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>'</span><span class='tstring_content'>allwrite noclobber nocompress unlocked nomodtime rmdir</span><span class='tstring_end'>'</span></span><span class='semicolon'>;</span> <span class='id identifier rubyid_branch_ref'>branch_ref</span> <span class='op'>=</span> <span class='kw'>nil</span> <span class='kw'>if</span> <span class='id identifier rubyid_branch_id'>branch_id</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='id identifier rubyid_branch_ref'>branch_ref</span> <span class='op'>=</span> <span class='id identifier rubyid_project'>project</span><span class='period'>.</span><span class='id identifier rubyid_branches'>branches</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span> <span class='kw'>else</span> <span class='id identifier rubyid_branch_ref'>branch_ref</span> <span class='op'>=</span> <span class='id identifier rubyid_project'>project</span><span class='period'>.</span><span class='id identifier rubyid_branches'>branches</span><span class='period'>.</span><span class='id identifier rubyid_find'>find</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_b'>b</span><span class='op'>|</span> <span class='id identifier rubyid_b'>b</span><span class='period'>.</span><span class='id identifier rubyid_id'>id</span> <span class='op'>==</span> <span class='id identifier rubyid_branch_id'>branch_id</span> <span class='rbrace'>}</span> <span class='kw'>end</span> <span class='kw'>if</span> <span class='id identifier rubyid_branch_ref'>branch_ref</span><span class='period'>.</span><span class='id identifier rubyid_stream'>stream</span> <span class='id identifier rubyid_spec'>spec</span><span class='period'>.</span><span class='id identifier rubyid__stream'>_stream</span> <span class='op'>=</span> <span class='id identifier rubyid_branch_ref'>branch_ref</span><span class='period'>.</span><span class='id identifier rubyid_stream'>stream</span> <span class='kw'>elsif</span> <span class='id identifier rubyid_branch_ref'>branch_ref</span><span class='period'>.</span><span class='id identifier rubyid_view'>view</span> <span class='id identifier rubyid_spec'>spec</span><span class='period'>.</span><span class='id identifier rubyid__view'>_view</span> <span class='op'>=</span> <span class='id identifier rubyid_branch_ref'>branch_ref</span><span class='period'>.</span><span class='id identifier rubyid_view'>view</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_view_ref'>view_ref</span><span class='op'>|</span> <span class='tstring'><span class='tstring_beg'>"</span><span class='tstring_content'>\"</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_view_ref'>view_ref</span><span class='period'>.</span><span class='id identifier rubyid_depot_path'>depot_path</span><span class='embexpr_end'>}</span><span class='tstring_content'>\" \"//</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_client_name'>client_name</span><span class='embexpr_end'>}</span><span class='tstring_content'>/</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_view_ref'>view_ref</span><span class='period'>.</span><span class='id identifier rubyid_view_path'>view_path</span><span class='embexpr_end'>}</span><span class='tstring_content'>\"</span><span class='tstring_end'>"</span></span> <span class='kw'>end</span> <span class='kw'>end</span> <span class='id identifier rubyid_p4'>p4</span><span class='period'>.</span><span class='id identifier rubyid_save_client'>save_client</span><span class='lparen'>(</span><span class='id identifier rubyid_spec'>spec</span><span class='rparen'>)</span> <span class='id identifier rubyid_client_name'>client_name</span> <span class='kw'>end</span></pre> </td> </tr> </table> </div> </div> </div> <div id="footer"> Generated on Thu Jul 30 13:12:28 2015 by <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a> 0.8.7.6 (ruby-2.2.1). </div> </body> </html>
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#26 | 15676 | tjuricek | HWS/NOARCH/2015.1.main/201509092205 | ||
#25 | 15447 | tjuricek |
Add simple Example application to list "projects" in a HVE instance. Qt's a little weird to follow, so I may have to find a different kind of example to write. It does work, however. |
||
#24 | 15240 | tjuricek |
Set api level via request path on all Helix Versioning Engine methods. This will allow migration of applications to different P4D versions. Our internal methods (like project API) should attempt to handle backward compatibility similarly. P4WEBAPI-118 |
||
#23 | 15228 | tjuricek | Revise triggers implementation, tests, and documentation. | ||
#22 | 15227 | tjuricek |
Revise implementation, tests, and documentation for protections management. Remove some specs I will not be revising from the helix_web_services project. |
||
#21 | 15225 | tjuricek |
Revise counter implementation, tests, and documentation Wasn't available in the Ruby client before, so, it's now available. |
||
#20 | 15222 | tjuricek |
Revise server specs testing and documentation. Note: also fixed issues with setting P4PORT via headers. For whatever reason, the host setting doesn't seem to work like I expect it to, though P4PORT works just fine. |
||
#19 | 15211 | tjuricek | Implement tests and documentation for label spec management. | ||
#18 | 15210 | tjuricek | Implement tests and documentation for job spec management. | ||
#17 | 15209 | tjuricek | Implement tests and documentation for group spec management. | ||
#16 | 15208 | tjuricek |
Revise 'command' implementation, tests, and documentaiton. This includes a change from a command blacklist to a whitelist. See P4WEBAPI-21 |
||
#15 | 15205 | tjuricek | Implemented tests and documentation for depot spec editing. | ||
#14 | 15189 | tjuricek | Update files implementation, testing, and documentation. | ||
#13 | 15185 | tjuricek | Update user spec management implementation, tests, and documentation. | ||
#12 | 15144 | tjuricek |
Setup stream spec tests and documentation. Also revised the documentation folder http_p4_web_api -> helix_versioning_engine |
||
#11 | 15132 | tjuricek | Provde a basic submit -e mechanism on classic perforce workspaces. | ||
#10 | 15110 | tjuricek | Revise changes methods for new p4 connection handling, add server specs, remove model references in client, and update asciidoc documentation. | ||
#9 | 15099 | tjuricek | Revise project services to be our simple 'container' for other systems. | ||
#8 | 15098 | tjuricek |
Revised project services to GET-only forms. With Helix Sync revising to integrate purely with Helix Cloud, this is the only thing we can reasonably define. |
||
#7 | 15090 | tjuricek |
Update _proposed_ API for project services. This is *very likely* to change, and will not be implemented until reviewed. |
||
#6 | 15078 | tjuricek |
clients spec method revisions Updated some other documentation. |
||
#5 | 15077 | tjuricek |
Add new 'model' technique, revised branch spec operations, test Auth::Middleware. The Ruby client now does *not* strictly type anything, but extends OpenStruct with helper methods to help deal with inconsistent data formats. See the OpenModel class documentation for more details. The Auth::Middleware class is also *finally* implemented as well. This does not take into account all possible variations of server behavior (yet), but that will happen in follow-up work. |
||
#4 | 15073 | tjuricek | Update Auth::Middleware and add spec | ||
#3 | 15053 | tjuricek |
Revise the client API to use the new login method. The current specs will need to be revised since data normalization is moving out of the server and into the client. |
||
#2 | 15038 | tjuricek | Document 'login' auth method and client programming overview. | ||
#1 | 15032 | tjuricek |
Starting config and doc revisions. System is now broken while revisions underway. Configuration of the p4d connection is now done via a single HWSSettings middleware object injected into the Rack env. The HWSP4Cleanup middleware now cleans up any p4 injected into the Rack env. The Auth::App class now mostly just contains one method to generate a p4 ticket. /auth/v1/login. Added yard documentation for the main project. Yard docs have been reconfigured to dump into build/ directories. This should probably be done with each release. Hm... The top level rake file contains a task, 'all:doc', to update our documentation. This should probably be run for each checkin. Hm... Specs are now using Rack::Test on top of a 'live' p4d. I'd suggest you still use the p4util mechanism, which now dumps to a /tmp folder, so we can safely add P4IGNORE rules back into your local .p4config file. Old 'perforce' application now called 'helix_versioning_engine'. Removing cache data. Helix Sync may be slow. It may also get axed. We'll see. |