cli_helper 0.0.4 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,217 @@
1
+ #!/usr/bin/env ruby
2
+ ################################################
3
+ ## Here is how it works
4
+
5
+ require_relative '../lib/cli_helper'
6
+ include CliHelper
7
+
8
+
9
+ # can not use minitest because it requires pry which
10
+ # requires an older version of slop
11
+ #require 'minitest/autorun'
12
+ require 'kick_the_tires'
13
+ include KickTheTires
14
+
15
+ require 'debug_me'
16
+ include DebugMe
17
+
18
+
19
+ configatron.support_config_files = true
20
+
21
+ #describe 'how it works' do
22
+
23
+ #it '000 supports basic common parameters' do
24
+ params = cli_helper
25
+ assert params.is_a? Slop::Options
26
+ assert usage.include?('--help')
27
+ assert usage.include?('--debug')
28
+ assert usage.include?('--verbose')
29
+ assert usage.include?('--version')
30
+ refute usage.include?('--xyzzy')
31
+
32
+ if configatron.support_config_files
33
+ assert usage.include?('--config')
34
+ else
35
+ refute usage.include?('--config')
36
+ end
37
+
38
+ #end
39
+
40
+ =begin
41
+ # NOTE: The Test construct creates a dynamic class which
42
+ # does not incorporate 'define_method' This Test results
43
+ # in errors that are a consequence of the testing framework
44
+ # not the object under test.
45
+ it '002 creates accessor methods to boolean options' do
46
+ cli_helper
47
+ all_methods = methods
48
+ %w[ help? debug? verbose? version?
49
+ help! debug! verbose! version!].each do |m|
50
+ assert all_methods.include?(m)
51
+ end
52
+ refute all_methods.include?('xyzzy?')
53
+ refute all_methods.include?('xyzzy!')
54
+ end
55
+ =end
56
+
57
+ #it '005 block inclusion' do
58
+ cli_helper do |param|
59
+ param.string '-x', '--xyxxy', 'example MAGIC parameter', default: 'IamDefault'
60
+ end
61
+ assert usage.include?('MAGIC')
62
+ #end
63
+
64
+ #it '010 supports banner' do
65
+ refute usage().include?('BANNER')
66
+ cli_helper('This is my BANNER')
67
+ assert usage().include?('BANNER')
68
+ #end
69
+
70
+ #it '015 supports additional help in usage' do
71
+ refute usage.include?('HELP')
72
+ HELP = "Do you need some HELP?"
73
+ assert usage.include?('HELP')
74
+ #end
75
+
76
+ #it '020 put it all together' do
77
+ cli_helper('This is my BANNER') do |o|
78
+ o.string '-x', '--xyxxy', 'example MAGIC parameter', default: 'IamDefault'
79
+ end
80
+ HELP = "Do you need some HELP?"
81
+ assert usage.include?('BANNER')
82
+ assert usage.include?('MAGIC')
83
+ assert usage.include?('HELP')
84
+ #end
85
+
86
+ #it '025 Add to options.errors' do
87
+ assert configatron.errors.empty?
88
+ a_message = 'There is a serious problem here'
89
+ error a_message
90
+ refute configatron.errors.empty?
91
+ assert_equal 1, configatron.errors.size
92
+ assert_equal a_message, configatron.errors.first
93
+ #end
94
+
95
+ #it '030 Add to options.warnings' do
96
+ assert configatron.warnings.empty?
97
+ a_message = 'There is a minor problem here'
98
+ warning a_message
99
+ refute configatron.warnings.empty?
100
+ assert_equal 1, configatron.warnings.size
101
+ assert_equal a_message, configatron.warnings.first
102
+ #end
103
+
104
+ #it '035 Add to options.errors' do
105
+ refute configatron.errors.empty?
106
+ a_message = 'There is another serious problem here'
107
+ error a_message
108
+ assert_equal 2, configatron.errors.size
109
+ assert_equal a_message, configatron.errors.last
110
+ #end
111
+
112
+ #it '040 Add to options.warnings' do
113
+ refute configatron.warnings.empty?
114
+ a_message = 'There is a another minor problem here'
115
+ warning a_message
116
+ assert_equal 2, configatron.warnings.size
117
+ assert_equal a_message, configatron.warnings.last
118
+ #end
119
+
120
+ #it '050 support erb config files' do
121
+ unless configatron.config.nil?
122
+ configatron.config.each do |c|
123
+ case c.basename.extname.to_s.downcase
124
+ when '.erb'
125
+ file_type = c.basename.to_s.downcase.gsub('.erb','').split('.').last
126
+ case file_type
127
+ when 'ini'
128
+ # FIXME: ParseConfig gem has problem
129
+ refute Time == configatron.wall_clock.the_mouse_says.class
130
+ when 'txt'
131
+ # FIXME: ParseConfig gem has problem
132
+ refute Time == configatron.wrist.watch_time.class
133
+ when 'yml'
134
+ assert_equal Time, configatron.production.watch_time.class
135
+ else
136
+ end
137
+ when '.rb'
138
+ assert_equal 'devhost', configatron.development.host
139
+ when '.txt'
140
+ assert_equal 6, configatron.fingers.right_hand
141
+ when '.ini'
142
+ assert_equal 'wedding ring', configatron.hands.left_hand
143
+ when '.yml'
144
+ assert_equal 'go fish', configatron.production.threes
145
+ assert configatron.production.watch_time.nil?
146
+ when '.xyzzy'
147
+ else
148
+ end
149
+ end
150
+ else
151
+ # means test did not include config files
152
+ end
153
+ #end
154
+
155
+
156
+
157
+
158
+
159
+ #it '888 prints usage()' do
160
+ puts
161
+ puts "="*45
162
+ show_usage
163
+ puts "="*45
164
+ puts
165
+ a_string = <<EOS
166
+ This is my BANNER
167
+
168
+ Usage: cli_helper_test.rb [options] ...
169
+
170
+ Where:
171
+
172
+ Common Options Are:
173
+ -h, --help show this message
174
+ -v, --verbose enable verbose mode
175
+ -d, --debug enable debug mode
176
+ --version print the version: 0.0.1
177
+
178
+ Program Options Are:
179
+ -x, --xyxxy example MAGIC parameter
180
+
181
+ Do you need some HELP?
182
+ EOS
183
+
184
+
185
+ a_string_with_config = <<EOS
186
+ This is my BANNER
187
+
188
+ Usage: cli_helper_test.rb [options] ...
189
+
190
+ Where:
191
+
192
+ Common Options Are:
193
+ -h, --help show this message
194
+ -v, --verbose enable verbose mode
195
+ -d, --debug enable debug mode
196
+ --version print the version: 0.0.1
197
+
198
+ Program Options Are:
199
+ -x, --xyxxy example MAGIC parameter
200
+ --config read config file(s) [*.rb, *.yml, *.ini]
201
+
202
+ Do you need some HELP?
203
+ EOS
204
+
205
+ if configatron.support_config_files
206
+ assert_equal a_string_with_config, usage
207
+ else
208
+ assert_equal a_string, usage
209
+ end
210
+ #end
211
+
212
+ #it '999 Show the options structure' do
213
+ puts '*'*45
214
+ ap configatron.to_h
215
+ #end
216
+
217
+ #end # decribe 'how it works'
@@ -0,0 +1,6 @@
1
+ [base2]
2
+ \ three = 11
3
+
4
+ [hands]
5
+ left_hand = 'wedding ring'
6
+
@@ -0,0 +1,9 @@
1
+ [base2]
2
+ \ three = 11
3
+
4
+ [hands]
5
+ left_hand = 'wedding ring'
6
+
7
+ [wall_clock]
8
+ the_mouse_says = <%= Time.now %>
9
+
@@ -0,0 +1,15 @@
1
+
2
+ configatron.test do |test|
3
+ test.host = 'localhost'
4
+ test.ip = '127.0.0.1'
5
+ end
6
+
7
+ configatron.development do |dev|
8
+ dev.host = 'devhost'
9
+ dev.ip = '127.0.0.1'
10
+ end
11
+
12
+ configatron.production do |prod|
13
+ prod.host = 'prodhost'
14
+ prod.ip = '0.0.0.0'
15
+ end
@@ -0,0 +1,20 @@
1
+
2
+ configatron.test do |test|
3
+ test.host = 'localhost'
4
+ test.ip = '127.0.0.1'
5
+ end
6
+
7
+ configatron.development do |dev|
8
+ dev.host = 'devhost'
9
+ dev.ip = '127.0.0.1'
10
+ end
11
+
12
+ configatron.production do |prod|
13
+ prod.host = 'prodhost'
14
+ prod.ip = '0.0.0.0'
15
+ end
16
+
17
+ if <%= true =>
18
+ puts "Why would you ever want ERB stuff in a ruby-based config file?"
19
+ end
20
+
@@ -0,0 +1,12 @@
1
+ [base2]
2
+ zero = 0
3
+ one = 1
4
+ two = 10
5
+
6
+ [fingers]
7
+ left_hand = 5
8
+ right_hand = 6
9
+
10
+ [toes]
11
+ left_foot = 6
12
+ right_foot = 5
@@ -0,0 +1,16 @@
1
+ [base2]
2
+ zero = 0
3
+ one = 1
4
+ two = 10
5
+
6
+ [fingers]
7
+ left_hand = 5
8
+ right_hand = 6
9
+
10
+ [toes]
11
+ left_foot = 6
12
+ right_foot = 5
13
+
14
+ [wrist]
15
+ watch_time = <%= Time.now %>
16
+
@@ -0,0 +1 @@
1
+ This is an unknown config file format
@@ -0,0 +1,16 @@
1
+ ---
2
+ test:
3
+ one: 1
4
+ two: 1
5
+ three: 11
6
+
7
+ development:
8
+ one: 'one'
9
+ two: 'two'
10
+ three: 'three'
11
+
12
+ production:
13
+ ones: 1111
14
+ tows: 2222
15
+ threes: 'go fish'
16
+
@@ -0,0 +1,17 @@
1
+ ---
2
+ test:
3
+ one: 1
4
+ two: 1
5
+ three: 11
6
+
7
+ development:
8
+ one: 'one'
9
+ two: 'two'
10
+ three: 'three'
11
+
12
+ production:
13
+ ones: 1111
14
+ tows: 2222
15
+ threes: 'go fish'
16
+ watch_time: <%= Time.now %>
17
+
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cli_helper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dewayne VanHoozer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-22 00:00:00.000000000 Z
11
+ date: 2015-03-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: slop
14
+ name: configatron
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '4.0'
19
+ version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '4.0'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: nenv
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: awesome_print
42
+ name: parseconfig
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -53,19 +53,19 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: debug_me
56
+ name: slop
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '4.0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '4.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bundler
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -95,7 +95,35 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '10.0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: test_inline
98
+ name: kick_the_tires
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: awesome_print
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: debug_me
99
127
  requirement: !ruby/object:Gem::Requirement
100
128
  requirements:
101
129
  - - ">="
@@ -108,14 +136,12 @@ dependencies:
108
136
  - - ">="
109
137
  - !ruby/object:Gem::Version
110
138
  version: '0'
111
- description: |-
112
- An encapsulation of a convention I have been using
113
- with the slop, nenv, and other gems for quick and dirty development of
114
- command-line based utility programs. Its not pretty. It may even break
115
- your code. I wouldn't use it if I were you. You could, if you wanted,
116
- namespace this stuff within CliHelper and establish a new convention.
117
- You might even wrap not only slop but some of those other ARGV parsers.
118
- I only did this much after being shamed into it by rubycritic.
139
+ description: "\n An encapsulation of a convention I have been using\n with
140
+ the slop, nenv, parseconfig and configatron gems for quick and dirty\n development
141
+ of\n command-line based utility programs. Slop parses ARGV; Nenv parses ENV;\n
142
+ \ ParseConfig parses INI; Configatron keeps it all together. YAML and ERB\n
143
+ \ preprocessing is also available. Ruby configuration files are also supported.\n
144
+ \ and you can specify multiple config files of mixed types at once.\n "
119
145
  email:
120
146
  - dvanhoozer@gmail.com
121
147
  executables: []
@@ -129,6 +155,17 @@ files:
129
155
  - cli_helper.gemspec
130
156
  - example/cli_stub.rb
131
157
  - lib/cli_helper.rb
158
+ - tests/README.txt
159
+ - tests/cli_helper_test.rb
160
+ - tests/config/sample.ini
161
+ - tests/config/sample.ini.erb
162
+ - tests/config/sample.rb
163
+ - tests/config/sample.rb.erb
164
+ - tests/config/sample.txt
165
+ - tests/config/sample.txt.erb
166
+ - tests/config/sample.xyzzy
167
+ - tests/config/sample.yml
168
+ - tests/config/sample.yml.erb
132
169
  homepage: http://github.com/MadBomber/cli_helper
133
170
  licenses:
134
171
  - You want it? It's yours.
@@ -153,5 +190,6 @@ rubyforge_project:
153
190
  rubygems_version: 2.4.6
154
191
  signing_key:
155
192
  specification_version: 4
156
- summary: An encapsulates of common junk used with Q&D CLI utilities.
193
+ summary: An encapsulation of an integration of slop, nenv, parseconfig and configatron.
157
194
  test_files: []
195
+ has_rdoc: