Class: DiscordRDA::EntityFactory

Inherits:
Object
  • Object
show all
Defined in:
lib/discord_rda/entity/factory.rb

Overview

Factory for creating Discord entities from API data. Supports registration of custom entity types.

Examples:

Basic usage

user = EntityFactory.create(:user, api_data)
guild = EntityFactory.create(:guild, api_data)

Custom entity registration

class CustomGuild < Guild
  # custom implementation
end
EntityFactory.register(:guild, CustomGuild)

Constant Summary collapse

DEFAULT_ENTITIES =

Default entity mappings

{
  user: 'DiscordRDA::User',
  guild: 'DiscordRDA::Guild',
  channel: 'DiscordRDA::Channel',
  message: 'DiscordRDA::Message',
  role: 'DiscordRDA::Role',
  member: 'DiscordRDA::Member',
  emoji: 'DiscordRDA::Emoji',
  attachment: 'DiscordRDA::Attachment',
  embed: 'DiscordRDA::Embed',
  webhook: 'DiscordRDA::Webhook'
}.freeze

Class Method Summary collapse

Class Method Details

.create(type, data) ⇒ Entity

Create an entity from data

Parameters:

  • type (Symbol)

    Entity type

  • data (Hash)

    API data

Returns:

Raises:

  • (ArgumentError)


45
46
47
48
49
50
# File 'lib/discord_rda/entity/factory.rb', line 45

def create(type, data)
  klass = registry[type.to_sym]
  raise ArgumentError, "Unknown entity type: #{type}" unless klass

  klass.new(data)
end

.create_many(type, data_array) ⇒ Array<Entity>

Create multiple entities from array data

Parameters:

  • type (Symbol)

    Entity type

  • data_array (Array<Hash>)

    Array of API data

Returns:

  • (Array<Entity>)

    Created entities



56
57
58
59
60
# File 'lib/discord_rda/entity/factory.rb', line 56

def create_many(type, data_array)
  return [] unless data_array.is_a?(Array)

  data_array.map { |data| create(type, data) }
end

.register(type, klass) ⇒ void

This method returns an undefined value.

Register an entity type

Parameters:

  • type (Symbol)

    Entity type identifier

  • klass (Class)

    Entity class



37
38
39
# File 'lib/discord_rda/entity/factory.rb', line 37

def register(type, klass)
  registry[type.to_sym] = klass
end

.registered?(type) ⇒ Boolean

Check if an entity type is registered

Parameters:

  • type (Symbol)

    Entity type

Returns:

  • (Boolean)

    True if registered



65
66
67
# File 'lib/discord_rda/entity/factory.rb', line 65

def registered?(type)
  registry.key?(type.to_sym)
end

.registered_typesArray<Symbol>

Get all registered types

Returns:

  • (Array<Symbol>)

    Registered type names



71
72
73
# File 'lib/discord_rda/entity/factory.rb', line 71

def registered_types
  registry.keys
end

.reset!void

This method returns an undefined value.

Reset to default registrations



84
85
86
# File 'lib/discord_rda/entity/factory.rb', line 84

def reset!
  @registry = nil
end

.unregister(type) ⇒ void

This method returns an undefined value.

Unregister an entity type

Parameters:

  • type (Symbol)

    Entity type to unregister



78
79
80
# File 'lib/discord_rda/entity/factory.rb', line 78

def unregister(type)
  registry.delete(type.to_sym)
end