Class: Rubycli::JsonCoercer

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

Constant Summary collapse

THREAD_KEY =
:rubycli_json_mode

Instance Method Summary collapse

Instance Method Details

#coerce_json_value(value) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/rubycli/json_coercer.rb', line 19

def coerce_json_value(value)
  case value
  when String
    JSON.parse(value)
  when Array
    value.map { |item| coerce_json_value(item) }
  when Hash
    value.transform_values { |item| coerce_json_value(item) }
  else
    value
  end
rescue JSON::ParserError => e
  raise Rubycli::ArgumentError, "Failed to parse as JSON: #{e.message}"
end

#json_mode?Boolean

Returns:

  • (Boolean)


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

def json_mode?
  Thread.current[THREAD_KEY] == true
end

#with_json_mode(enabled = true) ⇒ Object



11
12
13
14
15
16
17
# File 'lib/rubycli/json_coercer.rb', line 11

def with_json_mode(enabled = true)
  previous = Thread.current[THREAD_KEY]
  Thread.current[THREAD_KEY] = enabled
  yield
ensure
  Thread.current[THREAD_KEY] = previous
end