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
ariaordatakey 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 |