Module: ShopifyToolkit::Schema

Extended by:
Schema
Includes:
MetafieldStatements, MetaobjectStatements, MetaobjectUtilities, Migration::Logging
Included in:
Schema
Defined in:
lib/shopify_toolkit/schema.rb

Constant Summary collapse

SCHEMA_PATH =
"config/shopify/schema.rb"
OWNER_TYPES =
%i[
  api_permissions
  articles
  blogs
  carttransforms
  collections
  companies
  company_locations
  customers
  delivery_customizations
  discounts
  draftorders
  fulfillment_constraint_rules
  gift_card_transactions
  locations
  markets
  orders
  order_routing_location_rules
  pages
  payment_customizations
  products
  productvariants
  selling_plans
  shops
  validations
].freeze

Constants included from AdminClient

AdminClient::API_VERSION

Instance Method Summary collapse

Methods included from Migration::Logging

#announce, #say, #say_with_time, #write

Methods included from MetaobjectUtilities

#convert_validations_types_to_gids, #get_metaobject_definition_gid, #get_metaobject_definition_type_by_gid, #is_metaobject_reference_type?

Methods included from AdminClient

#api_version, #handle_shopify_admin_client_errors, #shopify_admin_client

Methods included from MetaobjectStatements

#add_field_validations_to_metaobject, #apply_pending_field_validations, log_time

Methods included from MetafieldStatements

define, #get_metafield_gid, log_time

Instance Method Details

#convert_validations_gids_to_types(validations, metafield_type) ⇒ Object



85
86
87
88
89
90
91
# File 'lib/shopify_toolkit/schema.rb', line 85

def convert_validations_gids_to_types(validations, metafield_type)
  return validations unless validations&.any? && is_metaobject_reference_type?(metafield_type)

  validations.filter_map do |validation|
    convert_metaobject_validation_to_type(validation)
  end
end

#define(&block) ⇒ Object



81
82
83
# File 'lib/shopify_toolkit/schema.rb', line 81

def define(&block)
  instance_eval(&block)
end

#dump!Object



71
72
73
74
75
76
77
78
79
# File 'lib/shopify_toolkit/schema.rb', line 71

def dump!
  schema_path = Rails.root.join(SCHEMA_PATH)

  announce "Dumping metafield schema to #{schema_path}"
  say_with_time "Generating schema" do
    content = generate_schema_content
    File.write(schema_path, content)
  end
end

#load!Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/shopify_toolkit/schema.rb', line 46

def load!
  path = Rails.root.join(SCHEMA_PATH)

  unless path.exist?
    logger.warn "Schema file not found at #{path}."
    return
  end

  announce "Loading metafield schema from #{path}"

  # Parse the schema file to separate metaobject and metafield definitions
  schema_content = File.read(path)

  say_with_time "Executing metaobject definitions" do
    # Execute only metaobject definitions first
    execute_metaobject_definitions(schema_content)
    apply_pending_field_validations
  end

  say_with_time "Executing metafield definitions" do
    # Execute only metafield definitions after all metaobjects exist
    execute_metafield_definitions(schema_content)
  end
end