Sha256: d682c48db708e9b84d0ec962b4cba2d98b13eea1bee725615c3e477f4f6a95bf

Contents?: true

Size: 754 Bytes

Versions: 1

Compression:

Stored size: 754 Bytes

Contents

class Upsert
  class Row
    attr_reader :selector
    attr_reader :document

    def initialize(selector, document)
      @selector = selector
      @document = document
    end

    def columns
      @columns ||= (selector.keys+document.keys).uniq
    end

    def pairs
      @pairs ||= columns.map do |k|
        value = if selector.has_key?(k)
          selector[k]
        else
          document[k]
        end
        [ k, value ]
      end
    end

    def inserts
      @inserts ||= pairs.map { |_, v| v }
    end

    def updates
      @updates ||= pairs.reject { |k, _| selector.has_key?(k) }
    end
    
    def to_hash
      @to_hash ||= pairs.inject({}) do |memo, (k, v)|
        memo[k.to_s] = v
        memo
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
upsert-0.0.1 lib/upsert/row.rb