Sha256: e25ccc5fa7a7e9c42e977262bf182a0090dfe5196b73b09afa0275e3ab221208

Contents?: true

Size: 1.38 KB

Versions: 19

Compression:

Stored size: 1.38 KB

Contents

require 'arc-furnace/source'

module ArcFurnace
  class AbstractJoin < Source
    private_attr_reader :hash, :source, :key_column

    # The source is a source, the hash is a hash, and one can optionally
    # pass the key column to get the primary key for each source entity, the
    # default is equijoin semantics--the key of the hash is used.
    def initialize(source: , hash:, key_column: nil)
      if source.is_a?(::ArcFurnace::Source) && hash.is_a?(::ArcFurnace::Hash)
        @hash = hash
        @source = source
        @key_column = key_column || hash.key_column
      else
        raise 'Must be passed one Hash and one Source!'
      end
    end

    def value
      if @value.nil? && !empty?
        advance
      end
      @value
    end


    def advance
      raise "Unimplemented!"
    end

    delegate empty?: :source

    protected

    def merge_source_row(source_row)
      key = source_row[key_column]
      if key
        if hash_value = hash.get(key)
          hash_value = hash_value.deep_dup
          source_row.each do |key, value|
            hash_value[key] = value
          end
          @value = hash_value
          true
        else
          error_handler.missing_hash_key(source_row: source_row, key: key, node_id: node_id)
          false
        end
      else
        error_handler.missing_join_key(source_row: source_row, node_id: node_id)
      end
    end

  end
end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
arc-furnace-0.1.23 lib/arc-furnace/abstract_join.rb
arc-furnace-0.1.22 lib/arc-furnace/abstract_join.rb
arc-furnace-0.1.21 lib/arc-furnace/abstract_join.rb
arc-furnace-0.1.20 lib/arc-furnace/abstract_join.rb
arc-furnace-0.1.19 lib/arc-furnace/abstract_join.rb
arc-furnace-0.1.18 lib/arc-furnace/abstract_join.rb
arc-furnace-0.1.16 lib/arc-furnace/abstract_join.rb
arc-furnace-0.1.15 lib/arc-furnace/abstract_join.rb
arc-furnace-0.1.14 lib/arc-furnace/abstract_join.rb
arc-furnace-0.1.13 lib/arc-furnace/abstract_join.rb
arc-furnace-0.1.12 lib/arc-furnace/abstract_join.rb
arc-furnace-0.1.11 lib/arc-furnace/abstract_join.rb
arc-furnace-0.1.10 lib/arc-furnace/abstract_join.rb
arc-furnace-0.1.9 lib/arc-furnace/abstract_join.rb
arc-furnace-0.1.8 lib/arc-furnace/abstract_join.rb
arc-furnace-0.1.7 lib/arc-furnace/abstract_join.rb
arc-furnace-0.1.6 lib/arc-furnace/abstract_join.rb
arc-furnace-0.1.5 lib/arc-furnace/abstract_join.rb
arc-furnace-0.1.4 lib/arc-furnace/abstract_join.rb