Class: Rubycli::ArgumentModeController

Inherits:
Object
  • Object
show all
Defined in:
lib/rubycli/argument_mode_controller.rb

Overview

Coordinates json/eval argument modes and enforces mutual exclusion.

Instance Method Summary collapse

Constructor Details

#initialize(json_coercer:, eval_coercer:) ⇒ ArgumentModeController

Returns a new instance of ArgumentModeController.



6
7
8
9
# File 'lib/rubycli/argument_mode_controller.rb', line 6

def initialize(json_coercer:, eval_coercer:)
  @json_coercer = json_coercer
  @eval_coercer = eval_coercer
end

Instance Method Details

#apply_argument_coercions(positional_args, keyword_args) ⇒ Object



29
30
31
32
33
34
35
36
37
# File 'lib/rubycli/argument_mode_controller.rb', line 29

def apply_argument_coercions(positional_args, keyword_args)
  ensure_modes_compatible!

  coerce_values!(positional_args, keyword_args) { |value| @json_coercer.coerce_json_value(value) } if json_mode?

  coerce_values!(positional_args, keyword_args) { |value| @eval_coercer.coerce_eval_value(value) } if eval_mode?
rescue ::ArgumentError => e
  raise Rubycli::ArgumentError, e.message
end

#eval_mode?Boolean

Returns:

  • (Boolean)


15
16
17
# File 'lib/rubycli/argument_mode_controller.rb', line 15

def eval_mode?
  @eval_coercer.eval_mode?
end

#json_mode?Boolean

Returns:

  • (Boolean)


11
12
13
# File 'lib/rubycli/argument_mode_controller.rb', line 11

def json_mode?
  @json_coercer.json_mode?
end

#with_eval_mode(enabled = true, **options, &block) ⇒ Object



24
25
26
27
# File 'lib/rubycli/argument_mode_controller.rb', line 24

def with_eval_mode(enabled = true, **options, &block)
  enforce_mutual_exclusion!(:eval, enabled)
  @eval_coercer.with_eval_mode(enabled, **options, &block)
end

#with_json_mode(enabled = true, &block) ⇒ Object



19
20
21
22
# File 'lib/rubycli/argument_mode_controller.rb', line 19

def with_json_mode(enabled = true, &block)
  enforce_mutual_exclusion!(:json, enabled)
  @json_coercer.with_json_mode(enabled, &block)
end