mirror of
https://github.com/mistergibson/gxg-framework.git
synced 2026-08-15 11:54:29 -07:00
1894 lines
195 KiB
HTML
1894 lines
195 KiB
HTML
<!DOCTYPE html>
|
|
|
|
<html>
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
|
|
<title>class GxG::Storage::FileSpace - 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-copy">#copy</a>
|
|
|
|
<li ><a href="#method-i-entries">#entries</a>
|
|
|
|
<li ><a href="#method-i-exist-3F">#exist?</a>
|
|
|
|
<li ><a href="#method-i-get_permissions">#get_permissions</a>
|
|
|
|
<li ><a href="#method-i-mkdir">#mkdir</a>
|
|
|
|
<li ><a href="#method-i-mkfile">#mkfile</a>
|
|
|
|
<li ><a href="#method-i-mkpath">#mkpath</a>
|
|
|
|
<li ><a href="#method-i-mount">#mount</a>
|
|
|
|
<li ><a href="#method-i-mounted-3F">#mounted?</a>
|
|
|
|
<li ><a href="#method-i-move">#move</a>
|
|
|
|
<li ><a href="#method-i-open">#open</a>
|
|
|
|
<li ><a href="#method-i-path_prefix">#path_prefix</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-subpath">#subpath</a>
|
|
|
|
<li ><a href="#method-i-unmount">#unmount</a>
|
|
|
|
<li ><a href="#method-i-valid_path-3F">#valid_path?</a>
|
|
|
|
<li ><a href="#method-i-volume_of_path">#volume_of_path</a>
|
|
|
|
</ul>
|
|
</div>
|
|
|
|
</div>
|
|
</nav>
|
|
|
|
<main role="main" aria-labelledby="class-GxG::Storage::FileSpace">
|
|
<h1 id="class-GxG::Storage::FileSpace" class="class">
|
|
class GxG::Storage::FileSpace
|
|
</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">()</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 6</span>
|
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">initialize</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">@mounted</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-copy" class="method-detail ">
|
|
|
|
<div class="method-heading">
|
|
<span class="method-name">copy</span><span
|
|
class="method-args">(source_path=nil,destination_path=nil, options={})</span>
|
|
|
|
<span class="method-click-advice">click to toggle source</span>
|
|
|
|
</div>
|
|
|
|
|
|
<div class="method-description">
|
|
|
|
<p>Copying support:</p>
|
|
|
|
|
|
|
|
|
|
<div class="method-source-code" id="copy-source">
|
|
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 483</span>
|
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">copy</span>(<span class="ruby-identifier">source_path</span>=<span class="ruby-keyword">nil</span>,<span class="ruby-identifier">destination_path</span>=<span class="ruby-keyword">nil</span>, <span class="ruby-identifier">options</span>={})
|
|
<span class="ruby-comment"># Four scenarios: FS_to_FS, DB_to_DB, FS_to_DB, DB_to_FS</span>
|
|
<span class="ruby-comment"># Objective: handle both file/object and directory/persisted_array in one method!</span>
|
|
<span class="ruby-comment"># Does OVERWRITE copy onto existing files/folders of same name.</span>
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">false</span>
|
|
<span class="ruby-identifier">error</span> = <span class="ruby-keyword">false</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">source_path</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">destination_path</span>
|
|
<span class="ruby-identifier">error</span> = <span class="ruby-keyword">true</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-comment">#</span>
|
|
<span class="ruby-identifier">source</span> = {<span class="ruby-value">:enclosure</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:profile</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:record</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:permissions</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>}
|
|
<span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">valid_path?</span>(<span class="ruby-identifier">source_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">source_path</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">"/"</span>
|
|
<span class="ruby-identifier">source</span>[<span class="ruby-value">:record</span>] = <span class="ruby-keyword">nil</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">source</span>[<span class="ruby-value">:record</span>] = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">volume_of_path</span>(<span class="ruby-identifier">source_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">source</span>[<span class="ruby-value">:record</span>]
|
|
<span class="ruby-identifier">source</span>[<span class="ruby-value">:profile</span>] = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">source_path</span>,<span class="ruby-identifier">options</span>.<span class="ruby-identifier">merge</span>({<span class="ruby-value">:follow_symlinks</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">true</span>}))
|
|
<span class="ruby-identifier">source</span>[<span class="ruby-value">:enclosure</span>] = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>(<span class="ruby-identifier">source_path</span>),<span class="ruby-identifier">options</span>.<span class="ruby-identifier">merge</span>({<span class="ruby-value">:follow_symlinks</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">true</span>}))
|
|
<span class="ruby-identifier">source</span>[<span class="ruby-value">:permissions</span>] = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">get_permissions</span>(<span class="ruby-identifier">source_path</span>)
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">error</span> = <span class="ruby-keyword">true</span>
|
|
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=></span> <span class="ruby-constant">Exception</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">"You do not have sufficient priviledges."</span>), <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:source_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">source_path</span>, <span class="ruby-value">:destination_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">destination_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">options</span>}})
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">error</span> = <span class="ruby-keyword">true</span>
|
|
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=></span> <span class="ruby-constant">Exception</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">"Invalid source path"</span>), <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:source_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">source_path</span>, <span class="ruby-value">:destination_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">destination_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">options</span>}})
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-comment"># Note: if destination is not full path, but path to its future enclosure, append the filename to fully qualify the destination_path</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">source_path</span>) <span class="ruby-operator">!=</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">destination_path</span>)
|
|
<span class="ruby-identifier">destination_path</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-identifier">destination_path</span> <span class="ruby-operator">+</span> <span class="ruby-string">"/"</span> <span class="ruby-operator">+</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">source_path</span>))
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-comment">#</span>
|
|
<span class="ruby-identifier">destination</span> = {<span class="ruby-value">:enclosure</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>(<span class="ruby-identifier">destination_path</span>),<span class="ruby-identifier">options</span>.<span class="ruby-identifier">merge</span>({<span class="ruby-value">:follow_symlinks</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">true</span>})), <span class="ruby-value">:profile</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:record</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:permissions</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">source</span>[<span class="ruby-value">:permissions</span>].<span class="ruby-identifier">clone</span>}
|
|
<span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">valid_path?</span>(<span class="ruby-identifier">destination_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">destination_path</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">"/"</span>
|
|
<span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>] = <span class="ruby-keyword">nil</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>] = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">volume_of_path</span>(<span class="ruby-identifier">destination_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>]
|
|
<span class="ruby-identifier">destination</span>[<span class="ruby-value">:profile</span>] = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">destination_path</span>,<span class="ruby-identifier">options</span>.<span class="ruby-identifier">merge</span>({<span class="ruby-value">:follow_symlinks</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">true</span>}))
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">error</span> = <span class="ruby-keyword">true</span>
|
|
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=></span> <span class="ruby-constant">Exception</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">"You do not have sufficient permissions."</span>), <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:source_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">source_path</span>, <span class="ruby-value">:destination_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">destination_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">options</span>}})
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">destination</span>[<span class="ruby-value">:enclosure</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>)
|
|
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">destination</span>[<span class="ruby-value">:enclosure</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">error</span> = <span class="ruby-keyword">true</span>
|
|
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=></span> <span class="ruby-constant">Exception</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">"You do not have sufficient permissions to create at destination."</span>), <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:source_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">source_path</span>, <span class="ruby-value">:destination_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">destination_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">options</span>}})
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">error</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
|
|
<span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>] = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">volume_of_path</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>(<span class="ruby-identifier">destination_path</span>))
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>)
|
|
<span class="ruby-comment"># Note: this won't exist yet, but is here for future reference.</span>
|
|
<span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:subpath</span>] = (<span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:subpath</span>] <span class="ruby-operator">+</span> <span class="ruby-string">"/"</span> <span class="ruby-operator">+</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">destination_path</span>))
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">error</span> = <span class="ruby-keyword">true</span>
|
|
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=></span> <span class="ruby-constant">Exception</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">"Invalid destination path"</span>), <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:source_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">source_path</span>, <span class="ruby-value">:destination_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">destination_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">options</span>}})
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">error</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">source</span>[<span class="ruby-value">:profile</span>]
|
|
<span class="ruby-comment"># determine permissions</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">source</span>[<span class="ruby-value">:profile</span>][<span class="ruby-value">:permissions</span>][<span class="ruby-value">:effective</span>][<span class="ruby-value">:read</span>] <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
|
|
<span class="ruby-comment"># Does destination already exist? --> overwrite permissions?</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">destination</span>[<span class="ruby-value">:profile</span>]
|
|
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">destination</span>[<span class="ruby-value">:profile</span>][<span class="ruby-value">:permissions</span>][<span class="ruby-value">:effective</span>][<span class="ruby-value">:write</span>] <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
|
|
<span class="ruby-identifier">error</span> = <span class="ruby-keyword">true</span>
|
|
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=></span> <span class="ruby-constant">Exception</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">"You do not have sufficient permissions at destination."</span>), <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:source_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">source_path</span>, <span class="ruby-value">:destination_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">destination_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">options</span>}})
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">error</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
|
|
<span class="ruby-comment"># determine copying scenario: FS_to_FS, DB_to_DB, FS_to_DB, DB_to_FS</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">source</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:volume</span>].<span class="ruby-identifier">file_system?</span>()
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">destination</span>[<span class="ruby-value">:enclosure</span>][<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
<span class="ruby-identifier">scenario</span> = <span class="ruby-value">:FS_to_DB</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">scenario</span> = <span class="ruby-value">:FS_to_FS</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">destination</span>[<span class="ruby-value">:enclosure</span>][<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
<span class="ruby-identifier">scenario</span> = <span class="ruby-value">:DB_to_DB</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">scenario</span> = <span class="ruby-value">:DB_to_FS</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-comment"># create source/destination path pairings:</span>
|
|
<span class="ruby-identifier">file_list</span> = []
|
|
<span class="ruby-identifier">dir_list</span> = []
|
|
<span class="ruby-keyword">if</span> [<span class="ruby-string">"persisted_array"</span>,<span class="ruby-string">"directory"</span>,<span class="ruby-string">"virtual_directory"</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">source</span>[<span class="ruby-value">:profile</span>][<span class="ruby-value">:type</span>].<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-comment"># directory / collection</span>
|
|
<span class="ruby-identifier">search_queue</span> = [{<span class="ruby-value">:source</span> <span class="ruby-operator">=></span> (<span class="ruby-identifier">source_path</span>), <span class="ruby-value">:destination</span> <span class="ruby-operator">=></span> (<span class="ruby-identifier">destination_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">></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-keyword">self</span>.<span class="ruby-identifier">entries</span>(<span class="ruby-identifier">entry</span>[<span class="ruby-value">:source</span>]).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_profile</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-identifier">new_record</span> = {<span class="ruby-value">:source</span> <span class="ruby-operator">=></span> (<span class="ruby-identifier">entry</span>[<span class="ruby-value">:source</span>] <span class="ruby-operator">+</span> <span class="ruby-string">"/"</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">the_profile</span>[<span class="ruby-value">:title</span>]), <span class="ruby-value">:destination</span> <span class="ruby-operator">=></span> (<span class="ruby-identifier">entry</span>[<span class="ruby-value">:destination</span>] <span class="ruby-operator">+</span> <span class="ruby-string">"/"</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">the_profile</span>[<span class="ruby-value">:title</span>]), <span class="ruby-value">:mode</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">the_profile</span>[<span class="ruby-value">:mode</span>], <span class="ruby-value">:mime</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">the_profile</span>[<span class="ruby-value">:mime</span>]}
|
|
<span class="ruby-keyword">if</span> [<span class="ruby-string">"persisted_array"</span>,<span class="ruby-string">"directory"</span>,<span class="ruby-string">"virtual_directory"</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">the_profile</span>[<span class="ruby-value">:type</span>].<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-identifier">dir_list</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">new_record</span>
|
|
<span class="ruby-identifier">search_queue</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">new_record</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">file_list</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">new_record</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-comment"># single object</span>
|
|
<span class="ruby-identifier">file_list</span> <span class="ruby-operator"><<</span> {<span class="ruby-value">:source</span> <span class="ruby-operator">=></span> (<span class="ruby-identifier">source_path</span>), <span class="ruby-value">:destination</span> <span class="ruby-operator">=></span> (<span class="ruby-identifier">destination_path</span>)}
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-comment"># lay down dir structure</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_record</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">mkpath</span>(<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:destination</span>])
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-comment">#</span>
|
|
<span class="ruby-keyword">case</span> <span class="ruby-identifier">scenario</span>
|
|
<span class="ruby-keyword">when</span> <span class="ruby-value">:FS_to_FS</span>
|
|
<span class="ruby-comment"># copy files one at a time.</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_record</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:destination</span>])
|
|
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">rmfile</span>(<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:destination</span>])
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-comment"># FIXME: find a way to preserve :mode (via REAL FS path) on new file.</span>
|
|
<span class="ruby-keyword">begin</span>
|
|
<span class="ruby-identifier">source_file</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:source</span>])
|
|
<span class="ruby-identifier">destination_file</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">mkfile</span>(<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:destination</span>])
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">source_file</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">destination_file</span>
|
|
<span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-identifier">apportioned_ranges</span>(<span class="ruby-identifier">source_file</span>.<span class="ruby-identifier">size</span>,<span class="ruby-value">65536</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_range</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-identifier">source_file</span>.<span class="ruby-identifier">seek</span>(<span class="ruby-identifier">the_range</span>.<span class="ruby-identifier">first</span>)
|
|
<span class="ruby-identifier">destination_file</span>.<span class="ruby-identifier">write</span>(<span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">ByteArray</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">source_file</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">the_range</span>.<span class="ruby-identifier">size</span>)).<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-identifier">destination_file</span>.<span class="ruby-identifier">close</span>
|
|
<span class="ruby-identifier">source_file</span>.<span class="ruby-identifier">close</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">"Error opening source or destination files."</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=></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">=></span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:source_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">source_path</span>, <span class="ruby-value">:destination_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">destination_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">options</span>}})
|
|
<span class="ruby-identifier">error</span> = <span class="ruby-keyword">true</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">error</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
|
|
<span class="ruby-identifier">destination</span>[<span class="ruby-value">:permissions</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_entry</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">set_permissions</span>(<span class="ruby-identifier">destination_path</span>, <span class="ruby-identifier">the_entry</span>[<span class="ruby-value">:credential</span>], <span class="ruby-identifier">the_entry</span>[<span class="ruby-value">: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">when</span> <span class="ruby-value">:FS_to_DB</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_record</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-keyword">begin</span>
|
|
<span class="ruby-comment"># Question: should I support an object import format from a text file ??</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">extname</span>(<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:source</span>]) <span class="ruby-operator">==</span> <span class="ruby-string">".gxg_export"</span> <span class="ruby-operator">&&</span> (<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:mime</span>] <span class="ruby-operator">==</span> <span class="ruby-string">"application/octet-stream"</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">the_record</span>[<span class="ruby-value">:mime</span>] <span class="ruby-operator">==</span> <span class="ruby-string">"application/json"</span>)
|
|
<span class="ruby-identifier">source_file</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:source</span>])
|
|
<span class="ruby-comment">#</span>
|
|
<span class="ruby-identifier">import_record</span> = <span class="ruby-identifier">source_file</span>.<span class="ruby-identifier">read</span>()
|
|
<span class="ruby-identifier">source_file</span>.<span class="ruby-identifier">close</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">import_record</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">json?</span>
|
|
<span class="ruby-identifier">import_record</span> = <span class="ruby-operator">::</span><span class="ruby-constant">JSON</span><span class="ruby-operator">::</span><span class="ruby-identifier">parse</span>(<span class="ruby-identifier">import_record</span>,{<span class="ruby-value">:symbolize_names</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">true</span>})
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">import_record</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>)
|
|
<span class="ruby-identifier">database</span> = <span class="ruby-keyword">nil</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</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">destination</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:volume</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">Storage</span><span class="ruby-operator">::</span><span class="ruby-constant">Volume</span>)
|
|
<span class="ruby-identifier">database</span> = <span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:volume</span>].<span class="ruby-identifier">database</span>()
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">database</span>
|
|
<span class="ruby-identifier">enclosure_uuid</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>(<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:destination</span>]))[<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_sym</span>
|
|
<span class="ruby-identifier">destination_uuid</span> = <span class="ruby-identifier">import_record</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_sym</span>
|
|
<span class="ruby-comment"># Import Formats first</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">import_record</span>[<span class="ruby-value">:formats</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>)
|
|
<span class="ruby-identifier">op_frame</span> = {<span class="ruby-value">:operation</span> <span class="ruby-operator">=></span> <span class="ruby-value">:merge_format</span>, <span class="ruby-value">:data</span> <span class="ruby-operator">=></span> []}
|
|
<span class="ruby-identifier">import_record</span>[<span class="ruby-value">:formats</span>].<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_format_key</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-identifier">op_frame</span>[<span class="ruby-value">:data</span>] <span class="ruby-operator"><<</span> <span class="ruby-identifier">import_record</span>[<span class="ruby-value">:formats</span>][(<span class="ruby-identifier">the_format_key</span>)]
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">op_frame</span>[<span class="ruby-value">:data</span>].<span class="ruby-identifier">size</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
<span class="ruby-identifier">database</span>.<span class="ruby-identifier">synchronize_records</span>([(<span class="ruby-identifier">op_frame</span>)],<span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:volume</span>].<span class="ruby-identifier">credential</span>())
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-comment">#</span>
|
|
<span class="ruby-identifier">database</span>.<span class="ruby-identifier">synchronize_records</span>([{<span class="ruby-value">:operation</span> <span class="ruby-operator">=></span> <span class="ruby-value">:merge</span>, <span class="ruby-value">:data</span> <span class="ruby-operator">=></span> [(<span class="ruby-identifier">import_record</span>[<span class="ruby-value">:record</span>])]}],<span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:volume</span>].<span class="ruby-identifier">credential</span>())
|
|
<span class="ruby-comment">#</span>
|
|
<span class="ruby-keyword">unless</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:destination</span>])
|
|
<span class="ruby-identifier">the_enclosure</span> = <span class="ruby-identifier">database</span>.<span class="ruby-identifier">retrieve_by_uuid</span>(<span class="ruby-identifier">enclosure_uuid</span>, <span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:volume</span>].<span class="ruby-identifier">credential</span>())
|
|
<span class="ruby-identifier">the_enclosure</span>.<span class="ruby-identifier">wait_for_reservation</span>
|
|
<span class="ruby-identifier">destination_object</span> = <span class="ruby-identifier">database</span>.<span class="ruby-identifier">retrieve_by_uuid</span>(<span class="ruby-identifier">destination_uuid</span>, <span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:volume</span>].<span class="ruby-identifier">credential</span>())
|
|
<span class="ruby-identifier">the_enclosure</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">destination_object</span>
|
|
<span class="ruby-identifier">destination_object</span>.<span class="ruby-identifier">deactivate</span>
|
|
<span class="ruby-identifier">the_enclosure</span>.<span class="ruby-identifier">release_reservation</span>
|
|
<span class="ruby-identifier">the_enclosure</span>.<span class="ruby-identifier">deactivate</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">"Error aquiring destination database."</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">"Error importing source file."</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-comment"># Import the FS file into the DB as a org.gxg.file object</span>
|
|
<span class="ruby-identifier">source_file</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:source</span>])
|
|
<span class="ruby-identifier">destination_object</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:destination</span>],{<span class="ruby-value">:format</span> <span class="ruby-operator">=></span> <span class="ruby-string">"org.gxg.file"</span>})
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">source_file</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">destination_object</span>
|
|
<span class="ruby-identifier">destination_object</span>.<span class="ruby-identifier">wait_for_reservation</span>
|
|
<span class="ruby-identifier">destination_object</span>[<span class="ruby-value">:mime</span>] = <span class="ruby-identifier">the_record</span>[<span class="ruby-value">:mime</span>]
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">destination_object</span>[<span class="ruby-value">:file_segments</span>].<span class="ruby-identifier">size</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
(<span class="ruby-value">0</span><span class="ruby-operator">..</span>(<span class="ruby-identifier">destination_object</span>[<span class="ruby-value">:file_segments</span>].<span class="ruby-identifier">size</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>)).<span class="ruby-identifier">to_a</span>.<span class="ruby-identifier">reverse</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_segment_index</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-identifier">destination_object</span>[<span class="ruby-value">:file_segments</span>].<span class="ruby-identifier">delete_at</span>(<span class="ruby-identifier">the_segment_index</span>).<span class="ruby-identifier">destroy</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-identifier">apportioned_ranges</span>(<span class="ruby-identifier">source_file</span>.<span class="ruby-identifier">size</span>,<span class="ruby-value">65536</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_range</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-identifier">source_file</span>.<span class="ruby-identifier">seek</span>(<span class="ruby-identifier">the_range</span>.<span class="ruby-identifier">first</span>)
|
|
<span class="ruby-identifier">destination_object</span>[<span class="ruby-value">:file_segments</span>] <span class="ruby-operator"><<</span> <span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">ByteArray</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">source_file</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">the_range</span>.<span class="ruby-identifier">size</span>))
|
|
<span class="ruby-identifier">destination_object</span>[<span class="ruby-value">:file_segments</span>].<span class="ruby-identifier">save</span>
|
|
<span class="ruby-identifier">destination_object</span>[<span class="ruby-value">:file_segments</span>].<span class="ruby-identifier">unload</span>(<span class="ruby-identifier">destination_object</span>[<span class="ruby-value">:file_segments</span>].<span class="ruby-identifier">size</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>)
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-identifier">destination_object</span>.<span class="ruby-identifier">release_reservation</span>
|
|
<span class="ruby-identifier">destination_object</span>.<span class="ruby-identifier">deactivate</span>
|
|
<span class="ruby-identifier">source_file</span>.<span class="ruby-identifier">close</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">source_file</span>
|
|
<span class="ruby-identifier">source_file</span>.<span class="ruby-identifier">close</span>
|
|
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">"Error opening destination object."</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">"Error opening source file & destination object."</span>
|
|
<span class="ruby-keyword">end</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">=></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">=></span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:source_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">source_path</span>, <span class="ruby-value">:destination_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">destination_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">options</span>}})
|
|
<span class="ruby-identifier">error</span> = <span class="ruby-keyword">true</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">error</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
|
|
<span class="ruby-identifier">destination</span>[<span class="ruby-value">:permissions</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_entry</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">set_permissions</span>(<span class="ruby-identifier">destination_path</span>, <span class="ruby-identifier">the_entry</span>[<span class="ruby-value">:credential</span>], <span class="ruby-identifier">the_entry</span>[<span class="ruby-value">: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">when</span> <span class="ruby-value">:DB_to_FS</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_record</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-keyword">begin</span>
|
|
<span class="ruby-comment"># Unless the object format is org.gxg.file --> export as .gxg_export object (formats + record)</span>
|
|
<span class="ruby-identifier">source_object</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:source</span>])
|
|
<span class="ruby-identifier">database</span> = <span class="ruby-identifier">source_object</span>.<span class="ruby-identifier">db_address</span>[<span class="ruby-value">:database</span>]
|
|
<span class="ruby-comment"># check if it is an org.gxg.file for export</span>
|
|
<span class="ruby-identifier">current_format</span> = <span class="ruby-keyword">nil</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">source_object</span>.<span class="ruby-identifier">format</span>().<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
<span class="ruby-identifier">the_format</span> = <span class="ruby-identifier">database</span>.<span class="ruby-identifier">format_load</span>({<span class="ruby-value">:uuid</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">source_object</span>.<span class="ruby-identifier">format</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">the_format</span>[<span class="ruby-value">:ufs</span>].<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">"org.gxg.file"</span>
|
|
<span class="ruby-identifier">current_format</span> = <span class="ruby-identifier">the_format</span>[<span class="ruby-value">:ufs</span>].<span class="ruby-identifier">to_s</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">current_format</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">"org.gxg.file"</span>
|
|
<span class="ruby-identifier">destination_file</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:destination</span>])
|
|
<span class="ruby-identifier">source_object</span>[<span class="ruby-value">:file_segments</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_segment</span>, <span class="ruby-identifier">segment_index</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-identifier">destination_file</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">the_segment</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-identifier">source_object</span>[<span class="ruby-value">:file_segments</span>].<span class="ruby-identifier">unload</span>(<span class="ruby-identifier">segment_index</span>)
|
|
<span class="ruby-comment"># Field no longer exists: the_segment.unload</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-identifier">source_object</span>.<span class="ruby-identifier">release_reservation</span>
|
|
<span class="ruby-identifier">source_object</span>.<span class="ruby-identifier">deactivate</span>
|
|
<span class="ruby-identifier">destination_file</span>.<span class="ruby-identifier">close</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-comment"># Review: replace with <db>.sync_export(<uuid-array>).to_json</span>
|
|
<span class="ruby-identifier">format_records</span> = {}
|
|
<span class="ruby-identifier">object_record</span> = <span class="ruby-identifier">source_object</span>.<span class="ruby-identifier">export</span>
|
|
<span class="ruby-identifier">object_record</span>.<span class="ruby-identifier">search</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">item</span>,<span class="ruby-identifier">selector</span>,<span class="ruby-identifier">container</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">selector</span> <span class="ruby-operator">==</span> <span class="ruby-value">:format</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">selector</span> <span class="ruby-operator">==</span> <span class="ruby-value">:constraint</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">item</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
<span class="ruby-identifier">format_uuid</span> = <span class="ruby-identifier">item</span>
|
|
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">format_records</span>[(<span class="ruby-identifier">item</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_sym</span>)].<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>)
|
|
<span class="ruby-identifier">format_sample</span> = <span class="ruby-identifier">database</span>.<span class="ruby-identifier">format_load</span>({<span class="ruby-value">:uuid</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">format_uuid</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_sym</span>})
|
|
<span class="ruby-identifier">format_sample</span>[<span class="ruby-value">:content</span>] = <span class="ruby-identifier">format_sample</span>[<span class="ruby-value">:content</span>].<span class="ruby-identifier">gxg_export</span>()
|
|
<span class="ruby-identifier">format_records</span>[(<span class="ruby-identifier">format_uuid</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_sym</span>)] = <span class="ruby-identifier">format_sample</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">buffer</span> = <span class="ruby-constant">GxG</span><span class="ruby-operator">::</span><span class="ruby-constant">ByteArray</span>.<span class="ruby-identifier">new</span>({<span class="ruby-value">:formats</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">format_records</span>, <span class="ruby-value">:record</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">object_record</span>}.<span class="ruby-identifier">to_json</span>)
|
|
<span class="ruby-comment">#</span>
|
|
<span class="ruby-keyword">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">extname</span>(<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:destination</span>]) <span class="ruby-operator">==</span> <span class="ruby-string">".gxg_export"</span>
|
|
<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:destination</span>] = (<span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>(<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:destination</span>]) <span class="ruby-operator">+</span> <span class="ruby-string">"/"</span> <span class="ruby-operator">+</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:destination</span>]) <span class="ruby-operator">+</span> <span class="ruby-string">".gxg_export"</span>)
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:destination</span>])
|
|
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">rmfile</span>(<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:destination</span>])
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-identifier">destination_file</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:destination</span>])
|
|
<span class="ruby-identifier">destination_file</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">buffer</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-identifier">destination_file</span>.<span class="ruby-identifier">close</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">=></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">=></span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:source_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">source_path</span>, <span class="ruby-value">:destination_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">destination_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">options</span>}})
|
|
<span class="ruby-identifier">error</span> = <span class="ruby-keyword">true</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">error</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
|
|
<span class="ruby-identifier">destination</span>[<span class="ruby-value">:permissions</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_entry</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">set_permissions</span>(<span class="ruby-identifier">destination_path</span>, <span class="ruby-identifier">the_entry</span>[<span class="ruby-value">:credential</span>], <span class="ruby-identifier">the_entry</span>[<span class="ruby-value">: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">when</span> <span class="ruby-value">:DB_to_DB</span>
|
|
<span class="ruby-identifier">source_database</span> = <span class="ruby-identifier">source</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:volume</span>].<span class="ruby-identifier">database</span>()
|
|
<span class="ruby-identifier">destination_database</span> = <span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:volume</span>].<span class="ruby-identifier">database</span>()
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">source_database</span> <span class="ruby-operator">&&</span> <span class="ruby-identifier">destination_database</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_record</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-identifier">source_object</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:source</span>])
|
|
<span class="ruby-identifier">current_format</span> = <span class="ruby-keyword">nil</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">source_object</span>.<span class="ruby-identifier">format</span>().<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
<span class="ruby-identifier">the_format</span> = <span class="ruby-identifier">source_database</span>.<span class="ruby-identifier">format_load</span>({<span class="ruby-value">:uuid</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">source_object</span>.<span class="ruby-identifier">format</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">the_format</span>[<span class="ruby-value">:ufs</span>].<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">"org.gxg.file"</span>
|
|
<span class="ruby-identifier">current_format</span> = <span class="ruby-identifier">the_format</span>[<span class="ruby-value">:ufs</span>].<span class="ruby-identifier">to_s</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-comment">#</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">source_database</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">destination_database</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">current_format</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">"org.gxg.file"</span>
|
|
<span class="ruby-identifier">import_record</span> = {<span class="ruby-value">:formats</span> <span class="ruby-operator">=></span> {}, <span class="ruby-value">:record</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">source_object</span>.<span class="ruby-identifier">export</span>({<span class="ruby-value">:clone</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">true</span>, <span class="ruby-value">:exclude_file_segments</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">true</span>})}
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">import_record</span> = {<span class="ruby-value">:formats</span> <span class="ruby-operator">=></span> {}, <span class="ruby-value">:record</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">source_object</span>.<span class="ruby-identifier">export</span>({<span class="ruby-value">:clone</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">true</span>})}
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">current_format</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">"org.gxg.file"</span>
|
|
<span class="ruby-identifier">import_record</span> = {<span class="ruby-value">:formats</span> <span class="ruby-operator">=></span> {}, <span class="ruby-value">:record</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">source_object</span>.<span class="ruby-identifier">export</span>({<span class="ruby-value">:exclude_file_segments</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">true</span>})}
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">import_record</span> = {<span class="ruby-value">:formats</span> <span class="ruby-operator">=></span> {}, <span class="ruby-value">:record</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">source_object</span>.<span class="ruby-identifier">export</span>()}
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-comment"># Gather format records for the object.</span>
|
|
<span class="ruby-identifier">import_record</span>.<span class="ruby-identifier">search</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">item</span>,<span class="ruby-identifier">selector</span>,<span class="ruby-identifier">container</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">selector</span> <span class="ruby-operator">==</span> <span class="ruby-value">:format</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">selector</span> <span class="ruby-operator">==</span> <span class="ruby-value">:constraint</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">item</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
<span class="ruby-identifier">format_uuid</span> = <span class="ruby-identifier">item</span>
|
|
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">format_records</span>[(<span class="ruby-identifier">item</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_sym</span>)].<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>)
|
|
<span class="ruby-identifier">format_sample</span> = <span class="ruby-identifier">source_database</span>.<span class="ruby-identifier">format_load</span>({<span class="ruby-value">:uuid</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">format_uuid</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_sym</span>})
|
|
<span class="ruby-identifier">format_sample</span>[<span class="ruby-value">:content</span>] = <span class="ruby-identifier">format_sample</span>[<span class="ruby-value">:content</span>].<span class="ruby-identifier">gxg_export</span>()
|
|
<span class="ruby-identifier">format_records</span>[(<span class="ruby-identifier">format_uuid</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_sym</span>)] = <span class="ruby-identifier">format_sample</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-identifier">enclosure_uuid</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>(<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:destination</span>]))[<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_sym</span>
|
|
<span class="ruby-identifier">destination_uuid</span> = <span class="ruby-identifier">import_record</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:uuid</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">source_database</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">destination_database</span>
|
|
<span class="ruby-comment"># Import Formats first</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">import_record</span>[<span class="ruby-value">:formats</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>)
|
|
<span class="ruby-identifier">op_frame</span> = {<span class="ruby-value">:operation</span> <span class="ruby-operator">=></span> <span class="ruby-value">:merge_format</span>, <span class="ruby-value">:data</span> <span class="ruby-operator">=></span> []}
|
|
<span class="ruby-identifier">import_record</span>[<span class="ruby-value">:formats</span>].<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_format_key</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-identifier">op_frame</span>[<span class="ruby-value">:data</span>] <span class="ruby-operator"><<</span> <span class="ruby-identifier">import_record</span>[<span class="ruby-value">:formats</span>][(<span class="ruby-identifier">the_format_key</span>)]
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">op_frame</span>[<span class="ruby-value">:data</span>].<span class="ruby-identifier">size</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
<span class="ruby-identifier">destination_database</span>.<span class="ruby-identifier">synchronize_records</span>([(<span class="ruby-identifier">op_frame</span>)],<span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:volume</span>].<span class="ruby-identifier">credential</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-comment">#</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:destination</span>])
|
|
<span class="ruby-comment"># Why? Because an object of the same NAME, but differing format/content may be present (unacceptable)</span>
|
|
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">rmfile</span>(<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:destination</span>])
|
|
<span class="ruby-comment"># Risky, but avoids situation where: diff.db, same.uuid, gets deleted, then imported to deleted object (doh!)</span>
|
|
<span class="ruby-identifier">destination_database</span>.<span class="ruby-identifier">empty_trash</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-comment">#</span>
|
|
<span class="ruby-identifier">destination_database</span>.<span class="ruby-identifier">synchronize_records</span>([{<span class="ruby-value">:operation</span> <span class="ruby-operator">=></span> <span class="ruby-value">:merge</span>, <span class="ruby-value">:data</span> <span class="ruby-operator">=></span> [(<span class="ruby-identifier">import_record</span>[<span class="ruby-value">:record</span>])]}],<span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:volume</span>].<span class="ruby-identifier">credential</span>())
|
|
<span class="ruby-comment">#</span>
|
|
<span class="ruby-keyword">unless</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">the_record</span>[<span class="ruby-value">:destination</span>])
|
|
<span class="ruby-identifier">the_enclosure</span> = <span class="ruby-identifier">destination_database</span>.<span class="ruby-identifier">retrieve_by_uuid</span>(<span class="ruby-identifier">enclosure_uuid</span>, <span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:volume</span>].<span class="ruby-identifier">credential</span>())
|
|
<span class="ruby-identifier">the_enclosure</span>.<span class="ruby-identifier">wait_for_reservation</span>
|
|
<span class="ruby-identifier">destination_object</span> = <span class="ruby-identifier">destination_database</span>.<span class="ruby-identifier">retrieve_by_uuid</span>(<span class="ruby-identifier">destination_uuid</span>, <span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:volume</span>].<span class="ruby-identifier">credential</span>())
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">current_format</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">"org.gxg.file"</span>
|
|
<span class="ruby-comment"># copy file segments</span>
|
|
<span class="ruby-identifier">destination_object</span>.<span class="ruby-identifier">wait_for_reservation</span>
|
|
<span class="ruby-identifier">source_object</span>[<span class="ruby-value">:file_segments</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_segment</span>, <span class="ruby-identifier">segment_index</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-identifier">destination_object</span>[<span class="ruby-value">:file_segments</span>] <span class="ruby-operator"><<</span> <span class="ruby-constant">ByteArray</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">the_segment</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-identifier">destination_object</span>[<span class="ruby-value">:file_segments</span>].<span class="ruby-identifier">save</span>
|
|
<span class="ruby-identifier">destination_object</span>[<span class="ruby-value">:file_segments</span>].<span class="ruby-identifier">unload</span>(<span class="ruby-identifier">destination_object</span>[<span class="ruby-value">:file_segments</span>].<span class="ruby-identifier">size</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>)
|
|
<span class="ruby-comment"># destination_object[:file_segments][(destination_object[:file_segments].size - 1)].save</span>
|
|
<span class="ruby-comment"># destination_object[:file_segments][(destination_object[:file_segments].size - 1)].unload</span>
|
|
<span class="ruby-identifier">source_object</span>[<span class="ruby-value">:file_segments</span>].<span class="ruby-identifier">unload</span>(<span class="ruby-identifier">segment_index</span>)
|
|
<span class="ruby-comment"># Field no longer exists : the_segment.unload</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-identifier">destination_object</span>.<span class="ruby-identifier">release_reservation</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-identifier">the_enclosure</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">destination_object</span>
|
|
<span class="ruby-identifier">destination_object</span>.<span class="ruby-identifier">deactivate</span>
|
|
<span class="ruby-identifier">the_enclosure</span>.<span class="ruby-identifier">release_reservation</span>
|
|
<span class="ruby-identifier">the_enclosure</span>.<span class="ruby-identifier">deactivate</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-comment">#</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">error</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
|
|
<span class="ruby-identifier">destination</span>[<span class="ruby-value">:permissions</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_entry</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">set_permissions</span>(<span class="ruby-identifier">destination_path</span>, <span class="ruby-identifier">the_entry</span>[<span class="ruby-value">:credential</span>], <span class="ruby-identifier">the_entry</span>[<span class="ruby-value">: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">else</span>
|
|
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=></span> <span class="ruby-constant">Exception</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">"Error aquiring source or destination database."</span>), <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:source_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">source_path</span>, <span class="ruby-value">:destination_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">destination_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">options</span>}})
|
|
<span class="ruby-identifier">error</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">end</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">error</span> = <span class="ruby-keyword">true</span>
|
|
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=></span> <span class="ruby-constant">Exception</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">"You do not have sufficient permissions."</span>), <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:source_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">source_path</span>, <span class="ruby-value">:destination_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">destination_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">options</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-entries" class="method-detail ">
|
|
|
|
<div class="method-heading">
|
|
<span class="method-name">entries</span><span
|
|
class="method-args">(the_path="", as_credential=nil)</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 191</span>
|
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">entries</span>(<span class="ruby-identifier">the_path</span>=<span class="ruby-string">""</span>, <span class="ruby-identifier">as_credential</span>=<span class="ruby-keyword">nil</span>)
|
|
<span class="ruby-identifier">result</span> = []
|
|
<span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">valid_path?</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">"/"</span>
|
|
<span class="ruby-identifier">volume_record</span> = <span class="ruby-keyword">nil</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">volume_record</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">volume_of_path</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-comment">#</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">volume_record</span>
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:volume</span>].<span class="ruby-identifier">entries</span>(<span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:subpath</span>].<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">as_credential</span>)
|
|
<span class="ruby-ivar">@mounted</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">volume_entry</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-keyword">if</span> (<span class="ruby-identifier">volume_entry</span>[<span class="ruby-value">:path</span>].<span class="ruby-identifier">to_s</span>).<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">the_path</span>) <span class="ruby-operator">&&</span> <span class="ruby-identifier">volume_entry</span>[<span class="ruby-value">:path</span>].<span class="ruby-identifier">to_s</span> <span class="ruby-operator">!=</span> <span class="ruby-identifier">the_path</span>
|
|
<span class="ruby-identifier">result</span> <span class="ruby-operator"><<</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">volume_entry</span>[<span class="ruby-value">:path</span>].<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-identifier">result</span>.<span class="ruby-identifier">sort</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">a</span>,<span class="ruby-identifier">b</span><span class="ruby-operator">|</span> <span class="ruby-identifier">a</span>[<span class="ruby-value">:title</span>] <span class="ruby-operator"><=></span> <span class="ruby-identifier">b</span>[<span class="ruby-value">:title</span>]}
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">path_table</span> = []
|
|
<span class="ruby-ivar">@thread_safety</span>.<span class="ruby-identifier">synchronize</span> {
|
|
<span class="ruby-ivar">@mounted</span>.<span class="ruby-identifier">reverse</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">volume_entry</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-identifier">path_entry</span> = <span class="ruby-identifier">volume_entry</span>[<span class="ruby-value">:path</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">split</span>(<span class="ruby-string">"/"</span>)
|
|
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">path_table</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">path_entry</span>)
|
|
<span class="ruby-identifier">path_table</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">path_entry</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">end</span>
|
|
}
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_path</span> <span class="ruby-operator">==</span> <span class="ruby-string">"/"</span>
|
|
<span class="ruby-identifier">offset</span> = <span class="ruby-value">1</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">offset</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">"/"</span>).<span class="ruby-identifier">size</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>)
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-comment">#</span>
|
|
<span class="ruby-identifier">already</span> = []
|
|
<span class="ruby-identifier">path_table</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">subpath</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">path_prefix</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>,<span class="ruby-identifier">subpath</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">"/"</span>).<span class="ruby-identifier">to_s</span>) <span class="ruby-operator">==</span> <span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">subpath</span>[(<span class="ruby-identifier">offset</span>)].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">already</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">subpath</span>[(<span class="ruby-identifier">offset</span>)].<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-identifier">the_profile</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>((<span class="ruby-identifier">the_path</span> <span class="ruby-operator">+</span> <span class="ruby-string">"/"</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">subpath</span>[(<span class="ruby-identifier">offset</span>)].<span class="ruby-identifier">to_s</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-string">"//"</span>,<span class="ruby-string">"/"</span>), {<span class="ruby-value">:with_credential</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">as_credential</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">subpath</span>[(<span class="ruby-identifier">offset</span>)].<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-identifier">the_profile</span>[<span class="ruby-value">:accessed</span>] = <span class="ruby-constant">DateTime</span>.<span class="ruby-identifier">now</span>
|
|
<span class="ruby-identifier">result</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">the_profile</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-identifier">already</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">subpath</span>[(<span class="ruby-identifier">offset</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">result</span> = <span class="ruby-identifier">result</span>.<span class="ruby-identifier">sort</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">a</span>,<span class="ruby-identifier">b</span><span class="ruby-operator">|</span> <span class="ruby-identifier">a</span>[<span class="ruby-value">:title</span>] <span class="ruby-operator"><=></span> <span class="ruby-identifier">b</span>[<span class="ruby-value">:title</span>]}
|
|
<span class="ruby-comment">#</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-node">"Path not found: #{the_path}"</span>
|
|
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=></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">=></span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">the_path</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-exist-3F" class="method-detail ">
|
|
|
|
<div class="method-heading">
|
|
<span class="method-name">exist?</span><span
|
|
class="method-args">(the_path="")</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 92</span>
|
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">exist?</span>(<span class="ruby-identifier">the_path</span>=<span class="ruby-string">""</span>)
|
|
<span class="ruby-keyword">self</span>.<span class="ruby-identifier">valid_path?</span>(<span class="ruby-identifier">the_path</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">(the_path="", 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 96</span>
|
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">get_permissions</span>(<span class="ruby-identifier">the_path</span>=<span class="ruby-string">""</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-keyword">self</span>.<span class="ruby-identifier">valid_path?</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">"/"</span>
|
|
<span class="ruby-identifier">volume_record</span> = <span class="ruby-keyword">nil</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">volume_record</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">volume_of_path</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">volume_record</span>
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:volume</span>].<span class="ruby-identifier">get_permissions</span>(<span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:subpath</span>].<span class="ruby-identifier">to_s</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-mkdir" class="method-detail ">
|
|
|
|
<div class="method-heading">
|
|
<span class="method-name">mkdir</span><span
|
|
class="method-args">(the_path="", 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 336</span>
|
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">mkdir</span>(<span class="ruby-identifier">the_path</span>=<span class="ruby-string">""</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-keyword">self</span>.<span class="ruby-identifier">valid_path?</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</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-keyword">self</span>.<span class="ruby-identifier">valid_path?</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">the_path</span>.<span class="ruby-identifier">to_s</span>))
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">"/"</span>
|
|
<span class="ruby-identifier">volume_record</span> = <span class="ruby-keyword">nil</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">volume_record</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">volume_of_path</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">volume_record</span>
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:volume</span>].<span class="ruby-identifier">mkdir</span>(<span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:subpath</span>].<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">permissions</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">"You do not have sufficient priviledges to create here. See the mount method."</span>
|
|
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">the_error</span>
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">false</span>
|
|
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">the_path</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">"Invalid path to new directory"</span>
|
|
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">the_error</span>
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">false</span>
|
|
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">the_path</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-mkfile" class="method-detail ">
|
|
|
|
<div class="method-heading">
|
|
<span class="method-name">mkfile</span><span
|
|
class="method-args">(the_path="", options={})</span>
|
|
|
|
<span class="method-click-advice">click to toggle source</span>
|
|
|
|
</div>
|
|
|
|
|
|
<div class="method-description">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="method-source-code" id="mkfile-source">
|
|
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 452</span>
|
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">mkfile</span>(<span class="ruby-identifier">the_path</span>=<span class="ruby-string">""</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-keyword">self</span>.<span class="ruby-identifier">valid_path?</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">the_path</span>,<span class="ruby-identifier">options</span>)
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">valid_path?</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">the_path</span>.<span class="ruby-identifier">to_s</span>))
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">"/"</span>
|
|
<span class="ruby-identifier">volume_record</span> = <span class="ruby-keyword">nil</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">volume_record</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">volume_of_path</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">volume_record</span>
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:volume</span>].<span class="ruby-identifier">open</span>(<span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:subpath</span>].<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">options</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">"You do not have sufficient priviledges to create here."</span>
|
|
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=></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">=></span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">the_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">options</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">"Invalid path to new :file"</span>
|
|
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=></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">=></span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">the_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">options</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-mkpath" class="method-detail ">
|
|
|
|
<div class="method-heading">
|
|
<span class="method-name">mkpath</span><span
|
|
class="method-args">(the_path="")</span>
|
|
|
|
<span class="method-click-advice">click to toggle source</span>
|
|
|
|
</div>
|
|
|
|
|
|
<div class="method-description">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="method-source-code" id="mkpath-source">
|
|
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 369</span>
|
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">mkpath</span>(<span class="ruby-identifier">the_path</span>=<span class="ruby-string">""</span>)
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">false</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">""</span>
|
|
<span class="ruby-identifier">the_path</span> = <span class="ruby-string">"/"</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">valid_path?</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">true</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">error_flag</span> = <span class="ruby-keyword">false</span>
|
|
<span class="ruby-identifier">path_array</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">"/"</span>)
|
|
(<span class="ruby-value">0</span><span class="ruby-operator">..</span>(<span class="ruby-identifier">path_array</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>)).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">indexer</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-identifier">temp_path</span> = <span class="ruby-identifier">path_array</span>[(<span class="ruby-value">0</span><span class="ruby-operator">..</span>(<span class="ruby-identifier">indexer</span>))].<span class="ruby-identifier">join</span>(<span class="ruby-string">"/"</span>)
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">temp_path</span> <span class="ruby-operator">==</span> <span class="ruby-string">""</span>
|
|
<span class="ruby-identifier">temp_path</span> = <span class="ruby-string">"/"</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">unless</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">valid_path?</span>(<span class="ruby-identifier">temp_path</span>)
|
|
<span class="ruby-keyword">unless</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">mkdir</span>(<span class="ruby-identifier">temp_path</span>)
|
|
<span class="ruby-identifier">error_flag</span> = <span class="ruby-keyword">true</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">unless</span> <span class="ruby-identifier">error_flag</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-mount" class="method-detail ">
|
|
|
|
<div class="method-heading">
|
|
<span class="method-name">mount</span><span
|
|
class="method-args">(the_volume = nil, the_path = "")</span>
|
|
|
|
<span class="method-click-advice">click to toggle source</span>
|
|
|
|
</div>
|
|
|
|
|
|
<div class="method-description">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="method-source-code" id="mount-source">
|
|
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 1019</span>
|
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">mount</span>(<span class="ruby-identifier">the_volume</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">the_path</span> = <span class="ruby-string">""</span>)
|
|
<span class="ruby-comment"># Allow for a path to be mounted over the top of another - design choice</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_volume</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">Storage</span><span class="ruby-operator">::</span><span class="ruby-constant">Volume</span>)
|
|
<span class="ruby-ivar">@thread_safety</span>.<span class="ruby-identifier">synchronize</span> { <span class="ruby-ivar">@mounted</span> <span class="ruby-operator"><<</span> {<span class="ruby-value">:volume</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">the_volume</span>, <span class="ruby-value">:path</span> <span class="ruby-operator">=></span> <span class="ruby-operator">::</span><span class="ruby-constant">Pathname</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)} }
|
|
<span class="ruby-keyword">true</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-ivar">@mounted</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">end</span></pre>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div id="method-i-mounted-3F" class="method-detail ">
|
|
|
|
<div class="method-heading">
|
|
<span class="method-name">mounted?</span><span
|
|
class="method-args">(the_path="")</span>
|
|
|
|
<span class="method-click-advice">click to toggle source</span>
|
|
|
|
</div>
|
|
|
|
|
|
<div class="method-description">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="method-source-code" id="mounted-3F-source">
|
|
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 1029</span>
|
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">mounted?</span>(<span class="ruby-identifier">the_path</span>=<span class="ruby-string">""</span>)
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">false</span>
|
|
<span class="ruby-ivar">@thread_safety</span>.<span class="ruby-identifier">synchronize</span> {
|
|
<span class="ruby-ivar">@mounted</span>.<span class="ruby-identifier">reverse</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">entry</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">entry</span>[<span class="ruby-value">:path</span>] <span class="ruby-operator">==</span> <span class="ruby-identifier">the_path</span>
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">true</span>
|
|
<span class="ruby-keyword">break</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-move" class="method-detail ">
|
|
|
|
<div class="method-heading">
|
|
<span class="method-name">move</span><span
|
|
class="method-args">(source_path=nil, destination_path=nil, options={})</span>
|
|
|
|
<span class="method-click-advice">click to toggle source</span>
|
|
|
|
</div>
|
|
|
|
|
|
<div class="method-description">
|
|
|
|
<p>Moving support</p>
|
|
|
|
|
|
|
|
|
|
<div class="method-source-code" id="move-source">
|
|
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 907</span>
|
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">move</span>(<span class="ruby-identifier">source_path</span>=<span class="ruby-keyword">nil</span>, <span class="ruby-identifier">destination_path</span>=<span class="ruby-keyword">nil</span>, <span class="ruby-identifier">options</span>={})
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">false</span>
|
|
<span class="ruby-identifier">error</span> = <span class="ruby-keyword">false</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">source_path</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">destination_path</span>
|
|
<span class="ruby-identifier">error</span> = <span class="ruby-keyword">true</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-comment">#</span>
|
|
<span class="ruby-identifier">source</span> = {<span class="ruby-value">:enclosure</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:profile</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:record</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>}
|
|
<span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">valid_path?</span>(<span class="ruby-identifier">source_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">source_path</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">"/"</span>
|
|
<span class="ruby-identifier">source</span>[<span class="ruby-value">:record</span>] = <span class="ruby-keyword">nil</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">source</span>[<span class="ruby-value">:record</span>] = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">volume_of_path</span>(<span class="ruby-identifier">source_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">source</span>[<span class="ruby-value">:record</span>]
|
|
<span class="ruby-identifier">source</span>[<span class="ruby-value">:profile</span>] = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">source_path</span>,<span class="ruby-identifier">options</span>.<span class="ruby-identifier">merge</span>({<span class="ruby-value">:follow_symlinks</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">true</span>}))
|
|
<span class="ruby-identifier">source</span>[<span class="ruby-value">:enclosure</span>] = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>(<span class="ruby-identifier">source_path</span>),<span class="ruby-identifier">options</span>.<span class="ruby-identifier">merge</span>({<span class="ruby-value">:follow_symlinks</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">true</span>}))
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">error</span> = <span class="ruby-keyword">true</span>
|
|
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=></span> <span class="ruby-constant">Exception</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">"You do not have sufficient priviledges."</span>), <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:source_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">source_path</span>, <span class="ruby-value">:destination_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">destination_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">options</span>}})
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">error</span> = <span class="ruby-keyword">true</span>
|
|
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=></span> <span class="ruby-constant">Exception</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">"Invalid source path"</span>), <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:source_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">source_path</span>, <span class="ruby-value">:destination_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">destination_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">options</span>}})
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-comment"># Note: if destination is not full path, but path to its future enclosure, append the filename to fully qualify the destination_path</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">source_path</span>) <span class="ruby-operator">!=</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">destination_path</span>)
|
|
<span class="ruby-identifier">destination_path</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-identifier">destination_path</span> <span class="ruby-operator">+</span> <span class="ruby-string">"/"</span> <span class="ruby-operator">+</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">source_path</span>))
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-comment">#</span>
|
|
<span class="ruby-identifier">destination</span> = {<span class="ruby-value">:enclosure</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>(<span class="ruby-identifier">destination_path</span>),<span class="ruby-identifier">options</span>.<span class="ruby-identifier">merge</span>({<span class="ruby-value">:follow_symlinks</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">true</span>})), <span class="ruby-value">:profile</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:record</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>}
|
|
<span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">valid_path?</span>(<span class="ruby-identifier">destination_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">destination_path</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">"/"</span>
|
|
<span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>] = <span class="ruby-keyword">nil</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>] = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">volume_of_path</span>(<span class="ruby-identifier">destination_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>]
|
|
<span class="ruby-identifier">destination</span>[<span class="ruby-value">:profile</span>] = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">destination_path</span>,<span class="ruby-identifier">options</span>.<span class="ruby-identifier">merge</span>({<span class="ruby-value">:follow_symlinks</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">true</span>}))
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">error</span> = <span class="ruby-keyword">true</span>
|
|
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=></span> <span class="ruby-constant">Exception</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">"You do not have sufficient permissions."</span>), <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:source_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">source_path</span>, <span class="ruby-value">:destination_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">destination_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">options</span>}})
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">destination</span>[<span class="ruby-value">:enclosure</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>)
|
|
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">destination</span>[<span class="ruby-value">:enclosure</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">error</span> = <span class="ruby-keyword">true</span>
|
|
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=></span> <span class="ruby-constant">Exception</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">"You do not have sufficient permissions to create at destination."</span>), <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:source_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">source_path</span>, <span class="ruby-value">:destination_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">destination_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">options</span>}})
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">error</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
|
|
<span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>] = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">volume_of_path</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>(<span class="ruby-identifier">destination_path</span>))
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>].<span class="ruby-identifier">is_a?</span>(<span class="ruby-operator">::</span><span class="ruby-constant">Hash</span>)
|
|
<span class="ruby-comment"># Note: this won't exist yet, but is here for future reference.</span>
|
|
<span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:subpath</span>] = (<span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:subpath</span>] <span class="ruby-operator">+</span> <span class="ruby-string">"/"</span> <span class="ruby-operator">+</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">destination_path</span>))
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">error</span> = <span class="ruby-keyword">true</span>
|
|
<span class="ruby-identifier">log_error</span>({<span class="ruby-value">:error</span> <span class="ruby-operator">=></span> <span class="ruby-constant">Exception</span>.<span class="ruby-identifier">new</span>(<span class="ruby-string">"Invalid destination path"</span>), <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:source_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">source_path</span>, <span class="ruby-value">:destination_path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">destination_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">options</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-identifier">error</span> <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">source</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:volume</span>].<span class="ruby-identifier">file_system?</span>()
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">destination</span>[<span class="ruby-value">:enclosure</span>][<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
<span class="ruby-identifier">scenario</span> = <span class="ruby-value">:FS_to_DB</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">scenario</span> = <span class="ruby-value">:FS_to_FS</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">destination</span>[<span class="ruby-value">:enclosure</span>][<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
<span class="ruby-identifier">scenario</span> = <span class="ruby-value">:DB_to_DB</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">scenario</span> = <span class="ruby-value">:DB_to_FS</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">scenario</span> <span class="ruby-operator">==</span> <span class="ruby-value">:DB_to_DB</span> <span class="ruby-operator">&&</span> (<span class="ruby-identifier">source</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:volume</span>].<span class="ruby-identifier">database</span>() <span class="ruby-operator">==</span> <span class="ruby-identifier">destination</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:volume</span>].<span class="ruby-identifier">database</span>())
|
|
<span class="ruby-identifier">database</span> = <span class="ruby-identifier">source</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:volume</span>].<span class="ruby-identifier">database</span>()
|
|
<span class="ruby-identifier">source_enclosure</span> = <span class="ruby-identifier">database</span>.<span class="ruby-identifier">retrieve_by_uuid</span>(<span class="ruby-identifier">source</span>[<span class="ruby-value">:enclosure</span>][<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_sym</span>, <span class="ruby-identifier">source</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:volume</span>].<span class="ruby-identifier">credential</span>())
|
|
<span class="ruby-identifier">source_enclosure</span>.<span class="ruby-identifier">wait_for_reservation</span>
|
|
<span class="ruby-identifier">destination_enclosure</span> = <span class="ruby-identifier">database</span>.<span class="ruby-identifier">retrieve_by_uuid</span>(<span class="ruby-identifier">destination</span>[<span class="ruby-value">:enclosure</span>][<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_sym</span>, <span class="ruby-identifier">source</span>[<span class="ruby-value">:record</span>][<span class="ruby-value">:volume</span>].<span class="ruby-identifier">credential</span>())
|
|
<span class="ruby-identifier">destination_enclosure</span>.<span class="ruby-identifier">wait_for_reservation</span>
|
|
<span class="ruby-comment">#</span>
|
|
<span class="ruby-identifier">source_enclosure</span>.<span class="ruby-identifier">each_index</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_index</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">source_enclosure</span>[(<span class="ruby-identifier">the_index</span>)].<span class="ruby-identifier">uuid</span>().<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_sym</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">source</span>[<span class="ruby-value">:profile</span>][<span class="ruby-value">:uuid</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">to_sym</span>
|
|
<span class="ruby-identifier">destination_enclosure</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">source_enclosure</span>.<span class="ruby-identifier">delete_at</span>(<span class="ruby-identifier">the_index</span>)
|
|
<span class="ruby-keyword">break</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">source_enclosure</span>[(<span class="ruby-identifier">the_index</span>)].<span class="ruby-identifier">deactivate</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-identifier">source_enclosure</span>.<span class="ruby-identifier">release_reservation</span>
|
|
<span class="ruby-identifier">destination_enclosure</span>.<span class="ruby-identifier">release_reservation</span>
|
|
<span class="ruby-identifier">source_enclosure</span>.<span class="ruby-identifier">deactivate</span>
|
|
<span class="ruby-identifier">destination_enclosure</span>.<span class="ruby-identifier">deactivate</span>
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">true</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-comment"># copy to destination_path</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">copy</span>(<span class="ruby-identifier">source_path</span>, <span class="ruby-identifier">destination_path</span>, <span class="ruby-identifier">options</span>) <span class="ruby-operator">==</span> <span class="ruby-keyword">true</span>
|
|
<span class="ruby-comment"># delete source_path object</span>
|
|
<span class="ruby-keyword">if</span> [<span class="ruby-string">"directory"</span>,<span class="ruby-string">"persisted_array"</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">source</span>[<span class="ruby-value">:profile</span>][<span class="ruby-value">:type</span>].<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">rmdir</span>(<span class="ruby-identifier">source_path</span>)
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">rmfile</span>(<span class="ruby-identifier">source_path</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-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">(the_path="", 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 398</span>
|
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">open</span>(<span class="ruby-identifier">the_path</span>=<span class="ruby-string">""</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-keyword">self</span>.<span class="ruby-identifier">valid_path?</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">"/"</span>
|
|
<span class="ruby-identifier">volume_record</span> = <span class="ruby-keyword">nil</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">volume_record</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">volume_of_path</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">volume_record</span>
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:volume</span>].<span class="ruby-identifier">open</span>(<span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:subpath</span>].<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">options</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">"You do not have sufficient priviledges to open here."</span>
|
|
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=></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">=></span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">the_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">options</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">"Invalid path"</span>
|
|
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=></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">=></span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">the_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=></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-path_prefix" class="method-detail ">
|
|
|
|
<div class="method-heading">
|
|
<span class="method-name">path_prefix</span><span
|
|
class="method-args">(src_path="", the_path="")</span>
|
|
|
|
<span class="method-click-advice">click to toggle source</span>
|
|
|
|
</div>
|
|
|
|
|
|
<div class="method-description">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="method-source-code" id="path_prefix-source">
|
|
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 24</span>
|
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">path_prefix</span>(<span class="ruby-identifier">src_path</span>=<span class="ruby-string">""</span>, <span class="ruby-identifier">the_path</span>=<span class="ruby-string">""</span>)
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-string">""</span>
|
|
<span class="ruby-identifier">src_path</span>.<span class="ruby-identifier">each_char</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_char</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_char</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">the_path</span>[<span class="ruby-value">0</span>]
|
|
<span class="ruby-identifier">the_path</span> = <span class="ruby-identifier">the_path</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-operator"><<</span> <span class="ruby-identifier">the_char</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-keyword">break</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">(the_path="",params=nil)</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 142</span>
|
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">profile</span>(<span class="ruby-identifier">the_path</span>=<span class="ruby-string">""</span>,<span class="ruby-identifier">params</span>=<span class="ruby-keyword">nil</span>)
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">nil</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">valid_path?</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">"/"</span>
|
|
<span class="ruby-identifier">volume_record</span> = <span class="ruby-keyword">nil</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">volume_record</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">volume_of_path</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">volume_record</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:subpath</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">params</span>
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:volume</span>].<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:subpath</span>].<span class="ruby-identifier">to_s</span>,<span class="ruby-identifier">params</span>)
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:volume</span>].<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:subpath</span>].<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-identifier">result</span>[<span class="ruby-value">:title</span>] = (<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">split</span>(<span class="ruby-string">"/"</span>).<span class="ruby-identifier">last</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-comment"># VFS</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">params</span>
|
|
<span class="ruby-identifier">base_profile</span> = <span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:volume</span>].<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:subpath</span>].<span class="ruby-identifier">to_s</span>,<span class="ruby-identifier">params</span>)
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">base_profile</span> = <span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:volume</span>].<span class="ruby-identifier">profile</span>(<span class="ruby-identifier">volume_record</span>[<span class="ruby-value">: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">base_profile</span>
|
|
<span class="ruby-identifier">result</span> = {<span class="ruby-value">:title</span> <span class="ruby-operator">=></span> <span class="ruby-string">""</span>, <span class="ruby-value">:type</span> <span class="ruby-operator">=></span> <span class="ruby-value">:virtual_directory</span>, <span class="ruby-value">:owner_type</span> <span class="ruby-operator">=></span> <span class="ruby-value">:virtual_directory</span>, <span class="ruby-value">:uuid</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:on_device</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:on_device_major</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:on_device_minor</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:is_device</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:is_device_major</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:is_device_minor</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:inode</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:flags</span> <span class="ruby-operator">=></span> [<span class="ruby-value">:read</span>], <span class="ruby-value">:hardlinks_to</span> <span class="ruby-operator">=></span> <span class="ruby-value">0</span>, <span class="ruby-value">:user_id</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:group_id</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:size</span> <span class="ruby-operator">=></span> <span class="ruby-value">0</span>, <span class="ruby-value">:block_size</span> <span class="ruby-operator">=></span> <span class="ruby-value">0</span>, <span class="ruby-value">:blocks</span> <span class="ruby-operator">=></span> <span class="ruby-value">0</span>, <span class="ruby-value">:accessed</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:modified</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:status_modified</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:permissions</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:effective</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:execute</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">true</span>, <span class="ruby-value">:rename</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:move</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:destroy</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:create</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:write</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:read</span><span class="ruby-operator">=></span><span class="ruby-keyword">true</span>}}, <span class="ruby-value">:mode</span><span class="ruby-operator">=></span><span class="ruby-keyword">nil</span>}
|
|
<span class="ruby-identifier">result</span>[<span class="ruby-value">:title</span>] = (<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">split</span>(<span class="ruby-string">"/"</span>).<span class="ruby-identifier">last</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-identifier">result</span>[<span class="ruby-value">:accessed</span>] = <span class="ruby-constant">DateTime</span>.<span class="ruby-identifier">now</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">:write</span>]
|
|
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:effective</span>][<span class="ruby-value">:write</span>] = <span class="ruby-keyword">true</span>
|
|
<span class="ruby-identifier">result</span>[<span class="ruby-value">:permissions</span>][<span class="ruby-value">:effective</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">end</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-comment"># VFS Other</span>
|
|
<span class="ruby-identifier">result</span> = {<span class="ruby-value">:title</span> <span class="ruby-operator">=></span> <span class="ruby-string">""</span>, <span class="ruby-value">:type</span> <span class="ruby-operator">=></span> <span class="ruby-value">:virtual_directory</span>, <span class="ruby-value">:owner_type</span> <span class="ruby-operator">=></span> <span class="ruby-value">:virtual_directory</span>, <span class="ruby-value">:uuid</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:on_device</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:on_device_major</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:on_device_minor</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:is_device</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:is_device_major</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:is_device_minor</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:inode</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:flags</span> <span class="ruby-operator">=></span> [<span class="ruby-value">:read</span>], <span class="ruby-value">:hardlinks_to</span> <span class="ruby-operator">=></span> <span class="ruby-value">0</span>, <span class="ruby-value">:user_id</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:group_id</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:size</span> <span class="ruby-operator">=></span> <span class="ruby-value">0</span>, <span class="ruby-value">:block_size</span> <span class="ruby-operator">=></span> <span class="ruby-value">0</span>, <span class="ruby-value">:blocks</span> <span class="ruby-operator">=></span> <span class="ruby-value">0</span>, <span class="ruby-value">:accessed</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:modified</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:status_modified</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">nil</span>, <span class="ruby-value">:permissions</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:effective</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:execute</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">true</span>, <span class="ruby-value">:rename</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:move</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:destroy</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:create</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:write</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">false</span>, <span class="ruby-value">:read</span><span class="ruby-operator">=></span><span class="ruby-keyword">true</span>}}, <span class="ruby-value">:mode</span><span class="ruby-operator">=></span><span class="ruby-keyword">nil</span>}
|
|
<span class="ruby-identifier">result</span>[<span class="ruby-value">:title</span>] = (<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">split</span>(<span class="ruby-string">"/"</span>).<span class="ruby-identifier">last</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-identifier">result</span>[<span class="ruby-value">:accessed</span>] = <span class="ruby-constant">DateTime</span>.<span class="ruby-identifier">now</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-node">"Path not found: #{the_path}"</span>
|
|
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=></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">=></span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">the_path</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">(the_path="", new_name="", 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 425</span>
|
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">rename</span>(<span class="ruby-identifier">the_path</span>=<span class="ruby-string">""</span>, <span class="ruby-identifier">new_name</span>=<span class="ruby-string">""</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-keyword">self</span>.<span class="ruby-identifier">valid_path?</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">"/"</span>
|
|
<span class="ruby-identifier">volume_record</span> = <span class="ruby-keyword">nil</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">volume_record</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">volume_of_path</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">volume_record</span>
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:volume</span>].<span class="ruby-identifier">rename</span>(<span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:subpath</span>].<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">new_name</span>, <span class="ruby-identifier">options</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">"You do not have sufficient priviledges to rename here."</span>
|
|
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=></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">=></span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">the_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">options</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">"Invalid path"</span>
|
|
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=></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">=></span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">the_path</span>, <span class="ruby-value">:options</span> <span class="ruby-operator">=></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">(the_path="", 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 111</span>
|
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">revoke_permissions</span>(<span class="ruby-identifier">the_path</span>=<span class="ruby-string">""</span>, <span class="ruby-identifier">the_credential</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-keyword">self</span>.<span class="ruby-identifier">valid_path?</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">"/"</span>
|
|
<span class="ruby-identifier">volume_record</span> = <span class="ruby-keyword">nil</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">volume_record</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">volume_of_path</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">volume_record</span>
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:volume</span>].<span class="ruby-identifier">revoke_permissions</span>(<span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:subpath</span>].<span class="ruby-identifier">to_s</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">(the_path="")</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 254</span>
|
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">rmdir</span>(<span class="ruby-identifier">the_path</span>=<span class="ruby-string">""</span>)
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">false</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">valid_path?</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">begin</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">"/"</span>
|
|
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">"You do not have destroy permissions here"</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">volume_record</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">volume_of_path</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">volume_record</span>
|
|
<span class="ruby-identifier">the_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-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-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">result</span> = <span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:volume</span>].<span class="ruby-identifier">rmdir</span>(<span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:subpath</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-string">"Not a directory"</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">"You do not have destroy permissions here. See unmount method."</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">"Invalid path"</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">"Invalid path"</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=></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">=></span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=></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">"Invalid path"</span>
|
|
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=></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">=></span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">the_path</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">(the_path="")</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 295</span>
|
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">rmfile</span>(<span class="ruby-identifier">the_path</span>=<span class="ruby-string">""</span>)
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">false</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">valid_path?</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">begin</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">"/"</span>
|
|
<span class="ruby-identifier">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">"You do not have destroy permissions here"</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">volume_record</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">volume_of_path</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">volume_record</span>
|
|
<span class="ruby-identifier">the_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-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-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">raise</span> <span class="ruby-constant">Exception</span>, <span class="ruby-string">"Not a valid :file or :persisted_hash"</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:volume</span>].<span class="ruby-identifier">rmfile</span>(<span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:subpath</span>].<span class="ruby-identifier">to_s</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">"You do not have destroy permissions here. See unmount method."</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">"Invalid path"</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">"Invalid path"</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=></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">=></span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=></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">"Invalid path"</span>
|
|
<span class="ruby-keyword">rescue</span> <span class="ruby-constant">Exception</span> <span class="ruby-operator">=></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">=></span> <span class="ruby-identifier">the_error</span>, <span class="ruby-value">:parameters</span> <span class="ruby-operator">=></span> {<span class="ruby-value">:path</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">the_path</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">(the_path="", 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 127</span>
|
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">set_permissions</span>(<span class="ruby-identifier">the_path</span>=<span class="ruby-string">""</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-keyword">self</span>.<span class="ruby-identifier">valid_path?</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">"/"</span>
|
|
<span class="ruby-identifier">volume_record</span> = <span class="ruby-keyword">nil</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">volume_record</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">volume_of_path</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">volume_record</span>
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:volume</span>].<span class="ruby-identifier">set_permissions</span>(<span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:subpath</span>].<span class="ruby-identifier">to_s</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-identifier">result</span>
|
|
<span class="ruby-keyword">end</span></pre>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div id="method-i-subpath" class="method-detail ">
|
|
|
|
<div class="method-heading">
|
|
<span class="method-name">subpath</span><span
|
|
class="method-args">(src_path="", the_path="")</span>
|
|
|
|
<span class="method-click-advice">click to toggle source</span>
|
|
|
|
</div>
|
|
|
|
|
|
<div class="method-description">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="method-source-code" id="subpath-source">
|
|
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 11</span>
|
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">subpath</span>(<span class="ruby-identifier">src_path</span>=<span class="ruby-string">""</span>, <span class="ruby-identifier">the_path</span>=<span class="ruby-string">""</span>)
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">src_path</span> <span class="ruby-operator">==</span> <span class="ruby-string">"/"</span>
|
|
<span class="ruby-identifier">the_path</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-identifier">src_path</span>.<span class="ruby-identifier">each_char</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">the_char</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_char</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">the_path</span>[<span class="ruby-value">0</span>]
|
|
<span class="ruby-identifier">the_path</span> = <span class="ruby-identifier">the_path</span>[(<span class="ruby-value">1</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-identifier">the_path</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">end</span></pre>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div id="method-i-unmount" class="method-detail ">
|
|
|
|
<div class="method-heading">
|
|
<span class="method-name">unmount</span><span
|
|
class="method-args">(the_path="")</span>
|
|
|
|
<span class="method-click-advice">click to toggle source</span>
|
|
|
|
</div>
|
|
|
|
|
|
<div class="method-description">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="method-source-code" id="unmount-source">
|
|
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 1042</span>
|
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">unmount</span>(<span class="ruby-identifier">the_path</span>=<span class="ruby-string">""</span>)
|
|
<span class="ruby-comment"># Allow for a path to be mounted over the top of another - design choice</span>
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">nil</span>
|
|
<span class="ruby-ivar">@thread_safety</span>.<span class="ruby-identifier">synchronize</span> {
|
|
<span class="ruby-keyword">if</span> <span class="ruby-ivar">@mounted</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
|
|
(<span class="ruby-value">0</span><span class="ruby-operator">..</span>(<span class="ruby-ivar">@mounted</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>)).<span class="ruby-identifier">to_a</span>.<span class="ruby-identifier">reverse</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">indexer</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> (<span class="ruby-ivar">@mounted</span>[(<span class="ruby-identifier">indexer</span>)][<span class="ruby-value">:path</span>].<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-ivar">@mounted</span>[(<span class="ruby-identifier">indexer</span>)][<span class="ruby-value">:volume</span>]
|
|
<span class="ruby-ivar">@mounted</span>.<span class="ruby-identifier">delete_at</span>(<span class="ruby-identifier">indexer</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-comment"># returns the volume object for proper closing</span>
|
|
<span class="ruby-identifier">result</span>
|
|
<span class="ruby-keyword">end</span></pre>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div id="method-i-valid_path-3F" class="method-detail ">
|
|
|
|
<div class="method-heading">
|
|
<span class="method-name">valid_path?</span><span
|
|
class="method-args">(the_path="")</span>
|
|
|
|
<span class="method-click-advice">click to toggle source</span>
|
|
|
|
</div>
|
|
|
|
|
|
<div class="method-description">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="method-source-code" id="valid_path-3F-source">
|
|
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 50</span>
|
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">valid_path?</span>(<span class="ruby-identifier">the_path</span>=<span class="ruby-string">""</span>)
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">false</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span> <span class="ruby-operator">==</span> <span class="ruby-string">"/"</span>
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">true</span>
|
|
<span class="ruby-keyword">else</span>
|
|
<span class="ruby-comment"># VFS check</span>
|
|
<span class="ruby-identifier">path_table</span> = []
|
|
<span class="ruby-ivar">@thread_safety</span>.<span class="ruby-identifier">synchronize</span> {
|
|
<span class="ruby-ivar">@mounted</span>.<span class="ruby-identifier">reverse</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">volume_entry</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-identifier">path_entry</span> = <span class="ruby-identifier">volume_entry</span>[<span class="ruby-value">:path</span>].<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">split</span>(<span class="ruby-string">"/"</span>)
|
|
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">path_table</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">path_entry</span>)
|
|
<span class="ruby-identifier">path_table</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">path_entry</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">end</span>
|
|
}
|
|
<span class="ruby-identifier">path_array</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">"/"</span>)
|
|
<span class="ruby-identifier">vfs_check</span> = <span class="ruby-keyword">false</span>
|
|
<span class="ruby-identifier">path_table</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">entry</span><span class="ruby-operator">|</span>
|
|
(<span class="ruby-value">0</span><span class="ruby-operator">..</span>(<span class="ruby-identifier">path_array</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>)).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">indexer</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">entry</span> <span class="ruby-operator">==</span> (<span class="ruby-identifier">path_array</span>[(<span class="ruby-value">0</span><span class="ruby-operator">..</span>(<span class="ruby-identifier">indexer</span>))])
|
|
<span class="ruby-identifier">vfs_check</span> = <span class="ruby-keyword">true</span>
|
|
<span class="ruby-keyword">break</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">vfs_check</span>
|
|
<span class="ruby-keyword">break</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-keyword">end</span>
|
|
<span class="ruby-comment"># volume check</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">vfs_check</span>
|
|
<span class="ruby-identifier">volume_record</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">volume_of_path</span>(<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">volume_record</span>
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:volume</span>].<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">volume_record</span>[<span class="ruby-value">:subpath</span>].<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-keyword">else</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">end</span>
|
|
<span class="ruby-identifier">result</span>
|
|
<span class="ruby-keyword">end</span></pre>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div id="method-i-volume_of_path" class="method-detail ">
|
|
|
|
<div class="method-heading">
|
|
<span class="method-name">volume_of_path</span><span
|
|
class="method-args">(the_path="")</span>
|
|
|
|
<span class="method-click-advice">click to toggle source</span>
|
|
|
|
</div>
|
|
|
|
|
|
<div class="method-description">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="method-source-code" id="volume_of_path-source">
|
|
<pre><span class="ruby-comment"># File lib/gxg/gxg_dbfs.rb, line 37</span>
|
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">volume_of_path</span>(<span class="ruby-identifier">the_path</span>=<span class="ruby-string">""</span>)
|
|
<span class="ruby-identifier">result</span> = <span class="ruby-keyword">nil</span>
|
|
<span class="ruby-ivar">@thread_safety</span>.<span class="ruby-identifier">synchronize</span> {
|
|
<span class="ruby-ivar">@mounted</span>.<span class="ruby-identifier">reverse</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">volume_entry</span><span class="ruby-operator">|</span>
|
|
<span class="ruby-keyword">if</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">path_prefix</span>(<span class="ruby-identifier">volume_entry</span>[<span class="ruby-value">:path</span>].<span class="ruby-identifier">to_s</span>,<span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>) <span class="ruby-operator">==</span> (<span class="ruby-identifier">volume_entry</span>[<span class="ruby-value">:path</span>].<span class="ruby-identifier">to_s</span>)
|
|
<span class="ruby-identifier">result</span> = {<span class="ruby-value">:volume</span> <span class="ruby-operator">=></span> <span class="ruby-identifier">volume_entry</span>[<span class="ruby-value">:volume</span>], <span class="ruby-value">:subpath</span> <span class="ruby-operator">=></span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">subpath</span>(<span class="ruby-identifier">volume_entry</span>[<span class="ruby-value">:path</span>].<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">the_path</span>.<span class="ruby-identifier">to_s</span>) }
|
|
<span class="ruby-keyword">break</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>
|
|
|
|
|
|
</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>
|
|
|