Class: ActiveShopifyGraphQL::ModelBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/active_shopify_graphql/model_builder.rb

Overview

Pure factory for building model instances from attribute hashes. Separates data mapping (Loader/ResponseMapper) from object construction.

Responsibilities:

  • Build single model instances from attributes
  • Apply connection caches to instances
  • Handle batch building with connection caching

Examples:

Single instance

attributes = loader.load_attributes(gid)
customer = ModelBuilder.build(Customer, attributes)

Batch building

attributes_list = loader.load_paginated_attributes(...)
customers = ModelBuilder.build_many(Customer, attributes_list)

Class Method Summary collapse

Class Method Details

.apply_connection_cache(instance, attributes) ⇒ Object

Apply connection cache from attributes to an already-instantiated model

Parameters:

  • instance (Object)

    The model instance

  • attributes (Hash)

    Attribute hash that may contain :_connection_cache



46
47
48
49
50
# File 'lib/active_shopify_graphql/model_builder.rb', line 46

def apply_connection_cache(instance, attributes)
  return unless attributes.is_a?(Hash) && attributes.key?(:_connection_cache)

  instance.instance_variable_set(:@_connection_cache, attributes[:_connection_cache])
end

.build(model_class, attributes) ⇒ Object

Build a single model instance from attributes

Parameters:

  • model_class (Class)

    The model class to instantiate

  • attributes (Hash)

    Attribute hash (may contain :_connection_cache)

Returns:

  • (Object)

    The instantiated model with cached connections



25
26
27
28
29
30
31
# File 'lib/active_shopify_graphql/model_builder.rb', line 25

def build(model_class, attributes)
  return nil if attributes.nil?

  instance = model_class.new(attributes)
  apply_connection_cache(instance, attributes)
  instance
end

.build_many(model_class, attributes_array) ⇒ Array<Object>

Build multiple model instances from an array of attribute hashes

Parameters:

  • model_class (Class)

    The model class to instantiate

  • attributes_array (Array<Hash>)

    Array of attribute hashes

Returns:

  • (Array<Object>)

    Array of instantiated models



37
38
39
40
41
# File 'lib/active_shopify_graphql/model_builder.rb', line 37

def build_many(model_class, attributes_array)
  return [] if attributes_array.nil? || attributes_array.empty?

  attributes_array.filter_map { |attrs| build(model_class, attrs) }
end