clir 0.22.0

Sign up to get free protection for your applications and to get access to all the features.
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