Sha256: 4a50ba0fecae54ecb6957b5d5f285271955f73edcfd2c89c6ae2a8f7aaac7a17

Contents?: true

Size: 1.26 KB

Versions: 12

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_by(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

12 entries across 12 versions & 2 rubygems

Version Path
calagator-1.0.0 app/models/calagator/source/importer.rb
grokus-1.0.0.9 app/models/calagator/source/importer.rb
grokus-1.0.0.8 app/models/calagator/source/importer.rb
grokus-1.0.0.7 app/models/calagator/source/importer.rb
grokus-1.0.0.6 app/models/calagator/source/importer.rb
grokus-1.0.0.5 app/models/calagator/source/importer.rb
grokus-1.0.0.3 app/models/calagator/source/importer.rb
grokus-1.0.0.2 app/models/calagator/source/importer.rb
grokus-1.0.0.1 app/models/calagator/source/importer.rb
calagator-1.0.0.rc3 app/models/calagator/source/importer.rb
calagator-1.0.0.rc2 app/models/calagator/source/importer.rb
calagator-1.0.0.rc1 app/models/calagator/source/importer.rb