Module: Cadenya::Util
- Defined in:
- lib/cadenya/core.rb
Class Method Summary collapse
-
.deep_jsonify(value) ⇒ Object
Recursively prepare a body value for JSON: Time -> RFC 3339.
- .path_escape(value) ⇒ Object
-
.path_param(name, value) ⇒ Object
Encode one path segment, rejecting blank values at the boundary — an empty segment silently rewrites the route (/parents//children).
-
.plain(value) ⇒ Object
Unwrap decoded value objects (and containers of them) into plain snake-keyed hashes so responses round-trip into request params.
- .query_value(value) ⇒ Object
-
.timestamp(value) ⇒ Object
RFC 3339 with caller-supplied fractional seconds preserved (trailing fractional zeros trimmed): plain iso8601 would silently truncate to whole seconds.
Class Method Details
.deep_jsonify(value) ⇒ Object
Recursively prepare a body value for JSON: Time -> RFC 3339.
66 67 68 69 70 71 72 73 |
# File 'lib/cadenya/core.rb', line 66 def deep_jsonify(value) case value when Time then (value) when Hash then value.to_h { |k, v| [k, deep_jsonify(v)] } when Array then value.map { |v| deep_jsonify(v) } else value end end |
.path_escape(value) ⇒ Object
45 46 47 |
# File 'lib/cadenya/core.rb', line 45 def path_escape(value) CGI.escape(value.to_s).gsub("+", "%20") end |
.path_param(name, value) ⇒ Object
Encode one path segment, rejecting blank values at the boundary — an empty segment silently rewrites the route (/parents//children).
51 52 53 54 55 56 |
# File 'lib/cadenya/core.rb', line 51 def path_param(name, value) text = value.to_s raise ArgumentError, "missing required path parameter #{name}" if text.strip.empty? path_escape(text) end |
.plain(value) ⇒ Object
Unwrap decoded value objects (and containers of them) into plain snake-keyed hashes so responses round-trip into request params.
77 78 79 80 81 82 83 84 |
# File 'lib/cadenya/core.rb', line 77 def plain(value) case value when Hash then value.to_h { |k, v| [k, plain(v)] } when Array then value.map { |v| plain(v) } else value.class.name.to_s.start_with?("#{name.split("::").first}::Types") ? value.to_h : value end end |
.query_value(value) ⇒ Object
86 87 88 89 90 91 92 |
# File 'lib/cadenya/core.rb', line 86 def query_value(value) case value when true, false then value.to_s when Time then (value) else value.to_s end end |
.timestamp(value) ⇒ Object
RFC 3339 with caller-supplied fractional seconds preserved (trailing fractional zeros trimmed): plain iso8601 would silently truncate to whole seconds.
61 62 63 |
# File 'lib/cadenya/core.rb', line 61 def (value) value.iso8601(9).sub(/\.(\d*?)0+(?=Z|[+-])/) { Regexp.last_match(1).empty? ? "" : ".#{Regexp.last_match(1)}" } end |