copland 0.8.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/README +88 -0
- data/doc/manual-html/chapter-1.html +454 -0
- data/doc/manual-html/chapter-10.html +399 -0
- data/doc/manual-html/chapter-11.html +600 -0
- data/doc/manual-html/chapter-12.html +406 -0
- data/doc/manual-html/chapter-2.html +382 -0
- data/doc/manual-html/chapter-3.html +424 -0
- data/doc/manual-html/chapter-4.html +432 -0
- data/doc/manual-html/chapter-5.html +381 -0
- data/doc/manual-html/chapter-6.html +364 -0
- data/doc/manual-html/chapter-7.html +434 -0
- data/doc/manual-html/chapter-8.html +373 -0
- data/doc/manual-html/chapter-9.html +324 -0
- data/doc/manual-html/copland.png +0 -0
- data/doc/manual-html/index.html +331 -0
- data/doc/manual-html/manual.css +179 -0
- data/doc/manual-html/tutorial-1.html +407 -0
- data/doc/manual-html/tutorial-2.html +451 -0
- data/doc/manual-html/tutorial-3.html +484 -0
- data/doc/manual-html/tutorial-4.html +446 -0
- data/doc/manual-html/tutorial-5.html +520 -0
- data/doc/manual/chapter.erb +18 -0
- data/doc/manual/example.erb +18 -0
- data/doc/manual/img/copland.png +0 -0
- data/doc/manual/index.erb +30 -0
- data/doc/manual/manual.css +179 -0
- data/doc/manual/manual.rb +239 -0
- data/doc/manual/manual.yml +2643 -0
- data/doc/manual/page.erb +102 -0
- data/doc/manual/tutorial.erb +30 -0
- data/doc/packages/copland.html +764 -0
- data/doc/packages/copland.lib.html +439 -0
- data/doc/packages/copland.remote.html +2096 -0
- data/doc/packages/copland.webrick.html +925 -0
- data/doc/packages/index.html +49 -0
- data/doc/packages/packrat.css +125 -0
- data/examples/calc/calc.rb +47 -0
- data/examples/calc/package.yml +35 -0
- data/examples/calc/services.rb +74 -0
- data/examples/solitaire-cipher/README +11 -0
- data/examples/solitaire-cipher/Rakefile +57 -0
- data/examples/solitaire-cipher/bin/main.rb +14 -0
- data/examples/solitaire-cipher/lib/cipher.rb +230 -0
- data/examples/solitaire-cipher/lib/cli.rb +24 -0
- data/examples/solitaire-cipher/lib/package.yml +106 -0
- data/examples/solitaire-cipher/test/tc_deck.rb +30 -0
- data/examples/solitaire-cipher/test/tc_key-stream.rb +19 -0
- data/examples/solitaire-cipher/test/tc_keying-algorithms.rb +31 -0
- data/examples/solitaire-cipher/test/tc_solitaire-cipher.rb +66 -0
- data/examples/solitaire-cipher/test/tc_unkeyed-algorithm.rb +17 -0
- data/examples/solitaire-cipher/test/tests.rb +2 -0
- data/lib/copland.rb +56 -0
- data/lib/copland/class-factory.rb +95 -0
- data/lib/copland/configuration-point.rb +38 -0
- data/lib/copland/configuration-point/common.rb +203 -0
- data/lib/copland/configuration-point/errors.rb +44 -0
- data/lib/copland/configuration-point/list.rb +59 -0
- data/lib/copland/configuration-point/map.rb +59 -0
- data/lib/copland/configuration/errors.rb +43 -0
- data/lib/copland/configuration/loader.rb +113 -0
- data/lib/copland/configuration/yaml/configuration-point.rb +87 -0
- data/lib/copland/configuration/yaml/implementor.rb +134 -0
- data/lib/copland/configuration/yaml/interceptor.rb +63 -0
- data/lib/copland/configuration/yaml/listener.rb +56 -0
- data/lib/copland/configuration/yaml/loader.rb +122 -0
- data/lib/copland/configuration/yaml/package.rb +125 -0
- data/lib/copland/configuration/yaml/parser.rb +71 -0
- data/lib/copland/configuration/yaml/schema.rb +165 -0
- data/lib/copland/configuration/yaml/service-point.rb +116 -0
- data/lib/copland/configuration/yaml/utils.rb +82 -0
- data/lib/copland/default-schema-processor.rb +144 -0
- data/lib/copland/errors.rb +82 -0
- data/lib/copland/event-producer.rb +95 -0
- data/lib/copland/impl/builder-factory.rb +112 -0
- data/lib/copland/impl/copland-config.yml +1 -0
- data/lib/copland/impl/include-exclude.rb +140 -0
- data/lib/copland/impl/logging-interceptor.rb +106 -0
- data/lib/copland/impl/package.yml +217 -0
- data/lib/copland/impl/startup.rb +116 -0
- data/lib/copland/impl/symbol-source-manager.rb +131 -0
- data/lib/copland/impl/symbol-source.rb +63 -0
- data/lib/copland/instantiator.rb +38 -0
- data/lib/copland/instantiator/abstract.rb +91 -0
- data/lib/copland/instantiator/complex.rb +96 -0
- data/lib/copland/instantiator/identity.rb +58 -0
- data/lib/copland/instantiator/simple.rb +68 -0
- data/lib/copland/interceptor-chain.rb +166 -0
- data/lib/copland/interceptor.rb +139 -0
- data/lib/copland/log-factory.rb +206 -0
- data/lib/copland/models.rb +39 -0
- data/lib/copland/models/abstract.rb +78 -0
- data/lib/copland/models/prototype-deferred.rb +58 -0
- data/lib/copland/models/prototype.rb +58 -0
- data/lib/copland/models/proxy.rb +100 -0
- data/lib/copland/models/singleton-deferred.rb +59 -0
- data/lib/copland/models/singleton.rb +77 -0
- data/lib/copland/models/threaded.rb +65 -0
- data/lib/copland/ordering.rb +123 -0
- data/lib/copland/package.rb +246 -0
- data/lib/copland/registry.rb +368 -0
- data/lib/copland/schema.rb +206 -0
- data/lib/copland/service-point.rb +282 -0
- data/lib/copland/utils.rb +221 -0
- data/lib/copland/version.rb +47 -0
- data/test/conf-test/list-bad-key.yml +30 -0
- data/test/conf-test/list-bad-missing.yml +28 -0
- data/test/conf-test/list-bad-type.yml +28 -0
- data/test/conf-test/list-good.yml +29 -0
- data/test/conf-test/map-bad-key.yml +25 -0
- data/test/conf-test/map-bad-missing.yml +24 -0
- data/test/conf-test/map-bad-type.yml +23 -0
- data/test/conf-test/map-good.yml +25 -0
- data/test/configuration-point/package.yml +52 -0
- data/test/configuration/yaml/config/copland-config.yml +2 -0
- data/test/configuration/yaml/config/module.yml +2 -0
- data/test/configuration/yaml/config/subdir/copland-config.yml +2 -0
- data/test/configuration/yaml/config/subdir/package.yml +4 -0
- data/test/configuration/yaml/defaults/package.yml +5 -0
- data/test/configuration/yaml/defaults/subdir/package.yml +4 -0
- data/test/configuration/yaml/tc_config-loader.rb +86 -0
- data/test/configuration/yaml/tc_configuration-point-processor.rb +134 -0
- data/test/configuration/yaml/tc_implementor-processor.rb +104 -0
- data/test/configuration/yaml/tc_interceptor-processor.rb +85 -0
- data/test/configuration/yaml/tc_listener-processor.rb +69 -0
- data/test/configuration/yaml/tc_loader.rb +74 -0
- data/test/configuration/yaml/tc_package-processor.rb +120 -0
- data/test/configuration/yaml/tc_parser.rb +94 -0
- data/test/configuration/yaml/tc_schema-parser.rb +160 -0
- data/test/configuration/yaml/tc_service-point-processor.rb +104 -0
- data/test/configuration/yaml/tc_type-validator.rb +90 -0
- data/test/custom-logger.yml +3 -0
- data/test/impl/logging/package.yml +44 -0
- data/test/impl/logging/services.rb +84 -0
- data/test/impl/startup/package.yml +46 -0
- data/test/impl/startup/services.rb +47 -0
- data/test/impl/symbols/package.yml +24 -0
- data/test/impl/symbols/services.rb +38 -0
- data/test/impl/tc_builder-factory.rb +173 -0
- data/test/impl/tc_logging-interceptor.rb +148 -0
- data/test/impl/tc_startup.rb +59 -0
- data/test/impl/tc_symbol-sources.rb +61 -0
- data/test/logger.yml +6 -0
- data/test/mock.rb +201 -0
- data/test/schema/bad-package.yml +65 -0
- data/test/schema/package.yml +102 -0
- data/test/schema/services.rb +5 -0
- data/test/services/package.yml +79 -0
- data/test/services/simple.rb +87 -0
- data/test/tc_class-factory.rb +93 -0
- data/test/tc_complex-instantiator.rb +107 -0
- data/test/tc_configuration-point-contrib.rb +74 -0
- data/test/tc_configuration-point-schema.rb +122 -0
- data/test/tc_configuration-point.rb +91 -0
- data/test/tc_default-schema-processor.rb +297 -0
- data/test/tc_identity-instantiator.rb +61 -0
- data/test/tc_interceptors.rb +84 -0
- data/test/tc_logger.rb +131 -0
- data/test/tc_models.rb +176 -0
- data/test/tc_package.rb +165 -0
- data/test/tc_proxy.rb +65 -0
- data/test/tc_registry.rb +141 -0
- data/test/tc_schema.rb +78 -0
- data/test/tc_service-point.rb +178 -0
- data/test/tc_service.rb +70 -0
- data/test/tc_simple-instantiator.rb +61 -0
- data/test/tests.rb +93 -0
- data/tutorial/01/main.rb +7 -0
- data/tutorial/01/package.yml +8 -0
- data/tutorial/01/tutorial.rb +7 -0
- data/tutorial/02/main.rb +10 -0
- data/tutorial/02/package.yml +27 -0
- data/tutorial/02/tutorial.rb +46 -0
- data/tutorial/03/main.rb +24 -0
- data/tutorial/03/package.yml +29 -0
- data/tutorial/03/tutorial.rb +48 -0
- data/tutorial/04/main.rb +24 -0
- data/tutorial/04/package.yml +35 -0
- data/tutorial/04/tutorial.rb +48 -0
- data/tutorial/05/functions/package.yml +16 -0
- data/tutorial/05/functions/services.rb +15 -0
- data/tutorial/05/main.rb +10 -0
- data/tutorial/05/package.yml +35 -0
- data/tutorial/05/tutorial.rb +53 -0
- metadata +260 -0
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
|
4
|
+
# All rights reserved.
|
|
5
|
+
#
|
|
6
|
+
# Redistribution and use in source and binary forms, with or without
|
|
7
|
+
# modification, are permitted provided that the following conditions are met:
|
|
8
|
+
#
|
|
9
|
+
# * Redistributions of source code must retain the above copyright notice,
|
|
10
|
+
# this list of conditions and the following disclaimer.
|
|
11
|
+
#
|
|
12
|
+
# * Redistributions in binary form must reproduce the above copyright
|
|
13
|
+
# notice, this list of conditions and the following disclaimer in the
|
|
14
|
+
# documentation and/or other materials provided with the distribution.
|
|
15
|
+
#
|
|
16
|
+
# * The names of its contributors may not be used to endorse or promote
|
|
17
|
+
# products derived from this software without specific prior written
|
|
18
|
+
# permission.
|
|
19
|
+
#
|
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
21
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
22
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
23
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
24
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
25
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
26
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
27
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
28
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
29
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
30
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
31
|
+
# =============================================================================
|
|
32
|
+
#++
|
|
33
|
+
|
|
34
|
+
require 'copland/errors'
|
|
35
|
+
require 'copland/log-factory'
|
|
36
|
+
require 'copland/registry'
|
|
37
|
+
require 'copland/configuration/errors'
|
|
38
|
+
|
|
39
|
+
module Copland
|
|
40
|
+
|
|
41
|
+
# This is the regular expression that is used to match substitution
|
|
42
|
+
# string patterns in a value.
|
|
43
|
+
SUBSTITUTION_STRING_REGEXP = /\${(.*?)}/
|
|
44
|
+
|
|
45
|
+
# Examines the +id+ to determine whether it is a local service, or a
|
|
46
|
+
# fully-qualified service name. If it is local, then it pertains to the
|
|
47
|
+
# given +pkg+ parameter. Otherwise, the corresponding package is looked up
|
|
48
|
+
# in the registry.
|
|
49
|
+
#
|
|
50
|
+
# Without a block, this always calls Package#service( id ). With a block,
|
|
51
|
+
# it passes the correct pkg and unqualified service name to the block and
|
|
52
|
+
# returns the result.
|
|
53
|
+
def get_possibly_local_service( registry, pkg, id )
|
|
54
|
+
if id =~ /^(.+)\.([^.]+)$/
|
|
55
|
+
pkg = registry.package( $1 )
|
|
56
|
+
id = $2
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
if block_given?
|
|
60
|
+
yield pkg, id
|
|
61
|
+
else
|
|
62
|
+
pkg.service( id )
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Deconstructs the given reference to get the +require+ and +classname+
|
|
67
|
+
# parts of the reference. If there is no +require+ portion, then it will
|
|
68
|
+
# return nil for that part.
|
|
69
|
+
#
|
|
70
|
+
# For example:
|
|
71
|
+
#
|
|
72
|
+
# 'copland/impl/builder/BuilderFactory'
|
|
73
|
+
#
|
|
74
|
+
# would return:
|
|
75
|
+
#
|
|
76
|
+
# [ 'copland/impl/builder', '::BuilderFactory' ]
|
|
77
|
+
#
|
|
78
|
+
# and
|
|
79
|
+
#
|
|
80
|
+
# 'LoggingInterceptor'
|
|
81
|
+
#
|
|
82
|
+
# would return:
|
|
83
|
+
#
|
|
84
|
+
# [ nil, '::LoggingInterceptor' ]
|
|
85
|
+
#
|
|
86
|
+
# Note that '::' is prepended onto the class part, to help ensure that the
|
|
87
|
+
# requested class is always evaluated in the topmost context.
|
|
88
|
+
def get_class_ref_parts( ref )
|
|
89
|
+
if ref =~ %r{^(.+)/([^/]+)$}
|
|
90
|
+
return [ $1, "::" + $2 ]
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
return [ nil, ref ]
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# A convenience function for parsing the reference (using
|
|
97
|
+
# #get_class_ref_parts) and automatically doing the +require+ (if needed).
|
|
98
|
+
# The class that was referred to is returned.
|
|
99
|
+
def get_class( ref )
|
|
100
|
+
require_file, class_name = get_class_ref_parts( ref )
|
|
101
|
+
|
|
102
|
+
require require_file if require_file
|
|
103
|
+
return eval( class_name )
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Translates the given value. If the value is an object that responds the
|
|
107
|
+
# +type_id+ method, then it is translated to another value, based on its
|
|
108
|
+
# +type_id+. Otherwise, the value itself is returned.
|
|
109
|
+
#
|
|
110
|
+
# The values are translated based on this table:
|
|
111
|
+
#
|
|
112
|
+
# service-id::
|
|
113
|
+
# the value is treated as a as service-id, and the service is looked up
|
|
114
|
+
# configuration-id::
|
|
115
|
+
# the value is treated as a as configuration-point id, and the
|
|
116
|
+
# configuration point is looked up and used as the value
|
|
117
|
+
# class:: the value is interpreted as the path to and name of a class.
|
|
118
|
+
# log::
|
|
119
|
+
# the value is ignored, but a new logger is allocated for the service point
|
|
120
|
+
# int:: the value is interpreted as an integer
|
|
121
|
+
# real:: the value is interpreted as a floating point
|
|
122
|
+
# string:: the value is interpreted as a string
|
|
123
|
+
def translate_value( registry, pkg, point, value )
|
|
124
|
+
substitute_symbols( registry, value )
|
|
125
|
+
|
|
126
|
+
if value.is_a?( Array )
|
|
127
|
+
return translate_array( registry, pkg, point, value )
|
|
128
|
+
|
|
129
|
+
elsif value.is_a?( Hash )
|
|
130
|
+
return translate_hash( registry, pkg, point, value )
|
|
131
|
+
|
|
132
|
+
elsif value.respond_to?( :type_id )
|
|
133
|
+
case value.type_id
|
|
134
|
+
when "service"
|
|
135
|
+
return get_possibly_local_service( registry, pkg, value.value )
|
|
136
|
+
when "configuration"
|
|
137
|
+
cfg = get_possibly_local_service(
|
|
138
|
+
registry, pkg, value.value ) do |pkg,id|
|
|
139
|
+
raise PackageNotFound, value.value unless pkg
|
|
140
|
+
pkg.configuration_point id
|
|
141
|
+
end
|
|
142
|
+
raise ConfigurationPointNotFound, value.value unless cfg
|
|
143
|
+
return cfg
|
|
144
|
+
when "class"
|
|
145
|
+
return get_class( value.value )
|
|
146
|
+
when "log"
|
|
147
|
+
return registry.logs.get( point.full_name )
|
|
148
|
+
when "integer"
|
|
149
|
+
return value.value.to_i
|
|
150
|
+
when "real"
|
|
151
|
+
return value.value.to_f
|
|
152
|
+
when "string"
|
|
153
|
+
return value.value.to_s
|
|
154
|
+
when "hash"
|
|
155
|
+
return translate_hash( registry, pkg, point, value.value )
|
|
156
|
+
when "array"
|
|
157
|
+
return translate_array( registry, pkg, point, value.value )
|
|
158
|
+
when "boolean"
|
|
159
|
+
return value.to_s == "true"
|
|
160
|
+
else
|
|
161
|
+
raise Copland::Configuration::ParserError, "unknown value type id: #{value.type_id}"
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
value
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# Translate a hash value.
|
|
169
|
+
def translate_hash( registry, pkg, point, hash )
|
|
170
|
+
new_hash = Hash.new
|
|
171
|
+
hash.each_pair do |k, v|
|
|
172
|
+
new_hash[k] = translate_value( registry, pkg, point, v )
|
|
173
|
+
end
|
|
174
|
+
return new_hash
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
# Translate an array value.
|
|
178
|
+
def translate_array( registry, pkg, point, array )
|
|
179
|
+
array.map { |v| translate_value( registry, pkg, point, v ) }
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# Substitutes all symbols (in place) for the given value. If the value
|
|
183
|
+
# responds to the +type_id+ method, then the result of the +value+ method is
|
|
184
|
+
# used for the substitution (thus, this works on private YAML types).
|
|
185
|
+
def substitute_symbols( registry, value )
|
|
186
|
+
str = ( value.respond_to?( :type_id ) ? value.value : value )
|
|
187
|
+
return unless str.respond_to? :gsub!
|
|
188
|
+
|
|
189
|
+
str.gsub!( SUBSTITUTION_STRING_REGEXP ) do
|
|
190
|
+
symbol = $1
|
|
191
|
+
result = lookup_symbol( registry, symbol )
|
|
192
|
+
if result == NOT_FOUND
|
|
193
|
+
symbol.upcase.gsub( /[^a-zA-Z0-9]/, "_" )
|
|
194
|
+
else
|
|
195
|
+
result
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
# A constant identifying the name of the SymbolSourceManager service.
|
|
201
|
+
DEFAULT_SYMBOL_SOURCE = "copland.SymbolSourceManager"
|
|
202
|
+
|
|
203
|
+
# A constant used to indicate that the symbol was not found
|
|
204
|
+
NOT_FOUND = Object.new
|
|
205
|
+
|
|
206
|
+
# Looks in the SymbolSource service for the given symbol.
|
|
207
|
+
def lookup_symbol( registry, symbol )
|
|
208
|
+
source = registry.service( DEFAULT_SYMBOL_SOURCE )
|
|
209
|
+
source.lookup( symbol, NOT_FOUND )
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
module_function :get_possibly_local_service
|
|
213
|
+
module_function :get_class_ref_parts
|
|
214
|
+
module_function :get_class
|
|
215
|
+
module_function :translate_value
|
|
216
|
+
module_function :translate_hash
|
|
217
|
+
module_function :translate_array
|
|
218
|
+
module_function :substitute_symbols
|
|
219
|
+
module_function :lookup_symbol
|
|
220
|
+
|
|
221
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#--
|
|
2
|
+
# =============================================================================
|
|
3
|
+
# Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
|
|
4
|
+
# All rights reserved.
|
|
5
|
+
#
|
|
6
|
+
# Redistribution and use in source and binary forms, with or without
|
|
7
|
+
# modification, are permitted provided that the following conditions are met:
|
|
8
|
+
#
|
|
9
|
+
# * Redistributions of source code must retain the above copyright notice,
|
|
10
|
+
# this list of conditions and the following disclaimer.
|
|
11
|
+
#
|
|
12
|
+
# * Redistributions in binary form must reproduce the above copyright
|
|
13
|
+
# notice, this list of conditions and the following disclaimer in the
|
|
14
|
+
# documentation and/or other materials provided with the distribution.
|
|
15
|
+
#
|
|
16
|
+
# * The names of its contributors may not be used to endorse or promote
|
|
17
|
+
# products derived from this software without specific prior written
|
|
18
|
+
# permission.
|
|
19
|
+
#
|
|
20
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
21
|
+
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
22
|
+
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
23
|
+
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
24
|
+
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
25
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
26
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
27
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
28
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
29
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
30
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
31
|
+
# =============================================================================
|
|
32
|
+
#++
|
|
33
|
+
|
|
34
|
+
module Copland
|
|
35
|
+
|
|
36
|
+
# A simple module for holding version information about Copland.
|
|
37
|
+
module Version
|
|
38
|
+
|
|
39
|
+
MAJOR = 0
|
|
40
|
+
MINOR = 8
|
|
41
|
+
TINY = 0
|
|
42
|
+
|
|
43
|
+
STRING = [ MAJOR, MINOR, TINY ].join( "." )
|
|
44
|
+
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: list-good
|
|
3
|
+
|
|
4
|
+
configuration-points:
|
|
5
|
+
|
|
6
|
+
ListGood:
|
|
7
|
+
type: list
|
|
8
|
+
schema:
|
|
9
|
+
definition:
|
|
10
|
+
service:
|
|
11
|
+
type: string
|
|
12
|
+
required: true
|
|
13
|
+
before:
|
|
14
|
+
type: array
|
|
15
|
+
after:
|
|
16
|
+
type: array
|
|
17
|
+
|
|
18
|
+
contributions:
|
|
19
|
+
|
|
20
|
+
ListGood:
|
|
21
|
+
- service: some.Service
|
|
22
|
+
- service: another.Service
|
|
23
|
+
before:
|
|
24
|
+
- some.Service
|
|
25
|
+
bogus: value
|
|
26
|
+
- service: last.Service
|
|
27
|
+
before:
|
|
28
|
+
- some.Service
|
|
29
|
+
after:
|
|
30
|
+
- another.Service
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: list-bad-missing
|
|
3
|
+
|
|
4
|
+
configuration-points:
|
|
5
|
+
|
|
6
|
+
ListBadMissing:
|
|
7
|
+
type: list
|
|
8
|
+
schema:
|
|
9
|
+
definition:
|
|
10
|
+
service:
|
|
11
|
+
type: string
|
|
12
|
+
required: true
|
|
13
|
+
before:
|
|
14
|
+
type: array
|
|
15
|
+
after:
|
|
16
|
+
type: array
|
|
17
|
+
|
|
18
|
+
contributions:
|
|
19
|
+
|
|
20
|
+
ListBadMissing:
|
|
21
|
+
- service: some.Service
|
|
22
|
+
- service: another.Service
|
|
23
|
+
before:
|
|
24
|
+
- some.Service
|
|
25
|
+
- before:
|
|
26
|
+
- some.Service
|
|
27
|
+
after:
|
|
28
|
+
- another.Service
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: list-bad-type
|
|
3
|
+
|
|
4
|
+
configuration-points:
|
|
5
|
+
|
|
6
|
+
ListBadType:
|
|
7
|
+
type: list
|
|
8
|
+
schema:
|
|
9
|
+
definition:
|
|
10
|
+
service:
|
|
11
|
+
type: string
|
|
12
|
+
required: true
|
|
13
|
+
before:
|
|
14
|
+
type: array
|
|
15
|
+
after:
|
|
16
|
+
type: array
|
|
17
|
+
|
|
18
|
+
contributions:
|
|
19
|
+
|
|
20
|
+
ListBadType:
|
|
21
|
+
- service: some.Service
|
|
22
|
+
- service: another.Service
|
|
23
|
+
before: some.Service
|
|
24
|
+
- service: last.Sevice
|
|
25
|
+
before:
|
|
26
|
+
- some.Service
|
|
27
|
+
after:
|
|
28
|
+
- another.Service
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: list-good
|
|
3
|
+
|
|
4
|
+
configuration-points:
|
|
5
|
+
|
|
6
|
+
ListGood:
|
|
7
|
+
type: list
|
|
8
|
+
schema:
|
|
9
|
+
definition:
|
|
10
|
+
service:
|
|
11
|
+
type: string
|
|
12
|
+
required: true
|
|
13
|
+
before:
|
|
14
|
+
type: array
|
|
15
|
+
after:
|
|
16
|
+
type: array
|
|
17
|
+
|
|
18
|
+
contributions:
|
|
19
|
+
|
|
20
|
+
ListGood:
|
|
21
|
+
- service: some.Service
|
|
22
|
+
- service: another.Service
|
|
23
|
+
before:
|
|
24
|
+
- some.Service
|
|
25
|
+
- service: last.Service
|
|
26
|
+
before:
|
|
27
|
+
- some.Service
|
|
28
|
+
after:
|
|
29
|
+
- another.Service
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: map-bad-key
|
|
3
|
+
|
|
4
|
+
configuration-points:
|
|
5
|
+
|
|
6
|
+
MapBadKey:
|
|
7
|
+
type: map
|
|
8
|
+
schema:
|
|
9
|
+
definition:
|
|
10
|
+
service:
|
|
11
|
+
type: string
|
|
12
|
+
required: true
|
|
13
|
+
options:
|
|
14
|
+
type: array
|
|
15
|
+
color:
|
|
16
|
+
type: string
|
|
17
|
+
|
|
18
|
+
contributions:
|
|
19
|
+
|
|
20
|
+
MapBadKey:
|
|
21
|
+
service: some.Service
|
|
22
|
+
bogus:
|
|
23
|
+
- opt1: opt2
|
|
24
|
+
- opt3: opt4
|
|
25
|
+
color: blue
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: map-bad-missing
|
|
3
|
+
|
|
4
|
+
configuration-points:
|
|
5
|
+
|
|
6
|
+
MapBadMissing:
|
|
7
|
+
type: map
|
|
8
|
+
schema:
|
|
9
|
+
definition:
|
|
10
|
+
service:
|
|
11
|
+
type: string
|
|
12
|
+
required: true
|
|
13
|
+
options:
|
|
14
|
+
type: array
|
|
15
|
+
color:
|
|
16
|
+
type: string
|
|
17
|
+
|
|
18
|
+
contributions:
|
|
19
|
+
|
|
20
|
+
MapBadMissing:
|
|
21
|
+
options:
|
|
22
|
+
- opt1: opt2
|
|
23
|
+
- opt3: opt4
|
|
24
|
+
color: blue
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: map-bad-type
|
|
3
|
+
|
|
4
|
+
configuration-points:
|
|
5
|
+
|
|
6
|
+
MapBadType:
|
|
7
|
+
type: map
|
|
8
|
+
schema:
|
|
9
|
+
definition:
|
|
10
|
+
service:
|
|
11
|
+
type: string
|
|
12
|
+
required: true
|
|
13
|
+
options:
|
|
14
|
+
type: array
|
|
15
|
+
color:
|
|
16
|
+
type: string
|
|
17
|
+
|
|
18
|
+
contributions:
|
|
19
|
+
|
|
20
|
+
MapBadType:
|
|
21
|
+
service: some.Service
|
|
22
|
+
options: hello
|
|
23
|
+
color: blue
|