hammer_cli 3.14.0 → 3.15.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
  SHA256:
3
- metadata.gz: 682498506056a4d18876c29924250c7050dbc143878fcf03d8bec72140dcfdb4
4
- data.tar.gz: 4c135d71447e67d75bf6b763d90fcc5b30e41f360683f4205066862854cc3fe3
3
+ metadata.gz: e59588fd8f86b76aee78fc150ea938650b2f5df37c6dba8e53be5d44a1117f8f
4
+ data.tar.gz: f5d84d4062dc8c9a8db3856b1e6569980c86597ae4b7d96a439c0128b832365a
5
5
  SHA512:
6
- metadata.gz: 1451af2336736479bd7a630b1717d42a3563ae8e24261a778e705417e060d18c286c2524e696f723b46059e5e4077ac5b5fb5e16f445f6297a2b87db0dcdb0b1
7
- data.tar.gz: '0937139414c830add628ce0042ec4575a4972ab9e0d860babac4ef3d3c2976e53f5819464bc8e1e8e781a5cf8c5c93d45d01fde3f810645f5f135c60e9f90a76'
6
+ metadata.gz: 332b4e7295ee014cbf01f7abf00f41a11a67291955ac118814a832c1cd169a9e53b60cb618385a50399488311837c8c3bce78234986d3a3487107e6d9f14af0b
7
+ data.tar.gz: 7aceb50f62e7ede2ab787e89af97cf49375175c054fa301a74602506529ea7d9f4f311df4a60513fd47894c3b9e03768de04e0ba49220020cf59c9bb20c0900f
@@ -755,6 +755,35 @@ def adapter
755
755
  end
756
756
  ```
757
757
 
758
+ #### Deprecating fields
759
+ To deprecate a field, add `:deprecated => true` as an option for the field. This will print a warning message to stderr whenever the field is displayed. Consider removing this field from the default set so it is not displayed without a `--fields` param:
760
+
761
+ ```
762
+ field :dep_fld, _("Deprecated field"), Fields::Field, :sets => ['ALL'], :deprecated => true
763
+ ```
764
+
765
+ Example output:
766
+
767
+ ```
768
+ $ hammer foo info --fields "Deprecated field"
769
+ Warning: Field 'Deprecated field' is deprecated and may be removed in future versions.
770
+ Deprecated field: bar
771
+ ```
772
+
773
+ Additionally, a field may be 'replaced by' another field using `:replaced_by => "Path/To/New/Field"`. This will mark the field as deprecated and print a similar warning message to stderr whenever the field is displayed:
774
+
775
+ ```
776
+ field :rep_fld, _("Replaced field"), Fields::Field, :sets => ['ALL'], :replaced_by => "Path/New field"
777
+ ```
778
+
779
+ Example output:
780
+
781
+ ```
782
+ $ hammer foo info --fields "Replaced field"
783
+ Warning: Field 'Replaced field' is deprecated. Consider using 'Path/New field' instead.
784
+ Replaced field: bar
785
+ ```
786
+
758
787
  #### Verbosity
759
788
  Currently Hammer [defines](https://github.com/theforeman/hammer-cli/blob/master/lib/hammer_cli/verbosity.rb) three basic verbose modes:
760
789
  * __QUIET__ - Prints nothing
data/doc/release_notes.md CHANGED
@@ -1,5 +1,14 @@
1
1
  Release notes
2
2
  =============
3
+ ### 3.15.0 (2025-05-14)
4
+ * Translate warning message ([PR #396](https://github.com/theforeman/hammer-cli/pull/396)), [#38410](http://projects.theforeman.org/issues/38410)
5
+ * Add mechanism for deprecating displayed fields ([PR #395](https://github.com/theforeman/hammer-cli/pull/395)), [#38410](http://projects.theforeman.org/issues/38410)
6
+ * Fix test using #inspect on a hash
7
+ * Add base64 and csv dependencies for ruby 3.4 compatibility
8
+ * Fix gemspec/ordereddependencies cop
9
+ * Use actions/checkout@v4
10
+ * Bump to 3.15.0-develop
11
+
3
12
  ### 3.14.0 (2025-02-20)
4
13
  * Check better for parent option desc injection, [#38126](http://projects.theforeman.org/issues/38126)
5
14
  * Bump apipie-bindings to 0.7.0
@@ -42,6 +42,12 @@ module HammerCLI::Output::Adapter
42
42
  end
43
43
 
44
44
  def render_field(field, data, label_width)
45
+ if field.replaced_by
46
+ warn _("Warning: Field '%{field}' is deprecated. Consider using '%{replacement}' instead.") % { field: field.full_label, replacement: field.replaced_by }
47
+ elsif field.deprecated
48
+ warn _("Warning: Field '%{field}' is deprecated and may be removed in future versions.") % { field: field.full_label }
49
+ end
50
+
45
51
  if field.is_a? Fields::ContainerField
46
52
  output = ""
47
53
 
@@ -4,7 +4,7 @@ module Fields
4
4
  class Field
5
5
  attr_reader :path
6
6
  attr_writer :sets
7
- attr_accessor :label, :parent
7
+ attr_accessor :label, :parent, :replaced_by, :deprecated
8
8
 
9
9
  def initialize(options={})
10
10
  @hide_blank = options[:hide_blank].nil? ? false : options[:hide_blank]
@@ -12,6 +12,8 @@ module Fields
12
12
  @path = options[:path] || []
13
13
  @label = options[:label]
14
14
  @sets = options[:sets]
15
+ @replaced_by = options[:replaced_by]
16
+ @deprecated = (options[:deprecated].nil?) ? !@replaced_by.nil? : options[:deprecated]
15
17
  @options = options
16
18
  end
17
19
 
@@ -1,5 +1,5 @@
1
1
  module HammerCLI
2
2
  def self.version
3
- @version ||= Gem::Version.new "3.14.0"
3
+ @version ||= Gem::Version.new "3.15.0"
4
4
  end
5
5
  end
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -185,7 +185,7 @@ describe HammerCLI::AbstractCommand do
185
185
  test_command_class.option(['--password'], 'PASSWORD', 'Password')
186
186
  test_command = test_command_class.new("")
187
187
  test_command.run ['--password=pass']
188
- _(@log_output.readline.strip).must_equal "INFO HammerCLI::AbstractCommand : Called with options: {\"option_password\"=>\"***\"}"
188
+ _(@log_output.readline.strip).must_match(%r{INFO HammerCLI::AbstractCommand : Called with options: {\"option_password\"\s*=>\s*\"\*\*\*\"}})
189
189
  end
190
190
  end
191
191
 
@@ -28,6 +28,9 @@ describe HammerCLI::Output::Adapter::Base do
28
28
  let(:blank) { Fields::Field.new(:path => [:blank], :label => "Blank", :hide_blank => true) }
29
29
  let(:login) { Fields::Field.new(:path => [:login], :label => "Login") }
30
30
  let(:missing) { Fields::Field.new(:path => [:login], :label => "Missing", :hide_missing => false) }
31
+ let (:deprecated_a) { Fields::Field.new(:path => [:deprecated_a], :label => "Deprecated", :deprecated => true) }
32
+ let (:new_field) { Fields::Field.new(:path => [:new_field], :label => "New field") }
33
+ let (:deprecated_b) { Fields::Field.new(:path => [:deprecated_b], :label => "Replaced by", :replaced_by => 'New field') }
31
34
 
32
35
  let(:data) { HammerCLI::Output::RecordCollection.new [{
33
36
  :id => 112,
@@ -55,7 +58,10 @@ describe HammerCLI::Output::Adapter::Base do
55
58
  :name => 'size',
56
59
  :value => '32'
57
60
  }
58
- ]
61
+ ],
62
+ deprecated_a: 'deprecated_a',
63
+ deprecated_b: 'deprecated_b',
64
+ new_field: 'new_field'
59
65
  }]}
60
66
 
61
67
  it "should print one field" do
@@ -199,6 +205,31 @@ describe HammerCLI::Output::Adapter::Base do
199
205
  _{ adapter.print_collection(fields, data) }.must_output(expected_output)
200
206
  end
201
207
 
208
+ it "should warn about deprecated fields" do
209
+ fields = [deprecated_a]
210
+
211
+ expected_stdout= [
212
+ "Deprecated: deprecated_a",
213
+ "\n"
214
+ ].join("\n")
215
+ expected_stderr = "Warning: Field 'Deprecated' is deprecated and may be removed in future versions.\n"
216
+
217
+ _{ adapter.print_collection(fields, data) }.must_output(stdout=expected_stdout, stderr=expected_stderr)
218
+ end
219
+
220
+ it "should warn about replaced fields" do
221
+ fields = [new_field, deprecated_b]
222
+
223
+ expected_stdout= [
224
+ "New field: new_field",
225
+ "Replaced by: deprecated_b",
226
+ "\n"
227
+ ].join("\n")
228
+ expected_stderr = "Warning: Field 'Replaced by' is deprecated. Consider using 'New field' instead.\n"
229
+
230
+ _{ adapter.print_collection(fields, data) }.must_output(stdout=expected_stdout, stderr=expected_stderr)
231
+ end
232
+
202
233
  context 'printing by chunks' do
203
234
  let(:context) { { show_ids: true } }
204
235
  let(:collection_count) { 30 }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hammer_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.14.0
4
+ version: 3.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Bačovský
@@ -9,30 +9,38 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2025-02-20 00:00:00.000000000 Z
12
+ date: 2025-05-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: clamp
15
+ name: amazing_print
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: 1.3.1
21
- - - "<"
22
- - !ruby/object:Gem::Version
23
- version: 2.0.0
20
+ version: '0'
24
21
  type: :runtime
25
22
  prerelease: false
26
23
  version_requirements: !ruby/object:Gem::Requirement
27
24
  requirements:
28
25
  - - ">="
29
26
  - !ruby/object:Gem::Version
30
- version: 1.3.1
31
- - - "<"
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: apipie-bindings
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
32
33
  - !ruby/object:Gem::Version
33
- version: 2.0.0
34
+ version: 0.7.0
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: 0.7.0
34
42
  - !ruby/object:Gem::Dependency
35
- name: logging
43
+ name: base64
36
44
  requirement: !ruby/object:Gem::Requirement
37
45
  requirements:
38
46
  - - ">="
@@ -46,21 +54,27 @@ dependencies:
46
54
  - !ruby/object:Gem::Version
47
55
  version: '0'
48
56
  - !ruby/object:Gem::Dependency
49
- name: unicode-display_width
57
+ name: clamp
50
58
  requirement: !ruby/object:Gem::Requirement
51
59
  requirements:
52
60
  - - ">="
53
61
  - !ruby/object:Gem::Version
54
- version: '0'
62
+ version: 1.3.1
63
+ - - "<"
64
+ - !ruby/object:Gem::Version
65
+ version: 2.0.0
55
66
  type: :runtime
56
67
  prerelease: false
57
68
  version_requirements: !ruby/object:Gem::Requirement
58
69
  requirements:
59
70
  - - ">="
60
71
  - !ruby/object:Gem::Version
61
- version: '0'
72
+ version: 1.3.1
73
+ - - "<"
74
+ - !ruby/object:Gem::Version
75
+ version: 2.0.0
62
76
  - !ruby/object:Gem::Dependency
63
- name: amazing_print
77
+ name: csv
64
78
  requirement: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - ">="
@@ -74,7 +88,7 @@ dependencies:
74
88
  - !ruby/object:Gem::Version
75
89
  version: '0'
76
90
  - !ruby/object:Gem::Dependency
77
- name: highline
91
+ name: fast_gettext
78
92
  requirement: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - ">="
@@ -88,7 +102,7 @@ dependencies:
88
102
  - !ruby/object:Gem::Version
89
103
  version: '0'
90
104
  - !ruby/object:Gem::Dependency
91
- name: fast_gettext
105
+ name: highline
92
106
  requirement: !ruby/object:Gem::Requirement
93
107
  requirements:
94
108
  - - ">="
@@ -116,19 +130,33 @@ dependencies:
116
130
  - !ruby/object:Gem::Version
117
131
  version: 2.0.6
118
132
  - !ruby/object:Gem::Dependency
119
- name: apipie-bindings
133
+ name: logging
120
134
  requirement: !ruby/object:Gem::Requirement
121
135
  requirements:
122
136
  - - ">="
123
137
  - !ruby/object:Gem::Version
124
- version: 0.7.0
138
+ version: '0'
125
139
  type: :runtime
126
140
  prerelease: false
127
141
  version_requirements: !ruby/object:Gem::Requirement
128
142
  requirements:
129
143
  - - ">="
130
144
  - !ruby/object:Gem::Version
131
- version: 0.7.0
145
+ version: '0'
146
+ - !ruby/object:Gem::Dependency
147
+ name: unicode-display_width
148
+ requirement: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ type: :runtime
154
+ prerelease: false
155
+ version_requirements: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
132
160
  description: 'Hammer cli provides universal extendable CLI interface for ruby apps
133
161
 
134
162
  '