cliapp 0.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.
@@ -0,0 +1,92 @@
1
+ # -*- coding: utf-8 -*-
2
+ # frozen_string_literal: true
3
+
4
+
5
+ require_relative './init'
6
+
7
+
8
+ Oktest.scope do
9
+
10
+
11
+ topic CLIApp do
12
+
13
+
14
+ topic '.new()' do
15
+
16
+ fixture :app do
17
+ CLIApp.new("Sample", "Sample App", command: "sample", version: "1.2.3")
18
+ end
19
+
20
+ spec "[!gpvqe] creates new Config object internally." do
21
+ |app|
22
+ ok {app.config.name} == "Sample"
23
+ ok {app.config.desc} == "Sample App"
24
+ ok {app.config.command} == "sample"
25
+ ok {app.config.version} == "1.2.3"
26
+ end
27
+
28
+ spec "[!qyunk] creates new Application object with config object created." do
29
+ |app|
30
+ ok {app}.is_a?(CLIApp::Application)
31
+ ok {app.config}.is_a?(CLIApp::Config)
32
+ end
33
+
34
+ end
35
+
36
+
37
+ topic '.skeleton()' do
38
+
39
+ GLOBAL_HELP = <<'END'
40
+ Sample (1.0.0) --- Sample Application
41
+
42
+ Usage:
43
+ $ tmp.sample [<options>] <action> [<arguments>...]
44
+
45
+ Options:
46
+ -h, --help print help message
47
+ --version print version number
48
+ -l, --list list action names
49
+
50
+ Actions:
51
+ clean delete garbage files (& product files too if '-a')
52
+ hello greeting message
53
+ END
54
+
55
+ HELLO_HELP = <<'END'
56
+ tmp.sample hello --- greeting message
57
+
58
+ Usage:
59
+ $ tmp.sample hello [<options>] [<name>]
60
+
61
+ Options:
62
+ -l, --lang=<en|fr|it> language
63
+ END
64
+
65
+ spec "[!zls9g] returns example code." do
66
+ str = CLIApp.skeleton()
67
+ ok {str}.is_a?(String)
68
+ filename = "tmp.sample"
69
+ dummy_file(filename, str)
70
+ #
71
+ sout, serr = capture_command "ruby #{filename} --help"
72
+ ok {serr} == ""
73
+ ok {sout} == GLOBAL_HELP
74
+ #
75
+ sout, serr = capture_command "ruby #{filename} hello --help"
76
+ ok {serr} == ""
77
+ ok {sout} == HELLO_HELP
78
+ #
79
+ sout, serr = capture_command "ruby #{filename} hello"
80
+ ok {serr} == ""
81
+ ok {sout} == "Hello, world!\n"
82
+ sout, serr = capture_command "ruby #{filename} hello Alice --lang=fr"
83
+ ok {serr} == ""
84
+ ok {sout} == "Bonjour, Alice!\n"
85
+ end
86
+
87
+ end
88
+
89
+ end
90
+
91
+
92
+ end
data/test/util_test.rb ADDED
@@ -0,0 +1,80 @@
1
+ # -*- coding: utf-8 -*-
2
+ # frozen_string_literal: true
3
+
4
+
5
+ require_relative './init'
6
+
7
+
8
+ Oktest.scope do
9
+
10
+
11
+ topic CLIApp::Util do
12
+
13
+
14
+ topic '#arity_of_proc()' do
15
+
16
+ spec "[!get6i] returns min and max arity of proc object." do
17
+ pr1 = proc {|a, b, c=nil, d=nil, x: nil, y: nil| nil }
18
+ ok {CLIApp::Util.arity_of_proc(pr1)} == [2, 4]
19
+ pr2 = proc {|a=nil, b=nil| nil }
20
+ ok {CLIApp::Util.arity_of_proc(pr2)} == [0, 2]
21
+ pr3 = proc { nil }
22
+ ok {CLIApp::Util.arity_of_proc(pr3)} == [0, 0]
23
+ end
24
+
25
+ spec "[!ghrxo] returns nil as max arity if proc has variable param." do
26
+ pr1 = proc {|a, b, c=nil, d=nil, *e, x: nil, y: nil| nil }
27
+ ok {CLIApp::Util.arity_of_proc(pr1)} == [2, nil]
28
+ pr2 = proc {|a=nil, b=nil, *c| nil }
29
+ ok {CLIApp::Util.arity_of_proc(pr2)} == [0, nil]
30
+ end
31
+
32
+ end
33
+
34
+
35
+ topic '#argstr_of_proc()' do
36
+
37
+ spec "[!gbk7b] generates argument string of proc object." do
38
+ pr1 = proc {|aa, bb, cc=nil, dd=nil, x: nil, y: nil| nil }
39
+ ok {CLIApp::Util.argstr_of_proc(pr1)} == " <aa> <bb> [<cc> [<dd>]]"
40
+ end
41
+
42
+ spec "[!b6gzp] required param should be '<param>'." do
43
+ pr1 = proc {|aa, bb| nil }
44
+ ok {CLIApp::Util.argstr_of_proc(pr1)} == " <aa> <bb>"
45
+ end
46
+
47
+ spec "[!q1030] optional param should be '[<param>]'." do
48
+ pr1 = proc {|aa=nil, bb=nil| nil }
49
+ ok {CLIApp::Util.argstr_of_proc(pr1)} == " [<aa> [<bb>]]"
50
+ end
51
+
52
+ spec "[!osxwq] variable param should be '[<param>...]'." do
53
+ pr1 = proc {|aa, bb=nil, *cc| nil }
54
+ ok {CLIApp::Util.argstr_of_proc(pr1)} == " <aa> [<bb> [<cc>...]]"
55
+ end
56
+
57
+ end
58
+
59
+
60
+ topic '#param2argname()' do
61
+
62
+ spec "[!52dzl] converts 'yes_or_no' to 'yes|no'." do
63
+ ok {CLIApp::Util.param2argname("yes_or_no")} == "yes|no"
64
+ end
65
+
66
+ spec "[!6qkk6] converts 'file__html' to 'file.html'." do
67
+ ok {CLIApp::Util.param2argname("file__html")} == "file.html"
68
+ end
69
+
70
+ spec "[!2kbhe] converts 'aa_bb_cc' to 'aa-bb-cc'." do
71
+ ok {CLIApp::Util.param2argname("aa_bb_cc")} == "aa-bb-cc"
72
+ end
73
+
74
+ end
75
+
76
+
77
+ end
78
+
79
+
80
+ end
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cliapp
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - kwatch
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-10-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: oktest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.4'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.4'
27
+ description: 'A small framework for CLI Applications such as Git, Docker, NPM, etc.
28
+
29
+ '
30
+ email: kwatch@gmail.com
31
+ executables: []
32
+ extensions: []
33
+ extra_rdoc_files: []
34
+ files:
35
+ - MIT-LICENSE
36
+ - README.md
37
+ - Rakefile.rb
38
+ - cliapp.gemspec
39
+ - lib/cliapp.rb
40
+ - task/common-task.rb
41
+ - task/release-task.rb
42
+ - test/action_test.rb
43
+ - test/application_test.rb
44
+ - test/init.rb
45
+ - test/module_test.rb
46
+ - test/util_test.rb
47
+ homepage: https://github.com/kwatch/cliapp-ruby
48
+ licenses:
49
+ - MIT
50
+ metadata: {}
51
+ post_install_message:
52
+ rdoc_options: []
53
+ require_paths:
54
+ - lib
55
+ required_ruby_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '2.4'
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ requirements: []
66
+ rubygems_version: 3.0.3.1
67
+ signing_key:
68
+ specification_version: 4
69
+ summary: CLI Application Framework
70
+ test_files:
71
+ - test/module_test.rb
72
+ - test/util_test.rb
73
+ - test/action_test.rb
74
+ - test/application_test.rb