everyday-cli-utils 0.5.1 → 0.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e52596df8f25d3ba81101dfbccbc62f9c309ec5d
4
- data.tar.gz: 7a15ffae5b9f397630a0194bc039f83699a5d451
3
+ metadata.gz: 60052f772a0756a80b71446915644a962d1749fc
4
+ data.tar.gz: 7f44acf9585a64c409615ae159e222fb6ad3ab47
5
5
  SHA512:
6
- metadata.gz: b72147d548a12f520d1e92601b905b5fb9e84e48e6c32c2e7d92de176a9f8118cd754b73a1c7fec680c6e612383f79247af0b22db5da4be85226eb0560f5061a
7
- data.tar.gz: 13b000a6534469398170a20526a2d7325cbd822da5e8ff8cb253897984f410267991c728b2605385d5c4b2053e2d8e9a9ef512d802ea4556d498c660f52440aa
6
+ metadata.gz: c685c69bc215ace083e665b6d5e75b9fc84daa64cbf2cafdd4a1ef33a509cf7204a9969d5d41ad1ae06dd3d90218fd3553c8e54682c6ad0c487d0e10467e0d28
7
+ data.tar.gz: 6b18808f2e00a4955d1f444af8e48bcbc2062a8b5e5971893f29746a808e37a23c1414e50b99b4b019d94d6584008ed5fccaa6a4d0afcf26db2f5868d29611b1
data/README.md CHANGED
@@ -336,6 +336,27 @@ Add a parameterized option to the `OptionParser`. It will set the specified opt
336
336
  * `settings`: additional optional options
337
337
  * `type: <data type>`: specify a type (such as `Integer` or `Float`) for the option parser to try to parse the parameter to (default is `String` (no parsing))
338
338
  * `append: true|false`: true to append the parameter to a list (for parameterized options that can occur multiple times), false or omitted to just set it to the parameter
339
+
340
+ ### EverydayCliUtils::OptionUtil
341
+
342
+ As of version 0.6.0, there is a new way to use the option package. See the below example:
343
+
344
+ ```ruby
345
+ class MyOptions
346
+ extend EverydayCliUtil::OptionUtil
347
+
348
+ option :opt1, ['-1', '--opt-1']
349
+ option_with_param :opt2, ['-2', '--opt-2 PARAM']
350
+ end
351
+
352
+ MyOptions.parse!
353
+
354
+ opts = MyOptions.options
355
+ ```
356
+
357
+ The two methods shown above are the same as the ones in `EverydayCliUtils::Option`, but renamed to be shorter, and with the `opt_name` and `names` parameters switched around. Also, the options hash and `OptionParser` instance are handled internally, so you don't have to pass those in. There are read-only accessors for both of them.
358
+
359
+ Besides the different look, there are also improvements. `EverydayCliUtils::OptionUtil.default_settings(settings = {})` is a new method that you can use to set the default values of the settings that you can pass to `option` and `option_with_param`. Also, since this utility manages the options hash for you, in order to provide you with a way to override the defaults (`false` for boolean options, `nil` for non-appending parameter options, and `[]` for appending parameter options (don't change this)) by using `EverydayCliUtils::OptionUtil.default_options(options = {})`.
339
360
 
340
361
  ## Contributing
341
362
 
@@ -18,4 +18,49 @@ module EverydayCliUtils
18
18
  }
19
19
  end
20
20
  end
21
+
22
+ module OptionUtil
23
+ attr_reader :options, :opts
24
+
25
+ def option(opt_name, names, settings = {})
26
+ @opts ||= OptionParser.new
27
+ @options ||= {}
28
+ @default_settings ||= {}
29
+ settings[:toggle] = @default_settings[:toggle] unless settings.has_key?(:toggle) || !@default_settings.has_key?(:toggle)
30
+ @options[opt_name] = false
31
+ @opts.on(*names) {
32
+ @options[opt_name] = !settings[:toggle] || !@options[opt_name]
33
+ yield if block_given?
34
+ }
35
+ end
36
+
37
+ def option_with_param(opt_name, names, settings = {})
38
+ @opts ||= OptionParser.new
39
+ @options ||= {}
40
+ @default_settings ||= {}
41
+ settings[:append] = @default_settings[:append] unless settings.has_key?(:append) || !@default_settings.has_key?(:append)
42
+ settings[:type] = @default_settings[:type] unless settings.has_key?(:type) || !@default_settings.has_key?(:type)
43
+ @options[opt_name] = settings[:append] ? [] : nil
44
+ @opts.on(*names, settings[:type] || String) { |param|
45
+ if settings[:append]
46
+ @options[opt_name] << param
47
+ else
48
+ @options[opt_name] = param
49
+ end
50
+ yield if block_given?
51
+ }
52
+ end
53
+
54
+ def default_settings(settings = {})
55
+ @default_settings = settings
56
+ end
57
+
58
+ def default_options(opts = {})
59
+ opts.each { |opt| @options[opt[0]] = opt[1] }
60
+ end
61
+
62
+ def parse!(argv = ARGV)
63
+ @opts.parse!(argv)
64
+ end
65
+ end
21
66
  end
@@ -1,3 +1,3 @@
1
1
  module EverydayCliUtils
2
- VERSION = '0.5.1'
2
+ VERSION = '0.6.0'
3
3
  end
@@ -0,0 +1,156 @@
1
+ require_relative '../../lib/everyday-cli-utils'
2
+ include EverydayCliUtils
3
+ import :option
4
+
5
+ class Option1
6
+ include EverydayCliUtils::OptionUtil
7
+ end
8
+
9
+ describe EverydayCliUtils::OptionUtil do
10
+ it 'supports adding boolean options' do
11
+ expected = { opt1: true }
12
+ clean = { opt1: false }
13
+ opt = Option1.new
14
+ opt.option :opt1, %w(-1 --opt-1)
15
+ opt.options.should eq clean
16
+ opt.default_options opt1: false
17
+ opt.options.should eq clean
18
+ opt.parse!(['-1'])
19
+ opt.options.should eq expected
20
+ opt.default_options opt1: false
21
+ opt.options.should eq clean
22
+ opt.parse!(['--opt-1'])
23
+ opt.options.should eq expected
24
+ end
25
+
26
+ it 'supports adding boolean toggle options' do
27
+ expected = { opt1: false }
28
+ clean = { opt1: true }
29
+ opt = Option1.new
30
+ opt.option :opt1, %w(-1 --opt-1), toggle: true
31
+ opt.options.should eq expected
32
+ opt.default_options opt1: true
33
+ opt.options.should eq clean
34
+ opt.parse!(['-1'])
35
+ opt.options.should eq expected
36
+ opt.default_options opt1: true
37
+ opt.options.should eq clean
38
+ opt.parse!(['--opt-1'])
39
+ opt.options.should eq expected
40
+ end
41
+
42
+ it 'supports adding an option with a parameter' do
43
+ expected = { opt1: 'hi' }
44
+ clean = { opt1: nil }
45
+ opt = Option1.new
46
+ opt.option_with_param :opt1, ['-1', '--opt-1 PARAM']
47
+ opt.options.should eq clean
48
+ opt.default_options opt1: nil
49
+ opt.options.should eq clean
50
+ opt.parse!(%w(-1 hi))
51
+ opt.options.should eq expected
52
+ opt.default_options opt1: nil
53
+ opt.options.should eq clean
54
+ opt.parse!(%w(--opt-1 hi))
55
+ opt.options.should eq expected
56
+ end
57
+
58
+ it 'supports adding an option with a parameter and type' do
59
+ expected = { opt1: 1 }
60
+ clean = { opt1: nil }
61
+ opt = Option1.new
62
+ opt.option_with_param :opt1, ['-1', '--opt-1 PARAM'], type: Integer
63
+ opt.options.should eq clean
64
+ opt.default_options opt1: nil
65
+ opt.options.should eq clean
66
+ opt.parse!(%w(-1 1))
67
+ opt.options.should eq expected
68
+ opt.default_options opt1: nil
69
+ opt.options.should eq clean
70
+ opt.parse!(%w(--opt-1 1))
71
+ opt.options.should eq expected
72
+ end
73
+
74
+ it 'supports adding an option with a parameter that store multiple instances' do
75
+ expected = { opt1: %w(hi bye) }
76
+ clean = { opt1: [] }
77
+ opt = Option1.new
78
+ opt.option_with_param :opt1, ['-1', '--opt-1 PARAM'], append: true
79
+ opt.options.should eq clean
80
+ opt.default_options opt1: []
81
+ opt.options.should eq clean
82
+ opt.parse!(%w(-1 hi -1 bye))
83
+ opt.options.should eq expected
84
+ opt.default_options opt1: []
85
+ opt.options.should eq clean
86
+ opt.parse!(%w(--opt-1 hi --opt-1 bye))
87
+ opt.options.should eq expected
88
+ opt.default_options opt1: []
89
+ opt.options.should eq clean
90
+ opt.parse!(%w(-1 hi --opt-1 bye))
91
+ opt.options.should eq expected
92
+ opt.default_options opt1: []
93
+ opt.options.should eq clean
94
+ opt.parse!(%w(--opt-1 hi -1 bye))
95
+ opt.options.should eq expected
96
+ end
97
+
98
+ it 'supports setting the default for the toggle setting' do
99
+ expected = { opt1: false }
100
+ clean = { opt1: true }
101
+ opt = Option1.new
102
+ opt.default_settings toggle: true
103
+ opt.option :opt1, %w(-1 --opt-1)
104
+ opt.options.should eq expected
105
+ opt.default_options opt1: true
106
+ opt.options.should eq clean
107
+ opt.parse!(['-1'])
108
+ opt.options.should eq expected
109
+ opt.default_options opt1: true
110
+ opt.options.should eq clean
111
+ opt.parse!(['--opt-1'])
112
+ opt.options.should eq expected
113
+ end
114
+
115
+ it 'supports setting the default for the type setting' do
116
+ expected = { opt1: 1 }
117
+ clean = { opt1: nil }
118
+ opt = Option1.new
119
+ opt.default_settings type: Integer
120
+ opt.option_with_param :opt1, ['-1', '--opt-1 PARAM']
121
+ opt.options.should eq clean
122
+ opt.default_options opt1: nil
123
+ opt.options.should eq clean
124
+ opt.parse!(%w(-1 1))
125
+ opt.options.should eq expected
126
+ opt.default_options opt1: nil
127
+ opt.options.should eq clean
128
+ opt.parse!(%w(--opt-1 1))
129
+ opt.options.should eq expected
130
+ end
131
+
132
+ it 'supports adding an option with a parameter that store multiple instances' do
133
+ expected = { opt1: %w(hi bye) }
134
+ clean = { opt1: [] }
135
+ opt = Option1.new
136
+ opt.default_settings append: true
137
+ opt.option_with_param :opt1, ['-1', '--opt-1 PARAM']
138
+ opt.options.should eq clean
139
+ opt.default_options opt1: []
140
+ opt.options.should eq clean
141
+ opt.parse!(%w(-1 hi -1 bye))
142
+ opt.options.should eq expected
143
+ opt.default_options opt1: []
144
+ opt.options.should eq clean
145
+ opt.parse!(%w(--opt-1 hi --opt-1 bye))
146
+ opt.options.should eq expected
147
+ opt.default_options opt1: []
148
+ opt.options.should eq clean
149
+ opt.parse!(%w(-1 hi --opt-1 bye))
150
+ opt.options.should eq expected
151
+ opt.default_options opt1: []
152
+ opt.options.should eq clean
153
+ opt.parse!(%w(--opt-1 hi -1 bye))
154
+ opt.options.should eq expected
155
+ end
156
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: everyday-cli-utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Henderson
@@ -132,6 +132,7 @@ files:
132
132
  - spec/everyday-cli-utils/format_spec.rb
133
133
  - spec/everyday-cli-utils/kmeans_spec.rb
134
134
  - spec/everyday-cli-utils/maputil_spec.rb
135
+ - spec/everyday-cli-utils/option_spec.rb
135
136
  - spec/spec_helper.rb
136
137
  homepage: https://github.com/henderea/everyday-cli-utils
137
138
  licenses:
@@ -161,5 +162,6 @@ test_files:
161
162
  - spec/everyday-cli-utils/format_spec.rb
162
163
  - spec/everyday-cli-utils/kmeans_spec.rb
163
164
  - spec/everyday-cli-utils/maputil_spec.rb
165
+ - spec/everyday-cli-utils/option_spec.rb
164
166
  - spec/spec_helper.rb
165
167
  has_rdoc: