carioca 2.0.12 → 2.1.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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/main.yml +7 -1
  3. data/Gemfile +1 -0
  4. data/Gemfile.lock +10 -1
  5. data/LICENSE.txt +21 -0
  6. data/README.md +562 -9
  7. data/Rakefile +5 -0
  8. data/VERSION +1 -1
  9. data/assets/images/carioca_output_emoji_colors.PNG +0 -0
  10. data/assets/images/carioca_output_emoji_no_colors.PNG +0 -0
  11. data/assets/images/carioca_output_no_emoji_colors.PNG +0 -0
  12. data/assets/images/carioca_output_no_emoji_no_colors.PNG +0 -0
  13. data/assets/images/description_carioca.png +0 -0
  14. data/assets/images/description_configuration_carioca.png +0 -0
  15. data/assets/images/description_container_carioca.png +0 -0
  16. data/assets/images/description_registry_carioca.png +0 -0
  17. data/assets/images/description_services_carioca.png +0 -0
  18. data/assets/images/logo_carioca_full_large.png +0 -0
  19. data/assets/images/logo_carioca_full_small.png +0 -0
  20. data/assets/images/logo_carioca_light_small.png +0 -0
  21. data/carioca.gemspec +2 -0
  22. data/config/locales/en.yml +34 -0
  23. data/config/locales/fr.yml +35 -1
  24. data/lib/carioca/configuration.rb +6 -2
  25. data/lib/carioca/constants.rb +38 -1
  26. data/lib/carioca/dependencies.rb +13 -0
  27. data/lib/carioca/services/config.rb +1 -1
  28. data/lib/carioca/services/finisher.rb +121 -0
  29. data/lib/carioca/services/sanitycheck.rb +140 -0
  30. data/lib/carioca/services/securestore.rb +81 -0
  31. data/lib/carioca/services/setup.rb +83 -0
  32. data/lib/carioca/services/toolbox.rb +104 -0
  33. data/samples/config/carioca.registry +0 -15
  34. data/samples/config/locales/en.yml +2 -1
  35. data/samples/config/settings.yml +29 -6
  36. data/samples/test.rb +111 -11
  37. metadata +48 -2
data/README.md CHANGED
@@ -22,8 +22,8 @@ Carioca 2: is a complete rewrite who provide a full IoC/DI light Container and a
22
22
  <noscript><a href="https://liberapay.com/ruydiaz/donate"><img alt="Donate using Liberapay" src="https://liberapay.com/assets/widgets/donate.svg"></a></noscript>
23
23
 
24
24
 
25
- ![Sc4ry logo](assets/images/logo_carioca.png)
26
- _Container And Registry with Inversion Of Control for your Applications__
25
+ ![Carioca logo](assets/images/logo_carioca_full_small.png)
26
+ _Container And Registry with Inversion Of Control for your Applications_
27
27
 
28
28
 
29
29
  ## Installation
@@ -32,11 +32,28 @@ Install it yourself as:
32
32
 
33
33
  $ gem install carioca
34
34
 
35
+ ## Principe
36
+
37
+ ![Carioca synoptic](assets/images/description_carioca.png)
38
+
35
39
  ## Usage
36
40
 
37
41
 
38
42
  ### Basic usage
39
43
 
44
+
45
+
46
+ #### Principe
47
+
48
+ ![Carioca synoptic](assets/images/description_container_carioca.png)
49
+
50
+ * Carioca come with a Container Class Template
51
+ * the Container automatically inject :logger, :i18n and a :configuration service (explain in detail after)
52
+ * the Container provide a class method macro :inject
53
+ * this macro give a way to use other services defined in the registry file (service could be register inline, presented after)
54
+
55
+ ### Beginning usecase new gem
56
+
40
57
  Create you own gem :
41
58
 
42
59
  $ bundle gem yourgem
@@ -53,7 +70,7 @@ and after :
53
70
  $ bundle add carioca
54
71
  $ mkdir -p config/locales
55
72
 
56
- Edit the Rakefil, and add the following line :
73
+ Edit the Rakefile, and add the following line :
57
74
 
58
75
  ```ruby
59
76
  require "carioca/rake/manage"
@@ -156,7 +173,7 @@ yourgem_cmd = Yourgem::YourgemCMD::new
156
173
  yourgem_cmd.test
157
174
  ```
158
175
 
159
- After this, don't forget to stage new files, and you could build & install the gem before running your new command for the first time :
176
+ **Note** : After this, don't forget to stage new files, and you could build & install the gem before running your new command for the first time :
160
177
 
161
178
  $ git add config/ exe/
162
179
  $ rake install && yourgem_cmd
@@ -178,6 +195,10 @@ After this, don't forget to stage new files, and you could build & install the g
178
195
  D, [2022-03-07T01:06:20.338381 #21513] DEBUG -- Carioca: Starting service uuid
179
196
  W, [2022-03-07T01:06:20.353142 #21513] WARN -- Sample::YourGemCMD: Give me an UUID : 574cc860-7fd8-013a-2323-1e00870a7189
180
197
 
198
+
199
+
200
+ ## Builtins services
201
+
181
202
  You could see, somme interesting things :
182
203
  * Carioca have an internationalisation service (this service will be explain in detail after):
183
204
  * default configured on :en locale
@@ -185,12 +206,544 @@ You could see, somme interesting things :
185
206
  * Carioca have a builtin logger service using regular Logger from Stdlib (also explain in detail in this document)
186
207
  * default logging on STDOUT, but could be redirect in the configure bloc
187
208
  * Carioca give us some usefull traces in debug
188
- * Carioca come with a Container Class Template
189
- * the Container automatically inject :logger, :i18n and a :configuration service (explain in detail after)
190
- * the Container provide a class method macro :inject
191
- * this macro give a way to use other services defined in the registry file (service could be register inline, presented after)
209
+ * Carioca provide a complete solution to manage CLI output.
210
+
211
+ ### Description Registry
212
+
213
+
214
+ ![Carioca synoptic](assets/images/description_registry_carioca.png)
215
+
216
+ ### Description of services
217
+
218
+ ![Carioca synoptic](assets/images/description_services_carioca.png)
219
+
220
+ ### Generic Usage
221
+
222
+ #### Usage with the Carioca::Container template class
223
+
224
+ Considering an existing service named : my_service with a unique method named a_method
225
+
226
+ ```ruby
227
+
228
+ # frozen_string_literal: true
229
+
230
+ require 'carioca'
231
+
232
+ class MyObject < Carioca::Container
233
+
234
+ inject service: my_service
235
+
236
+ def initialize
237
+ my_service.a_method
238
+ end
239
+
240
+
241
+
242
+ my_service.a_method
243
+
244
+ end
245
+
246
+ end
247
+
248
+ ```
249
+ the mAcro inject is already mixed in Carioca::Container
250
+
251
+ **Note** : Service cloud be used on class method wrapping and instance mecthode.
252
+
253
+ #### Usage without Carioca::Container heritage
254
+
255
+ Considering an existing service named : my_service with a unique method named a_method
256
+
257
+ ```ruby
258
+
259
+ require 'carioca'
260
+
261
+ class MyObject
262
+
263
+ extend Carioca::Injector
264
+ inject service: my_service
265
+
266
+ def initialize
267
+ my_service.a_method
268
+ end
269
+
270
+ my_service.a_method
271
+
272
+ end
273
+
274
+ end
275
+
276
+ ```
277
+
278
+ ### Service I18n
279
+
280
+ the I18n is loaded by default with Carioca::Container, and loaded as dependency when using others builtin services.
281
+ It's a fondation service for Carioca.
282
+
283
+ For this exemple, we show you an explicit inject of I18n
284
+
285
+ **Note** : I18n povide internationalisation for Carioca itself AND for self made services and more
286
+
287
+ **Note** : You could create all your locales files for any languages speciif to your application :
288
+ - in $PWD/config/locales/*.yml
289
+ - in $GEMPATH/config/locales/*.yml
290
+
291
+ **Note** : If you create locales in other languages than :en or :fr (atcually the 2 supported by Carioca), for internals output (Carioca itself logs, outputs or debugs), carioca fallback on default locales defined in configuration (default :en).
292
+
293
+
294
+ Considering a locale file en.yml in config/locales/ like :
295
+
296
+ ```yaml
297
+
298
+ en:
299
+ sample:
300
+ string: "Display %{myvar}"
301
+
302
+
303
+ ```
304
+
305
+ with the current code :
306
+
307
+ ```ruby
308
+
309
+ require 'carioca'
310
+
311
+ class MyObject
312
+
313
+ extend Carioca::Injector
314
+ inject service: I18n
315
+
316
+ def initialize
317
+ puts i18n.t('sample.string', myvar: 'test')
318
+ end
319
+
320
+ end
321
+
322
+ end
323
+
324
+ ```
325
+
326
+ output :
327
+
328
+ Display test
329
+
330
+ ### Service Logger
331
+
332
+ **Note** : Logger depends on service I18n
333
+ #### Logging simply
334
+
335
+ ```ruby
336
+
337
+ require 'carioca'
338
+
339
+ class MyObject
340
+
341
+ extend Carioca::Injector
342
+ inject service: logger
343
+
344
+ def initialize
345
+ logger.info(self.to_s) { "my log" }
346
+ end
347
+
348
+ end
349
+
350
+ end
351
+
352
+ ```
353
+
354
+
355
+ #### Changing log strategy
356
+
357
+
358
+ ```ruby
359
+ require 'rubygems'
360
+ require 'carioca'
361
+
362
+ Carioca::Registry.configure do |spec|
363
+ spec.debug = false
364
+ spec.log_file = '/tmp/test_carioca.log' # a different log path (default STDOUT)
365
+ spec.log_level = :debug # log level base (default :info)
366
+ spec.log_target = '::Logger::new(STDOUT)' # to change completly the log object
367
+ end
368
+ ```
369
+
370
+
371
+ for more information on ruby Stdlib Logger, see :
372
+ https://ruby-doc.org/3.2.2/stdlibs/logger/Logger.html
373
+
374
+
375
+ **Note** : you could totally subsitute Logger with your own logger, by the configuration, or the logger of an other service.
376
+ BUT it's necessary to be compatible with standard Logger facilities :
377
+
378
+ ```ruby
379
+ logger.debug('Maximal debugging info')
380
+ logger.info('Non-error information')
381
+ logger.warn('Non-error warning')
382
+ logger.error('Non-fatal error')
383
+ logger.fatal('Fatal error')
384
+ logger.unknown('Most severe')
385
+ ```
386
+
387
+ **Note** : the output service, detailled after could work in dual mode STDXXX + logger service.
388
+
389
+ ### Service Configuration
390
+
391
+
392
+ #### Configuration
393
+
394
+ Configuration made with Registry.configure :
395
+
396
+ ```ruby
397
+ Carioca::Registry.configure do |spec|
398
+ spec.config_file = './config/settings.yml'
399
+ spec.config_root = :myappli
400
+ spec.environment = :development
401
+ end
402
+ ```
403
+
404
+ * config_file : path to the configuraion file (YAML format)
405
+ * config_root : Root of the YAML structure
406
+ * environment : current evt used for override default values
407
+
408
+ #### Configuration file format
409
+
410
+ **Note** :This file is corresponding with the presented configuration
411
+
412
+ ```yaml
413
+ ---
414
+ :myappli:
415
+ :production: {}
416
+ :staging:
417
+ :onstaging: staging
418
+ :test: {}
419
+ :development:
420
+ :ondev: test
421
+ :treeA:
422
+ :trunk1:
423
+ :branch1: leaf1
424
+ :trunk2:
425
+ :branch3: leaf3
426
+ :branch4: leaf4
427
+ :branch5: [ "val1","val2","val3" ]
428
+ :default:
429
+ :default_value: 'value'
430
+ :treeA:
431
+ :trunk1:
432
+ :branch2: leaf2
433
+ :trunk2:
434
+ :branch5: ["value"]
435
+ ```
436
+
437
+ #### Access to Configuration
438
+
439
+ ```ruby
440
+ config = Carioca::Registry.get.get_service name: :configuration
441
+ pp config.settings
442
+ ```
443
+
444
+ **Note** : You could access it as usuallly, with inject, from Carioca::Container fork or mixin of Carioca::Injector in your own class.
445
+
446
+ output :
447
+
448
+ ```
449
+ {:default_value=>"value",
450
+ :treeA=>
451
+ {:trunk1=>{:branch2=>"leaf2", :branch1=>"leaf1"},
452
+ :trunk2=>
453
+ {:branch5=>["value", "val1", "val2", "val3"],
454
+ :branch3=>"leaf3",
455
+ :branch4=>"leaf4"}},
456
+ :ondev=>"test"}
457
+ ```
458
+
459
+ **Note** : you could see the result configuration is a merge of :development path ovec :default
460
+
461
+
462
+ #### R/W on runtime
463
+
464
+ **Note** : you could override value in runtime
465
+
466
+ ```ruby
467
+ config = Carioca::Registry.get.get_service name: :configuration
468
+ config.settings.newkey = 'value'
469
+ ```
470
+
471
+
472
+
473
+ #### Princpe
474
+
475
+ ![Carioca synoptic](assets/images/description_configuration_carioca.png)
476
+
477
+
478
+ ### Service Output
479
+
480
+
481
+ #### Configuration
482
+
483
+ Configuration made with Registry.configure :
484
+
485
+ ```ruby
486
+ Carioca::Registry.configure do |spec|
487
+ spec.debug = false
488
+ spec.log_file = '/tmp/test.rge'
489
+ spec.log_level = :debug
490
+ spec.output_mode = :dual
491
+ spec.output_emoji = true
492
+ spec.output_colors = true
493
+ spec.output_target = STDOUT
494
+
495
+ end
496
+ ```
497
+
498
+ * output_mode : choose if you want to display to output_target OR/AND Logs, mode are : :mono, dual, log
499
+ * output_emoji : display levels or alias as UTF8 EMOJI
500
+ * output_colors : display output in colors
501
+ * output_target : change output STDOUT or SDTERR
502
+
503
+ **Note** : all of this have R/W accessors on output service
504
+
505
+ #### Usage
506
+
507
+
508
+ This example show a test script for displaying all type of output
509
+
510
+ ```ruby
511
+ output = Carioca::Registry.get.get_service name: :output
512
+
513
+ cycle = %i[unknown fatal error ko warn info item arrow scheduling trigger sending calling receive
514
+ ok success debug flat]
515
+ cycle.each do |verb|
516
+ output.send verb, verb.to_s
517
+ end
518
+ output.color = false
519
+ cycle.each do |verb|
520
+ output.send verb, verb.to_s
521
+ end
522
+ output.emoji = false
523
+ cycle.each do |verb|
524
+ output.send verb, verb.to_s
525
+ end
526
+ output.color = true
527
+ cycle.each do |verb|
528
+ output.send verb, verb.to_s
529
+ end
530
+
531
+ ```
532
+ **Note** : list of ordered levels or alias : **unknown fatal error ko warn info item arrow scheduling trigger sending calling receive ok success debug flat**
533
+
534
+ Output :
535
+
536
+ * Without colors nor Emojies
537
+
538
+ ![Carioca output](assets/images/carioca_output_no_emoji_no_colors.PNG)
539
+
540
+ * Without colors but with Emojies
541
+
542
+ ![Carioca output](assets/images/carioca_output_emoji_no_colors.PNG)
543
+
544
+ * With colors but no Emojies
545
+
546
+ ![Carioca output](assets/images/carioca_output_no_emoji_colors.PNG)
547
+
548
+ * With colors and Emojies
549
+
550
+ ![Carioca output](assets/images/carioca_output_emoji_colors)
551
+
552
+ ### Service Debug
553
+
554
+
555
+ For this example, we use a internal service defined programmaticalu on runtime, (we see it more in detail in the chapter dedicated to the registry)
556
+ At the beginning of you code, just add :
557
+
558
+ ```ruby
559
+ class MyService
560
+ extend Carioca::Injector
561
+ inject service: :logger
562
+
563
+ def initialize
564
+ logger.warn(self.class.to_s) { 'Init service' }
565
+ end
566
+
567
+ def hello
568
+ logger.info(self.class.to_s) { 'Hello World' }
569
+ end
570
+
571
+ def method_test(_titi, tutu:)
572
+ @tutu = tutu
573
+ yield if block_given?
574
+ "result #{@tutu}"
575
+ end
576
+ end
577
+
578
+ spec = {
579
+ service: 'MyService::new',
580
+ type: :internal
581
+ }
582
+
583
+ Carioca::Registry.init.add service: :myservice, definition: spec
584
+
585
+ ```
586
+
587
+ With a configuration like :
588
+
589
+
590
+ ```ruby
591
+ Carioca::Registry.configure do |spec|
592
+ spec.debug = true
593
+ spec.log_level = :debug
594
+ spec.output_emoji = true
595
+ spec.output_colors = false
596
+ spec.debugger_tracer = :output
597
+ end
598
+
599
+ ```
600
+
601
+
602
+ To help debug with services, Carioca come with a proxy class debugger :
603
+
604
+ ```ruby
605
+ config = Carioca::Registry.get.get_service name: :debugger
606
+ proxy = debugger.get service: :myservice
607
+ proxy.method_test 'param', tutu: 'keyword' do
608
+ puts 'titi'
609
+ end
610
+ ```
611
+
612
+ output :
613
+
614
+ ```
615
+ 🐛 BEGIN CALL for service #<MyService:0x00005635ed283290>
616
+ 🐛 Method called: method_test
617
+ 🐛 args : param
618
+ 🐛 keywords : {:tutu=>"keyword"}
619
+ 🐛 block given
620
+ titi
621
+ 🐛 => method returned: result keyword
622
+ 🐛 END CALL
623
+ ```
624
+
625
+ ## Carioca Configuration
626
+
627
+ Carioca use a bloc given mapping object of to configure like :
628
+
629
+ ```ruby
630
+ Carioca::Registry.configure do |spec|
631
+ spec.xxxxx = <SOMETHING>
632
+ ...
633
+ end
634
+
635
+ ```
636
+ ### list of accessors over the spec object :
637
+
638
+ ```ruby
639
+ attr_accessor :filename, :name, :builtins, :log_target, :default_locale, :locales_load_path, :debugger_tracer,
640
+ :config_file, :config_root, :environment, :supported_environments, :output_mode, :log_level, :output_target
641
+ attr_writer :init_from_file, :output_colors, :output_emoji
642
+ attr_reader :log_file, :locales_availables, :debug
643
+
644
+ ```
645
+
646
+ ### Publique usage (with default values and possibles values)
647
+
648
+ ```ruby
649
+ Carioca::Registry.configure do |spec|
650
+
651
+ spec.filename = './config/carioca.registry' # the carioca registry of services configuration
652
+ spec.name = 'Carioca' # the name of the application
653
+ spec.debug = false # activate debug, display debug Carioca message
654
+ spec.init_from_file = true # use the registry file to init services : (spec.filename)
655
+ spec.log_file = '' # path to a log file for carioca logger service
656
+ spec.config_file = './config/settings.yml' # path to the YAMl COnfiguration file for :configuration Carioca service
657
+ spec.config_root = :carioca # the config root in the YAMl COnfiguration file for :configuration Carioca service
658
+ spec.environment = :development # the current environment running with Carioca
659
+ spec.default_locale = :en # the default locales Carioca fot I18n Carioca Service
660
+ spec.log_level = :info # the current log level (see logger ) for Carioca in :debug,:info,:warn,:error,:fatal,:unknown
661
+ spec.output_mode = :mono # the current output mode in :mono, :dual, :log (see Carioca Service Output)
662
+ spec.output_emoji = true # the current output status for emoji (see Carioca Service Output)
663
+ spec.output_target = STDOUT # the current output target STDOUT or STDERR (see Carioca Service Output)
664
+ spec.output_colors = true # the current output status for colors (see Carioca Service Output)
665
+ spec.locales_load_path << Dir["#{File.expand_path('./config/locales')}/*.yml"]
666
+ spec.debugger_tracer = :output # the Debbugger service output in #log , :output
667
+
668
+ end
669
+ ```
670
+ ## Registry access and methods
671
+
672
+ ### Init or getting Registry
673
+
674
+ Carioca::Registry is a Singleton Object
675
+
676
+ You cloud init or get it by #get, #instance or #init, like :
677
+
678
+ ```ruby
679
+ registry = Carioca::Registry.init
680
+ registry = Carioca::Registry.instance
681
+ registry = Carioca::Registry.get
682
+ ```
683
+
684
+ ### Direct access to Registry and getting service Without Injector or Carioca::Container
685
+
686
+ Example : for output service
687
+
688
+ ```ruby
689
+ output = Carioca::Registry.get.get_service name: :output
690
+ ```
691
+
692
+
693
+ ### Adding a service programatically
694
+
695
+ To add a service, you could insert it in the registry file (before run) or adding it programatically
696
+
697
+ ```ruby
698
+ class MyService
699
+ extend Carioca::Injector
700
+ inject service: :logger
701
+
702
+ def initialize
703
+ logger.warn(self.class.to_s) { 'Init service' }
704
+ end
705
+
706
+ def hello
707
+ logger.info(self.class.to_s) { 'Hello World' }
708
+ end
709
+
710
+ def method_test(_titi, tutu:)
711
+ @tutu = tutu
712
+ yield if block_given?
713
+ "result #{@tutu}"
714
+ end
715
+ end
716
+
717
+ spec = {
718
+ service: 'MyService::new',
719
+ type: :internal
720
+ }
721
+
722
+ Carioca::Registry.init.add service: :myservice, definition: spec
723
+
724
+ ```
725
+
726
+
727
+ ### Decription of type of Service
728
+
729
+
730
+ ```ruby
731
+ SERVICES_MANDATORY_SPECS = { type: Symbol, service: String }.freeze
732
+ SERVICES_FULL_LIST_SPECS = SERVICES_MANDATORY_SPECS.merge({ depends: Array, description: String,
733
+ resource: String })
734
+ ```
735
+
736
+
737
+ * :type must be : :gem, :file, :stdlib all engage requirement of the resource field, tje last :internal is usable if the code is internal in your application.
738
+
739
+ * :service : is the Ruby code to access to Class for class methods service usage or object instance
740
+ example : MYCLASS or MyClass::new(params)
741
+
742
+ * :resource is respectively a name of a gem, an absolut path of a ruby file, the name of a Ruby Stdlib correspondingly to :type
743
+ * depends : is a list of requiered services for this service. (all services in depends are load before getting the wanted service (from builtin and in registry file or added at runtime ).
744
+ * Description is not mandatory
745
+
192
746
 
193
- ## A step further
194
747
 
195
748
 
196
749
  ## Development
data/Rakefile CHANGED
@@ -44,3 +44,8 @@ namespace :yardoc do
44
44
  end
45
45
  end
46
46
  task clobber: 'yardoc:clobber'
47
+
48
+ desc "Run CVE security audit over bundle"
49
+ task :audit do
50
+ system('bundle audit')
51
+ end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.12
1
+ 2.1.0
data/carioca.gemspec CHANGED
@@ -41,6 +41,8 @@ Gem::Specification.new do |spec|
41
41
  spec.add_development_dependency 'rubocop', '~> 1.32'
42
42
  spec.add_development_dependency 'yard', '~> 0.9.27'
43
43
  spec.add_development_dependency 'yard-rspec', '~> 0.1'
44
+ spec.add_development_dependency "bundle-audit", "~> 0.1.0"
44
45
  spec.metadata['rubygems_mfa_required'] = 'false'
45
46
  spec.add_dependency 'version', '~> 1.1'
47
+ spec.add_runtime_dependency 'ps-ruby','~> 0.0.4'
46
48
  end
@@ -21,3 +21,37 @@ en:
21
21
  output:
22
22
  load:
23
23
  context: "Output service initialized in mode : %{confset}"
24
+ finisher:
25
+ messages:
26
+ not_root: "This operation need to be run as root (use sudo or rvmsudo)"
27
+ options_incompatibility: "Options incompatibility"
28
+ service_dependence_missing: "Appifier Service dependence missing"
29
+ config_required: "Specific configuration required"
30
+ setup_error: "Setup terminated unsuccessfully"
31
+ setup_success: "Setup terminated successfully"
32
+ sanitycheck_error: "Sanitycheck terminated unsuccessfully"
33
+ sanitycheck_success: "Sanitycheck terminated successfully"
34
+ configuration_error: "Configuration Error"
35
+ success_exit: "Operation sucessfull"
36
+ error_exit: "Operation failure"
37
+ interrupt: "User operation interrupted"
38
+ not_found: "Object not found"
39
+ already_exist: "Object already exist"
40
+ status_ok: "Status OK"
41
+ status_ko: "Status KO"
42
+ bad_usage: "Case must be a return or an exit"
43
+ setup:
44
+ error: "Setup operation failed"
45
+ execute:
46
+ start: "Begining setup :"
47
+ install: "Installation of file %{file}"
48
+ mkdir: "Creation of folder %{path}"
49
+ ln: "Creation of symlink %{target} -> %{source}"
50
+ sanitycheck:
51
+ error: "Sanitycheck stop on Configuration error"
52
+ success: "Sanitycheck finish without errors"
53
+ failure: "Sanitycheck finish with errors"
54
+ run:
55
+ start: "Begining sanitycheck :"
56
+ ok: "Testcase %{testcase} on %{name} is ok"
57
+ ko: "Testcase %{testcase} on %{name} is ok, problem(s) : %{pbm}"