Class: HammerCLI::CommandExtensions

Inherits:
Object
  • Object
show all
Defined in:
lib/hammer_cli/command_extensions.rb

Constant Summary collapse

ALLOWED_EXTENSIONS =
%i[
  option command_options before_print data output help request
  request_headers headers request_options options request_params params
  option_sources predefined_options use_option option_family
].freeze

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ CommandExtensions

Returns a new instance of CommandExtensions.



21
22
23
24
25
26
27
# File 'lib/hammer_cli/command_extensions.rb', line 21

def initialize(options = {})
  @only = options[:only] || ALLOWED_EXTENSIONS
  @only = [@only] unless @only.is_a?(Array)
  @except = options[:except] || []
  @except = [@except] unless @except.is_a?(Array)
  @inheritable = options[:inheritable]
end

Class Attribute Details

.delegateeObject

Returns the value of attribute delegatee.



4
5
6
# File 'lib/hammer_cli/command_extensions.rb', line 4

def delegatee
  @delegatee
end

Class Method Details

.before_print(&block) ⇒ Object



61
62
63
# File 'lib/hammer_cli/command_extensions.rb', line 61

def self.before_print(&block)
  @before_print_block = block
end

.extend_before_print(data, command_object, command_class) ⇒ Object



209
210
211
212
213
214
# File 'lib/hammer_cli/command_extensions.rb', line 209

def self.extend_before_print(data, command_object, command_class)
  return if @before_print_block.nil?

  @before_print_block.call(data, command_object, command_class)
  logger.debug("Called block for #{@delegatee} data:\n\t#{@before_print_block}")
end

.extend_help(command_class) ⇒ Object



223
224
225
226
227
228
# File 'lib/hammer_cli/command_extensions.rb', line 223

def self.extend_help(command_class)
  return if @help_extension_block.nil?

  command_class.help_extension_blocks << @help_extension_block
  logger.debug("Saved block for #{@delegatee} help definition:\n\t#{@help_extension_block}")
end

.extend_option_family(command_class) ⇒ Object



258
259
260
261
262
263
264
# File 'lib/hammer_cli/command_extensions.rb', line 258

def self.extend_option_family(command_class)
  return if @option_family_block.nil?

  @option_family_opts[:creator] = command_class
  command_class.send(:option_family, @option_family_opts, &@option_family_block)
  logger.debug("Called option family block for #{command_class}:\n\t#{@option_family_block}")
end

.extend_option_sources(sources, command_object, command_class) ⇒ Object



251
252
253
254
255
256
# File 'lib/hammer_cli/command_extensions.rb', line 251

def self.extend_option_sources(sources, command_object, command_class)
  return if @option_sources_block.nil?

  @option_sources_block.call(sources, command_object, command_class)
  logger.debug("Called block for #{@delegatee} option sources:\n\t#{@option_sources_block}")
end

.extend_options(command_class) ⇒ Object

Class



190
191
192
193
194
195
196
197
198
199
200
201
202
# File 'lib/hammer_cli/command_extensions.rb', line 190

def self.extend_options(command_class)
  return if @options.nil?

  @options.each do |option|
    command_class.send(:option,
                       option[:switches],
                       option[:type],
                       option[:description],
                       option[:opts],
                       &option[:block])
    logger.debug("Added option for #{command_class}: #{option}")
  end
end

.extend_output(command_class, command_object) ⇒ Object



216
217
218
219
220
221
# File 'lib/hammer_cli/command_extensions.rb', line 216

def self.extend_output(command_class, command_object)
  return if @output_extension_block.nil?

  @output_extension_block.call(command_class.output_definition, command_object, command_class)
  logger.debug("Called block for #{@delegatee} output definition:\n\t#{@output_extension_block}")
end

.extend_predefined_options(command_class) ⇒ Object



204
205
206
207
# File 'lib/hammer_cli/command_extensions.rb', line 204

def self.extend_predefined_options(command_class)
  command_class.send(:use_option, *@predefined_option_names)
  logger.debug("Added predefined options for #{command_class}: #{@predefined_option_names}")
end

.extend_request_headers(headers, command_object, command_class) ⇒ Object



230
231
232
233
234
235
# File 'lib/hammer_cli/command_extensions.rb', line 230

def self.extend_request_headers(headers, command_object, command_class)
  return if @request_headers_block.nil?

  @request_headers_block.call(headers, command_object, command_class)
  logger.debug("Called block for #{@delegatee} request headers:\n\t#{@request_headers_block}")
end

.extend_request_options(options, command_object, command_class) ⇒ Object



237
238
239
240
241
242
# File 'lib/hammer_cli/command_extensions.rb', line 237

def self.extend_request_options(options, command_object, command_class)
  return if @request_options_block.nil?

  @request_options_block.call(options, command_object, command_class)
  logger.debug("Called block for #{@delegatee} request options:\n\t#{@request_options_block}")
end

.extend_request_params(params, command_object, command_class) ⇒ Object



244
245
246
247
248
249
# File 'lib/hammer_cli/command_extensions.rb', line 244

def self.extend_request_params(params, command_object, command_class)
  return if @request_params_block.nil?

  @request_params_block.call(params, command_object, command_class)
  logger.debug("Called block for #{@delegatee} request params:\n\t#{@request_params_block}")
end

.help(&block) ⇒ Object



69
70
71
# File 'lib/hammer_cli/command_extensions.rb', line 69

def self.help(&block)
  @help_extension_block = block
end

.inheritable(boolean) ⇒ Object

DSL



45
46
47
# File 'lib/hammer_cli/command_extensions.rb', line 45

def self.inheritable(boolean)
  @inheritable = boolean
end

.inheritable?Boolean

Returns:

  • (Boolean)


10
11
12
# File 'lib/hammer_cli/command_extensions.rb', line 10

def inheritable?
  @inheritable
end

.loggerObject



6
7
8
# File 'lib/hammer_cli/command_extensions.rb', line 6

def logger
  Logging.logger[to_s]
end

.method_missing(message, *args, &block) ⇒ Object



35
36
37
38
39
40
41
# File 'lib/hammer_cli/command_extensions.rb', line 35

def self.method_missing(message, *args, &block)
  if @delegatee
    @delegatee.send(message, *args, &block)
  else
    super
  end
end

.option(switches, type, description, opts = {}, &block) ⇒ Object



49
50
51
52
53
54
55
# File 'lib/hammer_cli/command_extensions.rb', line 49

def self.option(switches, type, description, opts = {}, &block)
  @options ||= []
  @options << { switches: switches,
                type: type,
                description: description,
                opts: opts, block: block }
end

.option_family(options = {}, &block) ⇒ Object



89
90
91
92
# File 'lib/hammer_cli/command_extensions.rb', line 89

def self.option_family(options = {}, &block)
  @option_family_opts = options
  @option_family_block = block
end

.option_sources(&block) ⇒ Object



85
86
87
# File 'lib/hammer_cli/command_extensions.rb', line 85

def self.option_sources(&block)
  @option_sources_block = block
end

.output(&block) ⇒ Object



65
66
67
# File 'lib/hammer_cli/command_extensions.rb', line 65

def self.output(&block)
  @output_extension_block = block
end

.request_headers(&block) ⇒ Object



73
74
75
# File 'lib/hammer_cli/command_extensions.rb', line 73

def self.request_headers(&block)
  @request_headers_block = block
end

.request_options(&block) ⇒ Object



77
78
79
# File 'lib/hammer_cli/command_extensions.rb', line 77

def self.request_options(&block)
  @request_options_block = block
end

.request_params(&block) ⇒ Object



81
82
83
# File 'lib/hammer_cli/command_extensions.rb', line 81

def self.request_params(&block)
  @request_params_block = block
end

.use_option(*names) ⇒ Object



57
58
59
# File 'lib/hammer_cli/command_extensions.rb', line 57

def self.use_option(*names)
  @predefined_option_names = names
end

Instance Method Details

#command_class(command_class) ⇒ Object



170
171
172
# File 'lib/hammer_cli/command_extensions.rb', line 170

def command_class(command_class)
  @command_class = command_class
end

#command_object(command_object) ⇒ Object



174
175
176
# File 'lib/hammer_cli/command_extensions.rb', line 174

def command_object(command_object)
  @command_object = command_object
end

#delegatee(command_class) ⇒ Object



166
167
168
# File 'lib/hammer_cli/command_extensions.rb', line 166

def delegatee(command_class)
  self.class.delegatee = command_class
end

#detailsObject



178
179
180
181
182
183
184
185
186
# File 'lib/hammer_cli/command_extensions.rb', line 178

def details
  except = @except.empty? ? '*nothing*' : @except
  details = if @only == ALLOWED_EXTENSIONS
              "*all* except #{except}"
            else
              "#{@only} only"
            end
  "#{self.class} for #{details}"
end

#extend_before_print(data) ⇒ Object



110
111
112
113
114
115
# File 'lib/hammer_cli/command_extensions.rb', line 110

def extend_before_print(data)
  allowed = @only & %i[before_print data]
  return if allowed.empty? || (allowed & @except).any?

  self.class.extend_before_print(data, @command_object, @command_class)
end

#extend_helpObject



124
125
126
127
128
129
# File 'lib/hammer_cli/command_extensions.rb', line 124

def extend_help
  allowed = @only & %i[help]
  return if allowed.empty? || (allowed & @except).any?

  self.class.extend_help(@command_class)
end

#extend_option_familyObject



159
160
161
162
163
164
# File 'lib/hammer_cli/command_extensions.rb', line 159

def extend_option_family
  allowed = @only & %i[option_family]
  return if allowed.empty? || (allowed & @except).any?

  self.class.extend_option_family(@command_class)
end

#extend_option_sources(sources) ⇒ Object



152
153
154
155
156
157
# File 'lib/hammer_cli/command_extensions.rb', line 152

def extend_option_sources(sources)
  allowed = @only & %i[option_sources]
  return if allowed.empty? || (allowed & @except).any?

  self.class.extend_option_sources(sources, @command_object, @command_class)
end

#extend_optionsObject

Object



96
97
98
99
100
101
# File 'lib/hammer_cli/command_extensions.rb', line 96

def extend_options
  allowed = @only & %i[command_options option]
  return if allowed.empty? || (allowed & @except).any?

  self.class.extend_options(@command_class)
end

#extend_outputObject



117
118
119
120
121
122
# File 'lib/hammer_cli/command_extensions.rb', line 117

def extend_output
  allowed = @only & %i[output]
  return if allowed.empty? || (allowed & @except).any?

  self.class.extend_output(@command_class, @command_object)
end

#extend_predefined_optionsObject



103
104
105
106
107
108
# File 'lib/hammer_cli/command_extensions.rb', line 103

def extend_predefined_options
  allowed = @only & %i[predefined_options use_option]
  return if allowed.empty? || (allowed & @except).any?

  self.class.extend_predefined_options(@command_class)
end

#extend_request_headers(headers) ⇒ Object



131
132
133
134
135
136
# File 'lib/hammer_cli/command_extensions.rb', line 131

def extend_request_headers(headers)
  allowed = @only & %i[request_headers headers request]
  return if allowed.empty? || (allowed & @except).any?

  self.class.extend_request_headers(headers, @command_object, @command_class)
end

#extend_request_options(options) ⇒ Object



138
139
140
141
142
143
# File 'lib/hammer_cli/command_extensions.rb', line 138

def extend_request_options(options)
  allowed = @only & %i[request_options options request]
  return if allowed.empty? || (allowed & @except).any?

  self.class.extend_request_options(options, @command_object, @command_class)
end

#extend_request_params(params) ⇒ Object



145
146
147
148
149
150
# File 'lib/hammer_cli/command_extensions.rb', line 145

def extend_request_params(params)
  allowed = @only & %i[request_params params request]
  return if allowed.empty? || (allowed & @except).any?

  self.class.extend_request_params(params, @command_object, @command_class)
end

#inheritable?Boolean

Returns:

  • (Boolean)


29
30
31
32
33
# File 'lib/hammer_cli/command_extensions.rb', line 29

def inheritable?
  return @inheritable unless @inheritable.nil?

  self.class.inheritable? || false
end