loquacious 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/README.rdoc +234 -0
- data/Rakefile +43 -0
- data/examples/gutters.rb +30 -0
- data/examples/nested.rb +47 -0
- data/examples/simple.rb +20 -0
- data/lib/loquacious.rb +75 -0
- data/lib/loquacious/configuration.rb +197 -0
- data/lib/loquacious/configuration/help.rb +151 -0
- data/lib/loquacious/configuration/iterator.rb +152 -0
- data/lib/loquacious/core_ext/string.rb +75 -0
- data/loquacious.gemspec +37 -0
- data/spec/configuration_spec.rb +152 -0
- data/spec/help_spec.rb +323 -0
- data/spec/iterator_spec.rb +62 -0
- data/spec/loquacious_spec.rb +22 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +59 -0
- data/spec/string_spec.rb +53 -0
- data/tasks/ann.rake +80 -0
- data/tasks/bones.rake +20 -0
- data/tasks/gem.rake +201 -0
- data/tasks/git.rake +40 -0
- data/tasks/notes.rake +27 -0
- data/tasks/post_load.rake +34 -0
- data/tasks/rdoc.rake +51 -0
- data/tasks/rubyforge.rake +55 -0
- data/tasks/setup.rb +292 -0
- data/tasks/spec.rake +54 -0
- data/tasks/svn.rake +47 -0
- data/tasks/test.rake +40 -0
- metadata +104 -0
data/History.txt
ADDED
data/README.rdoc
ADDED
@@ -0,0 +1,234 @@
|
|
1
|
+
= Loquacious
|
2
|
+
by Tim Pease
|
3
|
+
http://codeforpeople.rubyforge.org/loquacious
|
4
|
+
|
5
|
+
== DESCRIPTION:
|
6
|
+
|
7
|
+
Descriptive configuration files for Ruby written in Ruby.
|
8
|
+
|
9
|
+
Loquacious provides a very open configuration system written in ruby and
|
10
|
+
descriptions for each configuration attribute. The attributes and descriptions
|
11
|
+
can be iterated over allowing for helpful information about those attributes to
|
12
|
+
be displayed to the user.
|
13
|
+
|
14
|
+
In the simple case we have a file something like
|
15
|
+
|
16
|
+
Loquacious.configuration_for('app') {
|
17
|
+
name 'value', :desc => "Defines the name"
|
18
|
+
foo 'bar', :desc => "FooBar"
|
19
|
+
id 42, :desc => "Ara T. Howard"
|
20
|
+
}
|
21
|
+
|
22
|
+
Which can be loaded via the standard Ruby loading mechanisms
|
23
|
+
|
24
|
+
Kernel.load 'config/app.rb'
|
25
|
+
|
26
|
+
The attributes and their descriptions can be printed by using a Help object
|
27
|
+
|
28
|
+
help = Loquacious.help_for('app')
|
29
|
+
help.show :values => true # show the values for the attributes, too
|
30
|
+
|
31
|
+
Descriptions are optional, and configurations can be nested arbitrarily deep.
|
32
|
+
|
33
|
+
Loquacious.configuration_for('nested') {
|
34
|
+
desc "The outermost level"
|
35
|
+
a {
|
36
|
+
desc "One more level in"
|
37
|
+
b {
|
38
|
+
desc "Finally, a real value"
|
39
|
+
c 'value'
|
40
|
+
}
|
41
|
+
}
|
42
|
+
}
|
43
|
+
|
44
|
+
config = Loquacious.configuration_for('nested')
|
45
|
+
|
46
|
+
p config.a.b.c #=> "value"
|
47
|
+
|
48
|
+
And as you can see, descriptions can either be given inline after the value or
|
49
|
+
they can appear above the attribute and value on their own line.
|
50
|
+
|
51
|
+
== INSTALL:
|
52
|
+
|
53
|
+
* sudo gem install loquacious
|
54
|
+
|
55
|
+
== EXAMPLES:
|
56
|
+
|
57
|
+
==== example/simple.rb
|
58
|
+
# A simple example that configures three options (a b c) along with
|
59
|
+
# descriptions for each option. The descriptions along with the
|
60
|
+
# values for the configuration options are printed to the terminal.
|
61
|
+
|
62
|
+
require 'loquacious'
|
63
|
+
include Loquacious
|
64
|
+
|
65
|
+
Configuration.for(:simple) {
|
66
|
+
desc 'Your first configuration option'
|
67
|
+
a "value for 'a'"
|
68
|
+
|
69
|
+
desc 'To be or not to be'
|
70
|
+
b "William Shakespeare"
|
71
|
+
|
72
|
+
desc 'The underpinings of Ruby'
|
73
|
+
c 42
|
74
|
+
}
|
75
|
+
|
76
|
+
help = Configuration.help_for :simple
|
77
|
+
help.show :values => true
|
78
|
+
|
79
|
+
====== output ======
|
80
|
+
Your first configuration option
|
81
|
+
- a => "value for 'a'"
|
82
|
+
|
83
|
+
To be or not to be
|
84
|
+
- b => "William Shakespeare"
|
85
|
+
|
86
|
+
The underpinings of Ruby
|
87
|
+
- c => 42
|
88
|
+
|
89
|
+
==== examples/nested.rb
|
90
|
+
# Here we show how to used nested configuration options by taking a subset
|
91
|
+
# of some common Rails configuration options. Also, descriptions can be give
|
92
|
+
# before the option or they can be given inline using Ruby hash notation. If
|
93
|
+
# both are present, then the inline description takes precedence.
|
94
|
+
#
|
95
|
+
# Multiline descriptions are provided using Ruby heredocs. Leading
|
96
|
+
# whitespace is stripped and line breaks are preserved when descriptions
|
97
|
+
# are printed using the help object.
|
98
|
+
|
99
|
+
require 'loquacious'
|
100
|
+
include Loquacious
|
101
|
+
|
102
|
+
Configuration.for(:nested) {
|
103
|
+
root_path '.', :desc => "The application's base directory."
|
104
|
+
|
105
|
+
desc "Configuration options for ActiveRecord::Base."
|
106
|
+
active_record {
|
107
|
+
desc <<-__
|
108
|
+
Determines whether to use ANSI codes to colorize the logging statements committed
|
109
|
+
by the connection adapter. These colors make it much easier to overview things
|
110
|
+
during debugging (when used through a reader like +tail+ and on a black background),
|
111
|
+
but may complicate matters if you use software like syslog. This is true, by default.
|
112
|
+
__
|
113
|
+
colorize_logging true
|
114
|
+
|
115
|
+
desc <<-__
|
116
|
+
Determines whether to use Time.local (using :local) or Time.utc (using :utc)
|
117
|
+
when pulling dates and times from the database. This is set to :local by default.
|
118
|
+
__
|
119
|
+
default_timezone :local
|
120
|
+
}
|
121
|
+
|
122
|
+
desc <<-__
|
123
|
+
The log level to use for the default Rails logger. In production mode,
|
124
|
+
this defaults to :info. In development mode, it defaults to :debug.
|
125
|
+
__
|
126
|
+
log_level :info
|
127
|
+
|
128
|
+
desc <<-__
|
129
|
+
The path to the log file to use. Defaults to log/\#{environment}.log
|
130
|
+
(e.g. log/development.log or log/production.log).
|
131
|
+
__
|
132
|
+
log_path 'log/development.log'
|
133
|
+
}
|
134
|
+
|
135
|
+
help = Configuration.help_for :nested
|
136
|
+
help.show :values => true
|
137
|
+
|
138
|
+
====== output ======
|
139
|
+
Configuration options for ActiveRecord::Base.
|
140
|
+
- active_record
|
141
|
+
|
142
|
+
Determines whether to use ANSI codes to colorize the logging statements committed
|
143
|
+
by the connection adapter. These colors make it much easier to overview things
|
144
|
+
during debugging (when used through a reader like +tail+ and on a black background),
|
145
|
+
but may complicate matters if you use software like syslog. This is true, by default.
|
146
|
+
- active_record.colorize_logging => true
|
147
|
+
|
148
|
+
Determines whether to use Time.local (using :local) or Time.utc (using :utc)
|
149
|
+
when pulling dates and times from the database. This is set to :local by default.
|
150
|
+
- active_record.default_timezone => :local
|
151
|
+
|
152
|
+
The log level to use for the default Rails logger. In production mode,
|
153
|
+
this defaults to :info. In development mode, it defaults to :debug.
|
154
|
+
- log_level => :info
|
155
|
+
|
156
|
+
The path to the log file to use. Defaults to log/#{environment}.log
|
157
|
+
(e.g. log/development.log or log/production.log).
|
158
|
+
- log_path => "log/development.log"
|
159
|
+
|
160
|
+
The application's base directory.
|
161
|
+
- root_path => "."
|
162
|
+
|
163
|
+
==== examples/gutters.rb
|
164
|
+
# Using Ruby heredocs for descriptions, the Loquacious configuration will
|
165
|
+
# strip out leading whitespace but preserve line breaks. Gutter lines can be
|
166
|
+
# used to mark where leading whitespace should be preserved. This is useful
|
167
|
+
# is you need to provide example code in your descriptions.
|
168
|
+
|
169
|
+
require 'loquacious'
|
170
|
+
include Loquacious
|
171
|
+
|
172
|
+
Configuration.for(:gutters) {
|
173
|
+
desc <<-__
|
174
|
+
The path to the log file to use. Defaults to log/\#{environment}.log
|
175
|
+
(e.g. log/development.log or log/production.log).
|
176
|
+
|
|
177
|
+
| config.log_path = File.join(ROOT, "log", "\#{environment}.log
|
178
|
+
|
|
179
|
+
__
|
180
|
+
log_path "log/development.log"
|
181
|
+
|
182
|
+
log_level :warn, :desc => <<-__
|
183
|
+
|The log level to use for the default Rails logger. In production mode,
|
184
|
+
|this defaults to :info. In development mode, it defaults to :debug.
|
185
|
+
|
|
186
|
+
| config.log_level = 'debug'
|
187
|
+
| config.log_level = :warn
|
188
|
+
|
|
189
|
+
__
|
190
|
+
}
|
191
|
+
|
192
|
+
help = Configuration.help_for :gutters
|
193
|
+
help.show :values => true
|
194
|
+
|
195
|
+
====== output ======
|
196
|
+
The log level to use for the default Rails logger. In production mode,
|
197
|
+
this defaults to :info. In development mode, it defaults to :debug.
|
198
|
+
|
199
|
+
config.log_level = 'debug'
|
200
|
+
config.log_level = :warn
|
201
|
+
|
202
|
+
- log_level => :warn
|
203
|
+
|
204
|
+
The path to the log file to use. Defaults to log/#{environment}.log
|
205
|
+
(e.g. log/development.log or log/production.log).
|
206
|
+
|
207
|
+
config.log_path = File.join(ROOT, "log", "#{environment}.log
|
208
|
+
|
209
|
+
- log_path => "log/development.log"
|
210
|
+
|
211
|
+
== LICENSE:
|
212
|
+
|
213
|
+
(The MIT License)
|
214
|
+
|
215
|
+
Copyright (c) 2009
|
216
|
+
|
217
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
218
|
+
a copy of this software and associated documentation files (the
|
219
|
+
'Software'), to deal in the Software without restriction, including
|
220
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
221
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
222
|
+
permit persons to whom the Software is furnished to do so, subject to
|
223
|
+
the following conditions:
|
224
|
+
|
225
|
+
The above copyright notice and this permission notice shall be
|
226
|
+
included in all copies or substantial portions of the Software.
|
227
|
+
|
228
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
229
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
230
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
231
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
232
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
233
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
234
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# Look in the tasks/setup.rb file for the various options that can be
|
2
|
+
# configured in this Rakefile. The .rake files in the tasks directory
|
3
|
+
# are where the options are used.
|
4
|
+
|
5
|
+
begin
|
6
|
+
require 'bones'
|
7
|
+
Bones.setup
|
8
|
+
rescue LoadError
|
9
|
+
begin
|
10
|
+
load 'tasks/setup.rb'
|
11
|
+
rescue LoadError
|
12
|
+
raise RuntimeError, '### please install the "bones" gem ###'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
ensure_in_path 'lib'
|
17
|
+
require 'loquacious'
|
18
|
+
|
19
|
+
task :default => 'spec:specdoc'
|
20
|
+
|
21
|
+
PROJ.name = 'loquacious'
|
22
|
+
PROJ.authors = 'Tim Pease'
|
23
|
+
PROJ.email = 'tim.pease@gmail.com'
|
24
|
+
PROJ.url = 'http://codeforpeople.rubyforge.org/loquacious'
|
25
|
+
PROJ.version = Loquacious::VERSION
|
26
|
+
PROJ.readme_file = 'README.rdoc'
|
27
|
+
PROJ.ignore_file = '.gitignore'
|
28
|
+
PROJ.rubyforge.name = 'codeforpeople'
|
29
|
+
|
30
|
+
PROJ.spec.opts << '--color'
|
31
|
+
PROJ.ruby_opts = %w[-W0]
|
32
|
+
|
33
|
+
PROJ.ann.email[:server] = 'smtp.gmail.com'
|
34
|
+
PROJ.ann.email[:port] = 587
|
35
|
+
PROJ.ann.email[:from] = 'Tim Pease'
|
36
|
+
|
37
|
+
task 'ann:prereqs' do
|
38
|
+
PROJ.name = 'Loquacious'
|
39
|
+
end
|
40
|
+
|
41
|
+
depend_on 'rspec'
|
42
|
+
|
43
|
+
# EOF
|
data/examples/gutters.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# Using Ruby heredocs for descriptions, the Loquacious configuration will
|
2
|
+
# strip out leading whitespace but preserve line breaks. Gutter lines can be
|
3
|
+
# used to mark where leading whitespace should be preserved. This is useful
|
4
|
+
# is you need to provide example code in your descriptions.
|
5
|
+
|
6
|
+
require 'loquacious'
|
7
|
+
include Loquacious
|
8
|
+
|
9
|
+
Configuration.for(:gutters) {
|
10
|
+
desc <<-__
|
11
|
+
The path to the log file to use. Defaults to log/\#{environment}.log
|
12
|
+
(e.g. log/development.log or log/production.log).
|
13
|
+
|
|
14
|
+
| config.log_path = File.join(ROOT, "log", "\#{environment}.log
|
15
|
+
|
|
16
|
+
__
|
17
|
+
log_path "log/development.log"
|
18
|
+
|
19
|
+
log_level :warn, :desc => <<-__
|
20
|
+
|The log level to use for the default Rails logger. In production mode,
|
21
|
+
|this defaults to :info. In development mode, it defaults to :debug.
|
22
|
+
|
|
23
|
+
| config.log_level = 'debug'
|
24
|
+
| config.log_level = :warn
|
25
|
+
|
|
26
|
+
__
|
27
|
+
}
|
28
|
+
|
29
|
+
help = Configuration.help_for :gutters
|
30
|
+
help.show :values => true
|
data/examples/nested.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# Here we show how to used nested configuration options by taking a subset
|
2
|
+
# of some common Rails configuration options. Also, descriptions can be give
|
3
|
+
# before the option or they can be given inline using Ruby hash notation. If
|
4
|
+
# both are present, then the inline description takes precedence.
|
5
|
+
#
|
6
|
+
# Multiline descriptions are provided using Ruby heredocs. Leading
|
7
|
+
# whitespace is stripped and line breaks are preserved when descriptions
|
8
|
+
# are printed using the help object.
|
9
|
+
|
10
|
+
require 'loquacious'
|
11
|
+
include Loquacious
|
12
|
+
|
13
|
+
Configuration.for(:nested) {
|
14
|
+
root_path '.', :desc => "The application's base directory."
|
15
|
+
|
16
|
+
desc "Configuration options for ActiveRecord::Base."
|
17
|
+
active_record {
|
18
|
+
desc <<-__
|
19
|
+
Determines whether to use ANSI codes to colorize the logging statements committed
|
20
|
+
by the connection adapter. These colors make it much easier to overview things
|
21
|
+
during debugging (when used through a reader like +tail+ and on a black background),
|
22
|
+
but may complicate matters if you use software like syslog. This is true, by default.
|
23
|
+
__
|
24
|
+
colorize_logging true
|
25
|
+
|
26
|
+
desc <<-__
|
27
|
+
Determines whether to use Time.local (using :local) or Time.utc (using :utc)
|
28
|
+
when pulling dates and times from the database. This is set to :local by default.
|
29
|
+
__
|
30
|
+
default_timezone :local
|
31
|
+
}
|
32
|
+
|
33
|
+
desc <<-__
|
34
|
+
The log level to use for the default Rails logger. In production mode,
|
35
|
+
this defaults to :info. In development mode, it defaults to :debug.
|
36
|
+
__
|
37
|
+
log_level :info
|
38
|
+
|
39
|
+
desc <<-__
|
40
|
+
The path to the log file to use. Defaults to log/\#{environment}.log
|
41
|
+
(e.g. log/development.log or log/production.log).
|
42
|
+
__
|
43
|
+
log_path 'log/development.log'
|
44
|
+
}
|
45
|
+
|
46
|
+
help = Configuration.help_for :nested
|
47
|
+
help.show :values => true
|
data/examples/simple.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# A simple example that configures three options (a b c) along with
|
2
|
+
# descriptions for each option. The descriptions along with the
|
3
|
+
# values for the configuration options are printed to the terminal.
|
4
|
+
|
5
|
+
require 'loquacious'
|
6
|
+
include Loquacious
|
7
|
+
|
8
|
+
Configuration.for(:simple) {
|
9
|
+
desc 'Your first configuration option'
|
10
|
+
a "value for 'a'"
|
11
|
+
|
12
|
+
desc 'To be or not to be'
|
13
|
+
b "William Shakespeare"
|
14
|
+
|
15
|
+
desc 'The underpinings of Ruby'
|
16
|
+
c 42
|
17
|
+
}
|
18
|
+
|
19
|
+
help = Configuration.help_for :simple
|
20
|
+
help.show :values => true
|
data/lib/loquacious.rb
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
|
2
|
+
module Loquacious
|
3
|
+
|
4
|
+
# :stopdoc:
|
5
|
+
VERSION = '1.0.0'
|
6
|
+
LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
|
7
|
+
PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
|
8
|
+
# :startdoc:
|
9
|
+
|
10
|
+
class << self
|
11
|
+
|
12
|
+
# Returns the configuration associated with the given _name_. If a
|
13
|
+
# _block_ is given, then it will be used to create the configuration.
|
14
|
+
#
|
15
|
+
# The same _name_ can be used multiple times with different
|
16
|
+
# configuration blocks. Each different block will be used to add to the
|
17
|
+
# configuration; i.e. the configurations are additive.
|
18
|
+
#
|
19
|
+
def configuration_for( name, &block )
|
20
|
+
::Loquacious::Configuration.for(name, &block)
|
21
|
+
end
|
22
|
+
alias :configuration :configuration_for
|
23
|
+
alias :config_for :configuration_for
|
24
|
+
alias :config :configuration_for
|
25
|
+
|
26
|
+
# Returns a Help instance for the configuration associated with the
|
27
|
+
# given _name_. See the Help#initialize method for the options that
|
28
|
+
# can be used with this method.
|
29
|
+
#
|
30
|
+
def help_for( name, opts = {} )
|
31
|
+
::Loquacious::Configuration.help_for(name, opts)
|
32
|
+
end
|
33
|
+
alias :help :help_for
|
34
|
+
|
35
|
+
# Returns the version string for the library.
|
36
|
+
#
|
37
|
+
def version
|
38
|
+
VERSION
|
39
|
+
end
|
40
|
+
|
41
|
+
# Returns the library path for the module. If any arguments are given,
|
42
|
+
# they will be joined to the end of the libray path using
|
43
|
+
# <tt>File.join</tt>.
|
44
|
+
#
|
45
|
+
def libpath( *args )
|
46
|
+
args.empty? ? LIBPATH : ::File.join(LIBPATH, args.flatten)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Returns the lpath for the module. If any arguments are given, they
|
50
|
+
# will be joined to the end of the path using <tt>File.join</tt>.
|
51
|
+
#
|
52
|
+
def path( *args )
|
53
|
+
args.empty? ? PATH : ::File.join(PATH, args.flatten)
|
54
|
+
end
|
55
|
+
|
56
|
+
# Utility method used to require all files ending in .rb that lie in the
|
57
|
+
# directory below this file that has the same name as the filename
|
58
|
+
# passed in. Optionally, a specific _directory_ name can be passed in
|
59
|
+
# such that the _filename_ does not have to be equivalent to the
|
60
|
+
# directory.
|
61
|
+
#
|
62
|
+
def require_all_libs_relative_to( fname, dir = nil )
|
63
|
+
dir ||= ::File.basename(fname, '.*')
|
64
|
+
search_me = ::File.expand_path(
|
65
|
+
::File.join(::File.dirname(fname), dir, '**', '*.rb'))
|
66
|
+
|
67
|
+
Dir.glob(search_me).sort.each {|rb| require rb}
|
68
|
+
end
|
69
|
+
|
70
|
+
end # class << self
|
71
|
+
end # module Loquacious
|
72
|
+
|
73
|
+
Loquacious.require_all_libs_relative_to(__FILE__)
|
74
|
+
|
75
|
+
# EOF
|