clir 0.22.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 04a1f95d975d1d275d120e81fb1a3226e2d8ff93807ad70578e6ac1171c6d525
4
+ data.tar.gz: 2f16578c4588470f8d4e5ad49971febf3a50201c6fd874b5986b65f53c85fcdb
5
+ SHA512:
6
+ metadata.gz: cd859cd9d54f2d689939786042943cd65a39ee476964e3d089bef9a5c9468fb3b508ad7fb335ad7e76899745ff19c172de2b302dfffd032521aecc449debd299
7
+ data.tar.gz: 7d1a4acba85f7d6cb7197b6b7b98407b8c6280091a867017afc54fe4460fb43b04e138b407773c230ac7ff031e5dc60d09999030485e04aed7b80be81fd80e4f
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ ---
2
+ language: ruby
3
+ cache: bundler
4
+ rvm:
5
+ - 2.7.3
6
+ before_install: gem install bundler -v 2.1.4
data/CHANGELOG.md ADDED
@@ -0,0 +1,229 @@
1
+ * 022.0
2
+
3
+ - Extension pour la clas CSV (lecture en arrière)
4
+
5
+ * 0.19.0
6
+
7
+ - Amélioration du manuel
8
+
9
+ * 0.18.2
10
+
11
+ - petite correction pour rubycop…
12
+
13
+ * 0.18.1
14
+
15
+ - mkdir_p alias de mkdir
16
+ (à cause des changements de FileUtils…)
17
+
18
+ * 0.18.0
19
+
20
+ - Add File#append method
21
+
22
+ * 0.17.2
23
+
24
+ - Add human_date/date_humaine method
25
+
26
+ * 0.17.1
27
+
28
+ - Add File#affix method
29
+
30
+ * 0.16.1
31
+
32
+ - Fixed bug String#camelize (frozen string)
33
+
34
+ * 0.16.0
35
+
36
+ - Ajout du gem FileUtils
37
+
38
+ * 0.15.2
39
+
40
+ - Minibug sur @params fixed
41
+
42
+ * 0.15.1
43
+
44
+ - String#max and String#max!
45
+
46
+ * 0.14.4
47
+
48
+ - :sentence => :verbal in formate_date
49
+
50
+ * 0.14.3
51
+
52
+ - Cosmetic
53
+
54
+ * 0.14.2
55
+
56
+ - Improvement of formate_date
57
+
58
+ * 0.14.1
59
+
60
+ - Improvement of formate_date
61
+
62
+ * 0.14.0
63
+
64
+ - formate_date
65
+ - date_from
66
+ - date_for_file
67
+
68
+ * 0.13.0
69
+
70
+ - String#cjust
71
+ - Alignment in table columns
72
+
73
+ * 0.11.2
74
+
75
+ - Col max width in Clir::Table
76
+
77
+ * 0.11.1
78
+
79
+ - Cosmetic for Clir::Table
80
+
81
+ * 0.11.0
82
+
83
+ - Utils method for number (devise methods)
84
+ - Powerfull Clir::Table
85
+
86
+ * 0.10.0
87
+
88
+ - Date utils methods
89
+ - Yard for documentation
90
+
91
+ * 0.9.0
92
+
93
+ - Methods semaine, jour, heure, minute (et pluriel + anglaises)
94
+
95
+ * 0.8.0
96
+
97
+ - Method camelize
98
+ - Method decamelize
99
+ - Method titleize
100
+
101
+ * 0.7.1
102
+
103
+ - Add colors (backgrounds and foregrounds)
104
+
105
+ * 0.7.0
106
+
107
+ - Add File extension file
108
+ - New method: File.tail
109
+
110
+ * 0.6.3
111
+
112
+ - Fixed bug in TTY::MyPrompt (2)
113
+
114
+ * 0.6.2
115
+
116
+ - Fixed bug in TTY::MyPrompt
117
+
118
+ * 0.6.1
119
+
120
+ - Marker for TTY::MyPrompt to be able to keep interactive mode
121
+ - during the tests.
122
+ - Methods TTY::MyPrompt::set_mode_interactive, TTY::MyPrompt::set_mode_inputs, TTY::MyPrompt::unset_mode_interactive
123
+
124
+ * 0.6.0
125
+
126
+ - Method CLI::set_tests_on_with_marker
127
+ - Method CLI::unset_tests_on_with_marker
128
+ - To universalize the test state.
129
+
130
+ * 0.5.1
131
+
132
+ - Method TTY::MyPrompt.set_mode_inputs (alias)
133
+
134
+ * 0.5.0
135
+
136
+ - Enable to toggle interactive/inputs mode in TTY::MyPrompt
137
+ - current instance. ((efficient))
138
+
139
+ * 0.4.9
140
+
141
+ - Enable to toggle interactive/inputs mode in TTY::MyPrompt
142
+ - current instance. ((inefficient))
143
+
144
+ * 0.4.8
145
+
146
+ - Environment constant 'NO_CLI_TEST_INPUTS' to use TTY-Prompt in
147
+ - regular mode.
148
+
149
+ * 0.4.7
150
+
151
+ - Options :template pour formate_date
152
+
153
+ * 0.4.6
154
+
155
+ - Ajout de la méthode Q.default_name_for_value
156
+
157
+ * 0.4.5
158
+
159
+ - Ajout de la méthode String#patronize
160
+
161
+ * 0.4.4
162
+
163
+ - Ajout de la méthode String#normalize[d]
164
+
165
+ * 0.4.3
166
+
167
+ - Ajout de la méthode round
168
+
169
+ * 0.4.2
170
+
171
+ - Ajout de la méthode String#numeric?
172
+
173
+ * 0.4.1
174
+
175
+ - Ajout de la méthode Symbol#in?
176
+
177
+ * 0.4.0
178
+
179
+ - Ajout des méthodes in? pour String et Integer
180
+
181
+ * 0.3.1
182
+
183
+ - Ajout des méthodes TTY-Prompt yes? et no?
184
+
185
+ * 0.3.0
186
+
187
+ - Remise de TTY-MyPrompt
188
+
189
+ * 0.2.1
190
+
191
+ - 'less' pour les tests (on écrit directement le texte)
192
+
193
+ * 0.2.0
194
+
195
+ - Ajout de méthode String (as_title, columnize, etc.)
196
+
197
+ * 0.1.8
198
+
199
+ - Amélioration de 'clear' (qui sautait une ligne)
200
+
201
+ * 0.1.7
202
+
203
+ - Ajout de la méthode utile 'formate_date'
204
+
205
+ * 0.1.6
206
+
207
+ - Ajout de la couleur vert clair (ligth_green, vert_clair)
208
+
209
+ * 0.1.5
210
+
211
+ - Ajout des méthode CLI.option(key) et CLI.param(key)
212
+
213
+ * 0.1.4
214
+
215
+ - Ajout de la méthode 'require_folder' qui requiert tous les scripts
216
+ - ruby d'un dossier donné en argument.
217
+
218
+ * 0.1.3
219
+
220
+ - Ajout du strike pour barrer du texte, italic pour mettre en
221
+ - italic et underline pour souligner, en console.
222
+
223
+ * 0.1.1
224
+
225
+ - Auto-init CLI (parse) when app calls :options, :params, etc.
226
+
227
+ * 0.1.0
228
+
229
+ - Création du Gem
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in clir.gemspec
4
+ gemspec
5
+
6
+ gem "rake", "~> 12.0"
7
+ gem "minitest", "~> 5.0"
8
+ gem "yard"
data/Gemfile.lock ADDED
@@ -0,0 +1,44 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ clir (0.22.0)
5
+ json
6
+ tty-prompt
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ json (2.6.3)
12
+ minitest (5.16.3)
13
+ minitest-color (0.0.2)
14
+ minitest (~> 5)
15
+ pastel (0.8.0)
16
+ tty-color (~> 0.5)
17
+ rake (12.3.3)
18
+ tty-color (0.6.0)
19
+ tty-cursor (0.7.1)
20
+ tty-prompt (0.23.1)
21
+ pastel (~> 0.8)
22
+ tty-reader (~> 0.8)
23
+ tty-reader (0.9.0)
24
+ tty-cursor (~> 0.7)
25
+ tty-screen (~> 0.8)
26
+ wisper (~> 2.0)
27
+ tty-screen (0.8.1)
28
+ webrick (1.7.0)
29
+ wisper (2.0.1)
30
+ yard (0.9.28)
31
+ webrick (~> 1.7.0)
32
+
33
+ PLATFORMS
34
+ ruby
35
+
36
+ DEPENDENCIES
37
+ clir!
38
+ minitest (~> 5.0)
39
+ minitest-color
40
+ rake (~> 12.0)
41
+ yard
42
+
43
+ BUNDLED WITH
44
+ 2.1.4
@@ -0,0 +1,222 @@
1
+ # Manuel du gem `clir`
2
+
3
+ ~~~ruby
4
+ require 'clir'
5
+ ~~~
6
+
7
+
8
+
9
+ > NOTE : CE DOCUMENT EST TRÈS LOIN DE PRÉSENTER TOUTES LES MÉTHODES
10
+
11
+
12
+
13
+ [TOC]
14
+
15
+
16
+
17
+ ## L'application
18
+
19
+ ### CLI
20
+
21
+ Si on joue cette commande dans le terminal : `macom --version help -n pour voir valeur=12`
22
+
23
+ On obtiendra :
24
+
25
+ ~~~ruby
26
+
27
+ CLI.command_name
28
+ # => 'macom'
29
+
30
+ CLI.main_command
31
+ # => 'help'
32
+
33
+ CLI.options
34
+ # => {version: true, n: true} # ou remplacement de :n
35
+
36
+ CLI.params
37
+ # => {value: 12}
38
+
39
+ CLI.components
40
+ # => ['pour', 'voir']
41
+
42
+ ~~~
43
+
44
+ ### Options de la ligne de commande
45
+
46
+ ~~~ruby
47
+ CLI.options # => liste complète des options
48
+ CLI.option(:option) # => true si l'option --option est activité
49
+ ~~~
50
+
51
+ L’option peut aussi avoir une valeur :
52
+
53
+ ~~~
54
+ > macommande -n=4 -o
55
+
56
+ # =>
57
+
58
+ # {n: 4, o: true}
59
+ ~~~
60
+
61
+ Voir aussi [les options propres à l’application](#app-own-options).
62
+
63
+ ### Rejouer une commande (mode `Replayer`)
64
+
65
+ Pour rejouer une commande — pas seulement la commmande mais aussi toutes les entrées qui ont été faites — on joue juste `app _`.
66
+
67
+ > Attention : il faut vraiment qu'il n'y ait que '\_' après la commande et rien d'autre, même pas une option.
68
+
69
+ C'est une commande particulièrement utile quand on teste l'application car elle évite d'avoir à retaper chaque fois les commandes et les options.
70
+
71
+
72
+
73
+ ---
74
+
75
+ ## File extensions
76
+
77
+ ### `File#tail`
78
+
79
+ Retourne les x dernières du fichier sans avoir à le lire en intégralité (parfait pour les fichiers énormes.
80
+
81
+ ~~~ruby
82
+ @syntax
83
+ File.tail(path, nombre_lignes)
84
+
85
+ # Par exemple
86
+
87
+ File.tail("monfichier.txt", 2000)
88
+ # => Retourne les 2000 dernières lignes du fichier (ou moins s'il y en a moins)
89
+ # Note : les lignes sont dans le même ordre.
90
+ ~~~
91
+
92
+
93
+
94
+ ## CLI Tests
95
+
96
+ ### inputs
97
+
98
+ #### Simuler l'interruption forcée du programme
99
+
100
+ Dans l'input, utiliser `EXIT` ou `CTRL-C` (et ses variantes avec tiret plat ou espace) ou `^C`.
101
+
102
+ #### Pour `Q.yes?`
103
+
104
+ `with_inputs` peut contenir :
105
+
106
+ * "o", "y", 1, "true", "yes", "oui" pour retourner `true`
107
+ * toute autre valeur retournera `false`
108
+
109
+ #### Pour `Q.select`
110
+
111
+ `with_inputs` peut contenir :
112
+
113
+ * la valeur explicite à retourner
114
+
115
+ ~~~ruby
116
+ with_inputs ['valeur explicite']
117
+ ~~~
118
+
119
+ * la valeur par le nom du menu (non sensible à la casse)
120
+
121
+ ~~~ruby
122
+ with_inputs [{name:"le nom du menu"}]
123
+ ~~~
124
+
125
+ * la valeur par une expression régulière (non sensible à la casse)
126
+
127
+ ~~~ruby
128
+ with_inputs [{rname: "men"}] # => le premier menu contenant "men"
129
+ ~~~
130
+
131
+ * la valeur par un index (1-start) de menu
132
+
133
+ ~~~ruby
134
+ with_inputs [{index:2}] # => la valeur du deuxième menu
135
+ ~~~
136
+
137
+
138
+ #### Pour `Q.multiselect`
139
+
140
+ `with_inputs` peut contenir :
141
+
142
+ * les valeurs explicites à retourner
143
+
144
+ ~~~ruby
145
+ with_inputs [
146
+ ['valeurs','explicites']
147
+ ]
148
+ ~~~
149
+
150
+ * les valeur par le nom des menus (non sensible à la casse)
151
+
152
+ ~~~ruby
153
+ with_inputs [{names:["premier", "deuxième"]}]
154
+ ~~~
155
+
156
+ * les valeurs par une expression régulière (non sensible à la casse)
157
+
158
+ ~~~ruby
159
+ with_inputs [{rname: "men"}] # => Tous les menus contenant "men"
160
+ ~~~
161
+
162
+ * les valeurs par plusieurs expressions régulières
163
+
164
+ ~~~ruby
165
+ with_inputs [{rnames: ["men", "nue"]}] # => Tous les menus contenant "men" ou "nue"
166
+ ~~~
167
+
168
+ * les valeurs par liste d'index (1-start) de menu
169
+
170
+ ~~~ruby
171
+ with_inputs [{index:[2,4]}] # => la valeur du 2e et 4e menu
172
+ ~~~
173
+
174
+ #### Pour `Q.multiline`
175
+
176
+ On peut envoyer le texte explicite qu'aurait tapé l'utilisateur :
177
+
178
+ ~~~ruby
179
+ with_inputs = ["Le\nTexte\nExplicite"]
180
+ ~~~
181
+
182
+ Pour simuler les touches ⌃D (control et D), on peut utiliser au choix : `CTRL-D`, `CTRL D`, `CTRL_D` ou `^D`.
183
+
184
+ > Note : mais cela revient simplement à mettre un texte vide.
185
+
186
+ ### Mode interactif/entrées
187
+
188
+ Parfois, pendant les tests, on peut vouloir taper les entrées à la main (ou par osascript). Dans ce cas, il faut changer TTY-Prompt de mode. Cela se fait à l'aide de :
189
+
190
+ ~~~ruby
191
+ TTY::MyPrompt.set_mode_interactive
192
+ # => Q passe en mode interactif, avec l'affichage à l'écran du prompt
193
+ ~~~
194
+
195
+ ~~~ruby
196
+ TTY::MyPrompt.unset_mode_interactive
197
+ # => Pour revenir en mode par inputs
198
+ ~~~
199
+
200
+ Pour vérifier le mode courant, on peut faire appel à :
201
+
202
+ ~~~ruby
203
+ Q.mode
204
+ # => :interactive ou :inputs
205
+ ~~~
206
+
207
+
208
+
209
+ <a name="app-own-options"></a>
210
+
211
+ ## Options propres à l’application
212
+
213
+ Pour définir ses propres options en ligne de commande :
214
+
215
+ ~~~ruby
216
+ CLI.set_options_table({
217
+ s: :simulation,
218
+ ...
219
+ })
220
+ ~~~
221
+
222
+ > Noter que les deux éléments doivent être des `Symbol`s.
Binary file
data/README.md ADDED
@@ -0,0 +1,63 @@
1
+ # Clir
2
+
3
+ A lot of usefull methods to deal with CLI application and more. Its my Swizerland's Knife.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'clir'
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle install
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install clir
20
+
21
+ ## Usage
22
+
23
+ [TODO] Reprendre toutes les méthodes
24
+
25
+ ### Test state
26
+
27
+ ~~~ruby
28
+ # Use it in test_helper.rb ou spec_helper.rb
29
+
30
+ require 'clir'
31
+
32
+ CLI.set_tests_on_with_marker
33
+ # => universal test marker. Whereever you call the app, test?
34
+ # will be true
35
+
36
+ # Don't forget to use :
37
+ CLI.unset_tests_on_with_marker
38
+ # … to remove test on
39
+ ~~~
40
+
41
+ ### Mode test with interactive mode for TTY
42
+
43
+ When tests are ON, TTY::(My)Prompt toggle in `inputs_mode` so tests can send it the fake-user inputs. Sometimes though, tests use `Osascript` to run *real live test* (like if an user stokes real keys). In this case, `TTY::Prompt` must stay in `interactive mode`. To do so, tests have to call these methods:
44
+ ~~~ruby
45
+
46
+ TTY::MyPrompt.set_mode_interactive
47
+ # => TTY:MyPrompt toggles in interactive mode during the tests
48
+
49
+ TTY::MyPrompt.set_mode_inputs
50
+ # => TTY::MyPrompt toggles in inputs mode during the tests (or not…)
51
+
52
+ ~~~
53
+
54
+ ## Development
55
+
56
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
57
+
58
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
59
+
60
+ ## Contributing
61
+
62
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/clir.
63
+
data/REFLEXIONS.md ADDED
@@ -0,0 +1,8 @@
1
+ # Réflexions
2
+
3
+ # Replayer
4
+
5
+ En fait, le replayer et le mode test pourraient partager les mêmes choses puisqu'au fond ils fonctionnent de la même manière :
6
+
7
+ * le mode test définit des `inputs` qui sont les entrées de l'utilisateur simulé
8
+ * le mode replay définit de la même manière les `inpupts` précédents
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList["test/**/*_test.rb"]
8
+ end
9
+
10
+ task :default => :test
data/TODO.md ADDED
@@ -0,0 +1,9 @@
1
+ # Todo list
2
+
3
+ * Faire une application fictive (dans les tests) qui permettent de :
4
+ - l'utiliser pour voir si tout fonctionne bien
5
+ - l'utiliser avec les tests pour une "vraie" application
6
+
7
+ ## Fonctionnalités
8
+
9
+ * Développer la class `Config`
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "clir"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/clir.gemspec ADDED
@@ -0,0 +1,40 @@
1
+ require_relative 'lib/clir/version'
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "clir"
5
+ s.version = Clir::VERSION
6
+ s.authors = ["Philippe Perret"]
7
+ s.email = ["philippe.perret@yahoo.fr"]
8
+
9
+ s.summary = %q{Command Line Interface for Ruby applications}
10
+ s.description = %q{Command Line Interface for Ruby applications}
11
+ # s.homepage = "https://github.com/PhilippePerret/clir"
12
+ s.homepage = "https://rubygems.org/gems/clir"
13
+ s.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
14
+
15
+ # --- Development dependencies ---
16
+
17
+ s.add_development_dependency 'minitest'
18
+ s.add_development_dependency 'minitest-color'
19
+
20
+ # --- Dependencies ---
21
+
22
+ s.add_dependency "json"
23
+ s.add_dependency "tty-prompt"
24
+
25
+
26
+ s.metadata["allowed_push_host"] = "https://rubygems.org"
27
+
28
+ s.metadata["homepage_uri"] = s.homepage
29
+ s.metadata["source_code_uri"] = "https://github.com/PhilippePerret/clir"
30
+ s.metadata["changelog_uri"] = "https://github.com/PhilippePerret/clir/CHANGELOG.md"
31
+
32
+ # Specify which files should be added to the gem when it is released.
33
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
34
+ s.files = Dir.chdir(File.expand_path('..', __FILE__)) do
35
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
36
+ end
37
+ s.bindir = "exe"
38
+ s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) }
39
+ s.require_paths = ["lib"]
40
+ end
@@ -0,0 +1,9 @@
1
+ class Array
2
+
3
+ def pretty_join
4
+ return self.first if self.count == 1
5
+ ary = self.dup
6
+ dernier = ary.pop
7
+ ary.join(', ') + ' et ' + dernier.to_s
8
+ end
9
+ end