Sha256: c366c4fb19317d638d102ea1bcef8b3d9a64e6e0f375cd982db1bb5b574ede94

Contents?: true

Size: 942 Bytes

Versions: 5

Compression:

Stored size: 942 Bytes

Contents

module Sprig
  class Dependency
    attr_reader :id

    def self.for(klass, sprig_id)
      klass = to_klass(klass)
      sprig_id = sprig_id.to_s

      collection.get(klass, sprig_id) || new(klass, sprig_id)
    end

    def initialize(klass, sprig_id)
      @klass = klass
      @sprig_id = sprig_id
      @id = SecureRandom.uuid

      self.class.collection.set(klass, sprig_id, self)
    end

    def sprig_record_reference
      "sprig_record(#{klass}, #{sprig_id})"
    end

    private

    attr_reader :klass, :sprig_id

    def self.to_klass(klass)
      if klass.is_a?(String)
        klass = klass.classify.constantize
      end

      raise ArgumentError, 'First argument must be a Class.' unless klass.is_a?(Class)

      klass
    rescue NameError => e
      raise NameError, e.message
      #TODO: rescue bad class references
    end

    def self.collection
      @@collection ||= DependencyCollection.new
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
sprig-0.1.4 lib/sprig/dependency.rb
sprig-0.1.3 lib/sprig/dependency.rb
sprig-0.1.2 lib/sprig/dependency.rb
sprig-0.1.1 lib/sprig/dependency.rb
sprig-0.1.0 lib/sprig/dependency.rb