Sha256: 2429b36b81de844e3a07b6e45f56c34ec9b23f1e9f756bb0035181c1bf870300

Contents?: true

Size: 937 Bytes

Versions: 2

Compression:

Stored size: 937 Bytes

Contents

require 'frenetic/structure_registry/rebuilder'

class Frenetic
  class StructureRegistry
    class Retriever
      def initialize(signatures, resource, attributes, key, rebuilder_class: Rebuilder)
        if key.blank?
          raise ArgumentError, "When registering a resource structure, you must provide a non-blank key"
        end
        @signatures, @resource, @attributes, @key = signatures, resource, attributes, key
        @rebuilder_class = rebuilder_class
      end

      def call
        if expired?
          @rebuilder_class.new(@signatures, @resource, @attributes, @key, struct_signature).call
        else
          fetch_structure
        end
      end

      def expired?
        @signatures[@key] != struct_signature
      end

      def fetch_structure
        Struct.const_get(@key)
      end

      def struct_signature
        Digest::SHA1.hexdigest(@attributes.keys.sort.join(''))
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
frenetic-3.0.1 lib/frenetic/structure_registry/retriever.rb
frenetic-3.0.0 lib/frenetic/structure_registry/retriever.rb