sqlconstructor 0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. checksums.yaml +15 -0
  2. data/LICENSE.md +16 -0
  3. data/README.md +161 -0
  4. data/Rakefile +11 -0
  5. data/doc/Object.html +267 -0
  6. data/doc/Rakefile.html +150 -0
  7. data/doc/SQLAliasedList.html +717 -0
  8. data/doc/SQLColumn.html +326 -0
  9. data/doc/SQLCondList.html +318 -0
  10. data/doc/SQLConditional.html +1082 -0
  11. data/doc/SQLConditional/BasicCond.html +325 -0
  12. data/doc/SQLConstructor.html +763 -0
  13. data/doc/SQLConstructor/BasicDelete.html +383 -0
  14. data/doc/SQLConstructor/BasicDelete_mysql.html +368 -0
  15. data/doc/SQLConstructor/BasicInsert.html +339 -0
  16. data/doc/SQLConstructor/BasicInsert_mysql.html +325 -0
  17. data/doc/SQLConstructor/BasicJoin.html +408 -0
  18. data/doc/SQLConstructor/BasicJoin_mysql.html +439 -0
  19. data/doc/SQLConstructor/BasicSelect.html +554 -0
  20. data/doc/SQLConstructor/BasicSelect_example.html +288 -0
  21. data/doc/SQLConstructor/BasicSelect_mysql.html +466 -0
  22. data/doc/SQLConstructor/BasicUnion.html +396 -0
  23. data/doc/SQLConstructor/BasicUpdate.html +409 -0
  24. data/doc/SQLConstructor/BasicUpdate_mysql.html +310 -0
  25. data/doc/SQLConstructor/GenericQuery.html +797 -0
  26. data/doc/SQLConstructor/QAttr.html +398 -0
  27. data/doc/SQLConstructorTest.html +603 -0
  28. data/doc/SQLExporter.html +382 -0
  29. data/doc/SQLExporter/Exporter_generic.html +413 -0
  30. data/doc/SQLExporter/Exporter_mysql.html +395 -0
  31. data/doc/SQLObject.html +525 -0
  32. data/doc/SQLValList.html +322 -0
  33. data/doc/SQLValue.html +375 -0
  34. data/doc/created.rid +12 -0
  35. data/doc/images/brick.png +0 -0
  36. data/doc/images/brick_link.png +0 -0
  37. data/doc/images/bug.png +0 -0
  38. data/doc/images/bullet_black.png +0 -0
  39. data/doc/images/bullet_toggle_minus.png +0 -0
  40. data/doc/images/bullet_toggle_plus.png +0 -0
  41. data/doc/images/date.png +0 -0
  42. data/doc/images/find.png +0 -0
  43. data/doc/images/loadingAnimation.gif +0 -0
  44. data/doc/images/macFFBgHack.png +0 -0
  45. data/doc/images/package.png +0 -0
  46. data/doc/images/page_green.png +0 -0
  47. data/doc/images/page_white_text.png +0 -0
  48. data/doc/images/page_white_width.png +0 -0
  49. data/doc/images/plugin.png +0 -0
  50. data/doc/images/ruby.png +0 -0
  51. data/doc/images/tag_green.png +0 -0
  52. data/doc/images/wrench.png +0 -0
  53. data/doc/images/wrench_orange.png +0 -0
  54. data/doc/images/zoom.png +0 -0
  55. data/doc/index.html +356 -0
  56. data/doc/js/darkfish.js +118 -0
  57. data/doc/js/jquery.js +32 -0
  58. data/doc/js/quicksearch.js +114 -0
  59. data/doc/js/thickbox-compressed.js +10 -0
  60. data/doc/lib/dialects/example-constructor_rb.html +52 -0
  61. data/doc/lib/dialects/mysql-constructor_rb.html +52 -0
  62. data/doc/lib/dialects/mysql-exporter_rb.html +54 -0
  63. data/doc/lib/sqlconditional_rb.html +64 -0
  64. data/doc/lib/sqlconstructor_rb.html +52 -0
  65. data/doc/lib/sqlerrors_rb.html +54 -0
  66. data/doc/lib/sqlexporter_rb.html +55 -0
  67. data/doc/lib/sqlobject_rb.html +54 -0
  68. data/doc/rdoc.css +763 -0
  69. data/doc/test/queries_rb.html +56 -0
  70. data/doc/test_rb.html +52 -0
  71. data/lib/dialects/example-constructor.rb +45 -0
  72. data/lib/dialects/mysql-constructor.rb +247 -0
  73. data/lib/dialects/mysql-exporter.rb +108 -0
  74. data/lib/sqlconditional.rb +196 -0
  75. data/lib/sqlconstructor.rb +708 -0
  76. data/lib/sqlerrors.rb +15 -0
  77. data/lib/sqlexporter.rb +125 -0
  78. data/lib/sqlobject.rb +284 -0
  79. data/test/queries.rb +92 -0
  80. metadata +121 -0
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YWUyODI0Yzc1YzQyMDE1NmYyNTZhMzAxNjk2NjA5OTQzY2Y2MzY1OQ==
5
+ data.tar.gz: !binary |-
6
+ ODVjYTI4ZTY5MWRkOGZkMzJiNmUzZTlmM2VjYzNlYjljNjRiODUxNA==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ ZmZkZTQzYTg5MDg4Mzc1YTI2NDlhNDIzYjdlNjQ5ZjE1MGQxMGU0ZmRiNGUz
10
+ NDQzY2FlZTEyZGM5MDc5ZTM1Mzg5MWU1ZTU3MWZkMzE2OWVmM2UxMmYwMjcz
11
+ NGJiYmVmMTExYzg5MTg5YzU5NjUxYmQzYWU4NzQ2NGExMWM0MmY=
12
+ data.tar.gz: !binary |-
13
+ MTIyMjEyMzljYzc5OGNlMzJmNjAyM2MxZWI3YmFkMDIxYjcyYmEyMjAzNDBl
14
+ MmI0MzM4N2YxMjA2ZmZkY2JlNjk2NmNiNzMwZGJiMzdjYTNmYjgxMTNhMmIx
15
+ YjMyNjcxYjM3ZDIzY2JmNWZjZGQ4NzZhYmNlMWZmODM3MDc5ZDE=
@@ -0,0 +1,16 @@
1
+ Copyright (C) 2014 V.Korol (vakorol@mail.ru)
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
4
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
5
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
6
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
7
+ furnished to do so, subject to the following conditions:
8
+
9
+ The above copyright notice and this permission notice shall be included in all copies or
10
+ substantial portions of the Software.
11
+
12
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
13
+ NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
14
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
15
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
16
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,161 @@
1
+ sqlconstructor-ruby
2
+ ===================
3
+
4
+ SQLConstructor - Ruby gem for constructing SQL queries via object-oriented interface.
5
+ Currently only MySQL dialect is supported, but hopefully, IBM Informix syntax will be added, too.
6
+ It is easy to add support for mostly any SQL dialect - see files lib/dialects/example-constructor.rb
7
+ and lib/dialects/example-exporter.rb.
8
+
9
+ SQL SELECT, DELETE, UPDATE and INSERT clauses are supported. There's also an experimental
10
+ implementation of MySQL index hints.
11
+
12
+ Column values and other data that should be escaped is passed to the methods as strings. Column
13
+ and table names, aliases and everything that goes unescaped is passed as symbols.
14
+
15
+ Detailed rdoc class documentation can be found in the doc folder.
16
+
17
+ Typical usage:
18
+ --------------
19
+
20
+ ```ruby
21
+ sql = SQLConstructor.new
22
+ sql.select( :col1, :col2 ).from( :table ).where.eq( :col3, 16 ).and.lt( :col4, 5 )
23
+ p sql
24
+ ```
25
+
26
+ will result in:
27
+ ```
28
+ SELECT col1,col2 FROM table WHERE (col3 = 16 AND col4 < 5)
29
+ ```
30
+
31
+ One can also construct complex queries like:
32
+
33
+ ```ruby
34
+ sql = SQLConstructor.new( :tidy => true, :dialect => 'mysql' )
35
+ inner_select1 = SQLConstructor.new( :tidy => true )
36
+ inner_select1.select( :"MAX(h.item_id)" ).from( :item_data => :d ).
37
+ inner_join( :call_data => :h ).on.eq( :"d.item_nm", :call_ref ).where.
38
+ eq( :"d.item_num", :"g.item_num" ).group_by( :"h.venue_nm" ).having.eq( :"COUNT(*)", 1 )
39
+ inner_select2 = SQLConstructor.new( :dialect => 'mysql', :tidy => true )
40
+ inner_select2.select( :"d.item_num" ).from( :item_data => :d ).
41
+ inner_join( :call_data => :h ).on.eq( :"d.item_nm", :call_ref ).
42
+ group_by( :"h.venue_nm" ).having.eq( :"COUNT(*)", 1 )
43
+ sql.update( :guest => :g ).set( :link_id => inner_select1).
44
+ where.in( :"g.item_num", inner_select2 )
45
+ p sql
46
+ ```
47
+ will produce:
48
+ ```
49
+ UPDATE
50
+ guest g
51
+ SET link_id=
52
+ (SELECT
53
+ MAX(h.item_id)
54
+ FROM item_data d
55
+ INNER JOIN call_data h
56
+ ON
57
+ (d.item_nm = call_ref)
58
+ WHERE
59
+ (d.item_num = g.item_num)
60
+ GROUP BY h.venue_nm
61
+ HAVING
62
+ (COUNT(*) = 1)
63
+ )
64
+ WHERE
65
+ (g.item_num IN
66
+ (SELECT
67
+ d.item_num
68
+ FROM item_data d
69
+ INNER JOIN call_data h
70
+ ON
71
+ (d.item_nm = call_ref)
72
+ GROUP BY h.venue_nm
73
+ HAVING
74
+ (COUNT(*) = 1)
75
+ ))
76
+ ```
77
+ Queries can be modified "on the fly", which can be useful for dynamic construction:
78
+ ```ruby
79
+ sql.delete.from( :datas ).where.ne( :x, "SOME TEXT" ).order_by( :y )
80
+ p sql
81
+ ```
82
+ ```
83
+ DELETE
84
+ FROM datas
85
+ WHERE
86
+ (x != 'SOME TEXT')
87
+ ORDER BY y
88
+ ```
89
+ ```ruby
90
+ sql._remove( :order_by )
91
+ sql._get( :from ).push( :dataf )
92
+ p sql
93
+ ```
94
+ ```
95
+ DELETE
96
+ FROM datas,dataf
97
+ WHERE
98
+ (x != 'SOME TEXT')
99
+ ```
100
+
101
+ Methods
102
+ -------
103
+
104
+ The list of available methods for the SQL queries:
105
+
106
+ |SELECT |DELETE |INSERT |UPDATE |JOIN |
107
+ |---------------|-------------|----------|-----------|----------|
108
+ |select |delete |insert |update |on |
109
+ |from |from |into |update_more|using |
110
+ |where |where |values |tables |join_more |
111
+ |select_more |using |set |set | |
112
+ |having |order_by |columns |where | |
113
+ |distinct |order_by_asc |select |first | |
114
+ |all |order_by_desc| |skip | |
115
+ |distinctrow |first | | | |
116
+ |join |skip | | | |
117
+ |group_by | | | | |
118
+ |group_by_asc | | | | |
119
+ |group_by_desc | | | | |
120
+ |order_by | | | | |
121
+ |order_by_asc | | | | |
122
+ |order_by_desc | | | | |
123
+ |first | | | | |
124
+ |skip | | | | |
125
+ |union | | | | |
126
+ |union_all | | | | |
127
+ |union_distinct | | | | |
128
+
129
+
130
+ MySQL-specific methods:
131
+
132
+ |SELECT |DELETE |INSERT |UPDATE |
133
+ |------------------------|------------|-----------------------|------------|
134
+ |straight_join |low_priority|low_priority |low_priority|
135
+ |sql_cache |quick |delayed |ignore |
136
+ |sql_no_cache |ignore |high_priority |limit |
137
+ |high_priority |limit |quick | |
138
+ |sql_calc_found_rows | |ignore | |
139
+ |sql_small_result | |on_duplicate_key_update| |
140
+ |sql_big_result | | | |
141
+ |sql_buffer_result | | | |
142
+ |limit | | | |
143
+ |group_by_with_rollup | | | |
144
+ |use_index | | | |
145
+ |force_index | | | |
146
+ |ignore_index | | | |
147
+ |use_key | | | |
148
+ |force_key | | | |
149
+ |ignore_key | | | |
150
+ |inner_join | | | |
151
+ |cross_join | | | |
152
+ |left_join | | | |
153
+ |right_join | | | |
154
+ |left_outer_join | | | |
155
+ |right_outer_join | | | |
156
+ |natural_join | | | |
157
+ |natural_left_join | | | |
158
+ |natural_right_join | | | |
159
+ |natural_left_outer_join | | | |
160
+ |natural_right_outer_join| | | |
161
+
@@ -0,0 +1,11 @@
1
+ require 'rake/testtask'
2
+
3
+ Rake::TestTask.new do |t|
4
+ t.libs << 'test'
5
+ t.test_files = FileList['test/queries.rb']
6
+ t.verbose = true
7
+ end
8
+
9
+ desc 'Run tests'
10
+ task :default => :test
11
+
@@ -0,0 +1,267 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
+ <head>
6
+ <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
7
+
8
+ <title>Class: Object</title>
9
+
10
+ <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
11
+
12
+ <script src="./js/jquery.js" type="text/javascript" charset="utf-8"></script>
13
+ <script src="./js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
14
+ <script src="./js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
15
+ <script src="./js/darkfish.js" type="text/javascript" charset="utf-8"></script>
16
+
17
+ </head>
18
+ <body id="top" class="class">
19
+
20
+ <div id="metadata">
21
+ <div id="home-metadata">
22
+ <div id="home-section" class="section">
23
+ <h3 class="section-header">
24
+ <a href="./index.html">Home</a>
25
+ <a href="./index.html#classes">Classes</a>
26
+ <a href="./index.html#methods">Methods</a>
27
+ </h3>
28
+ </div>
29
+ </div>
30
+
31
+ <div id="file-metadata">
32
+ <div id="file-list-section" class="section">
33
+ <h3 class="section-header">In Files</h3>
34
+ <div class="section-body">
35
+ <ul>
36
+
37
+ <li><a href="./lib/sqlerrors_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
38
+ class="thickbox" title="lib/sqlerrors.rb">lib/sqlerrors.rb</a></li>
39
+
40
+ <li><a href="./lib/sqlconstructor_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
41
+ class="thickbox" title="lib/sqlconstructor.rb">lib/sqlconstructor.rb</a></li>
42
+
43
+ <li><a href="./lib/dialects/mysql-constructor_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
44
+ class="thickbox" title="lib/dialects/mysql-constructor.rb">lib/dialects/mysql-constructor.rb</a></li>
45
+
46
+ </ul>
47
+ </div>
48
+ </div>
49
+
50
+
51
+ </div>
52
+
53
+ <div id="class-metadata">
54
+
55
+ <!-- Parent Class -->
56
+ <div id="parent-class-section" class="section">
57
+ <h3 class="section-header">Parent</h3>
58
+
59
+ <p class="link">BasicObject</p>
60
+
61
+ </div>
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+ </div>
72
+
73
+ <div id="project-metadata">
74
+
75
+
76
+ <div id="fileindex-section" class="section project-section">
77
+ <h3 class="section-header">Files</h3>
78
+ <ul>
79
+
80
+ <li class="file"><a href="./Rakefile.html">Rakefile</a></li>
81
+
82
+ </ul>
83
+ </div>
84
+
85
+
86
+ <div id="classindex-section" class="section project-section">
87
+ <h3 class="section-header">Class/Module Index
88
+ <span class="search-toggle"><img src="./images/find.png"
89
+ height="16" width="16" alt="[+]"
90
+ title="show/hide quicksearch" /></span></h3>
91
+ <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
92
+ <fieldset>
93
+ <legend>Quicksearch</legend>
94
+ <input type="text" name="quicksearch" value=""
95
+ class="quicksearch-field" />
96
+ </fieldset>
97
+ </form>
98
+
99
+ <ul class="link-list">
100
+
101
+ <li><a href="./SQLConstructor.html">SQLConstructor</a></li>
102
+
103
+ <li><a href="./SQLConstructor/BasicDelete.html">SQLConstructor::BasicDelete</a></li>
104
+
105
+ <li><a href="./SQLConstructor/BasicDelete_mysql.html">SQLConstructor::BasicDelete_mysql</a></li>
106
+
107
+ <li><a href="./SQLConstructor/BasicInsert.html">SQLConstructor::BasicInsert</a></li>
108
+
109
+ <li><a href="./SQLConstructor/BasicInsert_mysql.html">SQLConstructor::BasicInsert_mysql</a></li>
110
+
111
+ <li><a href="./SQLConstructor/BasicJoin.html">SQLConstructor::BasicJoin</a></li>
112
+
113
+ <li><a href="./SQLConstructor/BasicJoin_mysql.html">SQLConstructor::BasicJoin_mysql</a></li>
114
+
115
+ <li><a href="./SQLConstructor/BasicSelect.html">SQLConstructor::BasicSelect</a></li>
116
+
117
+ <li><a href="./SQLConstructor/BasicSelect_example.html">SQLConstructor::BasicSelect_example</a></li>
118
+
119
+ <li><a href="./SQLConstructor/BasicSelect_mysql.html">SQLConstructor::BasicSelect_mysql</a></li>
120
+
121
+ <li><a href="./SQLConstructor/BasicUnion.html">SQLConstructor::BasicUnion</a></li>
122
+
123
+ <li><a href="./SQLConstructor/BasicUpdate.html">SQLConstructor::BasicUpdate</a></li>
124
+
125
+ <li><a href="./SQLConstructor/BasicUpdate_mysql.html">SQLConstructor::BasicUpdate_mysql</a></li>
126
+
127
+ <li><a href="./SQLConstructor/GenericQuery.html">SQLConstructor::GenericQuery</a></li>
128
+
129
+ <li><a href="./SQLConstructor/QAttr.html">SQLConstructor::QAttr</a></li>
130
+
131
+ <li><a href="./SQLExporter.html">SQLExporter</a></li>
132
+
133
+ <li><a href="./SQLExporter/Exporter_generic.html">SQLExporter::Exporter_generic</a></li>
134
+
135
+ <li><a href="./SQLExporter/Exporter_mysql.html">SQLExporter::Exporter_mysql</a></li>
136
+
137
+ <li><a href="./SQLConditional.html">SQLConditional</a></li>
138
+
139
+ <li><a href="./SQLConditional/BasicCond.html">SQLConditional::BasicCond</a></li>
140
+
141
+ <li><a href="./Object.html">Object</a></li>
142
+
143
+ <li><a href="./SQLAliasedList.html">SQLAliasedList</a></li>
144
+
145
+ <li><a href="./SQLColumn.html">SQLColumn</a></li>
146
+
147
+ <li><a href="./SQLCondList.html">SQLCondList</a></li>
148
+
149
+ <li><a href="./SQLConstructorTest.html">SQLConstructorTest</a></li>
150
+
151
+ <li><a href="./SQLObject.html">SQLObject</a></li>
152
+
153
+ <li><a href="./SQLValList.html">SQLValList</a></li>
154
+
155
+ <li><a href="./SQLValue.html">SQLValue</a></li>
156
+
157
+ </ul>
158
+ <div id="no-class-search-results" style="display: none;">No matching classes.</div>
159
+ </div>
160
+
161
+
162
+ </div>
163
+ </div>
164
+
165
+ <div id="documentation">
166
+ <h1 class="class">Object</h1>
167
+
168
+ <div id="description" class="description">
169
+
170
+ </div><!-- description -->
171
+
172
+
173
+
174
+
175
+ <div id="5Buntitled-5D" class="documentation-section">
176
+
177
+
178
+
179
+
180
+
181
+ <!-- Constants -->
182
+ <div id="constants-list" class="section">
183
+ <h3 class="section-header">Constants</h3>
184
+ <dl>
185
+
186
+ <dt><a name="DIALECTS_PATH">DIALECTS_PATH</a></dt>
187
+
188
+ <dd class="description"></dd>
189
+
190
+
191
+ <dt><a name="ERR_INVALID_COL_NAME">ERR_INVALID_COL_NAME</a></dt>
192
+
193
+ <dd class="description"><p>List of error messages</p></dd>
194
+
195
+
196
+ <dt><a name="ERR_INVALID_RULES">ERR_INVALID_RULES</a></dt>
197
+
198
+ <dd class="description"></dd>
199
+
200
+
201
+ <dt><a name="ERR_NAME_NOT_FOUND">ERR_NAME_NOT_FOUND</a></dt>
202
+
203
+ <dd class="description"></dd>
204
+
205
+
206
+ <dt><a name="ERR_NUMERIC_VALUE_EXPECTED">ERR_NUMERIC_VALUE_EXPECTED</a></dt>
207
+
208
+ <dd class="description"></dd>
209
+
210
+
211
+ <dt><a name="ERR_UNKNOWN_DIALECT">ERR_UNKNOWN_DIALECT</a></dt>
212
+
213
+ <dd class="description"></dd>
214
+
215
+
216
+ <dt><a name="ERR_UNKNOWN_METHOD">ERR_UNKNOWN_METHOD</a></dt>
217
+
218
+ <dd class="description"></dd>
219
+
220
+
221
+ <dt><a name="ERR_UNKNOWN_OPERATOR_TYPE">ERR_UNKNOWN_OPERATOR_TYPE</a></dt>
222
+
223
+ <dd class="description"></dd>
224
+
225
+
226
+ <dt><a name="ERR_VALUES_NUM_MISMATCH">ERR_VALUES_NUM_MISMATCH</a></dt>
227
+
228
+ <dd class="description"></dd>
229
+
230
+
231
+ <dt><a name="ERR_WHERE_INVALID_ARGS">ERR_WHERE_INVALID_ARGS</a></dt>
232
+
233
+ <dd class="description"></dd>
234
+
235
+
236
+ <dt><a name="ERR_WHERE_LIKE_INVALID_ARGS">ERR_WHERE_LIKE_INVALID_ARGS</a></dt>
237
+
238
+ <dd class="description"></dd>
239
+
240
+
241
+ <dt><a name="VALID_INDEX_HINTS">VALID_INDEX_HINTS</a></dt>
242
+
243
+ <dd class="description"></dd>
244
+
245
+
246
+ </dl>
247
+ </div>
248
+
249
+
250
+
251
+
252
+ <!-- Methods -->
253
+
254
+ </div><!-- 5Buntitled-5D -->
255
+
256
+
257
+ </div><!-- documentation -->
258
+
259
+ <div id="validator-badges">
260
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
261
+ <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
262
+ Rdoc Generator</a> 2</small>.</p>
263
+ </div>
264
+
265
+ </body>
266
+ </html>
267
+