mack-data_mapper 0.6.0.1 → 0.6.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.
- data/README +115 -4
- data/lib/mack-data_mapper.rb +14 -12
- data/lib/{database.rb → mack-data_mapper/database.rb} +0 -0
- data/lib/mack-data_mapper/dm_patches/dm-timestamps.rb +6 -0
- data/lib/mack-data_mapper/dm_patches/migrations.rb +9 -0
- data/lib/{genosaurus_helpers.rb → mack-data_mapper/genosaurus_helpers.rb} +1 -1
- data/lib/{helpers → mack-data_mapper/helpers}/orm_helpers.rb +4 -2
- data/lib/{migration_generator → mack-data_mapper/migration_generator}/migration_generator.rb +0 -0
- data/lib/{migration_generator → mack-data_mapper/migration_generator}/templates/db/migrations/%=@migration_name%.rb.template +0 -0
- data/lib/{model_column.rb → mack-data_mapper/model_column.rb} +3 -3
- data/lib/{model_generator → mack-data_mapper/model_generator}/manifest.yml +0 -0
- data/lib/{model_generator → mack-data_mapper/model_generator}/model_generator.rb +0 -0
- data/lib/{model_generator → mack-data_mapper/model_generator}/templates/model.rb.template +0 -0
- data/lib/{model_generator → mack-data_mapper/model_generator}/templates/rspec.rb.template +0 -0
- data/lib/{model_generator → mack-data_mapper/model_generator}/templates/test_case.rb.template +0 -0
- data/lib/{resource.rb → mack-data_mapper/resource.rb} +0 -0
- data/lib/{runner.rb → mack-data_mapper/runner.rb} +0 -0
- data/lib/{scaffold_generator → mack-data_mapper/scaffold_generator}/manifest.yml +0 -0
- data/lib/{scaffold_generator → mack-data_mapper/scaffold_generator}/scaffold_generator.rb +0 -0
- data/lib/{scaffold_generator → mack-data_mapper/scaffold_generator}/templates/app/controllers/controller.rb.template +0 -0
- data/lib/{scaffold_generator → mack-data_mapper/scaffold_generator}/templates/app/helpers/controllers/helper.rb.template +0 -0
- data/lib/{scaffold_generator → mack-data_mapper/scaffold_generator}/templates/app/views/edit.html.erb.template +0 -0
- data/lib/{scaffold_generator → mack-data_mapper/scaffold_generator}/templates/app/views/index.html.erb.template +0 -0
- data/lib/{scaffold_generator → mack-data_mapper/scaffold_generator}/templates/app/views/new.html.erb.template +0 -0
- data/lib/{scaffold_generator → mack-data_mapper/scaffold_generator}/templates/app/views/show.html.erb.template +0 -0
- data/lib/{scaffold_generator → mack-data_mapper/scaffold_generator}/templates/test/functional/rspec.rb.template +0 -0
- data/lib/{scaffold_generator → mack-data_mapper/scaffold_generator}/templates/test/functional/test_case.rb.template +0 -0
- data/lib/{tasks → mack-data_mapper/tasks}/db_create_drop_tasks.rake +0 -0
- data/lib/{tasks → mack-data_mapper/tasks}/db_migration_tasks.rake +3 -3
- data/lib/{tasks → mack-data_mapper/tasks}/test_tasks.rake +0 -0
- data/lib/{test_extensions.rb → mack-data_mapper/test_extensions.rb} +3 -3
- data/lib/mack-data_mapper_tasks.rb +1 -1
- metadata +103 -69
- data/doc/classes/DataMapper/Resource.html +0 -154
- data/doc/classes/Mack.html +0 -127
- data/doc/classes/Mack/Database.html +0 -210
- data/doc/classes/Mack/Genosaurus/DataMapper/Helpers.html +0 -225
- data/doc/classes/Mack/Genosaurus/DataMapper/ModelColumn.html +0 -237
- data/doc/classes/Mack/Testing/DataMapperHelpers.html +0 -151
- data/doc/classes/Mack/Testing/Helpers.html +0 -155
- data/doc/classes/Mack/ViewHelpers/DataMapperHelpers.html +0 -279
- data/doc/classes/MigrationGenerator.html +0 -161
- data/doc/classes/ModelGenerator.html +0 -183
- data/doc/classes/ScaffoldGenerator.html +0 -123
- data/doc/created.rid +0 -1
- data/doc/files/README.html +0 -121
- data/doc/files/lib/database_rb.html +0 -101
- data/doc/files/lib/dm_patches/confirmation_validation_rb.html +0 -101
- data/doc/files/lib/dm_patches/dm-cli_rb.html +0 -108
- data/doc/files/lib/dm_patches/migrations_rb.html +0 -101
- data/doc/files/lib/dm_patches/pooling_rb.html +0 -109
- data/doc/files/lib/genosaurus_helpers_rb.html +0 -101
- data/doc/files/lib/helpers/orm_helpers_rb.html +0 -101
- data/doc/files/lib/mack-data_mapper_rb.html +0 -110
- data/doc/files/lib/mack-data_mapper_tasks_rb.html +0 -101
- data/doc/files/lib/migration_generator/migration_generator_rb.html +0 -151
- data/doc/files/lib/model_column_rb.html +0 -101
- data/doc/files/lib/model_generator/model_generator_rb.html +0 -173
- data/doc/files/lib/resource_rb.html +0 -101
- data/doc/files/lib/runner_rb.html +0 -101
- data/doc/files/lib/scaffold_generator/scaffold_generator_rb.html +0 -114
- data/doc/files/lib/test_extensions_rb.html +0 -109
- data/doc/fr_class_index.html +0 -37
- data/doc/fr_file_index.html +0 -43
- data/doc/fr_method_index.html +0 -42
- data/doc/index.html +0 -24
- data/doc/rdoc-style.css +0 -208
- data/lib/dm_patches/confirmation_validation.rb +0 -19
- data/lib/dm_patches/dm-cli.rb +0 -1
- data/lib/dm_patches/migrations.rb +0 -23
- data/lib/dm_patches/pooling.rb +0 -229
data/doc/index.html
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
2
|
-
<!DOCTYPE html
|
|
3
|
-
PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
|
|
4
|
-
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
|
|
5
|
-
|
|
6
|
-
<!--
|
|
7
|
-
|
|
8
|
-
mack-data_mapper
|
|
9
|
-
|
|
10
|
-
-->
|
|
11
|
-
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
12
|
-
<head>
|
|
13
|
-
<title>mack-data_mapper</title>
|
|
14
|
-
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
15
|
-
</head>
|
|
16
|
-
<frameset rows="20%, 80%">
|
|
17
|
-
<frameset cols="25%,35%,45%">
|
|
18
|
-
<frame src="fr_file_index.html" title="Files" name="Files" />
|
|
19
|
-
<frame src="fr_class_index.html" name="Classes" />
|
|
20
|
-
<frame src="fr_method_index.html" name="Methods" />
|
|
21
|
-
</frameset>
|
|
22
|
-
<frame src="files/README.html" name="docwin" />
|
|
23
|
-
</frameset>
|
|
24
|
-
</html>
|
data/doc/rdoc-style.css
DELETED
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
body {
|
|
3
|
-
font-family: Verdana,Arial,Helvetica,sans-serif;
|
|
4
|
-
font-size: 90%;
|
|
5
|
-
margin: 0;
|
|
6
|
-
margin-left: 40px;
|
|
7
|
-
padding: 0;
|
|
8
|
-
background: white;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
h1,h2,h3,h4 { margin: 0; color: #efefef; background: transparent; }
|
|
12
|
-
h1 { font-size: 150%; }
|
|
13
|
-
h2,h3,h4 { margin-top: 1em; }
|
|
14
|
-
|
|
15
|
-
a { background: #eef; color: #039; text-decoration: none; }
|
|
16
|
-
a:hover { background: #039; color: #eef; }
|
|
17
|
-
|
|
18
|
-
/* Override the base stylesheet's Anchor inside a table cell */
|
|
19
|
-
td > a {
|
|
20
|
-
background: transparent;
|
|
21
|
-
color: #039;
|
|
22
|
-
text-decoration: none;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/* and inside a section title */
|
|
26
|
-
.section-title > a {
|
|
27
|
-
background: transparent;
|
|
28
|
-
color: #eee;
|
|
29
|
-
text-decoration: none;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/* === Structural elements =================================== */
|
|
33
|
-
|
|
34
|
-
div#index {
|
|
35
|
-
margin: 0;
|
|
36
|
-
margin-left: -40px;
|
|
37
|
-
padding: 0;
|
|
38
|
-
font-size: 90%;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
div#index a {
|
|
43
|
-
margin-left: 0.7em;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
div#index .section-bar {
|
|
47
|
-
margin-left: 0px;
|
|
48
|
-
padding-left: 0.7em;
|
|
49
|
-
background: #ccc;
|
|
50
|
-
font-size: small;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
div#classHeader, div#fileHeader {
|
|
55
|
-
width: auto;
|
|
56
|
-
color: white;
|
|
57
|
-
padding: 0.5em 1.5em 0.5em 1.5em;
|
|
58
|
-
margin: 0;
|
|
59
|
-
margin-left: -40px;
|
|
60
|
-
border-bottom: 3px solid #006;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
div#classHeader a, div#fileHeader a {
|
|
64
|
-
background: inherit;
|
|
65
|
-
color: white;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
div#classHeader td, div#fileHeader td {
|
|
69
|
-
background: inherit;
|
|
70
|
-
color: white;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
div#fileHeader {
|
|
75
|
-
background: #057;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
div#classHeader {
|
|
79
|
-
background: #048;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
.class-name-in-header {
|
|
84
|
-
font-size: 180%;
|
|
85
|
-
font-weight: bold;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
div#bodyContent {
|
|
90
|
-
padding: 0 1.5em 0 1.5em;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
div#description {
|
|
94
|
-
padding: 0.5em 1.5em;
|
|
95
|
-
background: #efefef;
|
|
96
|
-
border: 1px dotted #999;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
div#description h1,h2,h3,h4,h5,h6 {
|
|
100
|
-
color: #125;;
|
|
101
|
-
background: transparent;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
div#validator-badges {
|
|
105
|
-
text-align: center;
|
|
106
|
-
}
|
|
107
|
-
div#validator-badges img { border: 0; }
|
|
108
|
-
|
|
109
|
-
div#copyright {
|
|
110
|
-
color: #333;
|
|
111
|
-
background: #efefef;
|
|
112
|
-
font: 0.75em sans-serif;
|
|
113
|
-
margin-top: 5em;
|
|
114
|
-
margin-bottom: 0;
|
|
115
|
-
padding: 0.5em 2em;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
/* === Classes =================================== */
|
|
120
|
-
|
|
121
|
-
table.header-table {
|
|
122
|
-
color: white;
|
|
123
|
-
font-size: small;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
.type-note {
|
|
127
|
-
font-size: small;
|
|
128
|
-
color: #DEDEDE;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
.xxsection-bar {
|
|
132
|
-
background: #eee;
|
|
133
|
-
color: #333;
|
|
134
|
-
padding: 3px;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
.section-bar {
|
|
138
|
-
color: #333;
|
|
139
|
-
border-bottom: 1px solid #999;
|
|
140
|
-
margin-left: -20px;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
.section-title {
|
|
145
|
-
background: #79a;
|
|
146
|
-
color: #eee;
|
|
147
|
-
padding: 3px;
|
|
148
|
-
margin-top: 2em;
|
|
149
|
-
margin-left: -30px;
|
|
150
|
-
border: 1px solid #999;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
.top-aligned-row { vertical-align: top }
|
|
154
|
-
.bottom-aligned-row { vertical-align: bottom }
|
|
155
|
-
|
|
156
|
-
/* --- Context section classes ----------------------- */
|
|
157
|
-
|
|
158
|
-
.context-row { }
|
|
159
|
-
.context-item-name { font-family: monospace; font-weight: bold; color: black; }
|
|
160
|
-
.context-item-value { font-size: small; color: #448; }
|
|
161
|
-
.context-item-desc { color: #333; padding-left: 2em; }
|
|
162
|
-
|
|
163
|
-
/* --- Method classes -------------------------- */
|
|
164
|
-
.method-detail {
|
|
165
|
-
background: #efefef;
|
|
166
|
-
padding: 0;
|
|
167
|
-
margin-top: 0.5em;
|
|
168
|
-
margin-bottom: 1em;
|
|
169
|
-
border: 1px dotted #ccc;
|
|
170
|
-
}
|
|
171
|
-
.method-heading {
|
|
172
|
-
color: black;
|
|
173
|
-
background: #ccc;
|
|
174
|
-
border-bottom: 1px solid #666;
|
|
175
|
-
padding: 0.2em 0.5em 0 0.5em;
|
|
176
|
-
}
|
|
177
|
-
.method-signature { color: black; background: inherit; }
|
|
178
|
-
.method-name { font-weight: bold; }
|
|
179
|
-
.method-args { font-style: italic; }
|
|
180
|
-
.method-description { padding: 0 0.5em 0 0.5em; }
|
|
181
|
-
|
|
182
|
-
/* --- Source code sections -------------------- */
|
|
183
|
-
|
|
184
|
-
a.source-toggle { font-size: 90%; }
|
|
185
|
-
div.method-source-code {
|
|
186
|
-
background: #262626;
|
|
187
|
-
color: #ffdead;
|
|
188
|
-
margin: 1em;
|
|
189
|
-
padding: 0.5em;
|
|
190
|
-
border: 1px dashed #999;
|
|
191
|
-
overflow: hidden;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
div.method-source-code pre { color: #ffdead; overflow: hidden; }
|
|
195
|
-
|
|
196
|
-
/* --- Ruby keyword styles --------------------- */
|
|
197
|
-
|
|
198
|
-
.standalone-code { background: #221111; color: #ffdead; overflow: hidden; }
|
|
199
|
-
|
|
200
|
-
.ruby-constant { color: #7fffd4; background: transparent; }
|
|
201
|
-
.ruby-keyword { color: #00ffff; background: transparent; }
|
|
202
|
-
.ruby-ivar { color: #eedd82; background: transparent; }
|
|
203
|
-
.ruby-operator { color: #00ffee; background: transparent; }
|
|
204
|
-
.ruby-identifier { color: #ffdead; background: transparent; }
|
|
205
|
-
.ruby-node { color: #ffa07a; background: transparent; }
|
|
206
|
-
.ruby-comment { color: #b22222; font-weight: bold; background: transparent; }
|
|
207
|
-
.ruby-regexp { color: #ffa07a; background: transparent; }
|
|
208
|
-
.ruby-value { color: #7fffd4; background: transparent; }
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
module DataMapper # :nodoc:
|
|
2
|
-
module Validate # :nodoc:
|
|
3
|
-
|
|
4
|
-
class ConfirmationValidator < GenericValidator # :nodoc:
|
|
5
|
-
|
|
6
|
-
def valid?(target)
|
|
7
|
-
field_value = target.instance_variable_get("@#{@field_name}")
|
|
8
|
-
return true if @options[:allow_nil] && field_value.nil?
|
|
9
|
-
return false if !@options[:allow_nil] && field_value.nil?
|
|
10
|
-
return true unless target.attribute_dirty?(@field_name)
|
|
11
|
-
|
|
12
|
-
confirm_value = target.instance_variable_get("@#{@confirm_field_name}")
|
|
13
|
-
field_value == confirm_value
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
end # class ConfirmationValidator
|
|
17
|
-
|
|
18
|
-
end # module Validate
|
|
19
|
-
end # module DataMapper
|
data/lib/dm_patches/dm-cli.rb
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
require 'data_mapper/cli'
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
module DataMapper # :nodoc:
|
|
2
|
-
module MigrationRunner # :nodoc:
|
|
3
|
-
|
|
4
|
-
def reset!
|
|
5
|
-
@@migrations = []
|
|
6
|
-
end
|
|
7
|
-
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
module SQL # :nodoc:
|
|
12
|
-
class TableCreator # :nodoc:
|
|
13
|
-
class Column # :nodoc:
|
|
14
|
-
|
|
15
|
-
def build_type(type_class)
|
|
16
|
-
schema = {:name => @name, :quote_column_name => quoted_name}.merge(@opts)
|
|
17
|
-
schema = @adapter.class.type_map[type_class].merge(schema)
|
|
18
|
-
@adapter.property_schema_statement(schema)
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
data/lib/dm_patches/pooling.rb
DELETED
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
require 'set'
|
|
2
|
-
require 'thread'
|
|
3
|
-
|
|
4
|
-
module Extlib # :nodoc:
|
|
5
|
-
# ==== Notes
|
|
6
|
-
# Provides pooling support to class it got included in.
|
|
7
|
-
#
|
|
8
|
-
# Pooling of objects is a faster way of aquiring instances
|
|
9
|
-
# of objects compared to regular allocation and initialization
|
|
10
|
-
# because instances are keeped in memory reused.
|
|
11
|
-
#
|
|
12
|
-
# Classes that include Pooling module have re-defined new
|
|
13
|
-
# method that returns instances acquired from pool.
|
|
14
|
-
#
|
|
15
|
-
# Term resource is used for any type of poolable objects
|
|
16
|
-
# and should NOT be thought as DataMapper Resource or
|
|
17
|
-
# ActiveResource resource and such.
|
|
18
|
-
#
|
|
19
|
-
# In Data Objects connections are pooled so that it is
|
|
20
|
-
# unnecessary to allocate and initialize connection object
|
|
21
|
-
# each time connection is needed, like per request in a
|
|
22
|
-
# web application.
|
|
23
|
-
#
|
|
24
|
-
# Pool obviously has to be thread safe because state of
|
|
25
|
-
# object is reset when it is released.
|
|
26
|
-
module Pooling # :nodoc:
|
|
27
|
-
|
|
28
|
-
def self.scavenger
|
|
29
|
-
@scavenger || begin
|
|
30
|
-
@scavenger = Thread.new do
|
|
31
|
-
loop do
|
|
32
|
-
lock.synchronize do
|
|
33
|
-
pools.each do |pool|
|
|
34
|
-
# This is a useful check, but non-essential, and right now it breaks lots of stuff.
|
|
35
|
-
# if pool.expired?
|
|
36
|
-
pool.lock.synchronize do
|
|
37
|
-
if pool.reserved_count == 0
|
|
38
|
-
pool.dispose
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
# end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
sleep(scavenger_interval)
|
|
45
|
-
end # loop
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
@scavenger.priority = -10
|
|
49
|
-
@scavenger
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def self.pools
|
|
54
|
-
@pools ||= Set.new
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def self.append_pool(pool)
|
|
58
|
-
lock.synchronize do
|
|
59
|
-
pools << pool
|
|
60
|
-
end
|
|
61
|
-
Extlib::Pooling::scavenger
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def self.lock
|
|
65
|
-
@lock ||= Mutex.new
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
class CrossPoolError < StandardError # :nodoc:
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
class OrphanedObjectError < StandardError # :nodoc:
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
class ThreadStopError < StandardError # :nodoc:
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
def self.included(target)
|
|
78
|
-
target.class_eval do
|
|
79
|
-
class << self
|
|
80
|
-
alias __new new
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
@__pools = Hash.new { |h,k| __pool_lock.synchronize { h[k] = Pool.new(target.pool_size, target, k) } }
|
|
84
|
-
@__pool_lock = Mutex.new
|
|
85
|
-
|
|
86
|
-
def self.__pool_lock
|
|
87
|
-
@__pool_lock
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
def self.new(*args)
|
|
91
|
-
@__pools[args].new
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
def self.__pools
|
|
95
|
-
@__pools
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
def self.pool_size
|
|
99
|
-
8
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
def release
|
|
105
|
-
@__pool.release(self)
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
class Pool # :nodoc:
|
|
109
|
-
def initialize(max_size, resource, args)
|
|
110
|
-
raise ArgumentError.new("+max_size+ should be a Fixnum but was #{max_size.inspect}") unless Fixnum === max_size
|
|
111
|
-
raise ArgumentError.new("+resource+ should be a Class but was #{resource.inspect}") unless Class === resource
|
|
112
|
-
|
|
113
|
-
@max_size = max_size
|
|
114
|
-
@resource = resource
|
|
115
|
-
@args = args
|
|
116
|
-
|
|
117
|
-
@available = []
|
|
118
|
-
@reserved_count = 0
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
def lock
|
|
122
|
-
@resource.__pool_lock
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
def scavenge_interval
|
|
126
|
-
@resource.scavenge_interval
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
def new
|
|
130
|
-
instance = nil
|
|
131
|
-
|
|
132
|
-
lock.synchronize do
|
|
133
|
-
instance = acquire
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
Extlib::Pooling::append_pool(self)
|
|
137
|
-
|
|
138
|
-
if instance.nil?
|
|
139
|
-
# Account for the current thread, and the pool scavenger.
|
|
140
|
-
if ThreadGroup::Default.list.size == 2 && @reserved_count >= @max_size
|
|
141
|
-
raise ThreadStopError.new(size)
|
|
142
|
-
else
|
|
143
|
-
sleep(0.05)
|
|
144
|
-
new
|
|
145
|
-
end
|
|
146
|
-
else
|
|
147
|
-
instance
|
|
148
|
-
end
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
def release(instance)
|
|
152
|
-
lock.synchronize do
|
|
153
|
-
instance.instance_variable_set(:@__pool, nil)
|
|
154
|
-
@reserved_count -= 1
|
|
155
|
-
@available.push(instance)
|
|
156
|
-
end
|
|
157
|
-
nil
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
def size
|
|
161
|
-
@available.size + @reserved_count
|
|
162
|
-
end
|
|
163
|
-
alias length size
|
|
164
|
-
|
|
165
|
-
def inspect
|
|
166
|
-
"#<Extlib::Pooling::Pool<#{@resource.name}> available=#{@available.size} reserved_count=#{@reserved_count}>"
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
def flush!
|
|
170
|
-
until @available.empty?
|
|
171
|
-
instance = @available.pop
|
|
172
|
-
instance.dispose
|
|
173
|
-
end
|
|
174
|
-
@available.clear
|
|
175
|
-
end
|
|
176
|
-
|
|
177
|
-
def dispose
|
|
178
|
-
flush!
|
|
179
|
-
@resource.__pools.delete(@args)
|
|
180
|
-
!Extlib::Pooling::pools.delete?(self).nil?
|
|
181
|
-
end
|
|
182
|
-
|
|
183
|
-
# Disabled temporarily.
|
|
184
|
-
#
|
|
185
|
-
# def expired?
|
|
186
|
-
# lock.synchronize do
|
|
187
|
-
# @available.each do |instance|
|
|
188
|
-
# if instance.instance_variable_get(:@__allocated_in_pool) + scavenge_interval < Time.now
|
|
189
|
-
# instance.dispose
|
|
190
|
-
# @available.delete(instance)
|
|
191
|
-
# end
|
|
192
|
-
# end
|
|
193
|
-
#
|
|
194
|
-
# size == 0
|
|
195
|
-
# end
|
|
196
|
-
# end
|
|
197
|
-
|
|
198
|
-
def reserved_count
|
|
199
|
-
@reserved_count
|
|
200
|
-
end
|
|
201
|
-
|
|
202
|
-
private
|
|
203
|
-
|
|
204
|
-
def acquire
|
|
205
|
-
instance = if !@available.empty?
|
|
206
|
-
@available.pop
|
|
207
|
-
elsif size < @max_size
|
|
208
|
-
@resource.__new(*@args)
|
|
209
|
-
else
|
|
210
|
-
nil
|
|
211
|
-
end
|
|
212
|
-
|
|
213
|
-
if instance.nil?
|
|
214
|
-
instance
|
|
215
|
-
else
|
|
216
|
-
raise CrossPoolError.new(instance) if instance.instance_variable_get(:@__pool)
|
|
217
|
-
@reserved_count += 1
|
|
218
|
-
instance.instance_variable_set(:@__pool, self)
|
|
219
|
-
instance.instance_variable_set(:@__allocated_in_pool, Time.now)
|
|
220
|
-
instance
|
|
221
|
-
end
|
|
222
|
-
end
|
|
223
|
-
end
|
|
224
|
-
|
|
225
|
-
def self.scavenger_interval
|
|
226
|
-
60
|
|
227
|
-
end
|
|
228
|
-
end # module Pooling
|
|
229
|
-
end # module Extlib
|