Sha256: 5a9d57e8afe9a78af7fbcf31d7817fe2af14ba88506da143e9b8f589e7505a5b

Contents?: true

Size: 1.26 KB

Versions: 1

Compression:

Stored size: 1.26 KB

Contents

module Calagator

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

    def import
      return unless source.valid?
      self.events = source.create_events!

      self.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-0.0.1.pre1 app/models/calagator/source/importer.rb