Sha256: 8136d516f937a568865282983e93e510f54cdfb45f5b7617b6de5fe8fa906e19

Contents?: true

Size: 1.33 KB

Versions: 1

Compression:

Stored size: 1.33 KB

Contents

module Calagator
  class Source < ActiveRecord::Base
    class Importer < Struct.new(:source, :events)
      def initialize(params)
        self.source = Source.find_or_create_by(params)
      end

      def import
        return unless source.valid?

        self.events = source.create_events!

        events.present?
      rescue Source::Parser::NotFound
        add_error 'No events found at remote site. Is the event identifier in the URL correct?'
      rescue Source::Parser::HttpAuthenticationRequiredError
        add_error "Couldn't import events, remote site requires authentication."
      rescue OpenURI::HTTPError
        add_error "Couldn't download events, remote site may be experiencing connectivity problems."
      rescue Errno::EHOSTUNREACH
        add_error "Couldn't connect to remote site."
      rescue SocketError
        add_error "Couldn't find IP address for remote site. Is the URL correct?"
      rescue Exception => e
        add_error "Unknown error: #{e}"
      end

      def failure_message
        if events.nil?
          "Unable to import: #{source.errors.full_messages.to_sentence}"
        else
          'Unable to find any upcoming events to import from this source'
        end
      end

      private

      def add_error(message)
        source.errors.add :base, message
        nil
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
calagator-1.1.0 app/models/calagator/source/importer.rb