Files
metasploit-gs/api/Rex/Transformer.html
T
jenkins-metasploit c3f5bd3de2 Reboot gh-pages
2026-05-08 17:08:43 +00:00

503 lines
20 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>
Class: Rex::Transformer
&mdash; Documentation by YARD 0.9.37
</title>
<link rel="stylesheet" href="../css/style.css" type="text/css" />
<link rel="stylesheet" href="../css/common.css" type="text/css" />
<script type="text/javascript">
pathId = "Rex::Transformer";
relpath = '../';
</script>
<script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
</head>
<body>
<div class="nav_wrap">
<iframe id="nav" src="../class_list.html?1"></iframe>
<div id="resizer"></div>
</div>
<div id="main" tabindex="-1">
<div id="header">
<div id="menu">
<a href="../_index.html">Index (T)</a> &raquo;
<span class='title'><span class='object_link'><a href="../Rex.html" title="Rex (module)">Rex</a></span></span>
&raquo;
<span class="title">Transformer</span>
</div>
<div id="search">
<a class="full_list_link" id="class_list_link"
href="../class_list.html">
<svg width="24" height="24">
<rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
<rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
<rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
</svg>
</a>
</div>
<div class="clear"></div>
</div>
<div id="content"><h1>Class: Rex::Transformer
</h1>
<div class="box_info">
<dl>
<dt>Inherits:</dt>
<dd>
<span class="inheritName">Object</span>
<ul class="fullTree">
<li>Object</li>
<li class="next">Rex::Transformer</li>
</ul>
<a href="#" class="inheritanceTree">show all</a>
</dd>
</dl>
<dl>
<dt>Defined in:</dt>
<dd>lib/rex/transformer.rb</dd>
</dl>
</div>
<h2>Overview</h2><div class="docstring">
<div class="discussion">
<p>Transformer - more than meets the eye!</p>
<p>This class, aside from having a kickass name, is responsible for translating object instances of one or more types into a single list instance of one or more types. This is useful for translating object instances that be can either strings or an array of strings into an array of strings, for instance. It lets you make things take a uniform structure in an abstract manner.</p>
</div>
</div>
<div class="tags">
</div>
<h2>
Class Method Summary
<small><a href="#" class="summary_toggle">collapse</a></small>
</h2>
<ul class="summary">
<li class="protected ">
<span class="summary_signature">
<a href="#bomb_translation-class_method" title="bomb_translation (class method)">.<strong>bomb_translation</strong>(src_instance, target) &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'>
<p>:nodoc:.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#transform-class_method" title="transform (class method)">.<strong>transform</strong>(src_instance, dst_class, supported_classes, target = nil) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Translates the object instance supplied in src_instance to an instance of dst_class.</p>
</div></span>
</li>
<li class="protected ">
<span class="summary_signature">
<a href="#transform_single-class_method" title="transform_single (class method)">.<strong>transform_single</strong>(src_instance, dst_instance, supported_classes, target) &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'>
<p>Transform a single source instance.</p>
</div></span>
</li>
</ul>
<div id="class_method_details" class="method_details_list">
<h2>Class Method Details</h2>
<div class="method_details first">
<h3 class="signature first" id="bomb_translation-class_method">
.<strong>bomb_translation</strong>(src_instance, target) &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><div class="docstring">
<div class="discussion">
<p>:nodoc:</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'>(<tt>ArgumentError</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
103
104
105
106
107
108
109
110
111</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/transformer.rb', line 103</span>
<span class='kw'>def</span> <span class='const'><span class='object_link'><a href="" title="Rex::Transformer (class)">Transformer</a></span></span><span class='period'>.</span><span class='id identifier rubyid_bomb_translation'>bomb_translation</span><span class='lparen'>(</span><span class='id identifier rubyid_src_instance'>src_instance</span><span class='comma'>,</span> <span class='id identifier rubyid_target'>target</span><span class='rparen'>)</span> <span class='comment'># :nodoc:
</span> <span class='id identifier rubyid_error'>error</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Invalid source class (</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_src_instance'>src_instance</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='embexpr_end'>}</span><span class='tstring_content'>)</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_target'>target</span> <span class='op'>!=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
<span class='id identifier rubyid_error'>error</span> <span class='op'>+=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'> for </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_target'>target</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='id identifier rubyid_error'>error</span><span class='comma'>,</span> <span class='id identifier rubyid_caller'>caller</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="transform-class_method">
.<strong>transform</strong>(src_instance, dst_class, supported_classes, target = nil) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Translates the object instance supplied in src_instance to an instance of dst_class. The dst_class parameters instance must support the &lt;&lt; operator. An example call to this method looks something like:</p>
<p>Transformer.transform(string, Array, [ String ], target)</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/transformer.rb', line 25</span>
<span class='kw'>def</span> <span class='const'><span class='object_link'><a href="" title="Rex::Transformer (class)">Transformer</a></span></span><span class='period'>.</span><span class='id identifier rubyid_transform'>transform</span><span class='lparen'>(</span><span class='id identifier rubyid_src_instance'>src_instance</span><span class='comma'>,</span> <span class='id identifier rubyid_dst_class'>dst_class</span><span class='comma'>,</span> <span class='id identifier rubyid_supported_classes'>supported_classes</span><span class='comma'>,</span>
<span class='id identifier rubyid_target'>target</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
<span class='id identifier rubyid_dst_instance'>dst_instance</span> <span class='op'>=</span> <span class='id identifier rubyid_dst_class'>dst_class</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
<span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_src_instance'>src_instance</span><span class='period'>.</span><span class='id identifier rubyid_kind_of?'>kind_of?</span><span class='lparen'>(</span><span class='const'>Array</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='id identifier rubyid_src_instance'>src_instance</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_src_inst'>src_inst</span><span class='op'>|</span>
<span class='const'><span class='object_link'><a href="" title="Rex::Transformer (class)">Transformer</a></span></span><span class='period'>.</span><span class='id identifier rubyid_transform_single'><span class='object_link'><a href="#transform_single-class_method" title="Rex::Transformer.transform_single (method)">transform_single</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_src_inst'>src_inst</span><span class='comma'>,</span> <span class='id identifier rubyid_dst_instance'>dst_instance</span><span class='comma'>,</span>
<span class='id identifier rubyid_supported_classes'>supported_classes</span><span class='comma'>,</span> <span class='id identifier rubyid_target'>target</span><span class='rparen'>)</span>
<span class='rbrace'>}</span>
<span class='kw'>elsif</span> <span class='lparen'>(</span><span class='op'>!</span><span class='id identifier rubyid_src_instance'>src_instance</span><span class='period'>.</span><span class='id identifier rubyid_kind_of?'>kind_of?</span><span class='lparen'>(</span><span class='const'>NilClass</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='const'><span class='object_link'><a href="" title="Rex::Transformer (class)">Transformer</a></span></span><span class='period'>.</span><span class='id identifier rubyid_transform_single'><span class='object_link'><a href="#transform_single-class_method" title="Rex::Transformer.transform_single (method)">transform_single</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_src_instance'>src_instance</span><span class='comma'>,</span> <span class='id identifier rubyid_dst_instance'>dst_instance</span><span class='comma'>,</span>
<span class='id identifier rubyid_supported_classes'>supported_classes</span><span class='comma'>,</span> <span class='id identifier rubyid_target'>target</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>return</span> <span class='id identifier rubyid_dst_instance'>dst_instance</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="transform_single-class_method">
.<strong>transform_single</strong>(src_instance, dst_instance, supported_classes, target) &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><div class="docstring">
<div class="discussion">
<p>Transform a single source instance.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/transformer.rb', line 47</span>
<span class='kw'>def</span> <span class='const'><span class='object_link'><a href="" title="Rex::Transformer (class)">Transformer</a></span></span><span class='period'>.</span><span class='id identifier rubyid_transform_single'>transform_single</span><span class='lparen'>(</span><span class='id identifier rubyid_src_instance'>src_instance</span><span class='comma'>,</span> <span class='id identifier rubyid_dst_instance'>dst_instance</span><span class='comma'>,</span>
<span class='id identifier rubyid_supported_classes'>supported_classes</span><span class='comma'>,</span> <span class='id identifier rubyid_target'>target</span><span class='rparen'>)</span>
<span class='comment'># If the src instance&#39;s class is supported, just add it to the dst
</span> <span class='comment'># instance
</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_supported_classes'>supported_classes</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid_src_instance'>src_instance</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='id identifier rubyid_dst_instance'>dst_instance</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_src_instance'>src_instance</span>
<span class='comment'># If the src instance&#39;s class is an array, then we should check to see
</span> <span class='comment'># if any of the supporting classes support from_a.
</span> <span class='kw'>elsif</span> <span class='lparen'>(</span><span class='id identifier rubyid_src_instance'>src_instance</span><span class='period'>.</span><span class='id identifier rubyid_kind_of?'>kind_of?</span><span class='lparen'>(</span><span class='const'>Array</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='id identifier rubyid_new_src_instance'>new_src_instance</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='comment'># Walk each supported class calling from_a if exported
</span> <span class='id identifier rubyid_supported_classes'>supported_classes</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_sup_class'>sup_class</span><span class='op'>|</span>
<span class='kw'>next</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_sup_class'>sup_class</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>from_a</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='op'>==</span> <span class='kw'>false</span><span class='rparen'>)</span>
<span class='id identifier rubyid_new_src_instance'>new_src_instance</span> <span class='op'>=</span> <span class='id identifier rubyid_sup_class'>sup_class</span><span class='period'>.</span><span class='id identifier rubyid_from_a'>from_a</span><span class='lparen'>(</span><span class='id identifier rubyid_src_instance'>src_instance</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_new_src_instance'>new_src_instance</span> <span class='op'>!=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
<span class='id identifier rubyid_dst_instance'>dst_instance</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_new_src_instance'>new_src_instance</span>
<span class='kw'>break</span>
<span class='kw'>end</span>
<span class='rbrace'>}</span>
<span class='comment'># If we don&#39;t have a valid new src instance, then we suck
</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_new_src_instance'>new_src_instance</span> <span class='op'>==</span> <span class='kw'>nil</span><span class='rparen'>)</span>
<span class='id identifier rubyid_bomb_translation'>bomb_translation</span><span class='lparen'>(</span><span class='id identifier rubyid_src_instance'>src_instance</span><span class='comma'>,</span> <span class='id identifier rubyid_target'>target</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='comment'># If the source instance is a string, query each of the supported
</span> <span class='comment'># classes to see if they can serialize it to their particular data
</span> <span class='comment'># type.
</span> <span class='kw'>elsif</span> <span class='lparen'>(</span><span class='id identifier rubyid_src_instance'>src_instance</span><span class='period'>.</span><span class='id identifier rubyid_kind_of?'>kind_of?</span><span class='lparen'>(</span><span class='const'>String</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='id identifier rubyid_new_src_instance'>new_src_instance</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='comment'># Walk each supported class calling from_s if exported
</span> <span class='id identifier rubyid_supported_classes'>supported_classes</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_sup_class'>sup_class</span><span class='op'>|</span>
<span class='kw'>next</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_sup_class'>sup_class</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>from_s</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='op'>==</span> <span class='kw'>false</span><span class='rparen'>)</span>
<span class='id identifier rubyid_new_src_instance'>new_src_instance</span> <span class='op'>=</span> <span class='id identifier rubyid_sup_class'>sup_class</span><span class='period'>.</span><span class='id identifier rubyid_from_s'>from_s</span><span class='lparen'>(</span><span class='id identifier rubyid_src_instance'>src_instance</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_new_src_instance'>new_src_instance</span> <span class='op'>!=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
<span class='id identifier rubyid_dst_instance'>dst_instance</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_new_src_instance'>new_src_instance</span>
<span class='kw'>break</span>
<span class='kw'>end</span>
<span class='rbrace'>}</span>
<span class='comment'># If we don&#39;t have a valid new src instance, then we suck
</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_new_src_instance'>new_src_instance</span> <span class='op'>==</span> <span class='kw'>nil</span><span class='rparen'>)</span>
<span class='id identifier rubyid_bomb_translation'>bomb_translation</span><span class='lparen'>(</span><span class='id identifier rubyid_src_instance'>src_instance</span><span class='comma'>,</span> <span class='id identifier rubyid_target'>target</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='comment'># Otherwise, bomb translation
</span> <span class='kw'>else</span>
<span class='id identifier rubyid_bomb_translation'>bomb_translation</span><span class='lparen'>(</span><span class='id identifier rubyid_src_instance'>src_instance</span><span class='comma'>,</span> <span class='id identifier rubyid_target'>target</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
</div>
<div id="footer">
Generated on Fri May 8 17:04:05 2026 by
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
0.9.37 (ruby-3.1.5).
</div>
</div>
</body>
</html>