Class: SciYAG::Backends::Descriptions::Description
- Inherits:
-
Object
- Object
- SciYAG::Backends::Descriptions::Description
- Defined in:
- lib/SciYAG/Backends/descriptions.rb
Overview
The base class for all descriptions. A description describes a “plugin” class. It has the following attributes:
-
the basic name, code-like, which is used mainly for internal purposes;
-
the long name, which has to be translated
-
the description itself, some small text describing the nature of the plugin
-
a list of parameters the plugin can take, along with their description. These are Parameter .
Direct Known Subclasses
Instance Attribute Summary collapse
-
#class ⇒ Object
the class to instantiate.
-
#description ⇒ Object
(text) description !.
-
#init_param_list ⇒ Object
The list of parameters that have to be fed into the initialize function.
-
#long_name ⇒ Object
Long name, the one for public display.
-
#name ⇒ Object
The name of the backend (short, code-like).
-
#param_hash ⇒ Object
readonly
The hash holding parameters.
-
#param_list ⇒ Object
readonly
The parameter list.
Instance Method Summary collapse
- #add_param(param) ⇒ Object
-
#fill_parser(instance, parser, uniquify = true) ⇒ Object
Fills an OptionParser with all the parameters the Backend should be able to take.
-
#init_params(*args) ⇒ Object
Pushes the names of the params onto @init_list_param_list.
-
#initialize(cls, name, long_name, description = "") ⇒ Description
constructor
Initializes a Description.
-
#instantiate(*args) ⇒ Object
Creates an instance of the class, forwards parameters to the initialize method.
- #param_set(i, p) ⇒ Object
-
#parser_banner(instance, parser) ⇒ Object
The parsers’s banner.
-
#parser_instantiate_option(parser, receiver, result, prefix = "") ⇒ Object
Creates a parser entry in
parser
that creates a new instance of the description’s class and feed it to theresult
method of thereceiver
. -
#parser_options(instance, parser, uniquify = true) ⇒ Object
Fills a parser with options (and only that).
-
#prepare_instantiate_arglist(*args) ⇒ Object
Prepares the argument list for instantiate based on init_param_list and the text arguments given:.
Constructor Details
#initialize(cls, name, long_name, description = "") ⇒ Description
Initializes a Description
185 186 187 188 189 190 191 192 193 |
# File 'lib/SciYAG/Backends/descriptions.rb', line 185 def initialize(cls, name, long_name, description = "") @class = cls @name = name @long_name = long_name @description = description @param_list = [] @param_hash = {} @init_param_list = [] end |
Instance Attribute Details
#class ⇒ Object
the class to instantiate.
162 163 164 |
# File 'lib/SciYAG/Backends/descriptions.rb', line 162 def class @class end |
#description ⇒ Object
(text) description !
168 169 170 |
# File 'lib/SciYAG/Backends/descriptions.rb', line 168 def description @description end |
#init_param_list ⇒ Object
The list of parameters that have to be fed into the initialize function.
181 182 183 |
# File 'lib/SciYAG/Backends/descriptions.rb', line 181 def init_param_list @init_param_list end |
#long_name ⇒ Object
Long name, the one for public display
171 172 173 |
# File 'lib/SciYAG/Backends/descriptions.rb', line 171 def long_name @long_name end |
#name ⇒ Object
The name of the backend (short, code-like)
165 166 167 |
# File 'lib/SciYAG/Backends/descriptions.rb', line 165 def name @name end |
#param_hash ⇒ Object (readonly)
The hash holding parameters. Useful mainly for subclasses
174 175 176 |
# File 'lib/SciYAG/Backends/descriptions.rb', line 174 def param_hash @param_hash end |
#param_list ⇒ Object (readonly)
The parameter list
177 178 179 |
# File 'lib/SciYAG/Backends/descriptions.rb', line 177 def param_list @param_list end |
Instance Method Details
#add_param(param) ⇒ Object
211 212 213 214 215 216 217 218 |
# File 'lib/SciYAG/Backends/descriptions.rb', line 211 def add_param(param) @param_list << param # Three different cross-linkings. @param_hash[param.reader_symbol] = param @param_hash[param.writer_symbol] = param @param_hash[param.name] = param end |
#fill_parser(instance, parser, uniquify = true) ⇒ Object
Fills an OptionParser with all the parameters the Backend should be able to take.
235 236 237 238 |
# File 'lib/SciYAG/Backends/descriptions.rb', line 235 def fill_parser(instance, parser, uniquify = true) (instance, parser) (instance, parser, uniquify) end |
#init_params(*args) ⇒ Object
Pushes the names of the params onto @init_list_param_list. Arguments have to be strings.
228 229 230 |
# File 'lib/SciYAG/Backends/descriptions.rb', line 228 def init_params(*args) @init_param_list += args end |
#instantiate(*args) ⇒ Object
Creates an instance of the class, forwards parameters to the initialize method.
197 198 199 |
# File 'lib/SciYAG/Backends/descriptions.rb', line 197 def instantiate(*args) return @class.new(*args) end |
#param_set(i, p) ⇒ Object
220 221 222 223 224 |
# File 'lib/SciYAG/Backends/descriptions.rb', line 220 def param_set(i, p) param = p instance = i return proc { |x| param.set(instance,x) } end |
#parser_banner(instance, parser) ⇒ Object
The parsers’s banner.
256 257 258 |
# File 'lib/SciYAG/Backends/descriptions.rb', line 256 def (instance, parser) # nothing by default end |
#parser_instantiate_option(parser, receiver, result, prefix = "") ⇒ Object
Creates a parser entry in parser
that creates a new instance of the description’s class and feed it to the result
method of the receiver
. You can specify an optionnal prefix
for the option’s name.
264 265 266 267 268 269 270 271 272 273 274 275 |
# File 'lib/SciYAG/Backends/descriptions.rb', line 264 def parser_instantiate_option(parser, receiver, result, prefix = "") op_name = "--#{prefix}#{@name}" for arg in @init_param_list op_name += " " + arg.name.upcase end # cool ! parser.on(op_name, @description) do |*a| b = prepare_instantiate_arglist(*a) instance = instantiate(*b) receiver.send(result, instance) end end |
#parser_options(instance, parser, uniquify = true) ⇒ Object
Fills a parser with options (and only that)
241 242 243 244 245 246 247 248 249 250 251 252 253 |
# File 'lib/SciYAG/Backends/descriptions.rb', line 241 def (instance, parser, uniquify = true) raise "The instance is not of the right class" unless instance.is_a? @class for param in @param_list if uniquify param_name = "--#{@name}-#{param.name} #{param.name.upcase}" else param_name = "--#{param.name} #{param.name.upcase}" end parser.on(param_name, param.description, param_set(instance, param)) end end |
#prepare_instantiate_arglist(*args) ⇒ Object
Prepares the argument list for instantiate based on init_param_list and the text arguments given:
203 204 205 206 207 208 209 |
# File 'lib/SciYAG/Backends/descriptions.rb', line 203 def prepare_instantiate_arglist(*args) target = [] for pars in @init_param_list target << pars.value(args.shift) end return target end |