gxg-framework/doc/GxG/Storage/Volume.html
2021-11-16 08:41:53 -08:00

2259 lines
254 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>class GxG::Storage::Volume - RDoc Documentation</title>
<script type="text/javascript">
var rdoc_rel_prefix = "../../";
var index_rel_prefix = "../../";
</script>
<script src="../../js/navigation.js" defer></script>
<script src="../../js/search.js" defer></script>
<script src="../../js/search_index.js" defer></script>
<script src="../../js/searcher.js" defer></script>
<script src="../../js/darkfish.js" defer></script>
<link href="../../css/fonts.css" rel="stylesheet">
<link href="../../css/rdoc.css" rel="stylesheet">
<body id="top" role="document" class="class">
<nav role="navigation">
<div id="project-navigation">
<div id="home-section" role="region" title="Quick navigation" class="nav-section">
<h2>
<a href="../../index.html" rel="home">Home</a>
</h2>
<div id="table-of-contents-navigation">
<a href="../../table_of_contents.html#pages">Pages</a>
<a href="../../table_of_contents.html#classes">Classes</a>
<a href="../../table_of_contents.html#methods">Methods</a>
</div>
</div>
<div id="search-section" role="search" class="project-section initially-hidden">
<form action="#" method="get" accept-charset="utf-8">
<div id="search-field-wrapper">
<input id="search-field" role="combobox" aria-label="Search"
aria-autocomplete="list" aria-controls="search-results"
type="text" name="search" placeholder="Search" spellcheck="false"
title="Type to search, Up and Down to navigate, Enter to load">
</div>
<ul id="search-results" aria-label="Search Results"
aria-busy="false" aria-expanded="false"
aria-atomic="false" class="initially-hidden"></ul>
</form>
</div>
</div>
<div id="class-metadata">
<div id="parent-class-section" class="nav-section">
<h3>Parent</h3>
<p class="link"><a href="../../Object.html">Object</a>
</div>
<!-- Method Quickref -->
<div id="method-list-section" class="nav-section">
<h3>Methods</h3>
<ul class="link-list" role="directory">
<li ><a href="#method-c-new">::new</a>
<li ><a href="#method-i-credential">#credential</a>
<li ><a href="#method-i-database">#database</a>
<li ><a href="#method-i-db_path">#db_path</a>
<li ><a href="#method-i-directory">#directory</a>
<li ><a href="#method-i-entries">#entries</a>
<li ><a href="#method-i-exist-3F">#exist?</a>
<li ><a href="#method-i-file_system-3F">#file_system?</a>
<li ><a href="#method-i-get_permissions">#get_permissions</a>
<li ><a href="#method-i-inspect">#inspect</a>
<li ><a href="#method-i-mkdir">#mkdir</a>
<li ><a href="#method-i-open">#open</a>
<li ><a href="#method-i-profile">#profile</a>
<li ><a href="#method-i-rename">#rename</a>
<li ><a href="#method-i-revoke_permissions">#revoke_permissions</a>
<li ><a href="#method-i-rmdir">#rmdir</a>
<li ><a href="#method-i-rmfile">#rmfile</a>
<li ><a href="#method-i-set_permissions">#set_permissions</a>
<li ><a href="#method-i-set_permissions_recursive">#set_permissions_recursive</a>
</ul>
</div>
</div>
</nav>
<main role="main" aria-labelledby="class-GxG::Storage::Volume">
<h1 id="class-GxG::Storage::Volume" class="class">
class GxG::Storage::Volume
</h1>
<section class="description">
</section>
<section id="5Buntitled-5D" class="documentation-section">
<section id="public-class-5Buntitled-5D-method-details" class="method-section">
<header>
<h3>Public Class Methods</h3>
</header>
<div id="method-c-new" class="method-detail ">
<div class="method-heading">
<span class="method-name">new</span><span
class="method-args">(options={})</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="new-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 1498</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">initialize</span>(<span class="ruby-identifier">options</span>={})
<span class="ruby-comment"># options: :directory =&gt; &quot;/path/to/dir&quot;, :credential =&gt; &lt;UUID&gt;.to_s, :act_as =&gt; :owner? || :database =&gt; &lt;GxG::Database::Database&gt;, :credential =&gt; &lt;UUID&gt;.to_s, :root_uuid =&gt; &lt;UUID&gt;.to_s</span>
<span class="ruby-ivar">@thread_safety</span> = <span class="ruby-operator">::</span><span class="ruby-constant">Mutex</span>.<span class="ruby-identifier">new</span>
<span class="ruby-ivar">@credential</span> = <span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:administrator</span>].<span class="ruby-identifier">to_s</span>
<span class="ruby-ivar">@database</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-ivar">@root_uuid</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-comment"># Acts As: :owner, :group, :other for File System Volumes</span>
<span class="ruby-keyword">if</span> [<span class="ruby-value">:owner</span>, <span class="ruby-value">:group</span>, <span class="ruby-value">:other</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">options</span>[<span class="ruby-value">:act_as</span>])
<span class="ruby-ivar">@act_as</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:act_as</span>]
<span class="ruby-keyword">else</span>
<span class="ruby-ivar">@act_as</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span>
<span class="ruby-ivar">@directory</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:directory</span>]
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@directory</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
<span class="ruby-keyword">if</span> <span class="ruby-operator">::</span><span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-identifier">valid_uuid?</span>(<span class="ruby-identifier">options</span>[<span class="ruby-value">:credential</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_sym</span>)
<span class="ruby-keyword">unless</span> <span class="ruby-ivar">@act_as</span>
<span class="ruby-comment"># set @act_as according to credential Group/Role membership: Administrators=:owner, Developers/Designers=:group, all others=:other</span>
<span class="ruby-keyword">if</span> <span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:authority</span>].<span class="ruby-identifier">role_member?</span>(<span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:authority</span>][<span class="ruby-value">:system_credentials</span>][<span class="ruby-value">:administrators</span>], <span class="ruby-identifier">options</span>[<span class="ruby-value">:credential</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_sym</span>)
<span class="ruby-ivar">@act_as</span> = <span class="ruby-value">:owner</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> <span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:authority</span>].<span class="ruby-identifier">role_member?</span>(<span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:authority</span>][<span class="ruby-value">:system_credentials</span>][<span class="ruby-value">:developers</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_sym</span>, <span class="ruby-identifier">options</span>[<span class="ruby-value">:credential</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_sym</span>) <span class="ruby-operator">||</span> <span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:authority</span>].<span class="ruby-identifier">role_member?</span>(<span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:authority</span>][<span class="ruby-value">:system_credentials</span>][<span class="ruby-value">:designers</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_sym</span>, <span class="ruby-identifier">options</span>[<span class="ruby-value">:credential</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_sym</span>)
<span class="ruby-ivar">@act_as</span> = <span class="ruby-value">:group</span>
<span class="ruby-keyword">else</span>
<span class="ruby-ivar">@act_as</span> = <span class="ruby-value">:other</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">if</span> <span class="ruby-operator">::</span><span class="ruby-constant">Dir</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-ivar">@directory</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">if</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">readable_real?</span>(<span class="ruby-ivar">@directory</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-ivar">@directory</span> = <span class="ruby-operator">::</span><span class="ruby-constant">Dir</span>.<span class="ruby-identifier">new</span>(<span class="ruby-ivar">@directory</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-node">&quot;You do not have read permissions to directory #{@directory.inspect}.&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-node">&quot;Directory #{@directory.inspect} does not exist in the filesystem.&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">else</span>
<span class="ruby-ivar">@credential</span> = (<span class="ruby-identifier">options</span>[<span class="ruby-value">:credential</span>] <span class="ruby-operator">||</span> <span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:administrator</span>]).<span class="ruby-identifier">to_s</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:database</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">Database</span><span class="ruby-operator">::</span><span class="ruby-constant">Database</span>) <span class="ruby-keyword">and</span> <span class="ruby-ivar">@credential</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
<span class="ruby-ivar">@database</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:database</span>]
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">setting_keys</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-value">:volume_information</span>)
<span class="ruby-identifier">vol_info</span> = <span class="ruby-ivar">@database</span>[<span class="ruby-value">:volume_information</span>]
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">db_permissions</span>()[<span class="ruby-value">:write</span>]
<span class="ruby-identifier">new_root</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">try_persist</span>([], <span class="ruby-ivar">@credential</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">new_root</span>
<span class="ruby-identifier">new_root</span>.<span class="ruby-identifier">wait_for_reservation</span>()
<span class="ruby-identifier">new_root</span>.<span class="ruby-identifier">set_title</span>(<span class="ruby-string">&quot;Volume Root&quot;</span>)
<span class="ruby-identifier">vol_info</span> = {<span class="ruby-value">:volume_root</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">new_root</span>.<span class="ruby-identifier">uuid</span>()}
<span class="ruby-identifier">new_root</span>.<span class="ruby-identifier">deactivate</span>
<span class="ruby-ivar">@database</span>[<span class="ruby-value">:volume_information</span>] = <span class="ruby-identifier">vol_info</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;Unable to initialize volume root&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;Cannot initialize Volume Information on read-only database.&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment"># One can specify a sub-array to the volume as this volume&#39;s root array.</span>
<span class="ruby-keyword">if</span> <span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-identifier">valid_uuid?</span>(<span class="ruby-identifier">options</span>[<span class="ruby-value">:root_uuid</span>].<span class="ruby-identifier">to_s</span>)
<span class="ruby-comment"># verify array&#39;s existence</span>
<span class="ruby-identifier">the_persisted_array</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">retrieve_by_uuid</span>(<span class="ruby-identifier">options</span>[<span class="ruby-value">:root_uuid</span>], <span class="ruby-ivar">@credential</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_persisted_array</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">Database</span><span class="ruby-operator">::</span><span class="ruby-constant">PersistedArray</span>)
<span class="ruby-identifier">the_persisted_array</span>.<span class="ruby-identifier">deactivate</span>
<span class="ruby-ivar">@root_uuid</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:root_uuid</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_sym</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;The root_uuid points to a non-existent or invalid object, or you do not have permissions to read it.&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">else</span>
<span class="ruby-ivar">@root_uuid</span> = <span class="ruby-identifier">vol_info</span>[<span class="ruby-value">:volume_root</span>].<span class="ruby-identifier">to_sym</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">&quot;You MUST supply a valid credential and a database object. :credential =&gt; #{@credential.inspect}, :database =&gt; #{options[:database].inspect}&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
</section>
<section id="public-instance-5Buntitled-5D-method-details" class="method-section">
<header>
<h3>Public Instance Methods</h3>
</header>
<div id="method-i-credential" class="method-detail ">
<div class="method-heading">
<span class="method-name">credential</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="credential-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 1069</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">credential</span>()
<span class="ruby-ivar">@credential</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-database" class="method-detail ">
<div class="method-heading">
<span class="method-name">database</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="database-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 1073</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">database</span>()
<span class="ruby-ivar">@database</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-db_path" class="method-detail ">
<div class="method-heading">
<span class="method-name">db_path</span><span
class="method-args">(subpath=&quot;&quot;)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="db_path-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 1089</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">db_path</span>(<span class="ruby-identifier">subpath</span>=<span class="ruby-string">&quot;&quot;</span>)
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;/&quot;</span>
<span class="ruby-identifier">subpath</span> = (<span class="ruby-string">&quot;/&quot;</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">subpath_array</span> = <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">split</span>(<span class="ruby-string">&quot;/&quot;</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">subpath_array</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
<span class="ruby-identifier">subpath_array</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;Volume Root&quot;</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">subpath_array</span>[<span class="ruby-value">0</span>] = <span class="ruby-string">&quot;Volume Root&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">path_array</span> = [{<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-ivar">@root_uuid</span>, <span class="ruby-value">:title</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-string">&quot;Volume Root&quot;</span>}]
<span class="ruby-identifier">subpath_array</span>.<span class="ruby-identifier">each_with_index</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_entry</span>, <span class="ruby-identifier">indexer</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">parent_uuid</span> = <span class="ruby-identifier">path_array</span>.<span class="ruby-identifier">last</span>[<span class="ruby-value">:uuid</span>]
<span class="ruby-comment">#</span>
<span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:array_elements</span>].<span class="ruby-identifier">filter</span>({<span class="ruby-value">:parent_uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">parent_uuid</span>.<span class="ruby-identifier">to_s</span>}).<span class="ruby-identifier">order</span>(<span class="ruby-value">:ordinal</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">item</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">if</span> [<span class="ruby-value">:element_array</span>, <span class="ruby-value">:element_hash</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">item</span>[<span class="ruby-value">:element</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_sym</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">item</span>[<span class="ruby-value">:element</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_sym</span> <span class="ruby-operator">==</span> <span class="ruby-value">:element_array</span>
<span class="ruby-identifier">record</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:element_array</span>].<span class="ruby-identifier">filter</span>({<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">item</span>[<span class="ruby-value">:element_array_uuid</span>].<span class="ruby-identifier">to_s</span>}).<span class="ruby-identifier">first</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">record</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:element_hash</span>].<span class="ruby-identifier">filter</span>({<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">item</span>[<span class="ruby-value">:element_hash_uuid</span>].<span class="ruby-identifier">to_s</span>}).<span class="ruby-identifier">first</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">record</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">record</span>[<span class="ruby-value">:title</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">subpath_array</span>[(<span class="ruby-identifier">indexer</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>)].<span class="ruby-identifier">to_s</span>
<span class="ruby-identifier">path_array</span> <span class="ruby-operator">&lt;&lt;</span> {<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">record</span>[<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_sym</span>, <span class="ruby-value">:title</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">record</span>[<span class="ruby-value">:title</span>]}
<span class="ruby-keyword">break</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">#</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">path_array</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">subpath_array</span>.<span class="ruby-identifier">size</span>
<span class="ruby-identifier">result</span> = <span class="ruby-identifier">path_array</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">result</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-directory" class="method-detail ">
<div class="method-heading">
<span class="method-name">directory</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="directory-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 1077</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">directory</span>()
<span class="ruby-ivar">@directory</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-entries" class="method-detail ">
<div class="method-heading">
<span class="method-name">entries</span><span
class="method-args">(subpath=&quot;&quot;, as_credential=nil, options={:follow_symlinks =&gt; true})</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="entries-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 1579</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">entries</span>(<span class="ruby-identifier">subpath</span>=<span class="ruby-string">&quot;&quot;</span>, <span class="ruby-identifier">as_credential</span>=<span class="ruby-keyword">nil</span>, <span class="ruby-identifier">options</span>={<span class="ruby-value">:follow_symlinks</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">true</span>})
<span class="ruby-identifier">results</span> = []
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@directory</span>
<span class="ruby-comment"># FS</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;&quot;</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;/&quot;</span>
<span class="ruby-identifier">the_path</span> = (<span class="ruby-ivar">@directory</span>.<span class="ruby-identifier">path</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;/&quot;</span>
<span class="ruby-identifier">subpath</span> = (<span class="ruby-string">&quot;/&quot;</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">the_path</span> = (<span class="ruby-ivar">@directory</span>.<span class="ruby-identifier">path</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-string">&quot;//&quot;</span>, <span class="ruby-string">&quot;/&quot;</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-operator">::</span><span class="ruby-constant">Dir</span><span class="ruby-operator">::</span><span class="ruby-identifier">entries</span>(<span class="ruby-identifier">the_path</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">item</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">unless</span> [<span class="ruby-string">&quot;.&quot;</span>, <span class="ruby-string">&quot;..&quot;</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">item</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">as_credential</span>
<span class="ruby-identifier">the_profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>((<span class="ruby-identifier">subpath</span> <span class="ruby-operator">+</span> <span class="ruby-string">&quot;/&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">item</span>), <span class="ruby-identifier">options</span>.<span class="ruby-identifier">merge</span>({<span class="ruby-value">:with_credential</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">as_credential</span>}))
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">the_profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>((<span class="ruby-identifier">subpath</span> <span class="ruby-operator">+</span> <span class="ruby-string">&quot;/&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">item</span>), <span class="ruby-identifier">options</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_profile</span>
<span class="ruby-identifier">the_profile</span>[<span class="ruby-value">:title</span>] = <span class="ruby-identifier">item</span>
<span class="ruby-identifier">results</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">the_profile</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">else</span>
<span class="ruby-comment"># DB</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;/&quot;</span>
<span class="ruby-identifier">subpath</span> = (<span class="ruby-string">&quot;/&quot;</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">path_array</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">db_path</span>(<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">path_array</span>
<span class="ruby-identifier">base_profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>, {<span class="ruby-value">:with_credential</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">as_credential</span>})
<span class="ruby-keyword">if</span> <span class="ruby-identifier">base_profile</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">base_profile</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:effective</span>][<span class="ruby-value">:read</span>]
<span class="ruby-keyword">if</span> <span class="ruby-identifier">base_profile</span>[<span class="ruby-value">:type</span>] <span class="ruby-operator">==</span> <span class="ruby-value">:persisted_array</span>
<span class="ruby-identifier">object_details</span> = {<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">path_array</span>.<span class="ruby-identifier">last</span>[<span class="ruby-value">:uuid</span>], <span class="ruby-value">:table</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-value">:unspecified</span>, <span class="ruby-value">:dbid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-value">0</span>}
<span class="ruby-identifier">header</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:element_array</span>].<span class="ruby-identifier">filter</span>({<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">object_details</span>[<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_s</span>}).<span class="ruby-identifier">first</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">header</span>
<span class="ruby-identifier">object_details</span>[<span class="ruby-value">:table</span>] = <span class="ruby-value">:element_array</span>
<span class="ruby-identifier">object_details</span>[<span class="ruby-value">:dbid</span>] = <span class="ruby-identifier">header</span>[<span class="ruby-value">:dbid</span>]
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">contained_titles</span> = []
<span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:array_elements</span>].<span class="ruby-identifier">select</span>(<span class="ruby-value">:element_hash_uuid</span>, <span class="ruby-value">:element_array_uuid</span>).<span class="ruby-identifier">where</span>({<span class="ruby-value">:parent_uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">path_array</span>.<span class="ruby-identifier">last</span>[<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_s</span>}).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">link_record</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">link_record</span>[<span class="ruby-value">:element_hash_uuid</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
<span class="ruby-identifier">header</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:element_hash</span>].<span class="ruby-identifier">filter</span>({<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">link_record</span>[<span class="ruby-value">:element_hash_uuid</span>].<span class="ruby-identifier">to_s</span>}).<span class="ruby-identifier">first</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">header</span>
<span class="ruby-identifier">contained_titles</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">header</span>[<span class="ruby-value">:title</span>].<span class="ruby-identifier">to_s</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">link_record</span>[<span class="ruby-value">:element_array_uuid</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
<span class="ruby-identifier">header</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:element_array</span>].<span class="ruby-identifier">filter</span>({<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">link_record</span>[<span class="ruby-value">:element_array_uuid</span>].<span class="ruby-identifier">to_s</span>}).<span class="ruby-identifier">first</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">header</span>
<span class="ruby-identifier">contained_titles</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">header</span>[<span class="ruby-value">:title</span>].<span class="ruby-identifier">to_s</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-identifier">contained_titles</span>.<span class="ruby-identifier">sort</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_title</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_title</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
<span class="ruby-identifier">results</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>((<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">+</span> <span class="ruby-string">&quot;/&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">the_title</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-string">&quot;//&quot;</span>,<span class="ruby-string">&quot;/&quot;</span>), {<span class="ruby-value">:with_credential</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">as_credential</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-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">results</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-exist-3F" class="method-detail ">
<div class="method-heading">
<span class="method-name">exist?</span><span
class="method-args">(subpath=&quot;&quot;)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="exist-3F-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 1127</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">exist?</span>(<span class="ruby-identifier">subpath</span>=<span class="ruby-string">&quot;&quot;</span>)
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">false</span>
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@directory</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;&quot;</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;/&quot;</span>
<span class="ruby-identifier">the_path</span> = (<span class="ruby-ivar">@directory</span>.<span class="ruby-identifier">path</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;/&quot;</span>
<span class="ruby-identifier">subpath</span> = (<span class="ruby-string">&quot;/&quot;</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">the_path</span> = (<span class="ruby-ivar">@directory</span>.<span class="ruby-identifier">path</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-string">&quot;//&quot;</span>, <span class="ruby-string">&quot;/&quot;</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">result</span> = <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">the_path</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-comment"># DB object exist?</span>
<span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">db_path</span>(<span class="ruby-identifier">subpath</span>)
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">result</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-file_system-3F" class="method-detail ">
<div class="method-heading">
<span class="method-name">file_system?</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="file_system-3F-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 1081</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">file_system?</span>()
<span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">directory</span>()
<span class="ruby-keyword">true</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">false</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-get_permissions" class="method-detail ">
<div class="method-heading">
<span class="method-name">get_permissions</span><span
class="method-args">(subpath=&quot;&quot;, the_credential=nil)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="get_permissions-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 2359</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">get_permissions</span>(<span class="ruby-identifier">subpath</span>=<span class="ruby-string">&quot;&quot;</span>, <span class="ruby-identifier">the_credential</span>=<span class="ruby-keyword">nil</span>)
<span class="ruby-identifier">result</span> = []
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@directory</span>
<span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">subpath</span>)
<span class="ruby-identifier">the_profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">subpath</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_profile</span>[<span class="ruby-value">:file_id</span>]
<span class="ruby-identifier">result</span> = <span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:roles</span>][<span class="ruby-value">:vfs</span>].<span class="ruby-identifier">vfs_permission_manifest</span>(<span class="ruby-identifier">the_profile</span>[<span class="ruby-value">:file_id</span>], <span class="ruby-identifier">the_credential</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-comment"># ????</span>
<span class="ruby-comment"># xxx</span>
<span class="ruby-comment"># group_roles = GxG::DB[:authority][:system_credentials]</span>
<span class="ruby-comment"># the_record = {:credential =&gt; group_roles[:administrators], :permissions =&gt; the_profile[:permissions][:owner], :details =&gt; {}}</span>
<span class="ruby-comment"># role = GxG::DB[:authority].role_fetch({:uuid =&gt; the_record[:credential].to_s})</span>
<span class="ruby-comment"># group = GxG::DB[:authority].group_fetch({:uuid =&gt; role[:group_uuid].to_s})</span>
<span class="ruby-comment"># the_record[:details][:role_title] = role[:title]</span>
<span class="ruby-comment"># the_record[:details][:group] = group[:uuid].to_s.to_sym</span>
<span class="ruby-comment"># the_record[:details][:group_title] = group[:title]</span>
<span class="ruby-comment"># result &lt;&lt; the_record</span>
<span class="ruby-comment"># the_record = {:credential =&gt; group_roles[:developers], :permissions =&gt; the_profile[:permissions][:group], :details =&gt; {}}</span>
<span class="ruby-comment"># role = GxG::DB[:authority].role_fetch({:uuid =&gt; the_record[:credential].to_s})</span>
<span class="ruby-comment"># group = GxG::DB[:authority].group_fetch({:uuid =&gt; role[:group_uuid].to_s})</span>
<span class="ruby-comment"># the_record[:details][:role_title] = role[:title]</span>
<span class="ruby-comment"># the_record[:details][:group] = group[:uuid].to_s.to_sym</span>
<span class="ruby-comment"># the_record[:details][:group_title] = group[:title]</span>
<span class="ruby-comment"># result &lt;&lt; the_record</span>
<span class="ruby-comment"># the_record = {:credential =&gt; group_roles[:designers], :permissions =&gt; the_profile[:permissions][:group], :details =&gt; {}}</span>
<span class="ruby-comment"># role = GxG::DB[:authority].role_fetch({:uuid =&gt; the_record[:credential].to_s})</span>
<span class="ruby-comment"># group = GxG::DB[:authority].group_fetch({:uuid =&gt; role[:group_uuid].to_s})</span>
<span class="ruby-comment"># the_record[:details][:role_title] = role[:title]</span>
<span class="ruby-comment"># the_record[:details][:group] = group[:uuid].to_s.to_sym</span>
<span class="ruby-comment"># the_record[:details][:group_title] = group[:title]</span>
<span class="ruby-comment"># result &lt;&lt; the_record</span>
<span class="ruby-comment"># the_record = {:credential =&gt; :&quot;00000000-0000-4000-0000-000000000000&quot;, :permissions =&gt; the_profile[:permissions][:other], :details =&gt; {}}</span>
<span class="ruby-comment"># user = GxG::DB[:authority].user_fetch({:uuid =&gt; the_record[:credential].to_s})</span>
<span class="ruby-comment"># the_record[:details][:user_title] = user[:user_id]</span>
<span class="ruby-comment"># result &lt;&lt; the_record</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">subpath</span>)
<span class="ruby-identifier">the_profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">subpath</span>)
<span class="ruby-identifier">result</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">element_permissions_by_uuid</span>(<span class="ruby-identifier">the_profile</span>[<span class="ruby-value">:uuid</span>])
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">result</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-inspect" class="method-detail ">
<div class="method-heading">
<span class="method-name">inspect</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="inspect-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 1065</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">inspect</span>()
<span class="ruby-node">&quot;&lt;Volume: #{(@database || @directory).inspect}&gt;&quot;</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-mkdir" class="method-detail ">
<div class="method-heading">
<span class="method-name">mkdir</span><span
class="method-args">(subpath=&quot;&quot;, permissions=nil)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="mkdir-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 2233</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">mkdir</span>(<span class="ruby-identifier">subpath</span>=<span class="ruby-string">&quot;&quot;</span>, <span class="ruby-identifier">permissions</span>=<span class="ruby-keyword">nil</span>)
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">false</span>
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@directory</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;&quot;</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;/&quot;</span>
<span class="ruby-identifier">the_path</span> = (<span class="ruby-ivar">@directory</span>.<span class="ruby-identifier">path</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;/&quot;</span>
<span class="ruby-identifier">subpath</span> = (<span class="ruby-string">&quot;/&quot;</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">the_path</span> = (<span class="ruby-ivar">@directory</span>.<span class="ruby-identifier">path</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-string">&quot;//&quot;</span>, <span class="ruby-string">&quot;/&quot;</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">perm</span> = <span class="ruby-value">16384</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>)
<span class="ruby-comment"># Best if you pass the entire :permissions hash from a profile query</span>
<span class="ruby-string">&quot;040000&quot;</span>.<span class="ruby-identifier">each_char_with_index</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">digit</span>, <span class="ruby-identifier">indexer</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">case</span> <span class="ruby-identifier">indexer</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">0</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">1</span>
<span class="ruby-comment"># TODO: process other flags</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">2</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">3</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>[<span class="ruby-value">:owner</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>[<span class="ruby-value">:owner</span>][<span class="ruby-value">:execute</span>]
<span class="ruby-identifier">perm</span> <span class="ruby-operator">+=</span> <span class="ruby-value">256</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>[<span class="ruby-value">:owner</span>][<span class="ruby-value">:write</span>]
<span class="ruby-identifier">perm</span> <span class="ruby-operator">+=</span> <span class="ruby-value">128</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>[<span class="ruby-value">:owner</span>][<span class="ruby-value">:read</span>]
<span class="ruby-identifier">perm</span> <span class="ruby-operator">+=</span> <span class="ruby-value">64</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">4</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>[<span class="ruby-value">:group</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>[<span class="ruby-value">:group</span>][<span class="ruby-value">:execute</span>]
<span class="ruby-identifier">perm</span> <span class="ruby-operator">+=</span> <span class="ruby-value">32</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>[<span class="ruby-value">:group</span>][<span class="ruby-value">:write</span>]
<span class="ruby-identifier">perm</span> <span class="ruby-operator">+=</span> <span class="ruby-value">16</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>[<span class="ruby-value">:group</span>][<span class="ruby-value">:read</span>]
<span class="ruby-identifier">perm</span> <span class="ruby-operator">+=</span> <span class="ruby-value">8</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">5</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>[<span class="ruby-value">:other</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>[<span class="ruby-value">:other</span>][<span class="ruby-value">:execute</span>]
<span class="ruby-identifier">perm</span> <span class="ruby-operator">+=</span> <span class="ruby-value">4</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>[<span class="ruby-value">:other</span>][<span class="ruby-value">:write</span>]
<span class="ruby-identifier">perm</span> <span class="ruby-operator">+=</span> <span class="ruby-value">2</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>[<span class="ruby-value">:other</span>][<span class="ruby-value">:read</span>]
<span class="ruby-identifier">perm</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</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">#</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">base_profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-string">&quot;/&quot;</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">base_profile</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">base_profile</span>[<span class="ruby-value">:mode</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">String</span>)
<span class="ruby-identifier">perm</span> = <span class="ruby-identifier">base_profile</span>[<span class="ruby-value">:mode</span>].<span class="ruby-identifier">to_i</span>(<span class="ruby-identifier">base</span>=<span class="ruby-value">8</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">perm</span> = <span class="ruby-value">16877</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">perm</span> = <span class="ruby-value">16877</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment"># FS mkdir</span>
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">parent_profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">dirname</span>(<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>))
<span class="ruby-keyword">if</span> <span class="ruby-identifier">parent_profile</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">parent_profile</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:effective</span>][<span class="ruby-value">:create</span>]
<span class="ruby-keyword">if</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">the_path</span>)
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> <span class="ruby-operator">::</span><span class="ruby-constant">Dir</span><span class="ruby-operator">::</span><span class="ruby-identifier">mkdir</span>(<span class="ruby-identifier">the_path</span>, <span class="ruby-identifier">perm</span>) <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
<span class="ruby-comment"># Generate VFS-DB permissions, return result</span>
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">subpath</span>)
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;You do not have create permissions here&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;Invalid path&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=&gt;</span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_path</span>, <span class="ruby-value">:permissions</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">permissions</span>}})
<span class="ruby-comment">#</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-comment"># DB dir create</span>
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">parent_profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">dirname</span>(<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>))
<span class="ruby-keyword">if</span> <span class="ruby-identifier">parent_profile</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">parent_profile</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:effective</span>][<span class="ruby-value">:create</span>] <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
<span class="ruby-identifier">new_object</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">try_persist</span>([], <span class="ruby-ivar">@credential</span>)
<span class="ruby-identifier">new_object</span>.<span class="ruby-identifier">wait_for_reservation</span>
<span class="ruby-identifier">new_object</span>.<span class="ruby-identifier">set_title</span>(<span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">basename</span>(<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>))
<span class="ruby-comment"># ### Fashion a link under the parent uuid.</span>
<span class="ruby-identifier">new_ordinal</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:array_elements</span>].<span class="ruby-identifier">filter</span>({<span class="ruby-value">:parent_uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">parent_profile</span>[<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_s</span>}).<span class="ruby-identifier">count</span>
<span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:array_elements</span>].<span class="ruby-identifier">insert</span>({<span class="ruby-value">:parent_uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">parent_profile</span>[<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_s</span>, <span class="ruby-value">:version</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">new_object</span>.<span class="ruby-identifier">version</span>(), <span class="ruby-value">:ordinal</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">new_ordinal</span>, <span class="ruby-value">:element</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-string">&quot;element_array&quot;</span>, <span class="ruby-value">:element_array_uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">new_object</span>.<span class="ruby-identifier">uuid</span>.<span class="ruby-identifier">to_s</span>})
<span class="ruby-comment"># ### Wrap up and return new object</span>
<span class="ruby-identifier">new_object</span>.<span class="ruby-identifier">release_reservation</span>
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;You do not have create permissions here&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;Invalid path&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=&gt;</span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">subpath</span>, <span class="ruby-value">:permissions</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">permissions</span>}})
<span class="ruby-comment">#</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">result</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-open" class="method-detail ">
<div class="method-heading">
<span class="method-name">open</span><span
class="method-args">(subpath=&quot;&quot;, options={})</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="open-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 1974</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">open</span>(<span class="ruby-identifier">subpath</span>=<span class="ruby-string">&quot;&quot;</span>, <span class="ruby-identifier">options</span>={})
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@directory</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;&quot;</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;/&quot;</span>
<span class="ruby-identifier">the_path</span> = (<span class="ruby-ivar">@directory</span>.<span class="ruby-identifier">path</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;/&quot;</span>
<span class="ruby-identifier">subpath</span> = (<span class="ruby-string">&quot;/&quot;</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">the_path</span> = (<span class="ruby-ivar">@directory</span>.<span class="ruby-identifier">path</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-string">&quot;//&quot;</span>, <span class="ruby-string">&quot;/&quot;</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">flags</span> = <span class="ruby-value">0</span>
<span class="ruby-identifier">flag_array</span> = (<span class="ruby-identifier">options</span>[<span class="ruby-value">:flags</span>] <span class="ruby-operator">||</span> [<span class="ruby-value">:readwrite</span>])
<span class="ruby-identifier">flag_array</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_flag</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">case</span> <span class="ruby-identifier">the_flag</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:append</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">APPEND</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:binary</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">BINARY</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:create</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">CREAT</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:direct</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">DIRECT</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:dsync</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">DSYNC</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:duplex</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">DUPLEX</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:exclusive</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">EXCL</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:casefold</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">FNM_CASEFOLD</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:dotmatch</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">FNM_DOTMATCH</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:no_escape</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">FNM_NOESCAPE</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:pathname</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">FNM_PATHNAME</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:system_case</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">FNM_SYSCASE</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:lock_ex</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">LOCK_EX</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:lock_nb</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">LOCK_NB</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:lock_sh</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">LOCK_SH</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:lock_un</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">LOCK_UN</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:no_atime</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">NOATIME</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:no_ctty</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">NOCTTY</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:no_follow</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">NOFOLLOW</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:nonblock</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">NONBLOCK</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:read</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">RDONLY</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:rsync</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">RSYNC</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:seek_cur</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">SEEK_CUR</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:seek_end</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">SEEK_END</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:seek_set</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">SEEK_SET</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:setenc_by_bom</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">SETENC_BY_BOM</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:sync</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">SYNC</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:text</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">TEXT</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:truncate</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">TRUNC</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:tty</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">TTY</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:write</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">WRONLY</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:readwrite</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">RDWR</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:wsplit</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">WSPLIT</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:wsplit_initialized</span>
<span class="ruby-identifier">flags</span> <span class="ruby-operator">+=</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">WSPLIT_INITIALIZED</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">perm</span> = <span class="ruby-value">16384</span>
<span class="ruby-identifier">permissions</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:permissions</span>]
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>)
<span class="ruby-comment"># Best if you pass the entire :permissions hash from a profile query</span>
<span class="ruby-string">&quot;040000&quot;</span>.<span class="ruby-identifier">each_char_with_index</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">digit</span>, <span class="ruby-identifier">indexer</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">case</span> <span class="ruby-identifier">indexer</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">0</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">1</span>
<span class="ruby-comment"># TODO: process other flags</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">2</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">3</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>[<span class="ruby-value">:owner</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>[<span class="ruby-value">:owner</span>][<span class="ruby-value">:execute</span>]
<span class="ruby-identifier">perm</span> <span class="ruby-operator">+=</span> <span class="ruby-value">256</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>[<span class="ruby-value">:owner</span>][<span class="ruby-value">:write</span>]
<span class="ruby-identifier">perm</span> <span class="ruby-operator">+=</span> <span class="ruby-value">128</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>[<span class="ruby-value">:owner</span>][<span class="ruby-value">:read</span>]
<span class="ruby-identifier">perm</span> <span class="ruby-operator">+=</span> <span class="ruby-value">64</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">4</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>[<span class="ruby-value">:group</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>[<span class="ruby-value">:group</span>][<span class="ruby-value">:execute</span>]
<span class="ruby-identifier">perm</span> <span class="ruby-operator">+=</span> <span class="ruby-value">32</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>[<span class="ruby-value">:group</span>][<span class="ruby-value">:write</span>]
<span class="ruby-identifier">perm</span> <span class="ruby-operator">+=</span> <span class="ruby-value">16</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>[<span class="ruby-value">:group</span>][<span class="ruby-value">:read</span>]
<span class="ruby-identifier">perm</span> <span class="ruby-operator">+=</span> <span class="ruby-value">8</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">5</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>[<span class="ruby-value">:other</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>[<span class="ruby-value">:other</span>][<span class="ruby-value">:execute</span>]
<span class="ruby-identifier">perm</span> <span class="ruby-operator">+=</span> <span class="ruby-value">4</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>[<span class="ruby-value">:other</span>][<span class="ruby-value">:write</span>]
<span class="ruby-identifier">perm</span> <span class="ruby-operator">+=</span> <span class="ruby-value">2</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">permissions</span>[<span class="ruby-value">:other</span>][<span class="ruby-value">:read</span>]
<span class="ruby-identifier">perm</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</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">#</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">base_profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-string">&quot;/&quot;</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">base_profile</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">base_profile</span>[<span class="ruby-value">:mode</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">String</span>)
<span class="ruby-identifier">perm</span> = (<span class="ruby-identifier">base_profile</span>[<span class="ruby-value">:mode</span>][<span class="ruby-value">0</span><span class="ruby-operator">..</span><span class="ruby-value">2</span>].<span class="ruby-identifier">to_s</span> <span class="ruby-operator">+</span> <span class="ruby-string">&quot;644&quot;</span>).<span class="ruby-identifier">to_i</span>(<span class="ruby-identifier">base</span>=<span class="ruby-value">8</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">perm</span> = <span class="ruby-value">16804</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">perm</span> = <span class="ruby-value">16804</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment"># FS</span>
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">parent_profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">dirname</span>(<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>))
<span class="ruby-keyword">if</span> <span class="ruby-identifier">parent_profile</span>
<span class="ruby-keyword">if</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">the_path</span>)
<span class="ruby-keyword">if</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">directory?</span>(<span class="ruby-identifier">the_path</span>)
<span class="ruby-identifier">result</span> = <span class="ruby-operator">::</span><span class="ruby-constant">Dir</span><span class="ruby-operator">::</span><span class="ruby-identifier">new</span>(<span class="ruby-identifier">the_path</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">flag_array</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-value">:read</span>)
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">parent_profile</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:effective</span>][<span class="ruby-value">:read</span>]
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;You do not have read permissions here.&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">flag_array</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-value">:write</span>)
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">parent_profile</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:effective</span>][<span class="ruby-value">:write</span>]
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;You do not have write permissions here.&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">flag_array</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-value">:readwrite</span>)
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">parent_profile</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:effective</span>][<span class="ruby-value">:read</span>]
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;You do not have read permissions here.&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">parent_profile</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:effective</span>][<span class="ruby-value">:write</span>]
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;You do not have write permissions here.&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-operator">::</span><span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">Engine</span><span class="ruby-operator">::</span><span class="ruby-identifier">available_file_descriptors</span>() <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
<span class="ruby-identifier">result</span> = <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">open</span>(<span class="ruby-identifier">the_path</span>, <span class="ruby-identifier">flags</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;Maximum File Descriptor count exceeded. Aborting&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">parent_profile</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:effective</span>][<span class="ruby-value">:create</span>]
<span class="ruby-keyword">if</span> <span class="ruby-operator">::</span><span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">Engine</span><span class="ruby-operator">::</span><span class="ruby-identifier">available_file_descriptors</span>() <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
<span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">new</span>(<span class="ruby-identifier">the_path</span>, <span class="ruby-string">&quot;w&quot;</span>, <span class="ruby-identifier">perm</span>).<span class="ruby-identifier">close</span>
<span class="ruby-identifier">result</span> = <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">open</span>(<span class="ruby-identifier">the_path</span>, <span class="ruby-identifier">flags</span>)
<span class="ruby-comment"># Generate VFS-DB permissions, return result</span>
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">subpath</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;Maximum File Descriptor count exceeded. Aborting&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;You do not have create permissions here&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;Invalid path&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=&gt;</span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">options</span>}})
<span class="ruby-comment">#</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-comment"># DB open/create :persisted_hash</span>
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">path_array</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">db_path</span>(<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">path_array</span>
<span class="ruby-identifier">profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">profile</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:effective</span>][<span class="ruby-value">:read</span>]
<span class="ruby-identifier">result</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">retrieve_by_uuid</span>(<span class="ruby-identifier">path_array</span>.<span class="ruby-identifier">last</span>[<span class="ruby-value">:uuid</span>], <span class="ruby-ivar">@credential</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-comment"># Review : keep? this breaks the &#39;if you don&#39;t have privs you can&#39;t see it - no errors, security through obscurity&#39; idea.</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;You do not have read permissions on this object&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">parent_profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">dirname</span>(<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>))
<span class="ruby-keyword">if</span> <span class="ruby-identifier">parent_profile</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">parent_profile</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:effective</span>][<span class="ruby-value">:create</span>] <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:format</span>]
<span class="ruby-keyword">if</span> <span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-identifier">valid_uuid?</span>(<span class="ruby-identifier">options</span>[<span class="ruby-value">:format</span>])
<span class="ruby-identifier">new_object</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">new_structure_from_format</span>(<span class="ruby-ivar">@credential</span>,{<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:format</span>]})
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">new_object</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">new_structure_from_format</span>(<span class="ruby-ivar">@credential</span>,{<span class="ruby-value">:ufs</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:format</span>]})
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:ufs</span>]
<span class="ruby-identifier">new_object</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">new_structure_from_format</span>(<span class="ruby-ivar">@credential</span>,{<span class="ruby-value">:ufs</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:ufs</span>]})
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">new_object</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">try_persist</span>({}, <span class="ruby-ivar">@credential</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment"># ### allow to create the object with a specific UUID.</span>
<span class="ruby-keyword">if</span> <span class="ruby-operator">::</span><span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-identifier">valid_uuid?</span>(<span class="ruby-identifier">options</span>[<span class="ruby-value">:with_uuid</span>])
<span class="ruby-identifier">address</span> = <span class="ruby-identifier">new_object</span>.<span class="ruby-identifier">db_address</span>()
<span class="ruby-identifier">new_object</span>.<span class="ruby-identifier">deactivate</span>
<span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[(<span class="ruby-identifier">address</span>[<span class="ruby-value">:table</span>])].<span class="ruby-identifier">filter</span>({<span class="ruby-value">:dbid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">address</span>[<span class="ruby-value">:dbid</span>]}).<span class="ruby-identifier">first</span>.<span class="ruby-identifier">update</span>({<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:with_uuid</span>].<span class="ruby-identifier">to_s</span>})
<span class="ruby-identifier">new_object</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">retrieve_by_uuid</span>(<span class="ruby-identifier">options</span>[<span class="ruby-value">:with_uuid</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_sym</span>, <span class="ruby-ivar">@credential</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-identifier">new_object</span>.<span class="ruby-identifier">wait_for_reservation</span>
<span class="ruby-identifier">new_object</span>.<span class="ruby-identifier">set_title</span>(<span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">basename</span>(<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>))
<span class="ruby-comment"># ### Fashion a link under the parent uuid.</span>
<span class="ruby-identifier">new_ordinal</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:array_elements</span>].<span class="ruby-identifier">filter</span>({<span class="ruby-value">:parent_uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">parent_profile</span>[<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_s</span>}).<span class="ruby-identifier">count</span>
<span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:array_elements</span>].<span class="ruby-identifier">insert</span>({<span class="ruby-value">:parent_uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">parent_profile</span>[<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_s</span>, <span class="ruby-value">:version</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">new_object</span>.<span class="ruby-identifier">version</span>(), <span class="ruby-value">:ordinal</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">new_ordinal</span>, <span class="ruby-value">:element</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-string">&quot;element_hash&quot;</span>, <span class="ruby-value">:element_hash_uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">new_object</span>.<span class="ruby-identifier">uuid</span>.<span class="ruby-identifier">to_s</span>})
<span class="ruby-comment"># ### Wrap up and return new object</span>
<span class="ruby-identifier">new_object</span>.<span class="ruby-identifier">release_reservation</span>
<span class="ruby-identifier">result</span> = <span class="ruby-identifier">new_object</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;You do not have create permissions here&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;Invalid path&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=&gt;</span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">options</span>}})
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">result</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-profile" class="method-detail ">
<div class="method-heading">
<span class="method-name">profile</span><span
class="method-args">(subpath=&quot;&quot;,params={:follow_symlinks =&gt; true})</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="profile-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 1148</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">profile</span>(<span class="ruby-identifier">subpath</span>=<span class="ruby-string">&quot;&quot;</span>,<span class="ruby-identifier">params</span>={<span class="ruby-value">:follow_symlinks</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">true</span>})
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">params</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>)
<span class="ruby-identifier">params</span> = {<span class="ruby-value">:follow_symlinks</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">true</span>}
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:follow_symlinks</span>]
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">params</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-value">:follow_symlinks</span>)
<span class="ruby-identifier">params</span>[<span class="ruby-value">:follow_symlinks</span>] = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">platform_details</span> = <span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">SYSTEM</span>.<span class="ruby-identifier">platform</span>()
<span class="ruby-identifier">result</span> = {<span class="ruby-value">:title</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-string">&quot;&quot;</span>, <span class="ruby-value">:type</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-value">:unspecified</span>, <span class="ruby-value">:owner_type</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-value">:unspecified</span>, <span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:version</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-value">0.0</span>, <span class="ruby-value">:on_device</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:on_device_major</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:on_device_minor</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:is_device</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:is_device_major</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:is_device_minor</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:inode</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:flags</span> <span class="ruby-operator">=&gt;</span> [<span class="ruby-value">:read</span>], <span class="ruby-value">:hardlinks_to</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-value">0</span>, <span class="ruby-value">:user_id</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:group_id</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:size</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-value">0</span>, <span class="ruby-value">:block_size</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-value">0</span>, <span class="ruby-value">:blocks</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-value">0</span>, <span class="ruby-value">:accessed</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:modified</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:status_modified</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:permissions</span> <span class="ruby-operator">=&gt;</span> {<span class="ruby-value">:effective</span> <span class="ruby-operator">=&gt;</span> {<span class="ruby-value">:execute</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:rename</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:move</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:destroy</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:create</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:write</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:read</span><span class="ruby-operator">=&gt;</span><span class="ruby-keyword">false</span>}}, <span class="ruby-value">:mode</span><span class="ruby-operator">=&gt;</span><span class="ruby-keyword">nil</span>, <span class="ruby-value">:mime</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>}
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@directory</span>
<span class="ruby-comment"># return FS object profile</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:title</span>] = (<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">split</span>(<span class="ruby-string">&quot;/&quot;</span>).<span class="ruby-identifier">last</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;&quot;</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;/&quot;</span>
<span class="ruby-identifier">the_path</span> = (<span class="ruby-ivar">@directory</span>.<span class="ruby-identifier">path</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;/&quot;</span>
<span class="ruby-identifier">subpath</span> = (<span class="ruby-string">&quot;/&quot;</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">the_path</span> = (<span class="ruby-ivar">@directory</span>.<span class="ruby-identifier">path</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-string">&quot;//&quot;</span>, <span class="ruby-string">&quot;/&quot;</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">params</span>[<span class="ruby-value">:follow_symlinks</span>]
<span class="ruby-identifier">raw_stat</span> = <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">stat</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raw_stat</span> = <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">lstat</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">raw_mode</span> = <span class="ruby-identifier">raw_stat</span>.<span class="ruby-identifier">mode</span>.<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">base</span>=<span class="ruby-value">8</span>)
<span class="ruby-comment"># puts &quot;Got: #{raw_mode}&quot;</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">raw_mode</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">6</span>
<span class="ruby-identifier">raw_mode</span> = (<span class="ruby-string">&quot;0&quot;</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">raw_mode</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-comment"># puts &quot;Then Got: #{raw_mode}&quot;</span>
<span class="ruby-identifier">set_user_id</span> = <span class="ruby-keyword">false</span>
<span class="ruby-identifier">set_group_id</span> = <span class="ruby-keyword">false</span>
<span class="ruby-identifier">set_sticky_bit</span> = <span class="ruby-keyword">false</span>
<span class="ruby-keyword">if</span> (<span class="ruby-identifier">raw_mode</span>[<span class="ruby-value">2</span>].<span class="ruby-identifier">to_i</span> <span class="ruby-operator">&amp;</span> <span class="ruby-value">4</span>) <span class="ruby-operator">==</span> <span class="ruby-value">4</span>
<span class="ruby-identifier">set_user_id</span> = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> (<span class="ruby-identifier">raw_mode</span>[<span class="ruby-value">2</span>].<span class="ruby-identifier">to_i</span> <span class="ruby-operator">&amp;</span> <span class="ruby-value">2</span>) <span class="ruby-operator">==</span> <span class="ruby-value">2</span>
<span class="ruby-identifier">set_group_id</span> = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> (<span class="ruby-identifier">raw_mode</span>[<span class="ruby-value">2</span>].<span class="ruby-identifier">to_i</span> <span class="ruby-operator">&amp;</span> <span class="ruby-value">1</span>) <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
<span class="ruby-identifier">set_sticky_bit</span> = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">raw_permission</span> = { <span class="ruby-value">:execute</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:rename</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:move</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:destroy</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:create</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:write</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:read</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">false</span> }
<span class="ruby-keyword">case</span> <span class="ruby-identifier">raw_stat</span>.<span class="ruby-identifier">ftype</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">downcase</span>.<span class="ruby-identifier">to_sym</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:link</span>
<span class="ruby-comment"># are .lnk files handled properly on win32 for this?</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:type</span>] = <span class="ruby-value">:symlink</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:file</span>
<span class="ruby-identifier">the_extension</span> = <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">basename</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>).<span class="ruby-identifier">split</span>(<span class="ruby-string">&quot;.&quot;</span>)[<span class="ruby-value">-1</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">downcase</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_extension</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;lnk&quot;</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:type</span>] = <span class="ruby-value">:symlink</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> [<span class="ruby-string">&quot;so&quot;</span>,<span class="ruby-string">&quot;la&quot;</span>,<span class="ruby-string">&quot;a&quot;</span>,<span class="ruby-string">&quot;dylib&quot;</span>,<span class="ruby-string">&quot;dll&quot;</span>,<span class="ruby-string">&quot;class&quot;</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">the_extension</span>)
<span class="ruby-identifier">result</span>[<span class="ruby-value">:type</span>] = <span class="ruby-value">:library</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> ([<span class="ruby-string">&quot;out&quot;</span>,<span class="ruby-string">&quot;exe&quot;</span>,<span class="ruby-string">&quot;misc&quot;</span>,<span class="ruby-string">&quot;java&quot;</span>,<span class="ruby-string">&quot;jar&quot;</span>, <span class="ruby-string">&quot;sh&quot;</span>, <span class="ruby-string">&quot;rb&quot;</span>, <span class="ruby-string">&quot;py&quot;</span>, <span class="ruby-string">&quot;pyc&quot;</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">the_extension</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">raw_stat</span>.<span class="ruby-identifier">executable_real?</span>)
<span class="ruby-identifier">result</span>[<span class="ruby-value">:type</span>] = <span class="ruby-value">:application</span>
<span class="ruby-keyword">else</span>
<span class="ruby-comment"># TODO: find a way to externally sense if a tty</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:type</span>] = <span class="ruby-value">:file</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:fifo</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:type</span>] = <span class="ruby-value">:fifo</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:characterspecial</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:type</span>] = <span class="ruby-value">:character_device</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:blockspecial</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:type</span>] = <span class="ruby-value">:block_device</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:socket</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:type</span>] = <span class="ruby-value">:socket</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:directory</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:type</span>] = <span class="ruby-value">:directory</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:unknown</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:type</span>] = <span class="ruby-value">:unknown</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">raw_stat</span>.<span class="ruby-identifier">pipe?</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:type</span>] = <span class="ruby-value">:pipe</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">raw_stat</span>.<span class="ruby-identifier">pipe?</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:type</span>] = <span class="ruby-value">:pipe</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:owner_type</span>] = <span class="ruby-identifier">result</span>[<span class="ruby-value">:type</span>]
<span class="ruby-identifier">result</span>[<span class="ruby-value">:on_device</span>] = <span class="ruby-identifier">raw_stat</span>.<span class="ruby-identifier">dev</span>.<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">base</span>=<span class="ruby-value">10</span>).<span class="ruby-identifier">to_i</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">result</span>[<span class="ruby-value">:on_device</span>]
<span class="ruby-identifier">result</span>[<span class="ruby-value">:on_device_major</span>] = <span class="ruby-identifier">raw_stat</span>.<span class="ruby-identifier">dev_major</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:on_device_minor</span>] = <span class="ruby-identifier">raw_stat</span>.<span class="ruby-identifier">dev_minor</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:is_device</span>] = <span class="ruby-identifier">raw_stat</span>.<span class="ruby-identifier">rdev</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">result</span>[<span class="ruby-value">:is_device</span>]
<span class="ruby-identifier">result</span>[<span class="ruby-value">:is_device_major</span>] = <span class="ruby-identifier">raw_stat</span>.<span class="ruby-identifier">rdev_major</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:is_device_minor</span>] = <span class="ruby-identifier">raw_stat</span>.<span class="ruby-identifier">rdev_minor</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:inode</span>] = <span class="ruby-identifier">raw_stat</span>.<span class="ruby-identifier">ino</span>.<span class="ruby-identifier">to_i</span>
<span class="ruby-comment"># ### :file_id</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:file_id</span>] = <span class="ruby-node">&quot;#{(result[:on_device] || 0).to_s}-#{(result[:on_device_major] || 0).to_s}-#{(result[:on_device_minor] || 0).to_s}-#{(result[:inode] || 0).to_s}&quot;</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:flags</span>] = []
<span class="ruby-keyword">if</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">writable_real?</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-identifier">result</span>[<span class="ruby-value">:flags</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:write</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">readable_real?</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-identifier">result</span>[<span class="ruby-value">:flags</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:read</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:hardlinks_to</span>] = <span class="ruby-identifier">raw_stat</span>.<span class="ruby-identifier">nlink</span>.<span class="ruby-identifier">to_i</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:user_id</span>] = <span class="ruby-identifier">raw_stat</span>.<span class="ruby-identifier">uid</span>.<span class="ruby-identifier">to_i</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:group_id</span>] = <span class="ruby-identifier">raw_stat</span>.<span class="ruby-identifier">gid</span>.<span class="ruby-identifier">to_i</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:size</span>] = <span class="ruby-identifier">raw_stat</span>.<span class="ruby-identifier">size</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:block_size</span>] = <span class="ruby-identifier">raw_stat</span>.<span class="ruby-identifier">blksize</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:blocks</span>] = <span class="ruby-identifier">raw_stat</span>.<span class="ruby-identifier">blocks</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:version</span>] = <span class="ruby-identifier">raw_stat</span>.<span class="ruby-identifier">mtime</span>.<span class="ruby-identifier">to_f</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:accessed</span>] = <span class="ruby-constant">DateTime</span><span class="ruby-operator">::</span><span class="ruby-identifier">parse</span>(<span class="ruby-identifier">raw_stat</span>.<span class="ruby-identifier">atime</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-identifier">result</span>[<span class="ruby-value">:modified</span>] = <span class="ruby-constant">DateTime</span><span class="ruby-operator">::</span><span class="ruby-identifier">parse</span>(<span class="ruby-identifier">raw_stat</span>.<span class="ruby-identifier">mtime</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-identifier">result</span>[<span class="ruby-value">:status_modified</span>] = <span class="ruby-constant">DateTime</span><span class="ruby-operator">::</span><span class="ruby-identifier">parse</span>(<span class="ruby-identifier">raw_stat</span>.<span class="ruby-identifier">ctime</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-comment"># File permissions work in an ACL style, even if based only upon Unix-style permissions.</span>
<span class="ruby-comment">#</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>] = {<span class="ruby-value">:effective</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">raw_permission</span>.<span class="ruby-identifier">clone</span>, <span class="ruby-value">:owner</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">raw_permission</span>.<span class="ruby-identifier">clone</span>, <span class="ruby-value">:group</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">raw_permission</span>.<span class="ruby-identifier">clone</span>, <span class="ruby-value">:other</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">raw_permission</span>.<span class="ruby-identifier">clone</span>}
<span class="ruby-keyword">if</span> <span class="ruby-identifier">set_user_id</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:flags</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:user_id_on_execute</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">set_group_id</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:flags</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:group_id_on_execute</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">set_sticky_bit</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:flags</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">:sticky_bit</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-comment"># owner permissions</span>
<span class="ruby-keyword">if</span> (<span class="ruby-identifier">raw_mode</span>[<span class="ruby-value">3</span>].<span class="ruby-identifier">to_i</span> <span class="ruby-operator">&amp;</span> <span class="ruby-value">4</span>) <span class="ruby-operator">==</span> <span class="ruby-value">4</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:owner</span>][<span class="ruby-value">:read</span>] = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> (<span class="ruby-identifier">raw_mode</span>[<span class="ruby-value">3</span>].<span class="ruby-identifier">to_i</span> <span class="ruby-operator">&amp;</span> <span class="ruby-value">2</span>) <span class="ruby-operator">==</span> <span class="ruby-value">2</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:owner</span>][<span class="ruby-value">:write</span>] = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">platform_details</span>[<span class="ruby-value">:platform</span>] <span class="ruby-operator">==</span> <span class="ruby-value">:windows</span>
<span class="ruby-comment"># :windows way of reading :rename, :move, and :destroy permission for file/directory.</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:owner</span>][<span class="ruby-value">:rename</span>] = <span class="ruby-keyword">true</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:owner</span>][<span class="ruby-value">:move</span>] = <span class="ruby-keyword">true</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:owner</span>][<span class="ruby-value">:destroy</span>] = <span class="ruby-keyword">true</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:owner</span>][<span class="ruby-value">:create</span>] = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> (<span class="ruby-identifier">raw_mode</span>[<span class="ruby-value">3</span>].<span class="ruby-identifier">to_i</span> <span class="ruby-operator">&amp;</span> <span class="ruby-value">1</span>) <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:owner</span>][<span class="ruby-value">:execute</span>] = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment"># group permissions</span>
<span class="ruby-keyword">if</span> (<span class="ruby-identifier">raw_mode</span>[<span class="ruby-value">4</span>].<span class="ruby-identifier">to_i</span> <span class="ruby-operator">&amp;</span> <span class="ruby-value">4</span>) <span class="ruby-operator">==</span> <span class="ruby-value">4</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:group</span>][<span class="ruby-value">:read</span>] = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> (<span class="ruby-identifier">raw_mode</span>[<span class="ruby-value">4</span>].<span class="ruby-identifier">to_i</span> <span class="ruby-operator">&amp;</span> <span class="ruby-value">2</span>) <span class="ruby-operator">==</span> <span class="ruby-value">2</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:group</span>][<span class="ruby-value">:write</span>] = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">platform_details</span>[<span class="ruby-value">:platform</span>] <span class="ruby-operator">==</span> <span class="ruby-value">:windows</span>
<span class="ruby-comment"># :windows way of reading :rename, :move, and :destroy permission for file/directory.</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:group</span>][<span class="ruby-value">:rename</span>] = <span class="ruby-keyword">true</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:group</span>][<span class="ruby-value">:move</span>] = <span class="ruby-keyword">true</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:group</span>][<span class="ruby-value">:destroy</span>] = <span class="ruby-keyword">true</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:group</span>][<span class="ruby-value">:create</span>] = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> (<span class="ruby-identifier">raw_mode</span>[<span class="ruby-value">4</span>].<span class="ruby-identifier">to_i</span> <span class="ruby-operator">&amp;</span> <span class="ruby-value">1</span>) <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:group</span>][<span class="ruby-value">:execute</span>] = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment"># other permissions</span>
<span class="ruby-keyword">if</span> (<span class="ruby-identifier">raw_mode</span>[<span class="ruby-value">5</span>].<span class="ruby-identifier">to_i</span> <span class="ruby-operator">&amp;</span> <span class="ruby-value">4</span>) <span class="ruby-operator">==</span> <span class="ruby-value">4</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:other</span>][<span class="ruby-value">:read</span>] = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> (<span class="ruby-identifier">raw_mode</span>[<span class="ruby-value">5</span>].<span class="ruby-identifier">to_i</span> <span class="ruby-operator">&amp;</span> <span class="ruby-value">2</span>) <span class="ruby-operator">==</span> <span class="ruby-value">2</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:other</span>][<span class="ruby-value">:write</span>] = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">platform_details</span>[<span class="ruby-value">:platform</span>] <span class="ruby-operator">==</span> <span class="ruby-value">:windows</span>
<span class="ruby-comment"># :windows way of reading :rename, :move, and :destroy permission for file/directory.</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:other</span>][<span class="ruby-value">:rename</span>] = <span class="ruby-keyword">true</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:other</span>][<span class="ruby-value">:move</span>] = <span class="ruby-keyword">true</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:other</span>][<span class="ruby-value">:destroy</span>] = <span class="ruby-keyword">true</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:other</span>][<span class="ruby-value">:create</span>] = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> (<span class="ruby-identifier">raw_mode</span>[<span class="ruby-value">5</span>].<span class="ruby-identifier">to_i</span> <span class="ruby-operator">&amp;</span> <span class="ruby-value">1</span>) <span class="ruby-operator">==</span> <span class="ruby-value">1</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:other</span>][<span class="ruby-value">:execute</span>] = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment"># effective (this user) permissions (while opened, supercedes normal effective file system permissions)</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">result</span>[<span class="ruby-value">:flags</span>].<span class="ruby-identifier">index</span>(<span class="ruby-value">:read</span>)
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:effective</span>][<span class="ruby-value">:read</span>] = <span class="ruby-keyword">true</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment"># ### db-based virtualized permission system keyed by :file_id</span>
<span class="ruby-comment"># ### on non-linux systems - make sure to support the :file_id format subsystem, and map to local-arch-platform equivilents.</span>
<span class="ruby-comment"># search_database(credential, {:ufs =&gt; &quot;the.ufs.code&quot;, :properties =&gt; [{:the_property =&gt; {:equals =&gt; value}}]})</span>
<span class="ruby-keyword">if</span> <span class="ruby-operator">::</span><span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-identifier">valid_uuid?</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:with_credential</span>] <span class="ruby-operator">||</span> <span class="ruby-ivar">@credential</span>)
<span class="ruby-identifier">acts_as</span> = <span class="ruby-value">:group</span>
<span class="ruby-identifier">current_roles</span> = <span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:authority</span>].<span class="ruby-identifier">user_roles</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:with_credential</span>] <span class="ruby-operator">||</span> <span class="ruby-ivar">@credential</span>)
<span class="ruby-identifier">current_roles</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">role_record</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">unless</span> <span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:roles</span>][<span class="ruby-value">:vfs</span>].<span class="ruby-identifier">vfs_permission_exist?</span>(<span class="ruby-identifier">result</span>[<span class="ruby-value">:file_id</span>], <span class="ruby-identifier">role_record</span>[<span class="ruby-value">:credential</span>])
<span class="ruby-keyword">if</span> <span class="ruby-identifier">role_record</span>[<span class="ruby-value">:credential</span>] <span class="ruby-operator">==</span> <span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:authority</span>][<span class="ruby-value">:system_credentials</span>][<span class="ruby-value">:designers</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">role_record</span>[<span class="ruby-value">:credential</span>] <span class="ruby-operator">==</span> <span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:authority</span>][<span class="ruby-value">:system_credentials</span>][<span class="ruby-value">:developers</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">role_record</span>[<span class="ruby-value">:credential</span>] <span class="ruby-operator">==</span> <span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:authority</span>][<span class="ruby-value">:system_credentials</span>][<span class="ruby-value">:administrators</span>]
<span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:roles</span>][<span class="ruby-value">:vfs</span>].<span class="ruby-identifier">create_vfs_permission</span>(<span class="ruby-identifier">result</span>[<span class="ruby-value">:file_id</span>], <span class="ruby-identifier">role_record</span>[<span class="ruby-value">:credential</span>], <span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:owner</span>])
<span class="ruby-identifier">acts_as</span> = <span class="ruby-value">:owner</span>
<span class="ruby-keyword">else</span>
<span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:roles</span>][<span class="ruby-value">:vfs</span>].<span class="ruby-identifier">create_vfs_permission</span>(<span class="ruby-identifier">result</span>[<span class="ruby-value">:file_id</span>], <span class="ruby-identifier">role_record</span>[<span class="ruby-value">:credential</span>], <span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:group</span>])
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">unless</span> <span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:roles</span>][<span class="ruby-value">:vfs</span>].<span class="ruby-identifier">vfs_permission_exist?</span>(<span class="ruby-identifier">result</span>[<span class="ruby-value">:file_id</span>], <span class="ruby-value">:&quot;00000000-0000-4000-0000-000000000000&quot;</span>)
<span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:roles</span>][<span class="ruby-value">:vfs</span>].<span class="ruby-identifier">create_vfs_permission</span>(<span class="ruby-identifier">result</span>[<span class="ruby-value">:file_id</span>], <span class="ruby-value">:&quot;00000000-0000-4000-0000-000000000000&quot;</span>, <span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:other</span>])
<span class="ruby-keyword">end</span>
<span class="ruby-comment"># ### Review : should I support individual permissions at all, or rather confine it to roles and the public id?</span>
<span class="ruby-comment"># unless GxG::DB[:roles][:vfs].vfs_permission_exist?(result[:file_id], (params[:with_credential] || @credential))</span>
<span class="ruby-comment"># if acts_as == :owner</span>
<span class="ruby-comment"># GxG::DB[:roles][:vfs].create_vfs_permission(result[:file_id], (params[:with_credential] || @credential), result[:permissions][:owner])</span>
<span class="ruby-comment"># else</span>
<span class="ruby-comment"># GxG::DB[:roles][:vfs].create_vfs_permission(result[:file_id], (params[:with_credential] || @credential), result[:permissions][:group])</span>
<span class="ruby-comment"># end</span>
<span class="ruby-comment"># end</span>
<span class="ruby-comment">#</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:effective</span>] = <span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:roles</span>][<span class="ruby-value">:vfs</span>].<span class="ruby-identifier">effective_vfs_permission</span>(<span class="ruby-identifier">result</span>[<span class="ruby-value">:file_id</span>], (<span class="ruby-identifier">params</span>[<span class="ruby-value">:with_credential</span>] <span class="ruby-operator">||</span> <span class="ruby-ivar">@credential</span>))
<span class="ruby-comment">#</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-constant">Exception</span>.<span class="ruby-identifier">new</span>(<span class="ruby-node">&quot;Invalid credential: #{params[:with_credential] || @credential}&quot;</span>)})
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>].<span class="ruby-identifier">delete</span>(<span class="ruby-value">:owner</span>)
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>].<span class="ruby-identifier">delete</span>(<span class="ruby-value">:group</span>)
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>].<span class="ruby-identifier">delete</span>(<span class="ruby-value">:other</span>)
<span class="ruby-comment">#</span>
<span class="ruby-comment">#</span>
<span class="ruby-comment"># if @act_as.is_a?(::Symbol) || params[:with_credential]</span>
<span class="ruby-comment"># if ::GxG::valid_uuid?(params[:with_credential])</span>
<span class="ruby-comment"># if GxG::DB[:authority].role_member?(GxG::DB[:authority][:system_credentials][:administrators], params[:with_credential].to_s.to_sym)</span>
<span class="ruby-comment"># now_act_as = :owner</span>
<span class="ruby-comment"># else</span>
<span class="ruby-comment"># if GxG::DB[:authority].role_member?(GxG::DB[:authority][:system_credentials][:developers].to_s.to_sym, params[:with_credential].to_s.to_sym) || GxG::DB[:authority].role_member?(GxG::DB[:authority][:system_credentials][:designers].to_s.to_sym, params[:with_credential].to_s.to_sym)</span>
<span class="ruby-comment"># now_act_as = :group</span>
<span class="ruby-comment"># else</span>
<span class="ruby-comment"># now_act_as = :other</span>
<span class="ruby-comment"># end</span>
<span class="ruby-comment"># end</span>
<span class="ruby-comment"># result[:permissions][:effective] = result[:permissions][(now_act_as)].clone</span>
<span class="ruby-comment"># else</span>
<span class="ruby-comment"># result[:permissions][:effective] = result[:permissions][(@act_as)].clone</span>
<span class="ruby-comment"># end</span>
<span class="ruby-comment"># else</span>
<span class="ruby-comment"># if result[:flags].index(:write)</span>
<span class="ruby-comment"># result[:permissions][:effective][:write] = true</span>
<span class="ruby-comment"># if platform_details[:platform] == :windows</span>
<span class="ruby-comment"># # :windows way of reading :rename, :move, and :destroy permission for file/directory.</span>
<span class="ruby-comment"># else</span>
<span class="ruby-comment"># result[:permissions][:effective][:rename] = true</span>
<span class="ruby-comment"># result[:permissions][:effective][:move] = true</span>
<span class="ruby-comment"># result[:permissions][:effective][:destroy] = true</span>
<span class="ruby-comment"># result[:permissions][:effective][:create] = true</span>
<span class="ruby-comment"># end</span>
<span class="ruby-comment"># end</span>
<span class="ruby-comment"># if raw_stat.executable?</span>
<span class="ruby-comment"># result[:permissions][:effective][:execute] = true</span>
<span class="ruby-comment"># end</span>
<span class="ruby-comment"># end</span>
<span class="ruby-comment">#</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:mode</span>] = <span class="ruby-identifier">raw_mode</span>
<span class="ruby-comment"># Mime type identification:</span>
<span class="ruby-keyword">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">directory?</span>(<span class="ruby-identifier">the_path</span>)
<span class="ruby-identifier">mime_type</span> = <span class="ruby-string">&quot;inode/directory&quot;</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">mime_type</span> = <span class="ruby-constant">MimeMagic</span>.<span class="ruby-identifier">by_extension</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">extname</span>(<span class="ruby-identifier">result</span>[<span class="ruby-value">:title</span>]))
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">mime_type</span>
<span class="ruby-identifier">mime_type</span> = <span class="ruby-constant">MimeMagic</span>.<span class="ruby-identifier">by_path</span>(<span class="ruby-identifier">the_path</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">mime_type</span>
<span class="ruby-identifier">handle</span> = <span class="ruby-operator">::</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">the_path</span>,<span class="ruby-string">&quot;rb&quot;</span>)
<span class="ruby-identifier">handle</span>.<span class="ruby-identifier">rewind</span>
<span class="ruby-identifier">mime_type</span> = <span class="ruby-operator">::</span><span class="ruby-constant">MimeMagic</span>.<span class="ruby-identifier">by_magic</span>(<span class="ruby-identifier">handle</span>)
<span class="ruby-identifier">handle</span>.<span class="ruby-identifier">close</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">mime_type</span>
<span class="ruby-identifier">mime_type</span> = <span class="ruby-identifier">mime_type</span>.<span class="ruby-identifier">type</span>()
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">mime_type</span> = <span class="ruby-string">&quot;application/octet-stream&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:mime</span>] = <span class="ruby-identifier">mime_type</span>
<span class="ruby-comment">#</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">else</span>
<span class="ruby-comment"># return DB object profile</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;/&quot;</span>
<span class="ruby-identifier">subpath</span> = (<span class="ruby-string">&quot;/&quot;</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-identifier">path_array</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">db_path</span>(<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">path_array</span>
<span class="ruby-identifier">object_details</span> = {<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">path_array</span>.<span class="ruby-identifier">last</span>[<span class="ruby-value">:uuid</span>], <span class="ruby-value">:table</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-value">:unspecified</span>, <span class="ruby-value">:dbid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-value">0</span>}
<span class="ruby-identifier">header</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:element_hash</span>].<span class="ruby-identifier">filter</span>({<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">object_details</span>[<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_s</span>}).<span class="ruby-identifier">first</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">header</span>
<span class="ruby-identifier">object_details</span>[<span class="ruby-value">:table</span>] = <span class="ruby-value">:element_hash</span>
<span class="ruby-identifier">object_details</span>[<span class="ruby-value">:dbid</span>] = <span class="ruby-identifier">header</span>[<span class="ruby-value">:dbid</span>]
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">header</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:element_array</span>].<span class="ruby-identifier">filter</span>({<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">object_details</span>[<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_s</span>}).<span class="ruby-identifier">first</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">header</span>
<span class="ruby-identifier">object_details</span>[<span class="ruby-value">:table</span>] = <span class="ruby-value">:element_array</span>
<span class="ruby-identifier">object_details</span>[<span class="ruby-value">:dbid</span>] = <span class="ruby-identifier">header</span>[<span class="ruby-value">:dbid</span>]
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-identifier">result</span> = {<span class="ruby-value">:title</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">path_array</span>.<span class="ruby-identifier">last</span>[<span class="ruby-value">:title</span>], <span class="ruby-value">:type</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-value">:virtual_directory</span>, <span class="ruby-value">:owner_type</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-value">:virtual_directory</span>, <span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">path_array</span>.<span class="ruby-identifier">last</span>[<span class="ruby-value">:uuid</span>], <span class="ruby-value">:version</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">header</span>[<span class="ruby-value">:version</span>], <span class="ruby-value">:on_device</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:on_device_major</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:on_device_minor</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:is_device</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:is_device_major</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:is_device_minor</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:inode</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:file_id</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:flags</span> <span class="ruby-operator">=&gt;</span> [<span class="ruby-value">:read</span>], <span class="ruby-value">:hardlinks_to</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-value">0</span>, <span class="ruby-value">:user_id</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:group_id</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:size</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-value">0</span>, <span class="ruby-value">:block_size</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-value">0</span>, <span class="ruby-value">:blocks</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-value">0</span>, <span class="ruby-value">:accessed</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:modified</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:status_modified</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:permissions</span> <span class="ruby-operator">=&gt;</span> {<span class="ruby-value">:effective</span> <span class="ruby-operator">=&gt;</span> {<span class="ruby-value">:execute</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">true</span>, <span class="ruby-value">:rename</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:move</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:destroy</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:create</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:write</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:read</span><span class="ruby-operator">=&gt;</span><span class="ruby-keyword">true</span>}}, <span class="ruby-value">:mode</span><span class="ruby-operator">=&gt;</span><span class="ruby-keyword">nil</span>, <span class="ruby-value">:mime</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">nil</span>}
<span class="ruby-keyword">if</span> <span class="ruby-identifier">object_details</span>[<span class="ruby-value">:table</span>] <span class="ruby-operator">==</span> <span class="ruby-value">:element_array</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:type</span>] = <span class="ruby-value">:persisted_array</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:owner_type</span>] = <span class="ruby-value">:persisted_array</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:type</span>] = <span class="ruby-value">:persisted_hash</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:owner_type</span>] = <span class="ruby-value">:persisted_hash</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-operator">::</span><span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-identifier">valid_uuid?</span>(<span class="ruby-identifier">params</span>[<span class="ruby-value">:with_credential</span>])
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:effective</span>] = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">effective_uuid_permission</span>(<span class="ruby-identifier">object_details</span>[<span class="ruby-value">:uuid</span>], <span class="ruby-identifier">params</span>[<span class="ruby-value">:with_credential</span>])
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:effective</span>] = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">effective_uuid_permission</span>(<span class="ruby-identifier">object_details</span>[<span class="ruby-value">:uuid</span>], <span class="ruby-ivar">@credential</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-comment"># Object Size in DB:</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">result</span>[<span class="ruby-value">:type</span>] <span class="ruby-operator">==</span> <span class="ruby-value">:persisted_hash</span>
<span class="ruby-comment"># Review : DB overhaul - ensure @database.byte_size_by_uuid supports new arch.</span>
<span class="ruby-comment"># result[:size] = @database.byte_size_by_uuid(object_details[:uuid])</span>
<span class="ruby-keyword">else</span>
<span class="ruby-comment"># result[:size] = 0</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment"># Pseudo-mime for objects:</span>
<span class="ruby-identifier">mime_type</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">header</span>[<span class="ruby-value">:format</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
<span class="ruby-identifier">the_format</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">format_list</span>({<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">header</span>[<span class="ruby-value">:format</span>]})[<span class="ruby-value">0</span>]
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_format</span>
<span class="ruby-identifier">mime_type</span> = <span class="ruby-node">&quot;vnd.gxg/#{the_format[:ufs].to_s.gsub(&#39;_&#39;,&#39;-&#39;)}&quot;</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">mime_type</span> = <span class="ruby-string">&quot;vnd.gxg/org.gxg.hash.persisted&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">object_details</span>[<span class="ruby-value">:table</span>] <span class="ruby-operator">==</span> <span class="ruby-value">:element_array</span>
<span class="ruby-identifier">mime_type</span> = <span class="ruby-string">&quot;vnd.gxg/org.gxg.array.persisted&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">result</span>[<span class="ruby-value">:mime</span>] = <span class="ruby-identifier">mime_type</span>
<span class="ruby-keyword">else</span>
<span class="ruby-comment"># raise Exception, &quot;Invalid path&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">result</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-rename" class="method-detail ">
<div class="method-heading">
<span class="method-name">rename</span><span
class="method-args">(subpath=&quot;&quot;, new_name=&quot;&quot;, options={})</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="rename-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 1905</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">rename</span>(<span class="ruby-identifier">subpath</span>=<span class="ruby-string">&quot;&quot;</span>, <span class="ruby-identifier">new_name</span>=<span class="ruby-string">&quot;&quot;</span>, <span class="ruby-identifier">options</span>={})
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">false</span>
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@directory</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;&quot;</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;/&quot;</span>
<span class="ruby-identifier">the_path</span> = (<span class="ruby-ivar">@directory</span>.<span class="ruby-identifier">path</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;/&quot;</span>
<span class="ruby-identifier">subpath</span> = (<span class="ruby-string">&quot;/&quot;</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">the_path</span> = (<span class="ruby-ivar">@directory</span>.<span class="ruby-identifier">path</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-string">&quot;//&quot;</span>, <span class="ruby-string">&quot;/&quot;</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-comment"># FS</span>
<span class="ruby-keyword">begin</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:with_credential</span>]
<span class="ruby-identifier">item_profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>,<span class="ruby-identifier">options</span>.<span class="ruby-identifier">merge</span>({<span class="ruby-value">:follow_symlinks</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-keyword">true</span>}))
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">item_profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">item_profile</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">item_profile</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:effective</span>][<span class="ruby-value">:rename</span>] <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
<span class="ruby-operator">::</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">rename</span>(<span class="ruby-identifier">the_path</span>,(<span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>(<span class="ruby-identifier">the_path</span>) <span class="ruby-operator">+</span> <span class="ruby-string">&quot;/&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">new_name</span>))
<span class="ruby-comment"># Review : check for file_id changes and update the VFS-DB permission records.</span>
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;You do not have rename permissions here&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;Invalid path&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=&gt;</span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">options</span>}})
<span class="ruby-comment">#</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-comment"># DB open/create :persisted_hash or open :persisted_array</span>
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">path_array</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">db_path</span>(<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">path_array</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:with_credential</span>]
<span class="ruby-identifier">profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">options</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">profile</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:effective</span>][<span class="ruby-value">:rename</span>] <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">profile</span>[<span class="ruby-value">:type</span>] <span class="ruby-operator">==</span> <span class="ruby-value">:persisted_hash</span>
<span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:element_hash</span>].<span class="ruby-identifier">filter</span>({<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">profile</span>[<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_s</span>}).<span class="ruby-identifier">update</span>({<span class="ruby-value">:title</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">new_name</span>})
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">profile</span>[<span class="ruby-value">:type</span>] <span class="ruby-operator">==</span> <span class="ruby-value">:persisted_array</span>
<span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:element_array</span>].<span class="ruby-identifier">filter</span>({<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">profile</span>[<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_s</span>}).<span class="ruby-identifier">update</span>({<span class="ruby-value">:title</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">new_name</span>})
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;You do not have rename permissions here&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;Invalid path&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=&gt;</span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">options</span>}})
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">result</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-revoke_permissions" class="method-detail ">
<div class="method-heading">
<span class="method-name">revoke_permissions</span><span
class="method-args">(subpath=&quot;&quot;, the_credential=nil)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="revoke_permissions-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 2405</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">revoke_permissions</span>(<span class="ruby-identifier">subpath</span>=<span class="ruby-string">&quot;&quot;</span>, <span class="ruby-identifier">the_credential</span>=<span class="ruby-keyword">nil</span>)
<span class="ruby-comment"># revoke_element_permissions(table=:unspecified, dbid=0, credential=nil)</span>
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">false</span>
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@directory</span>
<span class="ruby-comment"># Review - all I need is the :file_id : make more efficient</span>
<span class="ruby-identifier">profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">subpath</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">profile</span>[<span class="ruby-value">:file_id</span>]
<span class="ruby-identifier">result</span> = <span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:roles</span>][<span class="ruby-value">:vfs</span>].<span class="ruby-identifier">destroy_vfs_permission</span>(<span class="ruby-identifier">profile</span>[<span class="ruby-value">:file_id</span>], <span class="ruby-identifier">the_credential</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">subpath</span>)
<span class="ruby-identifier">the_profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">subpath</span>)
<span class="ruby-identifier">result</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">revoke_permissions_by_uuid</span>(<span class="ruby-identifier">the_profile</span>[<span class="ruby-value">:uuid</span>], <span class="ruby-identifier">the_credential</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">result</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-rmdir" class="method-detail ">
<div class="method-heading">
<span class="method-name">rmdir</span><span
class="method-args">(subpath=&quot;&quot;)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="rmdir-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 1651</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">rmdir</span>(<span class="ruby-identifier">subpath</span>=<span class="ruby-string">&quot;&quot;</span>)
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">false</span>
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@directory</span>
<span class="ruby-comment"># FS rmdir</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;&quot;</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;/&quot;</span>
<span class="ruby-identifier">the_path</span> = (<span class="ruby-ivar">@directory</span>.<span class="ruby-identifier">path</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;/&quot;</span>
<span class="ruby-identifier">subpath</span> = (<span class="ruby-string">&quot;/&quot;</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">the_path</span> = (<span class="ruby-ivar">@directory</span>.<span class="ruby-identifier">path</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-string">&quot;//&quot;</span>, <span class="ruby-string">&quot;/&quot;</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">if</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">the_path</span>)
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">the_profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_profile</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_profile</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:effective</span>][<span class="ruby-value">:destroy</span>]
<span class="ruby-comment"># Recursively delete any content files and subdirs first</span>
<span class="ruby-identifier">file_list</span> = []
<span class="ruby-identifier">dir_list</span> = []
<span class="ruby-identifier">vfs_list</span> = [ (<span class="ruby-identifier">the_profile</span>[<span class="ruby-value">:file_id</span>]) ]
<span class="ruby-comment"># Gather up all VFS-DB :file_id entries:</span>
<span class="ruby-identifier">search_queue</span> = [(<span class="ruby-identifier">subpath</span>)]
<span class="ruby-keyword">while</span> <span class="ruby-identifier">search_queue</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-keyword">do</span>
<span class="ruby-identifier">entry</span> = <span class="ruby-identifier">search_queue</span>.<span class="ruby-identifier">shift</span>
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">entries</span>(<span class="ruby-identifier">entry</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_subitem_profile</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_subitem_profile</span>[<span class="ruby-value">:file_id</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
<span class="ruby-identifier">vfs_list</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">the_subitem_profile</span>[<span class="ruby-value">:file_id</span>]
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> [<span class="ruby-value">:virtual_directory</span>, <span class="ruby-value">:persisted_array</span>, <span class="ruby-value">:directory</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">the_subitem_profile</span>[<span class="ruby-value">:type</span>])
<span class="ruby-identifier">search_queue</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">entry</span> <span class="ruby-operator">+</span> <span class="ruby-string">&quot;/&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">the_subitem_profile</span>[<span class="ruby-value">:title</span>])
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment"># Do the FS work:</span>
<span class="ruby-identifier">search_queue</span> = [(<span class="ruby-identifier">the_path</span>)]
<span class="ruby-keyword">while</span> <span class="ruby-identifier">search_queue</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-keyword">do</span>
<span class="ruby-identifier">entry</span> = <span class="ruby-identifier">search_queue</span>.<span class="ruby-identifier">shift</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">entry</span>
<span class="ruby-constant">Dir</span>.<span class="ruby-identifier">entries</span>(<span class="ruby-identifier">entry</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_item_name</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">unless</span> [<span class="ruby-string">&quot;.&quot;</span>,<span class="ruby-string">&quot;..&quot;</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">the_item_name</span>)
<span class="ruby-keyword">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">directory?</span>(<span class="ruby-identifier">entry</span> <span class="ruby-operator">+</span> <span class="ruby-string">&quot;/&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">the_item_name</span>)
<span class="ruby-identifier">dir_list</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">entry</span> <span class="ruby-operator">+</span> <span class="ruby-string">&quot;/&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">the_item_name</span>)
<span class="ruby-identifier">search_queue</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">entry</span> <span class="ruby-operator">+</span> <span class="ruby-string">&quot;/&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">the_item_name</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">file_list</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">entry</span> <span class="ruby-operator">+</span> <span class="ruby-string">&quot;/&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">the_item_name</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-identifier">file_list</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_file_path</span><span class="ruby-operator">|</span>
<span class="ruby-constant">File</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">the_file_path</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">dir_list</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_dir_path</span><span class="ruby-operator">|</span>
<span class="ruby-operator">::</span><span class="ruby-constant">Dir</span><span class="ruby-operator">::</span><span class="ruby-identifier">rmdir</span>(<span class="ruby-identifier">the_dir_path</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-operator">::</span><span class="ruby-constant">Dir</span><span class="ruby-operator">::</span><span class="ruby-identifier">rmdir</span>(<span class="ruby-identifier">the_path</span>) <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
<span class="ruby-identifier">vfs_list</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_file_id</span><span class="ruby-operator">|</span>
<span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:roles</span>][<span class="ruby-value">:vfs</span>].<span class="ruby-identifier">destroy_vfs_permission</span>(<span class="ruby-identifier">the_file_id</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;You do not have destroy permissions to do this&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;Inavalid path&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=&gt;</span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_path</span>}})
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;Invaid path&quot;</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=&gt;</span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_path</span>}})
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">else</span>
<span class="ruby-comment"># DB rmdir</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;/&quot;</span>
<span class="ruby-identifier">subpath</span> = (<span class="ruby-string">&quot;/&quot;</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">path_array</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">db_path</span>(<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">path_array</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">path_array</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">1</span>
<span class="ruby-identifier">the_profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_profile</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_profile</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:effective</span>][<span class="ruby-value">:destroy</span>]
<span class="ruby-identifier">parent_uuid</span> = (<span class="ruby-identifier">path_array</span>[<span class="ruby-value">-2</span>] <span class="ruby-operator">||</span> {})[<span class="ruby-value">:uuid</span>]
<span class="ruby-identifier">link_uuids</span> = []
<span class="ruby-identifier">found_link</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">parent_uuid</span>
<span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:array_elements</span>].<span class="ruby-identifier">filter</span>({<span class="ruby-value">:parent_uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">parent_uuid</span>.<span class="ruby-identifier">to_s</span>}).<span class="ruby-identifier">order</span>(<span class="ruby-value">:ordinal</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">link_record</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">header</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">link_record</span>[<span class="ruby-value">:element_array_uuid</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
<span class="ruby-identifier">header</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:element_array</span>].<span class="ruby-identifier">filter</span>({<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">link_record</span>[<span class="ruby-value">:element_array_uuid</span>].<span class="ruby-identifier">to_s</span>}).<span class="ruby-identifier">first</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">header</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">header</span>[<span class="ruby-value">:uuid</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">path_array</span>.<span class="ruby-identifier">last</span>[<span class="ruby-value">:uuid</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">header</span>[<span class="ruby-value">:title</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">path_array</span>.<span class="ruby-identifier">last</span>[<span class="ruby-value">:title</span>]
<span class="ruby-identifier">found_link</span> = {<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">header</span>[<span class="ruby-value">:uuid</span>], <span class="ruby-value">:linkid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">link_record</span>[<span class="ruby-value">:dbid</span>]}
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">link_uuids</span> <span class="ruby-operator">&lt;&lt;</span> {<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">header</span>[<span class="ruby-value">:uuid</span>], <span class="ruby-value">:linkid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">link_record</span>[<span class="ruby-value">:dbid</span>]}
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">found_link</span>
<span class="ruby-comment"># Review : how to deal with lots of users deleting objects at once??</span>
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">destroy_by_uuid</span>(<span class="ruby-ivar">@credential</span>, <span class="ruby-identifier">found_link</span>[<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_sym</span>) <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
<span class="ruby-comment"># ### Delete array_elements link of id ...</span>
<span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:array_elements</span>].<span class="ruby-identifier">filter</span>({<span class="ruby-value">:dbid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">found_link</span>[<span class="ruby-value">:linkid</span>]}).<span class="ruby-identifier">delete</span>
<span class="ruby-comment"># ### Reset ordinals of array_elements links. (Even though VFS.entries sorts results)</span>
<span class="ruby-identifier">link_uuids</span>.<span class="ruby-identifier">each_with_index</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">link_record</span>, <span class="ruby-identifier">ordinal</span><span class="ruby-operator">|</span>
<span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:array_elements</span>].<span class="ruby-identifier">filter</span>({<span class="ruby-value">:dbid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">found_link</span>[<span class="ruby-value">:linkid</span>]}).<span class="ruby-identifier">update</span>({<span class="ruby-value">:ordinal</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">ordinal</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">else</span>
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;You do not have permissions to destroy this object&quot;</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=&gt;</span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">subpath</span>}})
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;Invalid path&quot;</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=&gt;</span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">subpath</span>}})
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;You do not have permissions to destroy this object&quot;</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=&gt;</span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">subpath</span>}})
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;Invalid path&quot;</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=&gt;</span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">subpath</span>}})
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">result</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-rmfile" class="method-detail ">
<div class="method-heading">
<span class="method-name">rmfile</span><span
class="method-args">(subpath=&quot;&quot;)</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="rmfile-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 1804</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">rmfile</span>(<span class="ruby-identifier">subpath</span>=<span class="ruby-string">&quot;&quot;</span>)
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">false</span>
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@directory</span>
<span class="ruby-comment"># FS rmfile</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;&quot;</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;/&quot;</span>
<span class="ruby-identifier">the_path</span> = (<span class="ruby-ivar">@directory</span>.<span class="ruby-identifier">path</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;/&quot;</span>
<span class="ruby-identifier">subpath</span> = (<span class="ruby-string">&quot;/&quot;</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">the_path</span> = (<span class="ruby-ivar">@directory</span>.<span class="ruby-identifier">path</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-string">&quot;//&quot;</span>, <span class="ruby-string">&quot;/&quot;</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">if</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">the_path</span>)
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">the_profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_profile</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_profile</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:effective</span>][<span class="ruby-value">:destroy</span>]
<span class="ruby-keyword">if</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">delete</span>(<span class="ruby-identifier">the_path</span>)
<span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:roles</span>][<span class="ruby-value">:vfs</span>].<span class="ruby-identifier">destroy_vfs_permission</span>(<span class="ruby-identifier">the_profile</span>[<span class="ruby-value">:file_id</span>])
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;You do not have destroy permissions to do this&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;Inavalid path&quot;</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=&gt;</span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_path</span>}})
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;Invaid path&quot;</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=&gt;</span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_path</span>}})
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-keyword">else</span>
<span class="ruby-comment"># DB rmfile</span>
<span class="ruby-identifier">path_array</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">db_path</span>(<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">path_array</span>
<span class="ruby-identifier">the_profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_profile</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_profile</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:effective</span>][<span class="ruby-value">:destroy</span>]
<span class="ruby-identifier">parent_uuid</span> = (<span class="ruby-identifier">path_array</span>[<span class="ruby-value">-2</span>] <span class="ruby-operator">||</span> {})[<span class="ruby-value">:uuid</span>]
<span class="ruby-identifier">link_uuids</span> = []
<span class="ruby-identifier">found_link</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">parent_uuid</span>
<span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:array_elements</span>].<span class="ruby-identifier">filter</span>({<span class="ruby-value">:parent_uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">parent_uuid</span>.<span class="ruby-identifier">to_s</span>}).<span class="ruby-identifier">order</span>(<span class="ruby-value">:ordinal</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">link_record</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">header</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">link_record</span>[<span class="ruby-value">:element_hash_uuid</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
<span class="ruby-identifier">header</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:element_hash</span>].<span class="ruby-identifier">filter</span>({<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">link_record</span>[<span class="ruby-value">:element_hash_uuid</span>].<span class="ruby-identifier">to_s</span>}).<span class="ruby-identifier">first</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">header</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">header</span>[<span class="ruby-value">:uuid</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">path_array</span>.<span class="ruby-identifier">last</span>[<span class="ruby-value">:uuid</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">header</span>[<span class="ruby-value">:title</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">path_array</span>.<span class="ruby-identifier">last</span>[<span class="ruby-value">:title</span>]
<span class="ruby-identifier">found_link</span> = {<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">header</span>[<span class="ruby-value">:uuid</span>], <span class="ruby-value">:linkid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">link_record</span>[<span class="ruby-value">:dbid</span>]}
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">link_uuids</span> <span class="ruby-operator">&lt;&lt;</span> {<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">header</span>[<span class="ruby-value">:uuid</span>], <span class="ruby-value">:linkid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">link_record</span>[<span class="ruby-value">:dbid</span>]}
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">found_link</span>
<span class="ruby-comment"># Review : how to deal with lots of users deleting objects at once??</span>
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">destroy_by_uuid</span>(<span class="ruby-ivar">@credential</span>, <span class="ruby-identifier">found_link</span>[<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_sym</span>) <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
<span class="ruby-comment"># ### Delete array_elements link of id ...</span>
<span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:array_elements</span>].<span class="ruby-identifier">filter</span>({<span class="ruby-value">:dbid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">found_link</span>[<span class="ruby-value">:linkid</span>]}).<span class="ruby-identifier">delete</span>
<span class="ruby-comment"># ### Reset ordinals of array_elements links. (Even though VFS.entries sorts results)</span>
<span class="ruby-identifier">link_uuids</span>.<span class="ruby-identifier">each_with_index</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">link_record</span>, <span class="ruby-identifier">ordinal</span><span class="ruby-operator">|</span>
<span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:array_elements</span>].<span class="ruby-identifier">filter</span>({<span class="ruby-value">:dbid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">found_link</span>[<span class="ruby-value">:linkid</span>]}).<span class="ruby-identifier">update</span>({<span class="ruby-value">:ordinal</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">ordinal</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">#</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;You do not have destroy permissions to do this&quot;</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=&gt;</span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>}})
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;Invaid path&quot;</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=&gt;</span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>}})
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">begin</span>
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">&quot;Invaid path&quot;</span>
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=&gt;</span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>}})
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">result</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-set_permissions" class="method-detail ">
<div class="method-heading">
<span class="method-name">set_permissions</span><span
class="method-args">(subpath=&quot;&quot;, the_credential=nil, the_permissions={})</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="set_permissions-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 2423</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">set_permissions</span>(<span class="ruby-identifier">subpath</span>=<span class="ruby-string">&quot;&quot;</span>, <span class="ruby-identifier">the_credential</span>=<span class="ruby-keyword">nil</span>, <span class="ruby-identifier">the_permissions</span>={})
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">false</span>
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@directory</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;&quot;</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;/&quot;</span>
<span class="ruby-identifier">the_path</span> = (<span class="ruby-ivar">@directory</span>.<span class="ruby-identifier">path</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">==</span> <span class="ruby-string">&quot;/&quot;</span>
<span class="ruby-identifier">subpath</span> = (<span class="ruby-string">&quot;/&quot;</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">the_path</span> = (<span class="ruby-ivar">@directory</span>.<span class="ruby-identifier">path</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-string">&quot;//&quot;</span>, <span class="ruby-string">&quot;/&quot;</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">the_path</span>)
<span class="ruby-comment"># Review - all I need is the :file_id : make more efficient</span>
<span class="ruby-identifier">profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">subpath</span>, <span class="ruby-identifier">the_credential</span>)
<span class="ruby-identifier">the_credentials</span> = []
<span class="ruby-identifier">owner_roles</span> = [(<span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:authority</span>][<span class="ruby-value">:system_credentials</span>][<span class="ruby-value">:administrators</span>]), (<span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:authority</span>][<span class="ruby-value">:system_credentials</span>][<span class="ruby-value">:developers</span>]), (<span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:authority</span>][<span class="ruby-value">:system_credentials</span>][<span class="ruby-value">:designers</span>])].<span class="ruby-identifier">flatten!</span>
<span class="ruby-identifier">user_roles</span> = <span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:authority</span>].<span class="ruby-identifier">user_roles</span>(<span class="ruby-identifier">the_credential</span>).<span class="ruby-identifier">collect</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">record</span><span class="ruby-operator">|</span> <span class="ruby-identifier">record</span>[<span class="ruby-value">:credential</span>]}
<span class="ruby-identifier">the_role</span> = <span class="ruby-value">:other</span>
<span class="ruby-identifier">user_roles</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_role_credential</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">owner_roles</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">the_role_credential</span>)
<span class="ruby-identifier">the_role</span> = <span class="ruby-value">:owner</span>
<span class="ruby-identifier">the_credentials</span> = <span class="ruby-identifier">owner_roles</span>
<span class="ruby-keyword">break</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">the_role</span> <span class="ruby-operator">==</span> <span class="ruby-value">:owner</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_credential</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">&quot;00000000-0000-4000-0000-000000000000&quot;</span>
<span class="ruby-identifier">the_role</span> = <span class="ruby-value">:other</span>
<span class="ruby-identifier">the_credentials</span> = [ <span class="ruby-value">:&quot;00000000-0000-4000-0000-000000000000&quot;</span> ]
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">the_role</span> = <span class="ruby-value">:group</span>
<span class="ruby-identifier">the_credentials</span> = <span class="ruby-identifier">user_roles</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment"># translate to unix permissions</span>
<span class="ruby-identifier">old_permission</span> = <span class="ruby-operator">::</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">stat</span>(<span class="ruby-identifier">the_path</span>).<span class="ruby-identifier">mode</span>.<span class="ruby-identifier">to_s</span>(<span class="ruby-identifier">base</span>=<span class="ruby-value">2</span>)
<span class="ruby-identifier">x</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">if</span> <span class="ruby-operator">::</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">directory?</span>(<span class="ruby-identifier">the_path</span>)
<span class="ruby-identifier">x</span> = <span class="ruby-value">1</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_permissions</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-value">:execute</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_permissions</span>[<span class="ruby-value">:execute</span>] <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
<span class="ruby-identifier">x</span> = <span class="ruby-value">1</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">x</span> = <span class="ruby-value">0</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">w</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_permissions</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-value">:write</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_permissions</span>[<span class="ruby-value">:write</span>] <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
<span class="ruby-identifier">w</span> = <span class="ruby-value">1</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">w</span> = <span class="ruby-value">0</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
[<span class="ruby-value">:rename</span>, <span class="ruby-value">:move</span>, <span class="ruby-value">:destroy</span>, <span class="ruby-value">:create</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_action</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_permissions</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">the_action</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_permissions</span>[(<span class="ruby-identifier">the_action</span>)] <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
<span class="ruby-identifier">w</span> = <span class="ruby-value">1</span>
<span class="ruby-keyword">break</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">if</span> <span class="ruby-identifier">the_permissions</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-value">:read</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_permissions</span>[<span class="ruby-value">:read</span>] <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
<span class="ruby-identifier">r</span> = <span class="ruby-value">1</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">r</span> = <span class="ruby-value">0</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">r</span> = <span class="ruby-keyword">nil</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">case</span> <span class="ruby-identifier">the_role</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:owner</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">x</span>
<span class="ruby-identifier">old_permission</span>[<span class="ruby-value">-7</span>] = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_s</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">w</span>
<span class="ruby-identifier">old_permission</span>[<span class="ruby-value">-8</span>] = <span class="ruby-identifier">w</span>.<span class="ruby-identifier">to_s</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">r</span>
<span class="ruby-identifier">old_permission</span>[<span class="ruby-value">-9</span>] = <span class="ruby-identifier">r</span>.<span class="ruby-identifier">to_s</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:group</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">x</span>
<span class="ruby-identifier">old_permission</span>[<span class="ruby-value">-4</span>] = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_s</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">w</span>
<span class="ruby-identifier">old_permission</span>[<span class="ruby-value">-5</span>] = <span class="ruby-identifier">w</span>.<span class="ruby-identifier">to_s</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">r</span>
<span class="ruby-identifier">old_permission</span>[<span class="ruby-value">-6</span>] = <span class="ruby-identifier">r</span>.<span class="ruby-identifier">to_s</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">when</span> <span class="ruby-value">:other</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">x</span>
<span class="ruby-identifier">old_permission</span>[<span class="ruby-value">-1</span>] = <span class="ruby-identifier">x</span>.<span class="ruby-identifier">to_s</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">w</span>
<span class="ruby-identifier">old_permission</span>[<span class="ruby-value">-2</span>] = <span class="ruby-identifier">w</span>.<span class="ruby-identifier">to_s</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">r</span>
<span class="ruby-identifier">old_permission</span>[<span class="ruby-value">-3</span>] = <span class="ruby-identifier">r</span>.<span class="ruby-identifier">to_s</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-operator">::</span><span class="ruby-constant">File</span>.<span class="ruby-identifier">chmod</span>(<span class="ruby-identifier">old_permission</span>.<span class="ruby-identifier">to_i</span>(<span class="ruby-value">2</span>), <span class="ruby-identifier">the_path</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">profile</span>[<span class="ruby-value">:file_id</span>]
<span class="ruby-identifier">the_credentials</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">credential_uuid</span><span class="ruby-operator">|</span>
<span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">DB</span>[<span class="ruby-value">:roles</span>][<span class="ruby-value">:vfs</span>].<span class="ruby-identifier">update_vfs_permission</span>(<span class="ruby-identifier">profile</span>[<span class="ruby-value">:file_id</span>], <span class="ruby-identifier">credential_uuid</span>, <span class="ruby-identifier">the_permissions</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-comment"># DB object exist?</span>
<span class="ruby-identifier">path_array</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">db_path</span>(<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">path_array</span>
<span class="ruby-identifier">object_details</span> = {<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">path_array</span>.<span class="ruby-identifier">last</span>[<span class="ruby-value">:uuid</span>], <span class="ruby-value">:table</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-value">:unspecified</span>, <span class="ruby-value">:dbid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-value">0</span>}
<span class="ruby-identifier">header</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:element_hash</span>].<span class="ruby-identifier">filter</span>({<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">object_details</span>[<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_s</span>}).<span class="ruby-identifier">first</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">header</span>
<span class="ruby-identifier">object_details</span>[<span class="ruby-value">:table</span>] = <span class="ruby-value">:element_hash</span>
<span class="ruby-identifier">object_details</span>[<span class="ruby-value">:dbid</span>] = <span class="ruby-identifier">header</span>[<span class="ruby-value">:dbid</span>]
<span class="ruby-keyword">else</span>
<span class="ruby-identifier">header</span> = <span class="ruby-ivar">@database</span>.<span class="ruby-identifier">connector</span>()[<span class="ruby-value">:element_array</span>].<span class="ruby-identifier">filter</span>({<span class="ruby-value">:uuid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">object_details</span>[<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_s</span>}).<span class="ruby-identifier">first</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">header</span>
<span class="ruby-identifier">object_details</span>[<span class="ruby-value">:table</span>] = <span class="ruby-value">:element_array</span>
<span class="ruby-identifier">object_details</span>[<span class="ruby-value">:dbid</span>] = <span class="ruby-identifier">header</span>[<span class="ruby-value">:dbid</span>]
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">object_details</span>[<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
<span class="ruby-keyword">if</span> <span class="ruby-identifier">object_details</span>[<span class="ruby-value">:table</span>] = <span class="ruby-value">:element_array</span>
<span class="ruby-identifier">manifest</span> = [{<span class="ruby-value">:table</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">object_details</span>[<span class="ruby-value">:table</span>], <span class="ruby-value">:dbid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">object_details</span>[<span class="ruby-value">:dbid</span>]}]
<span class="ruby-keyword">else</span>
<span class="ruby-comment"># Note: for an element_hash - ensure all sub-objects are extended this permission.</span>
<span class="ruby-identifier">manifest</span> = []
<span class="ruby-identifier">structures</span> = [{<span class="ruby-value">:table</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">object_details</span>[<span class="ruby-value">:table</span>], <span class="ruby-value">:dbid</span> <span class="ruby-operator">=&gt;</span> <span class="ruby-identifier">object_details</span>[<span class="ruby-value">:dbid</span>]}]
<span class="ruby-keyword">while</span> <span class="ruby-identifier">structures</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-keyword">do</span>
<span class="ruby-identifier">entry</span> = <span class="ruby-identifier">structures</span>[<span class="ruby-value">0</span>]
<span class="ruby-ivar">@database</span>.<span class="ruby-identifier">element_manifest</span>(<span class="ruby-identifier">entry</span>[<span class="ruby-value">:table</span>],<span class="ruby-identifier">entry</span>[<span class="ruby-value">:dbid</span>]).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">record</span><span class="ruby-operator">|</span>
<span class="ruby-keyword">if</span> [<span class="ruby-value">:element_hash</span>, <span class="ruby-value">:element_array</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">record</span>[<span class="ruby-value">:table</span>])
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">structures</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">record</span>)
<span class="ruby-identifier">structures</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">record</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">manifest</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">structures</span>.<span class="ruby-identifier">shift</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-comment">#</span>
<span class="ruby-identifier">manifest</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">record</span><span class="ruby-operator">|</span>
<span class="ruby-ivar">@database</span>.<span class="ruby-identifier">assign_element_permission</span>(<span class="ruby-identifier">record</span>[<span class="ruby-value">:table</span>], <span class="ruby-identifier">record</span>[<span class="ruby-value">:dbid</span>], <span class="ruby-identifier">credential</span>, <span class="ruby-identifier">the_permissions</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-identifier">result</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
<div id="method-i-set_permissions_recursive" class="method-detail ">
<div class="method-heading">
<span class="method-name">set_permissions_recursive</span><span
class="method-args">(subpath=&quot;&quot;, the_credential=nil, the_permissions={})</span>
<span class="method-click-advice">click to toggle source</span>
</div>
<div class="method-description">
<div class="method-source-code" id="set_permissions_recursive-source">
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 2583</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">set_permissions_recursive</span>(<span class="ruby-identifier">subpath</span>=<span class="ruby-string">&quot;&quot;</span>, <span class="ruby-identifier">the_credential</span>=<span class="ruby-keyword">nil</span>, <span class="ruby-identifier">the_permissions</span>={})
<span class="ruby-identifier">the_profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>((<span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-identifier">subpath</span>)).<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_profile</span>
<span class="ruby-keyword">if</span> [<span class="ruby-value">:virtual_directory</span>, <span class="ruby-value">:directory</span>, <span class="ruby-value">:persisted_array</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">the_profile</span>[<span class="ruby-value">:type</span>])
<span class="ruby-identifier">paths</span> = [(<span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-identifier">subpath</span>))]
<span class="ruby-keyword">while</span> <span class="ruby-identifier">paths</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span> <span class="ruby-keyword">do</span>
<span class="ruby-identifier">the_path</span> = <span class="ruby-identifier">paths</span>.<span class="ruby-identifier">shift</span>
<span class="ruby-identifier">the_path_profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">if</span> [<span class="ruby-value">:virtual_directory</span>, <span class="ruby-value">:directory</span>, <span class="ruby-value">:persisted_array</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">the_path_profile</span>[<span class="ruby-value">:type</span>])
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">entries</span>(<span class="ruby-identifier">the_path</span>, <span class="ruby-identifier">the_credential</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">a_profile</span><span class="ruby-operator">|</span>
<span class="ruby-identifier">paths</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-identifier">the_path</span> <span class="ruby-operator">+</span> <span class="ruby-string">&quot;/&quot;</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">a_profile</span>[<span class="ruby-value">:title</span>].<span class="ruby-identifier">to_s</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">set_permissions</span>(<span class="ruby-identifier">the_path</span>, <span class="ruby-identifier">the_credential</span>, <span class="ruby-identifier">the_permissions</span>)
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">set_permissions</span>(<span class="ruby-identifier">the_path</span>, <span class="ruby-identifier">the_credential</span>, <span class="ruby-identifier">the_permissions</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">else</span>
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">set_permissions</span>(<span class="ruby-identifier">subpath</span>, <span class="ruby-identifier">the_credential</span>, <span class="ruby-identifier">the_permissions</span>)
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span>
<span class="ruby-keyword">true</span>
<span class="ruby-keyword">end</span></pre>
</div>
</div>
</div>
</section>
</section>
</main>
<footer id="validator-badges" role="contentinfo">
<p><a href="https://validator.w3.org/check/referer">Validate</a>
<p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.1.2.
<p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
</footer>