rake-commander 0.4.1 → 0.4.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: fced681b17be5244fd8cf23294e246e060d7d52daba92a11f84e396d3f0c2ec4
4
- data.tar.gz: b7937192c15dab0e9acf907ee4d7dacc505de9724967b96064881a30be2c5f6e
3
+ metadata.gz: df772a60961a47e57f4904ffd9b813add5a6d4477a07834eb4f177fb25eb536a
4
+ data.tar.gz: 2a7225798390df7f5ed428092803e3e3d4facf31900bc9085f8cdda2b61122fd
5
5
  SHA512:
6
- metadata.gz: 2c36cf00c0dc4afa116e548e7e643b39a7f64f38f64990c9b8f7c11b2dca340979de9f0b6a9d53c532fa041898182dcc4a1c634ba2eedf874515c4257091a999
7
- data.tar.gz: cecf9b603645401cf14e38d4745be6d6619f505adf3cbf1f2f482f4901d220e45539b434bcf75d99d61e6bb460c22594d7eb52e3da15312ebcd85fd4c46d94fd
6
+ metadata.gz: 45e87f2067c2370748eb96d9929d133b8ccacdf724c100823cbf6a6a3374ad53b106f7d04742a0aee1e3bd6700668d49d0dc89285536b482c42fa580c788abbf
7
+ data.tar.gz: 907efaa1b66452cd63c43f36176a07462b0a7f4061196567aaa8b75fe572db0bf230245900488722b8acc39f7084b1abd968533e048607e15e6898ffe7ef935f
data/.gitignore CHANGED
@@ -10,6 +10,8 @@ Gemfile.lock
10
10
  # build artifacts
11
11
  *.gem
12
12
  /.bundle/
13
+ /.vscode
14
+ .solargraph.yml
13
15
  /vendor/bundle
14
16
  /spec/reports/
15
17
  /tmp/
data/.rubocop.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  AllCops:
2
- TargetRubyVersion: 3.2.2
2
+ TargetRubyVersion: 3.2
3
3
  NewCops: enable
4
4
 
5
5
  Metrics/ClassLength:
data/CHANGELOG.md CHANGED
@@ -31,7 +31,27 @@ All notable changes to this project will be documented in this file.
31
31
  - 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.
32
32
  - Once this has been done, think about it being a hash-alike object with methods for the option names (i.e. `options.debug?`)
33
33
 
34
- ## [0.4.1] - 2025-02-xx
34
+ ## [0.4.4] - 2026-04-xx
35
+
36
+ ### Added
37
+
38
+ ### Fixed
39
+
40
+ ### Changed
41
+
42
+ ## [0.4.3] - 2026-04-15
43
+
44
+ ### Fixed
45
+
46
+ - Option block wasn't correctly handling `value`.
47
+
48
+ ## [0.4.2] - 2025-02-25
49
+
50
+ ### Fixed
51
+
52
+ - `Option#type_coercion` should be dupped on inheritance.
53
+
54
+ ## [0.4.1] - 2025-02-20
35
55
 
36
56
  ### Added
37
57
 
@@ -15,11 +15,14 @@ class RakeCommander
15
15
  attrs = attrs.map(&:to_sym)
16
16
  inheritable_class_var(*attrs, deep_dup: deep_dup, &block)
17
17
  return unless add_accessors
18
+
18
19
  attrs.each do |attr|
19
20
  class_eval <<-RUBY, __FILE__, __LINE__ + 1
20
- class << self; attr_accessor :#{attr} end
21
+ # class << self; attr_accessor :class_var; end
22
+ class << self; attr_accessor :#{attr}; end
21
23
  RUBY
22
24
  end
25
+
23
26
  self
24
27
  end
25
28
 
@@ -35,7 +38,8 @@ class RakeCommander
35
38
  # that should NOT be inheritable.
36
39
  def attr_not_inheritable(*attrs)
37
40
  attrs.each do |attr|
38
- next unless method = inheritable_class_var_method(attr)
41
+ next unless (method = inheritable_class_var_method(attr))
42
+
39
43
  inheritable_class_var[method].delete(attr)
40
44
  end
41
45
  self
@@ -86,6 +90,7 @@ class RakeCommander
86
90
  }.tap do |hash|
87
91
  hash[:deep_dup][:inheritable_class_var] = :default
88
92
  end
93
+
89
94
  @inheritable_class_var.tap do |_methods|
90
95
  vars.each {|var| inheritable_class_var_add(var, deep_dup: deep_dup, &block)}
91
96
  end
@@ -97,7 +102,9 @@ class RakeCommander
97
102
  # Remove previous definition if present
98
103
  attr_not_inheritable(var)
99
104
  method = deep_dup || block ? :deep_dup : :mirror
105
+
100
106
  inheritable_class_var[method][var] = block || :default
107
+
101
108
  self
102
109
  end
103
110
 
@@ -20,21 +20,26 @@ class RakeCommander
20
20
  return yield(value) if block_given?
21
21
  return value unless dup_objects
22
22
  return value.deep_dup if value.respond_to?(:deep_dup)
23
+
23
24
  value.dup
24
25
  end
25
26
 
26
27
  # Custom Hash#deep_dup for rake commander
27
28
  def custom_hash_deep_dup(original, dup_objects: true, &dup_block)
28
29
  raise ArgumentError, "Expecting Hash. Given: #{original.class}" unless original.is_a?(Hash)
30
+
29
31
  hash = original.dup
32
+
30
33
  original.each_pair do |key, value|
31
34
  unless key.frozen? && key.is_a?(::String)
32
35
  hash.delete(key)
33
36
  key = custom_deep_dup(key, dup_objects: dup_objects, &dup_block) if dup_objects
34
37
  end
35
- value = dup_objects ? custom_deep_dup(value, dup_objects: dup_objects, &dup_block) : value
38
+
39
+ value = custom_deep_dup(value, dup_objects: dup_objects, &dup_block) if dup_objects
36
40
  hash[key] = value
37
41
  end
42
+
38
43
  hash
39
44
  end
40
45
  end
@@ -152,11 +152,11 @@ class RakeCommander
152
152
  {}.tap do |kargs|
153
153
  configure_other
154
154
 
155
- kargs.merge!(short: short.dup.freeze) if short
156
- kargs.merge!(name: name_full.dup.freeze) if name_full
157
- kargs.merge!(desc: @desc.dup) if @desc
158
- kargs.merge!(default: @default.dup) if default?
159
- kargs.merge!(type: @type_coercion) if allowed_type?(@type_coercion)
155
+ kargs.merge!(short: short.dup.freeze) if short
156
+ kargs.merge!(name: name_full.dup.freeze) if name_full
157
+ kargs.merge!(desc: @desc.dup) if @desc
158
+ kargs.merge!(default: @default.dup) if default?
159
+ kargs.merge!(type: dupped_type) if allowed_type?(@type_coercion)
160
160
  kargs.merge!(required: required?)
161
161
  end
162
162
  end
@@ -178,12 +178,10 @@ class RakeCommander
178
178
  block_extra_args = [default, short, name, self]
179
179
 
180
180
  proc do |value|
181
- value = !value if type_coercion == FalseClass
182
- args = block_extra_args.dup.unshift(value)
183
-
184
- original_block&.call(*args)
185
-
186
- middleware&.call(*args)
181
+ value = !value if type_coercion == FalseClass
182
+ value = original_block.call(value, *block_extra_args) if original_block
183
+ value = middleware.call(value, *block_extra_args) if middleware
184
+ value
187
185
  end
188
186
  end
189
187
 
@@ -282,5 +280,17 @@ class RakeCommander
282
280
  def fetch_desc_from_other(original = nil)
283
281
  joined_lines(original, fetch_desc!(other_args))
284
282
  end
283
+
284
+ def dupped_type
285
+ return @type_coercion if @type_coercion.is_a?(Class)
286
+ return @type_coercion unless @type_coercion.is_a?(Array)
287
+
288
+ @type_coercion.map do |value|
289
+ next value if value.is_a?(Class)
290
+ next value unless value.respond_to?(:dup)
291
+
292
+ value.dup
293
+ end
294
+ end
285
295
  end
286
296
  end
@@ -3,8 +3,8 @@ class RakeCommander
3
3
  # Offers helpers to treat `ARGV`
4
4
  module Arguments
5
5
  RAKE_COMMAND_EXTENDED_OPTIONS_START = '--'.freeze
6
- NAME_ARGUMENT = /^--(?<option>[\w_-]*).*?$/
7
- BOOLEAN_ARGUMENT = /(?:^|--)no-(?<option>[\w_-]*).*?$/
6
+ NAME_ARGUMENT = /^--(?<option>[\w-]*).*?$/ # \w already has _
7
+ BOOLEAN_ARGUMENT = /(?:^|--)no-(?<option>[\w-]*).*?$/
8
8
 
9
9
  class << self
10
10
  def included(base)
@@ -237,7 +237,7 @@ class RakeCommander
237
237
  argv.each_with_object([]) do |arg, out|
238
238
  if single_hyphen?(arg) # short option(s)
239
239
  options = arg.match(SINGLE_HYPHEN_REGEX)[:options]
240
- options.split('').each do |short|
240
+ options.split('').each do |short| # rubocop:disable Style/StringChars
241
241
  out << short_sym(short)
242
242
  end
243
243
  elsif double_hyphen?(arg) # name option
@@ -34,7 +34,12 @@ class RakeCommander
34
34
  # @param results [Hash] with `short` option as `key` and final value as `value`.
35
35
  # @see `RakeCommander::Options#parse_options`
36
36
  def parse_options(argv = ARGV, results: {}, leftovers: [], &middleware)
37
- leftovers.push(*super(argv, &results_collector(results, &middleware)))
37
+ leftovers.push(
38
+ *super(
39
+ argv,
40
+ &results_collector(results, &middleware)
41
+ )
42
+ )
38
43
  end
39
44
 
40
45
  # **Extend** method to ensure options are parsed before calling task.
@@ -1,3 +1,3 @@
1
1
  class RakeCommander
2
- VERSION = '0.4.1'.freeze
2
+ VERSION = '0.4.3'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rake-commander
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oscar Segura Samper
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2025-02-20 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: dotenv
@@ -124,7 +123,6 @@ dependencies:
124
123
  - - "<"
125
124
  - !ruby/object:Gem::Version
126
125
  version: '14'
127
- description:
128
126
  email:
129
127
  - oscar@ecoportal.co.nz
130
128
  executables: []
@@ -191,7 +189,6 @@ licenses:
191
189
  - MIT
192
190
  metadata:
193
191
  rubygems_mfa_required: 'true'
194
- post_install_message:
195
192
  rdoc_options: []
196
193
  require_paths:
197
194
  - lib
@@ -206,8 +203,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
206
203
  - !ruby/object:Gem::Version
207
204
  version: '0'
208
205
  requirements: []
209
- rubygems_version: 3.5.23
210
- signing_key:
206
+ rubygems_version: 4.0.8
211
207
  specification_version: 4
212
208
  summary: Classing rake tasks with options. Creating re-usable tasks, options and samples
213
209
  thereof.