SuperAPI AI 工具集

spree-dependencies

编程与开发

查看项目

更新于 10-15 23:57

技能介绍

用途:把 Spree 6 的核心类(服务、工作流、策略、序列化器)整体替换为自有实现。Spree 内部通过 Spree.cart_add_item_workflow.call(…) 这类访问器调用,所以替换后所有调用方(Store API、Admin API、仪表盘、任务、导入)都会生效。

何时不要替换:多数替换需求可用升级友好型钩子完成,如 validate 钩子(Spree.hooks.register('carts.add_item.validate', 'MyStore::Rule'))、context 钩子、lifecycle 钩子、事件订阅、Spree::Checkout::Registry.add_requirement、子类化序列化器。只有真正替换计算方式(合并策略、买盒排序、B2B 访问策略、佣金模型)时才换类。

覆盖点:spree_core 的 INJECTION_POINTS_WITH_DEFAULTS 有 167 个,其中 106 个为 _workflow;spree_api 的 API 点有 272 个(91 个 Store、139 个 Admin、42 个 Seller),仅序列化器。命名约定:_workflow 覆写 perform(**keywords),绝不覆写 call;*_service 覆写 call(**keywords);其他后缀按默认类文档。

用法:子类化随附工作流并覆写 perform,签名须一致;务必保留 workflow_key 指向父类键,否则已注册的钩子会静默失效。普通服务继承默认类并覆写 call,始终返回 Result。语法可用 Spree.<key> = MyClass,或 Spree.dependencies { |d| d.<key> = MyClass },旧写法 Spree::Dependencies.<key> = 'MyClass' 仍支持。序列化器示例:Spree.api.product_serializer = 'MyStore::ProductSerializer',Admin 键独立需另设。

检查:spree rake spree:dependencies:list、:overrides、:validate(CI 可用)。限制:旧 *_service 键仅存不生效,6.1 移除;部分键已删除,赋值会报 NoMethodError;跳过的 super 行为需自行补全库存预留、定价、可用性、重算与事件;覆盖写进 config/initializers/spree.rb,后赋值者胜。