rake-commander 0.2.0 → 0.2.3

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
  SHA256:
3
- metadata.gz: ce1bfcde79ef608b7e13c440c626ee3ace47ec5adf3088e6fc969bf85502cc59
4
- data.tar.gz: f785888cff61578247dfb1fdfed6c4e44fd076180d8be0dd1e00bf14ac0f1700
3
+ metadata.gz: bcd5bb7ca707d1e8e6cf543712c447cbd63061e7bbe8cfdc6e3c0c0755c338e5
4
+ data.tar.gz: 7b02270fbe937b0b50b6e8c4b1001005ba377c69f7a799ce97823fea42356893
5
5
  SHA512:
6
- metadata.gz: 5d998c21f52d117ff59e5eb066a43cd0c5a0939a4187af2c5ee1dc3cbaead328b65d71ad67e333adf426ab465926fd56fc5830e4e7a3a7b048602f02dea39344
7
- data.tar.gz: 2afaaa3bb046e6de18b13fe4b0e762dead4ace9a14b3d097c2b6c37142e7e0e0d111f5eecd9846647e50a64f13cbf8491b291d7572fafaada91cdc408400d064
6
+ metadata.gz: 00d05400483297153797a08d02c32fb5bde4510a829cdb158121324d1d034d62dafa3560c2a56daa6893b6bc35ee9a46a832493e2b37403a34eb949f10082fc4
7
+ data.tar.gz: 01c09729261196848948383dfeb356c1463086f858e4365bcfb20a043e98e521284fe45b20cf8f39ef0ab139a37fa26ce381e433974fad48c860d6ea9c377476
data/CHANGELOG.md CHANGED
@@ -2,11 +2,13 @@
2
2
  All notable changes to this project will be documented in this file.
3
3
 
4
4
  ## TO DO
5
+ - `option_reopen` -> upsert should be optional (add `upsert: false` as default an raise missing option if not found)
6
+ - The error on missing short pops up where it's not clear the short was missed in the option_reopen call.
5
7
  - Option results
6
8
  - Include the symbol name keys (configurable). Note that dash will be replaced by underscore.
7
- - Type Coertions
9
+ - Type Coercions
8
10
  - Add a way to define/redefine a set and use them.
9
- - Add more supported type_coertions as native to the gem (i.e. `Symbol`)
11
+ - Add more supported type_coercions as native to the gem (i.e. `Symbol`)
10
12
  - Add support [for `ActiveRecord::Enum`](https://apidock.com/rails/ActiveRecord/Enum)
11
13
  - Option definitions
12
14
  - Order: `where: [:tail, :top]` and `[after, before]: :option_name`
@@ -30,12 +32,31 @@ All notable changes to this project will be documented in this file.
30
32
  - Option to globally enable/disable the 2nd patch?
31
33
  * That would make this gem completely useless.
32
34
 
33
- ## [0.2.1] - 2023-04-xx
35
+ ## [0.2.4] - 2023-04-xx
34
36
 
35
37
  ### Added
36
38
  ### Fixed
37
39
  ### Changed
38
40
 
41
+ ## [0.2.3] - 2023-04-29
42
+
43
+ ### Added
44
+ - Include Symbol option names in the parsed option results.
45
+
46
+ ### Fixed
47
+ ### Changed
48
+
49
+ ## [0.2.2] - 2023-04-29
50
+
51
+ ### Fixed
52
+ - Typo in `RakeCommander::Base::ClassAutoLoader`
53
+
54
+ ## [0.2.1] - 2023-04-29
55
+
56
+ ### Fixed
57
+ - `RakeCommander::Option` type coercion was not being inherited
58
+ - Typo on `coertion`: writes `coercion`
59
+
39
60
 
40
61
  ## [0.2.0] - 2023-04-28
41
62
 
data/README.md CHANGED
@@ -9,12 +9,12 @@ Rake commander is a way to declare **rake tasks** with re-usable classes. It enh
9
9
  Although the `OptionParser` ruby native class is used for parsing the options, the declaration of options, additionally to the ones of `OptionParser` comes with some **opinionated improvements** and amendments:
10
10
 
11
11
  1. It is possible to declare options as `required`
12
- * This is additional to required option arguments.
13
- * Options are inheritable (they get a custom `deep_dup`)
14
- 2. An option can have a `default` value.
15
- * Which can optionally be automatically used when the option accepts or requires an argument.
16
- 3. Options parsing raises specific option errors. For a given task/class, each error type can have its own handler or preferred action.
17
- * Defined error handling is inheritable and can be redefined.
12
+ * This is additional to required option arguments.
13
+ * Options are inheritable (they get a custom `deep_dup`)
14
+ 1. An option can have a `default` value.
15
+ * Which can optionally be automatically used when the option accepts or requires an argument.
16
+ 1. Options parsing raises specific option errors. For a given task/class, each error type can have its own handler or preferred action.
17
+ * Defined error handling is inheritable and can be redefined.
18
18
 
19
19
  ## Installation
20
20
 
@@ -74,10 +74,11 @@ rspec logging and results
74
74
  It supports most of options syntax of the native `OptionParser` but for a couple of exceptions perhaps:
75
75
  1. It does **NOT** support definitions or parsing of shortcuts with **embedded argument** (i.e. `-nNAME`).
76
76
  2. It does **NOT** support definitions that include equal sign (i.e. `name=NAME`, `n=NAME`)
77
+ 3. Currently, declaring a short and a name for the option is compulsory.
77
78
 
78
- An argument should be explicitly declared in the `name` part:
79
+ An argument of an option should be explicitly declared in the `name` part:
79
80
 
80
- ```
81
+ ```ruby
81
82
  option :n, '--name NAME'
82
83
  ```
83
84
 
@@ -89,7 +90,7 @@ Although it is planned to extend the syntax, the current version shares the opti
89
90
  rake [rake-options] task1 task2 -- [shared-task-options]
90
91
  ```
91
92
 
92
- The double dash ` -- ` delimiter allows to modify the `ARGV` parsing behaviour of `rake`, giving room for **opinionated enhanced syntax**. Anything that comes before the double dash is feed to standard `rake`, and anything after `--` are parsed as option tasks via `rake commander`.
93
+ The double dash ` -- ` delimiter allows to modify the `ARGV` parsing behaviour of `rake`, giving room for **opinionated enhanced syntax**. Anything that comes before the double dash is fed to standard `rake`, and anything after `--` are parsed as option tasks via `rake commander`.
93
94
 
94
95
  ```
95
96
  <rake part> -- [tasks options part]
@@ -24,6 +24,7 @@ class RakeCommander::Custom::Chainer < RakeCommander
24
24
  option '-m', 'method [METHOD]', default: 'system', desc: str_desc
25
25
 
26
26
  def task(*_args)
27
+ print_options if options[:b]
27
28
  if options[:c]
28
29
  cmd = "#{subcommand_base} -- #{subcommand_arguments.join(' ')}"
29
30
  puts "Calling --> '#{cmd}'"
@@ -51,6 +52,11 @@ class RakeCommander::Custom::Chainer < RakeCommander
51
52
 
52
53
  private
53
54
 
55
+ def print_options
56
+ puts "These are the options received:"
57
+ pp options
58
+ end
59
+
54
60
  def puts(str)
55
61
  return super unless options[:b]
56
62
  super "#{app_id} #{str} #{thread_id}"
@@ -8,6 +8,7 @@ class RakeCommander::Custom::Chained < RakeCommander::Custom::Chainer
8
8
 
9
9
  def task(*_args)
10
10
  puts "Called !!"
11
+ print_options if options[:b]
11
12
  puts options[:s] if options[:s]
12
13
  end
13
14
  end
@@ -41,7 +41,7 @@ class RakeCommander
41
41
  autoloaded_namespaces(type).tap do |target|
42
42
  next if namespaces.empty?
43
43
  other_type = type == :include ? :ignore : :include
44
- namespaces.each {|nm_sp| autoloaded_namespace(other_type).delete(nm_sp)}
44
+ namespaces.each {|nm_sp| autoloaded_namespaces(other_type).delete(nm_sp)}
45
45
  target.concat(namespaces)
46
46
  end
47
47
  end
@@ -16,7 +16,7 @@ class RakeCommander
16
16
  @default = kargs[:default] if kargs.key?(:default)
17
17
  @desc = kargs[:desc] if kargs.key?(:desc)
18
18
  @required = kargs[:required] if kargs.key?(:required)
19
- @type_coertion = kargs[:type] if kargs.key?(:type)
19
+ @type_coercion = kargs[:type] if kargs.key?(:type)
20
20
  @other_args = args
21
21
  @original_block = block
22
22
  configure_other
@@ -91,8 +91,8 @@ class RakeCommander
91
91
  end
92
92
 
93
93
  # @return [Class, NilClass]
94
- def type_coertion
95
- @type_coertion || (default? && default.class)
94
+ def type_coercion
95
+ @type_coercion || (default? && default.class)
96
96
  end
97
97
 
98
98
  # @return [Boolean]
@@ -130,6 +130,7 @@ class RakeCommander
130
130
  kargs.merge!(name: name_full.dup.freeze) if name_full
131
131
  kargs.merge!(desc: desc.dup) if desc
132
132
  kargs.merge!(default: default.dup) if default?
133
+ kargs.merge!(type: @type_coercion) if @type_coercion.is_a?(Class)
133
134
  kargs.merge!(required: required?)
134
135
  end
135
136
  end
@@ -139,7 +140,7 @@ class RakeCommander
139
140
  configure_other
140
141
  args = [short_hyphen, name_hyphen]
141
142
  args.push(*switch_desc(implicit_short: implicit_short))
142
- args << type_coertion if type_coertion
143
+ args << type_coercion if type_coercion
143
144
  args
144
145
  end
145
146
 
@@ -147,7 +148,7 @@ class RakeCommander
147
148
 
148
149
  # Called on parse runtime
149
150
  def option_block(&middleware)
150
- block_extra_args = [default, short, name]
151
+ block_extra_args = [default, short, name, self]
151
152
  proc do |value|
152
153
  args = block_extra_args.dup.unshift(value)
153
154
  original_block&.call(*args)
@@ -228,7 +229,7 @@ class RakeCommander
228
229
  # It consumes `other_args`, to prevent direct overrides to be overriden by it.
229
230
  def configure_other
230
231
  if type = other_args.find {|arg| arg.is_a?(Class)}
231
- @type_coertion = type
232
+ @type_coercion = type
232
233
  other_args.delete(type)
233
234
  end
234
235
  if value = other_args.find {|arg| arg.is_a?(String)}
@@ -24,6 +24,12 @@ class RakeCommander
24
24
  # It **re-opens** the method and adds a middleware to gather and return
25
25
  # the results of the parsing (including the `leftovers`)
26
26
  # @note this extends the method parameters and changes the returned value.
27
+ # @yield [value, default, short, name, option] do somethin with parsed `value` for `option`
28
+ # @yieldparam value [] the resulting parsed value
29
+ # @yieldparam default [] the default value of the option
30
+ # @yieldparam short [Symbol] the symbol short of the option
31
+ # @yieldparam name [Symbol] the symbol name of the option
32
+ # @yieldparam option [RakeCommander::Option] the option that is being parsed
27
33
  # @param leftovers [Array<String>] see RakeCommander::Options#parse_options`
28
34
  # @param results [Hash] with `short` option as `key` and final value as `value`.
29
35
  # @see `RakeCommander::Options#parse_options`
@@ -66,9 +72,9 @@ class RakeCommander
66
72
  # @return [Proc] the results collector that wraps the middleware.
67
73
  def results_collector(results, &middleware)
68
74
  results = result_defaults(results)
69
- proc do |value, default, short, name|
70
- middleware&.call(value, default, short, name)
71
- results[short] = value.nil?? default : value
75
+ proc do |value, default, short, name, opt|
76
+ middleware&.call(value, default, short, name, opt)
77
+ results[name] = results[short] = value.nil?? default : value
72
78
  end
73
79
  end
74
80
 
@@ -79,7 +85,7 @@ class RakeCommander
79
85
  (options_with_defaults && opt.default?) \
80
86
  || (opt.required? && opt.default?)
81
87
  end.each do |opt|
82
- res_def[opt.short] = opt.default
88
+ res_def[opt.name] = res_def[opt.short] = opt.default
83
89
  end
84
90
  end
85
91
  end
@@ -1,3 +1,3 @@
1
1
  class RakeCommander
2
- VERSION = '0.2.0'.freeze
2
+ VERSION = '0.2.3'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rake-commander
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oscar Segura Samper
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-04-27 00:00:00.000000000 Z
11
+ date: 2023-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler