Class: Federails::Host

Inherits:
ApplicationRecord show all
Defined in:
app/models/federails/host.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.create_or_update(domain, min_update_interval: 0) ⇒ Object

Creates or update a Host

Parameters:

  • domain (String)

    Domain to check

  • min_update_interval (Integer, ActiveSupport::Duration) (defaults to: 0)

    Minimum amount of seconds since the last update to fetch fresh data



34
35
36
37
38
39
40
41
42
43
44
45
# File 'app/models/federails/host.rb', line 34

def create_or_update(domain, min_update_interval: 0)
  entry = find_or_initialize_by domain: domain
  return if min_update_interval && entry.persisted? && (entry.updated_at + min_update_interval) > Time.current

  entry.sync!

  entry
rescue Fediverse::NodeInfo::NoActivityPubError
  Rails.logger.info { "#{domain} does not provide ActivityPub service" }
rescue Federails::Utils::JsonRequest::UnhandledResponseStatus, Faraday::SSLError => e
  Rails.logger.info { "Error connecting to #{domain}: '#{e.message}'" }
end

Instance Method Details

#same_app?Boolean

Returns:

  • (Boolean)


16
17
18
# File 'app/models/federails/host.rb', line 16

def same_app?
  software_name == Configuration.app_name
end

#same_app_and_version?Boolean

Returns:

  • (Boolean)


20
21
22
# File 'app/models/federails/host.rb', line 20

def same_app_and_version?
  software_name == Configuration.app_name && app_version == Configuration.app_version
end

#sync!Object

Update from remote data



25
26
27
# File 'app/models/federails/host.rb', line 25

def sync!
  update! Fediverse::NodeInfo.fetch(domain)
end