Sha256: b4ab970ad57f4ade385495ab759176b717742e57936f05db2a7fc183dd9b8d7d

Contents?: true

Size: 1.74 KB

Versions: 29

Compression:

Stored size: 1.74 KB

Contents

module UniverseCompiler
  module Entity

    module Marshalling


      def fully_resolved?
        fully_resolved || false
      end

      def resolve_fields_references!(from_fields = fields)
        UniverseCompiler.logger.debug "Starting resolution for '#{to_composite_key}'."
        @fields = resolve_fields_references from_fields
        UniverseCompiler.logger.debug "Completed resolution for '#{to_composite_key}'."
        self
      end

      def resolve_fields_references(from_fields = fields)
        self.fully_resolved = true
        deep_map from_fields do |leaf|
          case leaf
          when UniverseCompiler::Entity::Reference
            res = leaf.to_entity raise_error: false
            if res
              res
            else
              self.fully_resolved = false
              leaf
            end
          else
            leaf
          end
        end
      end

      def traverse_fields(fields_to_process = fields)
        deep_traverse(fields_to_process) do |leaf|
          yield leaf
        end
      end

      def dereferenced_fields(fields_to_dereference = fields)
        deep_map(fields_to_dereference) do |leaf|
          case leaf
          when UniverseCompiler::Entity::Base
            leaf.to_reference
          when Symbol, Numeric, NilClass, TrueClass, FalseClass
            leaf
          else
            leaf.clone
          end
        end
      end

      private

      attr_accessor :fully_resolved

      def marshal_dump
        { fields: dereferenced_fields, universe: universe.name }
      end

      def marshal_load(data)
        stored_universe = UniverseCompiler::Universe::Base.universes[data[:universe]]
        initialize fields: data[:fields], universe: stored_universe
      end
    end

  end
end

Version data entries

29 entries across 29 versions & 1 rubygems

Version Path
universe_compiler-0.5.6 lib/universe_compiler/entity/marshalling.rb
universe_compiler-0.5.5 lib/universe_compiler/entity/marshalling.rb
universe_compiler-0.5.4 lib/universe_compiler/entity/marshalling.rb
universe_compiler-0.5.3 lib/universe_compiler/entity/marshalling.rb
universe_compiler-0.5.2 lib/universe_compiler/entity/marshalling.rb
universe_compiler-0.5.1 lib/universe_compiler/entity/marshalling.rb
universe_compiler-0.4.3 lib/universe_compiler/entity/marshalling.rb
universe_compiler-0.4.2 lib/universe_compiler/entity/marshalling.rb
universe_compiler-0.4.1 lib/universe_compiler/entity/marshalling.rb
universe_compiler-0.4.0 lib/universe_compiler/entity/marshalling.rb
universe_compiler-0.3.12 lib/universe_compiler/entity/marshalling.rb
universe_compiler-0.3.11 lib/universe_compiler/entity/marshalling.rb
universe_compiler-0.3.10 lib/universe_compiler/entity/marshalling.rb
universe_compiler-0.3.9 lib/universe_compiler/entity/marshalling.rb
universe_compiler-0.3.8 lib/universe_compiler/entity/marshalling.rb
universe_compiler-0.3.7 lib/universe_compiler/entity/marshalling.rb
universe_compiler-0.3.6 lib/universe_compiler/entity/marshalling.rb
universe_compiler-0.3.5 lib/universe_compiler/entity/marshalling.rb
universe_compiler-0.3.4 lib/universe_compiler/entity/marshalling.rb
universe_compiler-0.3.3 lib/universe_compiler/entity/marshalling.rb