autocode 0.9.0
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/doc/rdoc/classes/Autocreate.html +158 -0
- data/doc/rdoc/classes/Autocreate.src/M000004.html +19 -0
- data/doc/rdoc/classes/Autoload.html +206 -0
- data/doc/rdoc/classes/Autoload.src/M000001.html +19 -0
- data/doc/rdoc/classes/Autoload.src/M000002.html +19 -0
- data/doc/rdoc/classes/Autoload.src/M000003.html +25 -0
- data/doc/rdoc/classes/Reloadable.html +173 -0
- data/doc/rdoc/classes/Reloadable.src/M000005.html +19 -0
- data/doc/rdoc/classes/Reloadable.src/M000006.html +19 -0
- data/doc/rdoc/created.rid +1 -0
- data/doc/rdoc/files/README.html +200 -0
- data/doc/rdoc/files/lib/autocode_rb.html +110 -0
- data/doc/rdoc/files/lib/autocreate_rb.html +109 -0
- data/doc/rdoc/files/lib/autoload_rb.html +109 -0
- data/doc/rdoc/files/lib/reloadable_rb.html +109 -0
- data/doc/rdoc/fr_class_index.html +29 -0
- data/doc/rdoc/fr_file_index.html +31 -0
- data/doc/rdoc/fr_method_index.html +32 -0
- data/doc/rdoc/index.html +24 -0
- data/doc/rdoc/rdoc-style.css +208 -0
- data/lib/autocode.rb +3 -0
- data/lib/autocreate.rb +53 -0
- data/lib/autoload.rb +69 -0
- data/lib/reloadable.rb +30 -0
- metadata +84 -0
@@ -0,0 +1,208 @@
|
|
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; }
|
data/lib/autocode.rb
ADDED
data/lib/autocreate.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'metaid'
|
3
|
+
|
4
|
+
# Extending a module with Autocreate allows you to specify autocreate rules for that module.
|
5
|
+
#
|
6
|
+
# Autocreate allows you to automatically created classes or modules based on a given exemplar at the time they are referenced.
|
7
|
+
#
|
8
|
+
# To use Autocreate, mix it via +extend+ into the class or module within which you want to autocreate referenced constants.
|
9
|
+
#
|
10
|
+
# See the README for an example of how to use Autocreate.
|
11
|
+
|
12
|
+
module Autocreate
|
13
|
+
|
14
|
+
def self.extended( mod ) #:nodoc:
|
15
|
+
|
16
|
+
old = mod.method( :const_missing )
|
17
|
+
mod.metaclass.class_eval do
|
18
|
+
|
19
|
+
# Specifies that the constant specified by key should be autocreated using the exemplar. If a block is given, the block is further used to initialize the block once it has been cloned.
|
20
|
+
def autocreate( key, exemplar, &block )
|
21
|
+
( @autocreate ||= [] ) << [ key, exemplar, block ]
|
22
|
+
return self
|
23
|
+
end
|
24
|
+
|
25
|
+
define_method :const_missing do | cname | #:nodoc:
|
26
|
+
|
27
|
+
# first, find an applicable exemplar
|
28
|
+
key, exemplar, block = ( @autocreate ||= [] ).find do |k,v|
|
29
|
+
case k
|
30
|
+
when true then true
|
31
|
+
when String, Symbol then k.to_s == cname.to_s
|
32
|
+
when Array then k.find { |k| k.to_s == cname.to_s }
|
33
|
+
else false
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# if we found it, set the const and return it
|
38
|
+
if key
|
39
|
+
object = exemplar.clone
|
40
|
+
object.instance_eval( &block ) if block
|
41
|
+
( @reloadable ||= [] ) << cname;
|
42
|
+
const_set( cname, object )
|
43
|
+
else
|
44
|
+
old.call(cname)
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
data/lib/autoload.rb
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'metaid'
|
3
|
+
|
4
|
+
# Autoload allows you to specify which modules or classes to automatically load when they are referenced. This is somewhat more sophisticated than the +autoinclude+ mechanism in the standard library. For one thing, you can cause code to be reloaded by using Reloadable in conjunction with Autoload. For another, you can provide a search path using the directories method, thereby allowing you to "autoinclude" entire directories in one fell swoop.
|
5
|
+
#
|
6
|
+
# To use Autoload, you must mix it into your module or class via extend. That will provide the autoload and directories methods for you, as described below.
|
7
|
+
#
|
8
|
+
# A typical use case for Autoload looks like this:
|
9
|
+
#
|
10
|
+
# require 'autocode'
|
11
|
+
#
|
12
|
+
# module Models
|
13
|
+
# extend Autoload; extend Reloadable
|
14
|
+
# autoload true; directories :models
|
15
|
+
# end
|
16
|
+
|
17
|
+
module Autoload
|
18
|
+
|
19
|
+
def self.extended( mod ) #:nodoc:
|
20
|
+
|
21
|
+
old = mod.method( :const_missing )
|
22
|
+
|
23
|
+
mod.metaclass.class_eval do
|
24
|
+
|
25
|
+
# Specifies that you want to autoload each of the constants referenced by keys. A key of true is basically a wild-card, meaning "load anything".
|
26
|
+
def autoload( *keys )
|
27
|
+
( @autoload ||= [] ).concat(keys)
|
28
|
+
return self
|
29
|
+
end
|
30
|
+
|
31
|
+
# Provide a list of directories from which a given constant might be loaded.
|
32
|
+
def directories( *dirs )
|
33
|
+
( @directories ||= ['.'] ).concat(dirs)
|
34
|
+
return self
|
35
|
+
end
|
36
|
+
|
37
|
+
# Is a given constant being autoloaded?
|
38
|
+
def autoload?( cname )
|
39
|
+
|
40
|
+
cname = cname.to_s.gsub(/([a-z\d])([A-Z])/){ "#{$1}_#{$2.downcase}"}
|
41
|
+
|
42
|
+
# is this name autoloadable?
|
43
|
+
key = ( @autoload ||= [] ).find do |key|
|
44
|
+
key == true || ( key.to_s == cname )
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
define_method :const_missing do | cname | #:nodoc:
|
50
|
+
|
51
|
+
return old.call(cname) unless autoload?( cname )
|
52
|
+
fname = cname.to_s.gsub(/([a-z\d])([A-Z])/){ "#{$1}_#{$2.downcase}"} + '.rb'
|
53
|
+
dir = ( @directories ||= ['.'] ).find do |dir|
|
54
|
+
File.exist?( dir / fname )
|
55
|
+
end
|
56
|
+
|
57
|
+
if ( dir && load( dir / fname ) && c = const_get( cname ) )
|
58
|
+
( @reloadable ||= [] ) << cname; return c
|
59
|
+
else
|
60
|
+
old.call( cname )
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
data/lib/reloadable.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'metaid'
|
3
|
+
|
4
|
+
# Reloadable simply makes it possible for a module's code to be reloaded. *Important*: Only code loaded via Autoload or Autocreate will be reloaded. Also, the module itself is not reloaded, only the modules and classes within it that were loaded via *Autocode*.
|
5
|
+
#
|
6
|
+
# To use Reloadable, simply extend a given module with Reloadable. This will add two methods to the module: reloadable and reload. These are described below.
|
7
|
+
|
8
|
+
module Reloadable
|
9
|
+
|
10
|
+
def self.extended( mod ) #:nodoc:
|
11
|
+
|
12
|
+
mod.metaclass.class_eval do
|
13
|
+
|
14
|
+
# Returns the list of constants that would be reloaded upon a call to reload.
|
15
|
+
def reloadable( *names )
|
16
|
+
( @reloadable ||= [] ).concat(names)
|
17
|
+
return self
|
18
|
+
end
|
19
|
+
|
20
|
+
# Reloads all the constants that were loaded via *Autocode*. Technically, all reload is doing is undefining them (by calling +remove_const+ on each in turn); they won't get reloaded until they are referenced.
|
21
|
+
def reload
|
22
|
+
( @reloadable ||=[] ).each { |name| remove_const( name ) }
|
23
|
+
@reloadable = []; return self
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
metadata
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.9.0
|
3
|
+
specification_version: 1
|
4
|
+
name: autocode
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.9.0
|
7
|
+
date: 2008-01-04 00:00:00 -08:00
|
8
|
+
summary: Utility for auto-including, reloading, and generating classes and modules.
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email:
|
12
|
+
homepage: http://dev.zeraweb.com/
|
13
|
+
rubyforge_project:
|
14
|
+
description:
|
15
|
+
autorequire:
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.8.6
|
24
|
+
version:
|
25
|
+
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
post_install_message:
|
29
|
+
authors: []
|
30
|
+
|
31
|
+
files:
|
32
|
+
- doc/rdoc
|
33
|
+
- doc/rdoc/classes
|
34
|
+
- doc/rdoc/classes/Autocreate.html
|
35
|
+
- doc/rdoc/classes/Autocreate.src
|
36
|
+
- doc/rdoc/classes/Autocreate.src/M000004.html
|
37
|
+
- doc/rdoc/classes/Autoload.html
|
38
|
+
- doc/rdoc/classes/Autoload.src
|
39
|
+
- doc/rdoc/classes/Autoload.src/M000001.html
|
40
|
+
- doc/rdoc/classes/Autoload.src/M000002.html
|
41
|
+
- doc/rdoc/classes/Autoload.src/M000003.html
|
42
|
+
- doc/rdoc/classes/Reloadable.html
|
43
|
+
- doc/rdoc/classes/Reloadable.src
|
44
|
+
- doc/rdoc/classes/Reloadable.src/M000005.html
|
45
|
+
- doc/rdoc/classes/Reloadable.src/M000006.html
|
46
|
+
- doc/rdoc/created.rid
|
47
|
+
- doc/rdoc/files
|
48
|
+
- doc/rdoc/files/lib
|
49
|
+
- doc/rdoc/files/lib/autocode_rb.html
|
50
|
+
- doc/rdoc/files/lib/autocreate_rb.html
|
51
|
+
- doc/rdoc/files/lib/autoload_rb.html
|
52
|
+
- doc/rdoc/files/lib/reloadable_rb.html
|
53
|
+
- doc/rdoc/files/README.html
|
54
|
+
- doc/rdoc/fr_class_index.html
|
55
|
+
- doc/rdoc/fr_file_index.html
|
56
|
+
- doc/rdoc/fr_method_index.html
|
57
|
+
- doc/rdoc/index.html
|
58
|
+
- doc/rdoc/rdoc-style.css
|
59
|
+
- lib/autocode.rb
|
60
|
+
- lib/autocreate.rb
|
61
|
+
- lib/autoload.rb
|
62
|
+
- lib/reloadable.rb
|
63
|
+
test_files: []
|
64
|
+
|
65
|
+
rdoc_options: []
|
66
|
+
|
67
|
+
extra_rdoc_files: []
|
68
|
+
|
69
|
+
executables: []
|
70
|
+
|
71
|
+
extensions: []
|
72
|
+
|
73
|
+
requirements: []
|
74
|
+
|
75
|
+
dependencies:
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: metaid
|
78
|
+
version_requirement:
|
79
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 0.0.0
|
84
|
+
version:
|