Module: Serega::SeregaPlugins::ContextMetadata

Defined in:
lib/serega/plugins/context_metadata/context_metadata.rb

Overview

Plugin :context_metadata

Depends on: :root plugin, that must be loaded first

Allows to specify metadata to be added to serialized response.

Examples:

class UserSerializer < Serega
  plugin :root, root: :data
  plugin :context_metadata, context_metadata_key: :meta
end

UserSerializer.to_h(nil, meta: { version: '1.0.1' })
# => {:data=>nil, :version=>"1.0.1"}

Defined Under Namespace

Modules: CheckSerializeParamsInstanceMethods, ConfigInstanceMethods, InstanceMethods Classes: ContextMetadataConfig

Constant Summary collapse

DEFAULT_CONTEXT_METADATA_KEY =

Default context metadata option name

:meta

Class Method Summary collapse

Class Method Details

.after_load_plugin(serializer_class, **opts) ⇒ void

This method returns an undefined value.

Adds config options and runs other callbacks after plugin was loaded

Parameters:

  • serializer_class (Class<Serega>)

    Current serializer class

  • opts (Hash)

    loaded plugins opts



65
66
67
68
69
70
# File 'lib/serega/plugins/context_metadata/context_metadata.rb', line 65

def self.after_load_plugin(serializer_class, **opts)
  config = serializer_class.config
  meta_key = opts[:context_metadata_key] || DEFAULT_CONTEXT_METADATA_KEY
  config.opts[:context_metadata] = {key: meta_key}
  config.serialize_keys << meta_key
end

.before_load_plugin(serializer_class, **opts) ⇒ void

This method returns an undefined value.

Checks requirements and loads additional plugins

Parameters:

  • serializer_class (Class<Serega>)

    Current serializer class

  • opts (Hash)

    loaded plugins opts



37
38
39
40
41
# File 'lib/serega/plugins/context_metadata/context_metadata.rb', line 37

def self.before_load_plugin(serializer_class, **opts)
  unless serializer_class.plugin_used?(:root)
    raise SeregaError, "Please load :root plugin first so we can wrap serialization response into top-level hash to add metadata there"
  end
end

.load_plugin(serializer_class, **_opts) ⇒ void

This method returns an undefined value.

Applies plugin code to specific serializer

Parameters:

  • serializer_class (Class<Serega>)

    Current serializer class

  • _opts (Hash)

    Loaded plugins options



51
52
53
54
55
# File 'lib/serega/plugins/context_metadata/context_metadata.rb', line 51

def self.load_plugin(serializer_class, **_opts)
  serializer_class.include(InstanceMethods)
  serializer_class::SeregaConfig.include(ConfigInstanceMethods)
  serializer_class::CheckSerializeParams.include(CheckSerializeParamsInstanceMethods)
end

.plugin_nameSymbol

Returns Plugin name.

Returns:

  • (Symbol)

    Plugin name



26
27
28
# File 'lib/serega/plugins/context_metadata/context_metadata.rb', line 26

def self.plugin_name
  :context_metadata
end