Module: TurboBoost::Commands::AttributeHydration
- Extended by:
- AttributeHydration
- Included in:
- AttributeHydration, AttributeSet, ControllerPack
- Defined in:
- lib/turbo_boost/commands/attribute_hydration.rb
Instance Method Summary collapse
-
#dehydrate(value) ⇒ Object
RULE: If an attribute value is a Hash (not the ‘aria` or `data` key because those are handled by Rails) and the Hash does not contain an object that implements GlobalID, then the developer must convert the Hash to a JSON string manually.
- #hydrate(value) ⇒ Object
Instance Method Details
#dehydrate(value) ⇒ Object
RULE: If an attribute value is a Hash
(not the `aria` or `data` key because those are handled by Rails)
and the Hash does not contain an object that implements GlobalID,
then the developer must convert the Hash to a JSON string manually.
SOLUTION: All data that’s not a scalar/primitive value should live in ‘data` or `aria`.
33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/turbo_boost/commands/attribute_hydration.rb', line 33 def dehydrate(value) return value unless has_sgid?(value) case value when Array value.map { |val| dehydrate val } when Hash value.each_with_object(HashWithIndifferentAccess.new) do |(key, val), memo| val = dehydrate(val) memo[key] = convert_to_json?(key, val) ? val.to_json : val end else implements_sgid?(value) ? value.to_sgid_param : value end end |
#hydrate(value) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/turbo_boost/commands/attribute_hydration.rb', line 6 def hydrate(value) case value when Array value.map { |val| hydrate(val) } when Hash value.each_with_object(HashWithIndifferentAccess.new) do |(key, val), memo| memo[key] = hydrate(val) end when String parsed_value = parse_json(value) hydrated_value = hydrate(parsed_value) unless parsed_value.nil? hydrated_value ||= GlobalID::Locator.locate_signed(value) if possible_sgid_string?(value) hydrated_value || value else value end rescue => error Rails.logger.error "Failed to hydrate value! #{value}; #{error}" value end |