Sha256: 37f06b73ab3b5c98622045d27e18d728b81099b1f69bb2b0c0583155b2f5c85b

Contents?: true

Size: 1.21 KB

Versions: 5

Compression:

Stored size: 1.21 KB

Contents

# frozen_string_literal: true

require_relative "ref/builder"
require_relative "ref/defer"
require_relative "ref/resolver"
require_relative "ref/shorthand_methods"

module Factrey
  # Represents a reference that can be embedded in the data and resolved later.
  #
  # {Ref}s and {Defer}s are usually created through {ShorthandMethods#ref}.
  # @example
  #   # Some data containing several references:
  #   include Factrey::Ref::ShorthandMethods
  #   some_data1 = [12, ref.foo, 34, ref.bar, 56]
  #   some_data2 = { foo: ref.foo, foobar: ref { |foo, bar| foo + bar } }
  #
  #   # Resolve references by a `mapping` hash table:
  #   mapping = { foo: 'hello', bar: 'world' }
  #   resolver = Factrey::Ref::Resolver.new { mapping.fetch(_1) }
  #   resolver.resolve(some_data1) #=> [12, 'hello', 34, 'world', 56]
  #   resolver.resolve(some_data2) #=> { foo: 'hello', foobar: 'helloworld' }
  class Ref
    # @return [Symbol]
    attr_reader :name

    # @param name [Symbol]
    def initialize(name)
      raise TypeError, "name must be a Symbol" unless name.is_a?(Symbol)

      @name = name
    end

    def ==(other) = other.is_a?(Ref) && other.name == name

    def eql?(other) = self == other

    def hash = name.hash
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
factrey-0.5.0 lib/factrey/ref.rb
factrey-0.4.0 lib/factrey/ref.rb
factrey-0.3.0 lib/factrey/ref.rb
factrey-0.2.0 lib/factrey/ref.rb
factrey-0.1.0 lib/factrey/ref.rb