Sha256: 523c3f49c93fb3a8a3e8981dfaec9643e5938281815ea86ae95b47d9a26718fd

Contents?: true

Size: 873 Bytes

Versions: 1

Compression:

Stored size: 873 Bytes

Contents

class Card
  module Env
    # serializing environment (eg for delayed jobs)
    module Serialization
      def serialize
        @serialized = Serializable.instance_methods.each_with_object({}) do |attr, hash|
          hash[attr] = send attr
        end
      end

      # @param serialized_env [Hash]
      def with serialized_env
        tmp_env = serialize
        @env ||= {}
        @env.update serialized_env
        yield
      ensure
        @env.update tmp_env if tmp_env
      end

      # supercede serializable methods when serialized values are available
      #
      # note - at present this must be done manually when adding serializable methods
      # in mods.
      Serializable.instance_methods.each do |attrib|
        define_method attrib do
          @serialized&.key?(attrib) ? @serialized[attrib] : super()
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
card-1.104.2 lib/card/env/serialization.rb