Module: Serega::ClassMethods
- Included in:
- Serega
- Defined in:
- lib/serega.rb
Overview
Serializers class methods
Instance Attribute Summary collapse
-
#config ⇒ SeregaConfig
readonly
Returns current config.
Instance Method Summary collapse
-
#attribute(name, **opts, &block) ⇒ Serega::SeregaAttribute
Adds attribute.
-
#attributes ⇒ Hash
Lists attributes.
-
#batch(name, value = nil, &block) ⇒ #call
Defines a batch loader.
-
#batch_loaders ⇒ Hash
Lists defined batch loaders.
-
#call(object, opts = nil) ⇒ Hash
(also: #to_h)
Serializes provided object to Hash.
-
#plugin(name, **opts) ⇒ class<Module>
Enables plugin for current serializer.
-
#plugin_used?(name) ⇒ Boolean
Checks plugin is used.
Instance Attribute Details
#config ⇒ SeregaConfig (readonly)
Returns current config
102 103 104 |
# File 'lib/serega.rb', line 102 def config @config end |
Instance Method Details
#attribute(name, **opts, &block) ⇒ Serega::SeregaAttribute
Adds attribute
Patched in:
-
plugin :presenter (additionally adds method in Presenter class)
178 179 180 181 |
# File 'lib/serega.rb', line 178 def attribute(name, **opts, &block) attribute = self::SeregaAttribute.new(name: name, opts: opts, block: block) attributes[attribute.name] = attribute end |
#attributes ⇒ Hash
Lists attributes
153 154 155 |
# File 'lib/serega.rb', line 153 def attributes @attributes ||= {} end |
#batch(name, value = nil, &block) ⇒ #call
Defines a batch loader
211 212 213 214 215 216 |
# File 'lib/serega.rb', line 211 def batch(name, value = nil, &block) raise SeregaError, "Batch loader must be defined with a callable value or block" if (value && block) || (!value && !block) batch_loader = self::SeregaBatchLoader.new(name: name, block: value || block) batch_loaders[batch_loader.name] = batch_loader end |
#batch_loaders ⇒ Hash
Lists defined batch loaders
162 163 164 |
# File 'lib/serega.rb', line 162 def batch_loaders @batch_loaders ||= {} end |
#call(object, opts = nil) ⇒ Hash Also known as: to_h
Serializes provided object to Hash
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 |
# File 'lib/serega.rb', line 232 def call(object, opts = nil) opts ||= FROZEN_EMPTY_HASH initiate_keys = config.initiate_keys if opts.empty? modifiers_opts = FROZEN_EMPTY_HASH serialize_opts = nil else opts.transform_keys!(&:to_sym) serialize_opts = opts.except(*initiate_keys) modifiers_opts = opts.slice(*initiate_keys) end new(modifiers_opts).to_h(object, serialize_opts) end |
#plugin(name, **opts) ⇒ class<Module>
Enables plugin for current serializer
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/serega.rb', line 111 def plugin(name, **opts) raise SeregaError, "This plugin is already loaded" if plugin_used?(name) plugin = SeregaPlugins.find_plugin(name) # We split loading of plugin to three parts - before_load, load, after_load: # # - **before_load_plugin** usually used to check requirements and to load additional plugins # - **load_plugin** usually used to include plugin modules # - **after_load_plugin** usually used to add config options plugin.before_load_plugin(self, **opts) if plugin.respond_to?(:before_load_plugin) plugin.load_plugin(self, **opts) if plugin.respond_to?(:load_plugin) plugin.after_load_plugin(self, **opts) if plugin.respond_to?(:after_load_plugin) # Store attached plugins, so we can check it is loaded later config.plugins << (plugin.respond_to?(:plugin_name) ? plugin.plugin_name : plugin) plugin end |
#plugin_used?(name) ⇒ Boolean
Checks plugin is used
138 139 140 141 142 143 144 145 146 |
# File 'lib/serega.rb', line 138 def plugin_used?(name) plugin_name = case name when Module then name.respond_to?(:plugin_name) ? name.plugin_name : name else name end config.plugins.include?(plugin_name) end |