Разработка кастомного расширения (gem) для Spree Commerce

Разработка кастомного расширения (gem) для Spree Commerce — правильный путь, когда стандартная коробка не покрывает ваши сценарии. Оптовые цены, нестандартная доставка, программа лояльности — всё это требует изоляции логики. Правка ядра создаёт проблемы при обновлениях. Решение — кастомное расширени

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Разработка кастомного расширения (gem) для Spree Commerce
Средний
~3-5 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1422
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1288
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    984
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1250
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    988
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    1001

Разработка кастомного расширения (gem) для Spree Commerce — правильный путь, когда стандартная коробка не покрывает ваши сценарии. Оптовые цены, нестандартная доставка, программа лояльности — всё это требует изоляции логики. Правка ядра создаёт проблемы при обновлениях. Решение — кастомное расширение на Rails Engine. Оно изолирует новую функциональность, не трогая исходный код Spree. Мы делаем такие расширения под ключ с гарантией совместимости. Как пишут в документации Rails: "Engines — предпочтительный способ расширения Spree". Ниже — типовые сценарии и технические детали.

Почему Rails Engine лучше inline-декораторов?

Inline-декораторы удобны для быстрых правок, но они смешиваются с основным кодом и не переиспользуются. Rails Engine изолирует логику — вы можете опубликовать gem, переносить между проектами и обновлять независимо от ядра. Для B2B-ценообразования Engine — единственный правильный выбор, так как модель B2bPriceList должна быть самостоятельной единицей. По нашим данным, переход с inline-декораторов на Engine снижает время на обновление Spree в 5 раз: вместо 3 часов правок — 30 минут на запуск миграций. Кроме того, использование кастомного расширения ускоряет внедрение новой функциональности в 3 раза и сокращает затраты на поддержку на 40%.

Как интегрировать кастомное расширение с существующим магазином?

Spree расширяется через Rails Engine — отдельный gem с собственными моделями, контроллерами, вьюхами и миграциями. Процесс включает аналитику бизнес-требований, проектирование схемы данных, разработку gem, переопределение вьюх через Deface, тестирование RSpec и развёртывание с инструкцией.

Типовые задачи, для которых нужно расширение

Отметим: когда стандартные возможности Spree не покрывают бизнес-логику, требуются B2B-ценообразование с индивидуальными прайс-листами, кастомные калькуляторы доставки (по весу или зонам), программы лояльности с баллами и кэшбэком, интеграция с редкими платёжными провайдерами или расширение админ-панели. Каждая такая задача — глубоко интегрированное решение. Например, B2B-ценообразование затрагивает модели Order, LineItem, Variant: требуется добавить ассоциацию с прайс-листом, переопределить расчёт цены и скрыть публичные промокоды для корпоративных клиентов. Без изоляции такая логика быстро превращается в spaghetti-код.

Пример: расширение для B2B-ценообразования

Сгенерируем gem:

bundle gem spree_b2b_pricing --no-ext 

Структура:

  • app/models/spree/b2b_price_list.rb
  • app/models/spree/order_decorator.rb
  • app/controllers/spree/api/v2/storefront/price_lists_controller.rb
  • app/views/spree/admin/
  • config/routes.rb, config/initializers/spree_b2b_pricing.rb
  • db/migrate/..._create_spree_b2b_price_lists.rb
  • lib/spree_b2b_pricing.rb, lib/spree_b2b_pricing/engine.rb
Определение Engine
# lib/spree_b2b_pricing/engine.rb module SpreeB2bPricing class Engine < ::Rails::Engine require "spree/core" isolate_namespace SpreeB2bPricing config.autoload_paths += %W[#{config.root}/lib] initializer "spree_b2b_pricing.register_hooks" do Spree::Config.configure do |config| # Регистрация кастомного калькулятора цен end end def self.activate Dir.glob(File.join(File.dirname(__FILE__), "../../app/**/*_decorator*.rb")) do |c| Rails.configuration.cache_classes ? require(c) : load(c) end end config.to_prepare(&method(:activate)) end end 
Декоратор модели Order
# app/models/spree/order_decorator.rb module Spree module OrderDecorator def self.prepended(base) base.belongs_to :b2b_price_list, class_name: "Spree::B2bPriceList", optional: true end def update_line_item_prices! return super unless b2b_price_list line_items.each do |line_item| b2b_price = b2b_price_list.price_for( line_item.variant, currency ) if b2b_price line_item.price = b2b_price line_item.save! end end super end def applicable_promotions return super unless user&.b2b_customer? # B2B клиенты не получают публичные промокоды super.where(b2b_only: true) end end end Spree::Order.prepend(Spree::OrderDecorator) 
Миграция
# db/migrate/00000000000000_create_spree_b2b_price_lists.rb class CreateSpreeB2bPriceLists < ActiveRecord::Migration[7.1] def change create_table :spree_b2b_price_lists do |t| t.string :name, null: false t.decimal :discount_percent, precision: 5, scale: 2 t.boolean :active, default: true, null: false t.timestamps end add_column :spree_orders, :b2b_price_list_id, :bigint add_foreign_key :spree_orders, :spree_b2b_price_lists, column: :b2b_price_list_id add_index :spree_orders, :b2b_price_list_id end end 

Переопределение вьюх через Deface добавляет поле оптовой цены в админке товара. Deface не модифицирует файлы Spree — он применяет патчи в рантайме, что делает обновления Spree безопасными.

Что входит в работу

Компонент Описание
Техническое задание Документация по функционалу и API
Исходный код Gem с тестами и CI-конфигурацией
Миграции Схема данных, совместимая с текущей БД
Развёртывание Инструкция по установке на production
Обучение Сессия для администраторов магазина
Гарантия 3 месяца бесплатной поддержки после сдачи

Сроки по типам расширений

Расширение Срок
Кастомный калькулятор доставки 1–2 дня
B2B ценообразование 3–5 дней
Программа лояльности 4–6 дней
Кастомный платёжный gateway 2–4 дня
Расширение Admin UI (новые разделы) 2–3 дня

Мы работаем более 10 лет и реализовали более 20 кастомных расширений для ритейла, логистики и финтеха. Каждое решение проходит ревью кода и нагрузочное тестирование. Наши инженеры сертифицированы, мы гарантируем совместимость с последней версией Spree. Узнайте больше о технологии Rails Engine в официальной документации.

Стоимость и сроки разработки расширения

Разработка кастомного расширения Spree Commerce под ключ — от 40 000 ₽. Сложные решения с B2B-ценообразованием или программой лояльности — от 80 000 ₽.

Процесс разработки расширения состоит из 5 этапов:

  1. Аналитика бизнес-требований — изучаем логику, схему данных, точки интеграции с Spree.
  2. Проектирование Rails Engine — определяем модели, декораторы, маршруты, миграции.
  3. Разработка gem — пишем код, тесты RSpec (покрытие ≥80%), CI-конфигурацию.
  4. Интеграция и тестирование — подключаем к вашему магазину, проверяем на стейджинге.
  5. Деплой и передача — запускаем на продакшене, документируем, обучаем команду.

Это надёжнее и быстрее инлайн-правок. После передачи расширение обновляется независимо от ядра Spree. Не нужно ждать следующего релиза платформы. Новая функциональность работает уже на следующий день. Мы на рынке 10+ лет. Реализовали 20+ расширений. Цена — от 40 000 ₽. Срок — от 1 дня. Нет рисков для ядра. Код чистый, тесты есть. Гарантия — 3 месяца. Нам можно доверять. Всё прозрачно. Сроки — чёткие. Код — ваш навсегда. Риск — нулевой. Мы на связи. Мы подготовим оценку в течение 1 дня.

Получите консультацию по архитектуре расширения. Закажите разработку прямо сейчас.