Sha256: 0a2598913d62d523b6a549766bab0af233e1e3bfacbeded3d277ac49e4b643e3

Contents?: true

Size: 983 Bytes

Versions: 4

Compression:

Stored size: 983 Bytes

Contents

# frozen_string_literal: true

module Importeur
  class Extractor
    def initialize(data_source, cursor, cursor_key)
      @data_source = data_source
      @cursor = cursor
      @cursor_key = cursor_key
    end

    def call
      return unless has_new_data?
      Enumerator.new do |y|
        feed.each do |item|
          y << item
        end
        store_new_dataset_id
        clear_current_dataset_id
      end
    end

    private

    attr_reader :cursor, :cursor_key, :data_source

    def has_new_data?
      last_known_id = cursor.read(cursor_key)
      current_dataset_id != last_known_id
    end

    def store_new_dataset_id
      cursor.write(cursor_key, current_dataset_id)
    end

    def clear_current_dataset_id
      @current_dataset_id = nil
    end

    def current_dataset_id
      @current_dataset_id ||= dataset_id
    end

    def dataset_id
      data_source.dataset_unique_id
    end

    def feed
      @feed ||= data_source.items
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
importeur-0.3.0 lib/importeur/extractor.rb
importeur-0.2.1 lib/importeur/extractor.rb
importeur-0.2.0 lib/importeur/extractor.rb
importeur-0.1.1 lib/importeur/extractor.rb