Spree CLI
Spree CLI is a command-line tool for Spree Commerce developers, providing generators and utilities for creating Spree extensions and managing Spree projects.
Installation
This gem is included in every Spree installation.
For global installation (to generate extensions outside of a Spree project):
gem install spree_cli
Commands
Create New Extension
Generate a new Spree extension with all the necessary boilerplate:
spree extension my_extension
This creates a new directory spree_my_extension with:
spree_my_extension/
├── app/
│ ├── models/
│ ├── controllers/
│ └── views/
├── lib/
│ ├── spree_my_extension.rb
│ ├── spree_my_extension/
│ │ └── engine.rb
│ └── generators/
├── config/
│ ├── routes.rb
│ └── locales/
├── db/
│ └── migrate/
├── spec/
├── Gemfile
├── spree_my_extension.gemspec
├── README.md
└── LICENSE
Extension Options
# Create extension with specific options
spree extension my_extension --path=/custom/path
# View help
spree help extension
Extension Development
After creating an extension:
cd spree_my_extension
# Install dependencies
bundle install
# Create test application
bundle exec rake test_app
# Run tests
bundle exec rspec
# Build gem
gem build spree_my_extension.gemspec
Extension Structure
Generated extensions follow Spree conventions:
# lib/spree_my_extension/engine.rb
module SpreeMyExtension
class Engine < Rails::Engine
require 'spree/core'
isolate_namespace Spree
engine_name 'spree_my_extension'
config.autoload_paths += %W(#{config.root}/lib)
initializer 'spree_my_extension.environment', before: :load_config_initializers do |_app|
SpreeMyExtension::Config = SpreeMyExtension::Configuration.new
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).to_proc)
end
end
Adding Models
# app/models/spree/my_model.rb
module Spree
class MyModel < Spree.base_class
# Model implementation
end
end
Adding Controllers
# app/controllers/spree/admin/my_models_controller.rb
module Spree
module Admin
class MyModelsController < ResourceController
# Controller implementation
end
end
end
Adding Migrations
cd spree_my_extension
bin/rails g migration CreateSpreeMyModels
Publishing Extensions
- Update version in
lib/spree_my_extension/version.rb - Update
CHANGELOG.md - Build and publish:
gem build spree_my_extension.gemspec
gem push spree_my_extension-1.0.0.gem
Usage
In a Spree Application
Add your extension to the application's Gemfile:
gem 'spree_my_extension', '~> 1.0'
Run installation:
bundle install
bin/rails g spree_my_extension:install
Documentation
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Run tests
- Submit a pull request