Sha256: 36941d066cef832829ea2ad876943f1b78220311b1716d76d9c8312840b73bff

Contents?: true

Size: 1.51 KB

Versions: 3

Compression:

Stored size: 1.51 KB

Contents

require 'digest/md5'

module SpatialFeatures
  module Importers
    class Base
      attr_reader :errors

      def initialize(data, make_valid: false, tmpdir: nil)
        @make_valid = make_valid
        @data = data
        @errors = []
        @tmpdir = tmpdir
      end

      def features
        @features ||= build_features
      end

      def cache_key
        @cache_key ||= Digest::MD5.hexdigest(@data)
      end

      # factory method that should always be used instead of `new` when creating importers
      # returns an array of Importer::* objects
      def self.create_all(data, **options)
        [new(data, **options)]
      end

      private

      def build_features
        new_features = []

        each_record do |record|
          begin
            new_features << build_feature(record)
          rescue => e
            @errors << e.message
          end
        end

        return new_features
      end

      def each_record(&block)
        raise NotImplementedError, 'Subclasses should implement this method and yield objects that can be passed to #build_feature'
      end

      def build_feature(record)
        importable_image_paths = record.importable_image_paths if record.respond_to?(:importable_image_paths)
        Feature.new(:name => record.name, :metadata => record.metadata, :feature_type => record.feature_type, :geog => record.geog, :importable_image_paths => importable_image_paths, :make_valid => @make_valid)
      end
    end
  end

  # EXCEPTIONS

  class ImportError < StandardError; end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
spatial_features-3.2.0 lib/spatial_features/importers/base.rb
spatial_features-3.1.0 lib/spatial_features/importers/base.rb
spatial_features-3.0.2 lib/spatial_features/importers/base.rb