rake-commander 0.3.3 → 0.3.5
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 +4 -4
- data/CHANGELOG.md +24 -5
- data/README.md +0 -4
- data/lib/rake-commander/option.rb +2 -2
- data/lib/rake-commander/options/name.rb +1 -2
- data/lib/rake-commander/options.rb +17 -12
- data/lib/rake-commander/patcher/application/top_level_resume.rb +12 -1
- data/lib/rake-commander/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f671966099a385b76b7e0535fb3a0e584072a5996265c5c56adb26f047bd6fa2
|
4
|
+
data.tar.gz: 32617c52c0773ca1aeff4b8665c197cc765c9e879866eb684310bf62523709f4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d114f3fd737cc41f659b00d5a539c110057b9371335688e94d4777853a0082c86c2473beabc5a4ed1fdbe5595879028f6bd11683ba1fccf97b86551e7d70471
|
7
|
+
data.tar.gz: c2afd435a3f70f2fdf7af647eb7facb2dbe89593ff668af6453d766f8f4346d87ccd25a555572873f1c74d6fd748a218b290f2150f22addfc8b9ee8501cfffe4
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
|
4
4
|
## TO DO
|
5
|
+
- Think if [`binstubs`](https://github.com/rbenv/rbenv/wiki/Understanding-binstubs) would offer a neater patch right on `Rake::Application#init`
|
5
6
|
- `option_reopen` -> upsert should be optional (add `upsert: false` as default an raise missing option if not found)
|
6
7
|
- The error on missing short pops up where it's not clear the short was missed in the option_reopen call.
|
7
8
|
- Option results
|
@@ -28,17 +29,35 @@ All notable changes to this project will be documented in this file.
|
|
28
29
|
* Example: `on_options(:t, :s, present: true) {|options| do-stuff}` <- block to be called only when the option `:t` and `:s` are both present in the parsed `options` result.
|
29
30
|
- Once this has been done, think about it being a hash-alike object with methods for the option names (i.e. `options.debug?`)
|
30
31
|
|
31
|
-
## DISCARDED IMPROVENTS
|
32
|
-
- Option to globally enable/disable the 2nd patch?
|
33
|
-
* That would make this gem completely useless.
|
34
32
|
|
35
|
-
## [0.3.
|
33
|
+
## [0.3.7] - 2023-05-xx
|
36
34
|
|
37
35
|
### Added
|
38
36
|
### Fixed
|
39
37
|
### Changed
|
40
38
|
|
41
|
-
## [0.3.
|
39
|
+
## [0.3.6] - 2023-05-15
|
40
|
+
|
41
|
+
### Fixed
|
42
|
+
- `RakeCommander::Options` inheritance of options in `options_hash` was NOT doing a `dup`
|
43
|
+
|
44
|
+
### Changed
|
45
|
+
- `RakeCommander::Options#options_hash` made public method
|
46
|
+
|
47
|
+
## [0.3.5] - 2023-05-08
|
48
|
+
|
49
|
+
### Fixed
|
50
|
+
- `RakeCommander::Options#option_reopen` using name to reopen should not redefine if passed as Symbol.
|
51
|
+
|
52
|
+
## [0.3.4] - 2023-05-08
|
53
|
+
|
54
|
+
### Fixed
|
55
|
+
- `RakeCommand::Option#name` boolean form (`[no-]`) should not be part of the name.
|
56
|
+
|
57
|
+
### Changed
|
58
|
+
- Slight refactor to the patch
|
59
|
+
|
60
|
+
## [0.3.3] - 2023-05-01
|
42
61
|
|
43
62
|
### Changed
|
44
63
|
- Replaced the patching method, so the `Rake` application doesn't need re-launch.
|
data/README.md
CHANGED
@@ -121,10 +121,6 @@ The double dash ` -- ` delimiter allows to modify the `ARGV` parsing behaviour o
|
|
121
121
|
|
122
122
|
Work has been done with the aim of providing a full patch on `rake`, provided that the main invocation command remains as `rake`.
|
123
123
|
|
124
|
-
To preserve `rake` as invocation command, though, the patch needs to relaunch the rake application when it has already started. The reason is that `rake` has already pre-parsed `ARGV` when `rake-commander` is loaded (i.e. from a `Rakefile`) and has identified as tasks things that are part of the task options.
|
125
|
-
|
126
|
-
* For compatibility with tasks declared using `RakeCommander`, the rake application is always relaunched. Anything that does not belong to task options should not be feed to rake tasks declared with rake commander classes.
|
127
|
-
|
128
124
|
### Patching `Rake`
|
129
125
|
|
130
126
|
There is only one patch onto [`Rake::Application#top_level` method](https://github.com/ruby/rake/blob/48e798484babf725b0562cc417986da513e5d0ae/lib/rake/application.rb#L131), [`collect_command_line_tasks`](https://github.com/ruby/rake/blob/48e798484babf725b0562cc417986da513e5d0ae/lib/rake/application.rb#L782) is recalled with the arguments cut (so it does not interpret task option arguments as tasks).
|
@@ -32,9 +32,9 @@ class RakeCommander
|
|
32
32
|
|
33
33
|
# Creates a new option, result of merging this `opt` with this option,
|
34
34
|
# @return [RakeCommander::Option] where opt has been merged
|
35
|
-
def merge(opt)
|
35
|
+
def merge(opt, **kargs)
|
36
36
|
raise "Expecting RakeCommander::Option. Given: #{opt.class}" unless opt.is_a?(RakeCommander::Option)
|
37
|
-
dup(**opt.dup_key_arguments, &opt.original_block)
|
37
|
+
dup(**opt.dup_key_arguments.merge(kargs), &opt.original_block)
|
38
38
|
end
|
39
39
|
|
40
40
|
# @return [Boolean] whether this option is required.
|
@@ -127,9 +127,8 @@ class RakeCommander
|
|
127
127
|
# @see #name_sym
|
128
128
|
# @return [Symbol, NilClass]
|
129
129
|
def name_word_sym(value)
|
130
|
-
return nil unless value = name_sym(value)
|
131
130
|
value = value.to_s.gsub(BOOLEAN_TOKEN, '')
|
132
|
-
|
131
|
+
return nil unless value = name_sym(value)
|
133
132
|
return nil unless value = name_words(value).first
|
134
133
|
value.downcase.to_sym
|
135
134
|
end
|
@@ -16,7 +16,7 @@ class RakeCommander
|
|
16
16
|
base.attr_inheritable :banner
|
17
17
|
base.attr_inheritable(:options_hash) do |value, subclass|
|
18
18
|
next nil unless value
|
19
|
-
value.values.uniq.each {|opt| subclass.send :add_to_options, opt}
|
19
|
+
value.values.uniq.each {|opt| subclass.send :add_to_options, opt.dup}
|
20
20
|
subclass.send(:options_hash)
|
21
21
|
end
|
22
22
|
base.class_resolver :option_class, RakeCommander::Option
|
@@ -44,6 +44,8 @@ class RakeCommander
|
|
44
44
|
end
|
45
45
|
|
46
46
|
# It re-opens an option for edition. If it does not exist, it **upserts** it.
|
47
|
+
# @note To allow reopen using the name without modifying the argument, use a Symbol
|
48
|
+
# Example: `option_reopen :opt_with_arg` will keep the argument of 'opt_with_arg'
|
47
49
|
# @note
|
48
50
|
# 1. If `override` is `false, it will fail to change the `name` or the `short`
|
49
51
|
# when they are already taken by some other option.
|
@@ -54,7 +56,10 @@ class RakeCommander
|
|
54
56
|
aux = option_class.new(*args, **kargs, sample: true, &block)
|
55
57
|
opt = options_hash.values_at(aux.name, aux.short).compact.first
|
56
58
|
return option(*args, **kargs, &block) unless opt
|
57
|
-
|
59
|
+
mod = {}.tap do |mkargs|
|
60
|
+
mkargs.merge!(name: opt.name_full) if aux.name_full.is_a?(Symbol)
|
61
|
+
end
|
62
|
+
replace_in_options(opt, opt.merge(aux, **mod), override: override)
|
58
63
|
end
|
59
64
|
|
60
65
|
# Removes options with short or name `keys` from options
|
@@ -91,6 +96,16 @@ class RakeCommander
|
|
91
96
|
options_parser(&middleware).send(method, argv)
|
92
97
|
end
|
93
98
|
|
99
|
+
# The options indexed by the short and the name (so doubled up in the hash).
|
100
|
+
# @param with_implicit [Boolean] whether free implicit shorts of declared options should be included
|
101
|
+
# among the keys (pointing to the specific option that has it implicit).
|
102
|
+
# @return [Hash] with Symbol name and shorts as keys, and `RakeCommander::Option` as values.
|
103
|
+
def options_hash(with_implicit: false)
|
104
|
+
@options_hash ||= {}
|
105
|
+
return @options_hash unless with_implicit
|
106
|
+
@options_hash.merge(implicit_shorts)
|
107
|
+
end
|
108
|
+
|
94
109
|
# List of configured options
|
95
110
|
# @return [Array<RakeCommander::Option>]
|
96
111
|
def options
|
@@ -143,16 +158,6 @@ class RakeCommander
|
|
143
158
|
OptionParser.new(&block)
|
144
159
|
end
|
145
160
|
|
146
|
-
# The options indexed by the short and the name (so doubled up in the hash).
|
147
|
-
# @param with_implicit [Boolean] whether free implicit shorts of declared options should be included
|
148
|
-
# among the keys (pointing to the specific option that has it implicit).
|
149
|
-
# @return [Hash] with Symbol name and shorts as keys, and `RakeCommander::Option` as values.
|
150
|
-
def options_hash(with_implicit: false)
|
151
|
-
@options_hash ||= {}
|
152
|
-
return @options_hash unless with_implicit
|
153
|
-
@options_hash.merge(implicit_shorts)
|
154
|
-
end
|
155
|
-
|
156
161
|
# This covers the gap where `OptionParser` auto-generates shorts out of option names.
|
157
162
|
# @note `OptionParser` implicitly generates a short for the option name. When defining
|
158
163
|
# an option that uses this short, the short gets overriden/reused by the explicit option.
|
@@ -26,10 +26,21 @@ class RakeCommander
|
|
26
26
|
# when `Rake::Application` requires the `Rakefile` that loads `rake-commander`,
|
27
27
|
# we technically only need to fix the `top_level_tasks` that have been detected.
|
28
28
|
def top_level
|
29
|
+
RakeCommander.rectify_rake_application
|
30
|
+
super
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
module ClassMethods
|
35
|
+
include RakeCommander::Patcher::Debug
|
36
|
+
|
37
|
+
# Reloading `Rakefile` has drawbacks around `require` only being launched once per
|
38
|
+
# dependency. Apparently some tasks of some gems are installed at `require` run-time.
|
39
|
+
# This requires to keep known tasks when we switch the application.
|
40
|
+
def rectify_rake_application
|
29
41
|
RakeCommander.self_load_reset
|
30
42
|
argv = RakeCommander.argv_rake_native_arguments(ARGV)
|
31
43
|
Rake.application.send(:collect_command_line_tasks, argv)
|
32
|
-
super
|
33
44
|
end
|
34
45
|
end
|
35
46
|
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.3.
|
4
|
+
version: 0.3.5
|
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-05-
|
11
|
+
date: 2023-05-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -228,7 +228,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
228
228
|
- !ruby/object:Gem::Version
|
229
229
|
version: '0'
|
230
230
|
requirements: []
|
231
|
-
rubygems_version: 3.
|
231
|
+
rubygems_version: 3.4.12
|
232
232
|
signing_key:
|
233
233
|
specification_version: 4
|
234
234
|
summary: Classing rake tasks with options. Creating re-usable tasks, options and samples
|