Module: Federails

Defined in:
lib/federails.rb,
lib/federails/engine.rb,
lib/federails/version.rb,
lib/federails/utils/host.rb,
lib/federails/utils/actor.rb,
app/models/federails/actor.rb,
lib/federails/utils/object.rb,
lib/federails/configuration.rb,
app/models/federails/activity.rb,
app/models/federails/following.rb,
lib/federails/utils/json_request.rb,
app/jobs/federails/application_job.rb,
app/helpers/federails/server_helper.rb,
app/jobs/federails/notify_inbox_job.rb,
lib/federails/data_transformer/note.rb,
app/models/concerns/federails/has_uuid.rb,
app/models/federails/application_record.rb,
app/policies/federails/federails_policy.rb,
app/mailers/federails/application_mailer.rb,
lib/federails/maintenance/actors_updater.rb,
app/models/concerns/federails/data_entity.rb,
app/models/concerns/federails/actor_entity.rb,
app/policies/federails/client/actor_policy.rb,
app/policies/federails/server/actor_policy.rb,
app/controllers/federails/client_controller.rb,
app/controllers/federails/server_controller.rb,
app/policies/federails/client/activity_policy.rb,
app/policies/federails/server/activity_policy.rb,
app/policies/federails/client/following_policy.rb,
app/policies/federails/server/following_policy.rb,
app/policies/federails/server/publishable_policy.rb,
app/controllers/federails/client/actors_controller.rb,
app/controllers/federails/server/actors_controller.rb,
lib/generators/federails/install/install_generator.rb,
app/controllers/federails/server/nodeinfo_controller.rb,
app/controllers/federails/server/published_controller.rb,
app/models/concerns/federails/handles_delete_requests.rb,
app/controllers/federails/client/activities_controller.rb,
app/controllers/federails/client/followings_controller.rb,
app/controllers/federails/server/activities_controller.rb,
app/controllers/federails/server/followings_controller.rb,
app/controllers/federails/server/web_finger_controller.rb,
lib/generators/federails/copy_factories/copy_factories_generator.rb,
lib/generators/federails/copy_client_views/copy_client_views_generator.rb,
lib/generators/federails/copy_client_policies/copy_client_policies_generator.rb

Overview

This module includes classes and methods related to Ruby on Rails: engine configuration, models, controllers, etc.

Defined Under Namespace

Modules: ActorEntity, Client, Configuration, DataEntity, DataTransformer, HandlesDeleteRequests, HasUuid, Maintenance, Server, ServerHelper, Utils Classes: Activity, Actor, ApplicationJob, ApplicationMailer, ApplicationRecord, ClientController, CopyClientPoliciesGenerator, CopyClientViewsGenerator, CopyFactoriesGenerator, Engine, FederailsPolicy, Following, InstallGenerator, NotifyInboxJob, ServerController

Constant Summary collapse

DEFAULT_DATA_FILTER_METHOD =
:handle_federated_object?
VERSION =
'0.7.0'.freeze
@@configuration =
Configuration

Class Method Summary collapse

Class Method Details

.actor_entity(class_or_instance) ⇒ Hash

Returns The configuration for the given actor entity.

Returns:

  • (Hash)

    The configuration for the given actor entity



55
56
57
58
59
60
# File 'lib/federails.rb', line 55

def actor_entity(class_or_instance)
  klass = class_or_instance_name(class_or_instance)
  raise "#{klass} is not a configured actor entity" unless Configuration.actor_types.key?(klass)

  Configuration.actor_types[klass]
end

.actor_entity?(class_or_instance) ⇒ Boolean

Returns True if the given model is a possible actor.

Examples:

puts "Follow #{some_actor.name}" if actor_entity? current_user

Returns:

  • (Boolean)

    True if the given model is a possible actor



50
51
52
# File 'lib/federails.rb', line 50

def actor_entity?(class_or_instance)
  Configuration.actor_types.key? class_or_instance_name(class_or_instance)
end

.config_from(name) ⇒ Object

rubocop:disable Metrics/MethodLength



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/federails.rb', line 28

def config_from(name) # rubocop:disable Metrics/MethodLength
  config = Rails.application.config_for name
  [
    :app_name,
    :app_version,
    :force_ssl,
    :site_host,
    :site_port,
    :enable_discovery,
    :open_registrations,
    :app_layout,
    :server_routes_path,
    :client_routes_path,
    :remote_follow_url_method,
    :base_client_controller,
  ].each { |key| Configuration.send :"#{key}=", config[key] if config.key?(key) }
end

.configure {|@@configuration| ... } ⇒ Object

Yields:

  • (@@configuration)


24
25
26
# File 'lib/federails.rb', line 24

def configure
  yield @@configuration
end

.data_entity?(class_or_instance) ⇒ Boolean

Returns True if the given model is a possible data entity.

Returns:

  • (Boolean)

    True if the given model is a possible data entity



63
64
65
# File 'lib/federails.rb', line 63

def data_entity?(class_or_instance)
  Configuration.data_types.key? class_or_instance_name(class_or_instance)
end

.data_entity_configuration(class_or_instance) ⇒ Hash

Returns The configuration for the given data entity.

Returns:

  • (Hash)

    The configuration for the given data entity



104
105
106
107
108
109
# File 'lib/federails.rb', line 104

def data_entity_configuration(class_or_instance)
  klass = class_or_instance_name(class_or_instance)
  raise "#{klass} is not a configured data entity" unless Configuration.data_types.key?(klass)

  Configuration.data_types[klass]
end

.data_entity_handled_on(route_path_segment) ⇒ Hash?

Finds configured data type from route path segment

Examples:

data_entity_handled_on :articles

Parameters:

  • route_path_segment (Symbol, String)

    Route path segment, as configured with ‘:route_path_segment`

Returns:

  • (Hash, nil)

    Entity configuration



98
99
100
101
# File 'lib/federails.rb', line 98

def data_entity_handled_on(route_path_segment)
  route_path_segment = route_path_segment.to_sym
  Federails::Configuration.data_types.find { |_, v| v[:route_path_segment] == route_path_segment }&.last
end

.data_entity_handler_for(hash) ⇒ Hash?

Finds the configured handler for a given ActivityPub object

Parameters:

  • hash (Hash)

    ActivityPub object hash

Returns:

  • (Hash, nil)

    Data entity configuration



83
84
85
86
87
88
89
# File 'lib/federails.rb', line 83

def data_entity_handler_for(hash)
  data_entity_handlers_for(hash['type']).find do |handler|
    return true if !handler[:filter_method] && !handler[:class].respond_to?(DEFAULT_DATA_FILTER_METHOD)

    handler[:class].send(handler[:filter_method] || DEFAULT_DATA_FILTER_METHOD, hash)
  end
end

.data_entity_handlers_for(type) ⇒ Array

Finds configured data types from ActivityPub type

Examples:

data_entity_handlers_for 'Note'

Parameters:

  • type (String)

    ActivityPub object type, as configured with ‘:handles`

Returns:

  • (Array)

    List of data entity configurations



74
75
76
# File 'lib/federails.rb', line 74

def data_entity_handlers_for(type)
  Federails::Configuration.data_types.select { |_, v| v[:handles] == type }.map(&:last)
end