spree_multi_vendor 2.2.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +7 -0
- data/.travis.yml +1 -8
- data/Gemfile +5 -2
- data/README.md +39 -24
- data/app/controllers/spree/admin/vendor_settings_controller.rb +1 -1
- data/app/controllers/spree/admin/vendors_controller.rb +10 -2
- data/app/controllers/spree/api/v1/vendors_controller.rb +1 -1
- data/app/controllers/spree/api/v2/storefront/vendors_controller.rb +6 -1
- data/app/controllers/spree_multi_vendor/spree/api/base_controller_decorator.rb +2 -2
- data/app/controllers/spree_multi_vendor/spree/api/v1/products_controller_decorator.rb +1 -1
- data/app/controllers/spree_multi_vendor/spree/api/v1/users_controller_decorator.rb +1 -1
- data/app/finders/spree_multi_vendor/products_finder_decorator.rb +1 -1
- data/app/helpers/spree_multi_vendor/spree/api/api_helpers_decorator.rb +1 -1
- data/app/models/spree/vendor.rb +1 -1
- data/app/models/spree/vendor_ability.rb +1 -1
- data/app/models/spree_multi_vendor/spree/variant_decorator.rb +0 -1
- data/app/overrides/spree/admin/users/_form.rb +1 -1
- data/app/views/spree/admin/vendor_settings/edit.html.erb +1 -1
- data/app/views/spree/admin/vendors/_form.html.erb +1 -1
- data/app/views/spree/admin/vendors/index.html.erb +1 -1
- data/config/initializers/spree_permitted_attributes.rb +0 -2
- data/config/locales/es.yml +3 -0
- data/config/routes.rb +1 -1
- data/db/migrate/20210728120649_change_vendorized_models_vendor_id_type.rb +10 -0
- data/db/migrate/20210728120910_change_vendor_id_and_user_id_type_for_spree_vendor_users.rb +14 -0
- data/db/migrate/20210728121024_change_vendor_id_and_order_id_type_for_spree_order_commissions.rb +14 -0
- data/{app/models → lib}/spree_multi_vendor/configuration.rb +0 -0
- data/lib/spree_multi_vendor/engine.rb +10 -0
- data/lib/spree_multi_vendor/version.rb +1 -1
- data/lib/spree_multi_vendor.rb +3 -1
- data/spec/factories/spree/vendor_factory.rb +6 -0
- data/spec/features/spree/admin/orders_spec.rb +5 -4
- data/spec/features/spree/admin/vendor_settings_spec.rb +6 -8
- data/spec/requests/spree/api/v2/storefront/products_spec.rb +2 -1
- data/spec/requests/spree/api/v2/storefront/vendors_spec.rb +66 -0
- data/spec/spec_helper.rb +3 -1
- data/spree_multi_vendor.gemspec +5 -4
- metadata +20 -37
- data/Appraisals +0 -11
- data/gemfiles/spree_4_2.gemfile +0 -9
- data/gemfiles/spree_master.gemfile +0 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: c5387ab5edeed4f158bfb7e5f264800ea5b02efc14c2048957501948c406dcca
|
|
4
|
+
data.tar.gz: 523fd3aea41eea77295a9f34d33ee3bcfb08dd9b615ddba74eda769b8e65f326
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9a8768042a152773ff4059c05c4e49f5102048cc3538e0289a9f015daa4afe0bae20124bbd8a96f61bb4d2a6f48033b4c4f2cbefcc1650c1e1ff83211f6b20b6
|
|
7
|
+
data.tar.gz: 97901fc6622e7d5c208656630865c01da883cac4ee158309b62bce59984c69357b971a128257dca459e556ced2097ce3ecb5aec664b297ebeb0eaffb31dc2b18
|
data/.travis.yml
CHANGED
|
@@ -11,6 +11,7 @@ addons:
|
|
|
11
11
|
services:
|
|
12
12
|
- mysql
|
|
13
13
|
- postgresql
|
|
14
|
+
- redis-server
|
|
14
15
|
|
|
15
16
|
language: ruby
|
|
16
17
|
|
|
@@ -22,14 +23,6 @@ env:
|
|
|
22
23
|
- DB=mysql
|
|
23
24
|
- DB=postgres
|
|
24
25
|
|
|
25
|
-
gemfile:
|
|
26
|
-
- gemfiles/spree_4_2.gemfile
|
|
27
|
-
- gemfiles/spree_master.gemfile
|
|
28
|
-
|
|
29
|
-
jobs:
|
|
30
|
-
allow_failures:
|
|
31
|
-
- gemfile: gemfiles/spree_master.gemfile
|
|
32
|
-
|
|
33
26
|
before_install:
|
|
34
27
|
- mysql -u root -e "GRANT ALL ON *.* TO 'travis'@'%';"
|
|
35
28
|
|
data/Gemfile
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
source 'https://rubygems.org'
|
|
2
2
|
|
|
3
|
-
gem 'spree', github: 'spree/spree', branch: '
|
|
4
|
-
gem '
|
|
3
|
+
gem 'spree', github: 'spree/spree', branch: 'main'
|
|
4
|
+
gem 'spree_backend', github: 'spree/spree_backend', branch: 'main'
|
|
5
|
+
gem 'spree_frontend', github: 'spree/spree_legacy_frontend', branch: 'main'
|
|
6
|
+
gem 'spree_emails', github: 'spree/spree', branch: 'main'
|
|
7
|
+
gem 'spree_auth_devise', github: 'spree/spree_auth_devise', branch: 'main'
|
|
5
8
|
gem 'rails-controller-testing'
|
|
6
9
|
|
|
7
10
|
gemspec
|
data/README.md
CHANGED
|
@@ -1,30 +1,31 @@
|
|
|
1
1
|
# Spree Multi Vendor
|
|
2
2
|
|
|
3
|
-
[](https://travis-ci.org/spree-contrib/spree_multi_vendor)
|
|
4
|
-
|
|
5
3
|
This is a [spree multi vendor marketplace](https://spreecommerce.org/use-cases/multi-vendor-marketplace/) extension. It's a great starting point if you're building a marketplace on top of [Spree](https://spreecommerce.org). Our goal was flexibility to allow you to tweak it to your needs.
|
|
6
4
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
Developed and maintained by:
|
|
10
|
-
|
|
11
|
-
[][spark]
|
|
5
|
+
## Developed by
|
|
12
6
|
|
|
13
|
-
|
|
7
|
+
[](https://getvendo.com?utm_source=spree_multi_vendor_github)
|
|
14
8
|
|
|
15
|
-
|
|
9
|
+
> All-in-one platform for all your Marketplace and B2B eCommerce needs. [Start your 30-day free trial](https://e98esoirr8c.typeform.com/contactvendo?typeform-source=spree_multi_vendor_github)
|
|
16
10
|
|
|
17
|
-
|
|
18
|
-
- [X] Products
|
|
19
|
-
- [X] Stock Locations
|
|
20
|
-
- [X] Shipping Methods
|
|
21
|
-
- [X] Vendor profile
|
|
11
|
+
## Open source vs Vendo
|
|
22
12
|
|
|
23
|
-
|
|
24
|
-
- [X] Super Admins can assign Users to Vendors
|
|
25
|
-
- [X] You can modify which permissions and models/resources Vendors can manage quite easily
|
|
13
|
+
If you need a product that has all of the features out of the box, such us supplier onboarding, Stripe connect payment splitting and payouts, and don't require any custom development - we recommend using [Vendo](http://getvendo.com?utm_source=spree_multi_vendor_github) which is also based on Spree.
|
|
26
14
|
|
|
27
|
-
|
|
15
|
+
| feature | open source | [vendo] |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| basic vendorization | ✔️ | ✔️ |
|
|
18
|
+
| supplier onboarding | | ✔️ |
|
|
19
|
+
| supplier dashboard | | ✔️ |
|
|
20
|
+
| supplier management | | ✔️ |
|
|
21
|
+
| supplier product curation | | ✔️ |
|
|
22
|
+
| automatic payment splitting | | ✔️ |
|
|
23
|
+
| automatic payouts | | ✔️ |
|
|
24
|
+
| Afterpay / klarna / apple pay | | ✔️ |
|
|
25
|
+
| shopify / bigcommerce / woocommerce integration | | ✔️ |
|
|
26
|
+
| USPS, UPS, FedEx, DHL, and more | | ✔️ |
|
|
27
|
+
| bulk upload / import of products from CSV and XSLX | | ✔️ |
|
|
28
|
+
| bulk export of orders, shipments and more | | ✔️ |
|
|
28
29
|
|
|
29
30
|
## Installation
|
|
30
31
|
|
|
@@ -97,6 +98,17 @@ Spree Multi Vendor adds new [API v2](https://api.spreecommerce.org/docs/api-v2/a
|
|
|
97
98
|
|
|
98
99
|
`/api/v2/storefront/vendors/test-vendor?include=image,products`
|
|
99
100
|
|
|
101
|
+
2. `GET` Returns a list of Vendors
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
/api/v2/storefront/vendors
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
you can also include Vendor image and/or Products in that call:
|
|
108
|
+
|
|
109
|
+
`/api/v2/storefront/vendors?include=image,products`
|
|
110
|
+
|
|
111
|
+
|
|
100
112
|
And modfies existing:
|
|
101
113
|
|
|
102
114
|
1. `GET` Filtering Products by Vendor ID(s):
|
|
@@ -154,13 +166,16 @@ and may be redistributed under the terms specified in the
|
|
|
154
166
|
|
|
155
167
|
[LICENSE]: https://github.com/spark-solutions/spree_braintree_vzero/blob/master/LICENSE
|
|
156
168
|
|
|
157
|
-
## About
|
|
169
|
+
## About Vendo
|
|
170
|
+
|
|
171
|
+
<a href="https://getvendo.com?utm_source=spree_multi_vendor_github">
|
|
172
|
+
<img src="https://uploads-ssl.webflow.com/6230c485f2c32ea1b0daa438/62386b96518cdcbe111f134a_OG%20Image%20(2).png" style="max-height:400px" />
|
|
173
|
+
</a>
|
|
158
174
|
|
|
159
|
-
[
|
|
175
|
+
> [Vendo][vendo] is a great fit for marketplaces of all sizes - either with own fulfillment and multiple warehouses or in a dropshipping model. Vendo **automates everything** from **vendor onboarding**, accepting buyer **payments in over 135 currencies**, to supplier **payouts in 50 countries**.
|
|
160
176
|
|
|
161
|
-
|
|
177
|
+
> Vendo ensures excellent buyer experience with smooth product discovery and search, a multitude of payment methods and optimal shipping cost calculation. Vendo keeps suppliers happy with easy onboarding, automated products sync using their preferred method and easy payouts.
|
|
162
178
|
|
|
163
|
-
|
|
164
|
-
We are [available for hire][spark].
|
|
179
|
+
> [Start your 30-day free trial](https://e98esoirr8c.typeform.com/contactvendo?typeform-source=spree_multi_vendor_github)
|
|
165
180
|
|
|
166
|
-
[
|
|
181
|
+
[vendo]:http://getvendo.com?utm_source=spree_multi_vendor_github
|
|
@@ -3,14 +3,14 @@ module Spree
|
|
|
3
3
|
class VendorsController < ResourceController
|
|
4
4
|
|
|
5
5
|
def create
|
|
6
|
-
if permitted_resource_params[:image]
|
|
6
|
+
if permitted_resource_params[:image]
|
|
7
7
|
@vendor.build_image(attachment: permitted_resource_params.delete(:image))
|
|
8
8
|
end
|
|
9
9
|
super
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def update
|
|
13
|
-
if permitted_resource_params[:image]
|
|
13
|
+
if permitted_resource_params[:image]
|
|
14
14
|
@vendor.create_image(attachment: permitted_resource_params.delete(:image))
|
|
15
15
|
end
|
|
16
16
|
format_translations if defined? SpreeGlobalize
|
|
@@ -40,10 +40,18 @@ module Spree
|
|
|
40
40
|
@search = vendors.ransack(params[:q])
|
|
41
41
|
|
|
42
42
|
@collection = @search.result.
|
|
43
|
+
includes(vendor_includes).
|
|
43
44
|
page(params[:page]).
|
|
44
45
|
per(params[:per_page])
|
|
45
46
|
end
|
|
46
47
|
|
|
48
|
+
def vendor_includes
|
|
49
|
+
{
|
|
50
|
+
image: [],
|
|
51
|
+
products: []
|
|
52
|
+
}
|
|
53
|
+
end
|
|
54
|
+
|
|
47
55
|
def format_translations
|
|
48
56
|
return if params[:vendor][:translations_attributes].blank?
|
|
49
57
|
params[:vendor][:translations_attributes].each do |_, data|
|
|
@@ -3,7 +3,7 @@ module Spree
|
|
|
3
3
|
module V2
|
|
4
4
|
module Storefront
|
|
5
5
|
class VendorsController < ::Spree::Api::V2::ResourceController
|
|
6
|
-
|
|
6
|
+
|
|
7
7
|
private
|
|
8
8
|
|
|
9
9
|
def model_class
|
|
@@ -21,6 +21,11 @@ module Spree
|
|
|
21
21
|
def resource_serializer
|
|
22
22
|
Spree::V2::Storefront::VendorSerializer
|
|
23
23
|
end
|
|
24
|
+
|
|
25
|
+
def collection_serializer
|
|
26
|
+
Spree::V2::Storefront::VendorSerializer
|
|
27
|
+
end
|
|
28
|
+
|
|
24
29
|
end
|
|
25
30
|
end
|
|
26
31
|
end
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
module SpreeMultiVendor::Spree::Api::BaseControllerDecorator
|
|
2
|
-
Spree::Api::BaseController.include(Spree::Api::VendorHelper)
|
|
2
|
+
Spree::Api::V1::BaseController.include(Spree::Api::VendorHelper) if SpreeMultiVendor::Engine.api_v1_available?
|
|
3
3
|
|
|
4
4
|
def self.prepended(base)
|
|
5
5
|
base.helper_method :current_spree_vendor
|
|
@@ -14,4 +14,4 @@ module SpreeMultiVendor::Spree::Api::BaseControllerDecorator
|
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
::Spree::Api::BaseController.prepend SpreeMultiVendor::Spree::Api::BaseControllerDecorator
|
|
17
|
+
::Spree::Api::V1::BaseController.prepend SpreeMultiVendor::Spree::Api::BaseControllerDecorator if SpreeMultiVendor::Engine.api_v1_available?
|
|
@@ -6,4 +6,4 @@ module SpreeMultiVendor::Spree::Api::V1::ProductsControllerDecorator
|
|
|
6
6
|
end
|
|
7
7
|
end
|
|
8
8
|
|
|
9
|
-
Spree::Api::V1::ProductsController.prepend SpreeMultiVendor::Spree::Api::V1::ProductsControllerDecorator
|
|
9
|
+
Spree::Api::V1::ProductsController.prepend SpreeMultiVendor::Spree::Api::V1::ProductsControllerDecorator if SpreeMultiVendor::Engine.api_v1_available?
|
|
@@ -10,4 +10,4 @@ module SpreeMultiVendor::Spree::Api::V1::UsersControllerDecorator
|
|
|
10
10
|
end
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
Spree::Api::V1::UsersController.prepend SpreeMultiVendor::Spree::Api::V1::UsersControllerDecorator
|
|
13
|
+
Spree::Api::V1::UsersController.prepend SpreeMultiVendor::Spree::Api::V1::UsersControllerDecorator if SpreeMultiVendor::Engine.api_v1_available?
|
data/app/models/spree/vendor.rb
CHANGED
|
@@ -61,7 +61,7 @@ module Spree
|
|
|
61
61
|
private
|
|
62
62
|
|
|
63
63
|
def create_stock_location
|
|
64
|
-
stock_locations.where(name: name, country: Spree::
|
|
64
|
+
stock_locations.where(name: name, country: Spree::Store.default.default_country).first_or_create!
|
|
65
65
|
end
|
|
66
66
|
|
|
67
67
|
def should_generate_new_friendly_id?
|
|
@@ -48,7 +48,7 @@ class Spree::VendorAbility
|
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
if order_scope.present?
|
|
51
|
-
can %i[admin index edit update cart], Spree::Order, order_scope.merge(state: 'complete')
|
|
51
|
+
can %i[admin show index edit update cart], Spree::Order, order_scope.merge(state: 'complete')
|
|
52
52
|
else
|
|
53
53
|
cannot_display_model(Spree::Order)
|
|
54
54
|
end
|
|
@@ -7,7 +7,6 @@ module SpreeMultiVendor::Spree::VariantDecorator
|
|
|
7
7
|
|
|
8
8
|
def vendor
|
|
9
9
|
@vendor ||= if self.class.reflect_on_association(:vendor) && self[:vendor_id].present?
|
|
10
|
-
product.vendor
|
|
11
10
|
::Spree::Vendor.unscoped.find(self[:vendor_id])
|
|
12
11
|
elsif Spree::Product.reflect_on_association(:vendor) && product.vendor_id.present?
|
|
13
12
|
product.vendor
|
|
@@ -5,7 +5,7 @@ Deface::Override.new(
|
|
|
5
5
|
text: <<-HTML
|
|
6
6
|
<% if current_spree_user.respond_to?(:has_spree_role?) && current_spree_user.has_spree_role?(:admin) %>
|
|
7
7
|
<%= f.field_container :vendor_ids, class: ['form-group'] do %>
|
|
8
|
-
<%= f.label :vendor_ids,
|
|
8
|
+
<%= f.label :vendor_ids, plural_resource_name(Spree::Vendor) %>
|
|
9
9
|
<%= f.collection_select(:vendor_ids, Spree::Vendor.all, :id, :name, { }, { class: 'select2', multiple: true }) %>
|
|
10
10
|
<% end %>
|
|
11
11
|
<% end %>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
<%= form_for [:admin, @vendor], url: admin_vendor_settings_url do |f| %>
|
|
6
6
|
<fieldset>
|
|
7
|
-
<%= render partial: 'spree/shared/error_messages', locals: { target: @vendor } %>
|
|
7
|
+
<%= render partial: 'spree/admin/shared/error_messages', locals: { target: @vendor } %>
|
|
8
8
|
<div class="form-group">
|
|
9
9
|
<%= f.field_container :name do %>
|
|
10
10
|
<%= f.label :name %>
|
|
@@ -6,7 +6,5 @@ module Spree
|
|
|
6
6
|
|
|
7
7
|
@@vendor_attributes = [:name, :about_us, :contact_us, :notification_email]
|
|
8
8
|
@@vendor_attributes << :image if Spree.version.to_f >= 3.6
|
|
9
|
-
|
|
10
|
-
@@product_attributes << :vendor_id if SpreeMultiVendor::Config[:vendorized_models].include?('product')
|
|
11
9
|
end
|
|
12
10
|
end
|
data/config/locales/es.yml
CHANGED
|
@@ -7,9 +7,11 @@ es:
|
|
|
7
7
|
attributes:
|
|
8
8
|
spree/vendor:
|
|
9
9
|
about_us: Acerca de
|
|
10
|
+
commission_rate: Porcentaje Comisión
|
|
10
11
|
contact_us: Contáctanos
|
|
11
12
|
image: Imagen
|
|
12
13
|
name: Nombre
|
|
14
|
+
notification_email: Email notificación pedido
|
|
13
15
|
state: estado
|
|
14
16
|
created_at: creado en
|
|
15
17
|
priority: prioridad
|
|
@@ -21,6 +23,7 @@ es:
|
|
|
21
23
|
order_mailer:
|
|
22
24
|
vendor_notification_email:
|
|
23
25
|
dear_vendor: Estimado vendedor,
|
|
26
|
+
order_summary: Resumen del pedido
|
|
24
27
|
subject: Notificación de vendedor
|
|
25
28
|
thanks: Gracias
|
|
26
29
|
vendor: Vendedor
|
data/config/routes.rb
CHANGED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
class ChangeVendorizedModelsVendorIdType < ActiveRecord::Migration[4.2]
|
|
2
|
+
def change
|
|
3
|
+
SpreeMultiVendor.vendorized_models.each do |klass|
|
|
4
|
+
change_column klass.table_name, :vendor_id, :bigint
|
|
5
|
+
rescue
|
|
6
|
+
message = "Could not change vendor_id column for spree_#{klass}"
|
|
7
|
+
Rails.logger.error message
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
class ChangeVendorIdAndUserIdTypeForSpreeVendorUsers < ActiveRecord::Migration[4.2]
|
|
2
|
+
def up
|
|
3
|
+
change_table(:spree_vendor_users) do |t|
|
|
4
|
+
t.change :vendor_id, :bigint
|
|
5
|
+
t.change :user_id, :bigint
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
def down
|
|
9
|
+
change_table(:spree_vendor_users) do |t|
|
|
10
|
+
t.change :vendor_id, :integer
|
|
11
|
+
t.change :user_id, :integer
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
data/db/migrate/20210728121024_change_vendor_id_and_order_id_type_for_spree_order_commissions.rb
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
class ChangeVendorIdAndOrderIdTypeForSpreeOrderCommissions < ActiveRecord::Migration[4.2]
|
|
2
|
+
def up
|
|
3
|
+
change_table(:spree_order_commissions) do |t|
|
|
4
|
+
t.change :vendor_id, :bigint
|
|
5
|
+
t.change :order_id, :bigint
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
def down
|
|
9
|
+
change_table(:spree_order_commissions) do |t|
|
|
10
|
+
t.change :vendor_id, :integer
|
|
11
|
+
t.change :order_id, :integer
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
File without changes
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
require_relative 'configuration'
|
|
2
|
+
|
|
1
3
|
module SpreeMultiVendor
|
|
2
4
|
class Engine < Rails::Engine
|
|
3
5
|
require 'spree/core'
|
|
@@ -13,12 +15,20 @@ module SpreeMultiVendor
|
|
|
13
15
|
SpreeMultiVendor::Config = SpreeMultiVendor::Configuration.new
|
|
14
16
|
end
|
|
15
17
|
|
|
18
|
+
config.after_initialize do
|
|
19
|
+
::Spree::PermittedAttributes.product_attributes << :vendor_id if SpreeMultiVendor::Config[:vendorized_models].include?('product')
|
|
20
|
+
end
|
|
21
|
+
|
|
16
22
|
def self.activate
|
|
17
23
|
Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c|
|
|
18
24
|
Rails.configuration.cache_classes ? require(c) : load(c)
|
|
19
25
|
end
|
|
20
26
|
end
|
|
21
27
|
|
|
28
|
+
def self.api_v1_available?
|
|
29
|
+
@@api_v1_available ||= Gem::Specification.find_all_by_name('spree_api_v1').any?
|
|
30
|
+
end
|
|
31
|
+
|
|
22
32
|
config.to_prepare &method(:activate).to_proc
|
|
23
33
|
end
|
|
24
34
|
end
|
data/lib/spree_multi_vendor.rb
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
require 'spree_core'
|
|
2
|
+
require 'spree_backend'
|
|
3
|
+
require 'spree_emails'
|
|
2
4
|
require 'spree_multi_vendor/engine'
|
|
3
5
|
require 'spree_multi_vendor/version'
|
|
4
6
|
require 'spree_extension'
|
|
@@ -8,7 +10,7 @@ module SpreeMultiVendor
|
|
|
8
10
|
# TODO: this should be moved into preferences
|
|
9
11
|
def self.vendorized_models
|
|
10
12
|
SpreeMultiVendor::Config[:vendorized_models].map(&:classify).map do |class_name|
|
|
11
|
-
"Spree::#{class_name}".safe_constantize
|
|
13
|
+
"::Spree::#{class_name}".safe_constantize
|
|
12
14
|
end.compact.uniq
|
|
13
15
|
end
|
|
14
16
|
end
|
|
@@ -9,6 +9,12 @@ FactoryBot.define do
|
|
|
9
9
|
state { :active }
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
+
factory :active_vendor_list do
|
|
13
|
+
name { "#{FFaker::Company.name} #{FFaker::Company.suffix }" }
|
|
14
|
+
state { :active }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
|
|
12
18
|
factory :pending_vendor do
|
|
13
19
|
name { 'Pending vendor' }
|
|
14
20
|
state { :pending }
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
RSpec.feature 'Admin Orders', :js do
|
|
4
|
+
let(:store) { Spree::Store.default }
|
|
4
5
|
let(:vendor) { create(:active_vendor, name: 'Vendor') }
|
|
5
6
|
let(:vendor_2) { create(:active_vendor, name: 'Other vendor') }
|
|
6
|
-
let(:order) { create(:order, ship_address: create(:address), bill_address: create(:address)) }
|
|
7
|
-
let(:order_2) { create(:order) }
|
|
7
|
+
let(:order) { create(:order, ship_address: create(:address), bill_address: create(:address), store: store) }
|
|
8
|
+
let(:order_2) { create(:order, store: store) }
|
|
8
9
|
let!(:user) { create(:user, vendors: [vendor]) }
|
|
9
|
-
let(:product) { create(:product_in_stock, vendor: vendor) }
|
|
10
|
-
let(:product_2) { create(:product_in_stock, vendor: vendor_2) }
|
|
10
|
+
let(:product) { create(:product_in_stock, vendor: vendor, stores:[store]) }
|
|
11
|
+
let(:product_2) { create(:product_in_stock, vendor: vendor_2,stores:[store]) }
|
|
11
12
|
|
|
12
13
|
before do
|
|
13
14
|
create(:line_item, order: order, product: product)
|
|
@@ -42,13 +42,11 @@ RSpec.feature 'Admin Vendor Settings', :js do
|
|
|
42
42
|
expect(page).not_to have_text 'contact_us can\'t be blank'
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
expect(page).to have_css("img[src*='thinking-cat.jpg']")
|
|
51
|
-
end
|
|
45
|
+
scenario 'can update an existing vendor image' do
|
|
46
|
+
create(:vendor, name: 'New vendor')
|
|
47
|
+
page.attach_file("vendor_image", Spree::Core::Engine.root + 'spec/fixtures' + 'thinking-cat.jpg')
|
|
48
|
+
click_button 'Update'
|
|
49
|
+
expect(page).to have_css("img[src*='thinking-cat.jpg']")
|
|
52
50
|
end
|
|
53
51
|
end
|
|
54
52
|
|
|
@@ -70,7 +68,7 @@ RSpec.feature 'Admin Vendor Settings', :js do
|
|
|
70
68
|
|
|
71
69
|
it 'renders forbidden page' do
|
|
72
70
|
visit spree.admin_vendor_settings_path
|
|
73
|
-
expect(current_path).to eq spree.
|
|
71
|
+
expect(current_path).to eq spree.admin_forbidden_path
|
|
74
72
|
end
|
|
75
73
|
end
|
|
76
74
|
end
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
3
|
describe 'API V2 Storefront Products Spec', type: :request do
|
|
4
|
-
let
|
|
4
|
+
let(:store) { Spree::Store.default }
|
|
5
|
+
let!(:products) { create_list(:product, 5, stores: [store]) }
|
|
5
6
|
let!(:vendor) { create(:vendor) }
|
|
6
7
|
let!(:vendor_2) { create(:vendor) }
|
|
7
8
|
|
|
@@ -5,6 +5,8 @@ describe 'API V2 Storefront Vendor Spec', type: :request do
|
|
|
5
5
|
let!(:vendor_image) { create(:vendor_image) }
|
|
6
6
|
let!(:vendor) { create(:active_vendor, name: 'vendor', image: vendor_image) }
|
|
7
7
|
let!(:product) { create(:product, vendor: vendor) }
|
|
8
|
+
let!(:vendors) {
|
|
9
|
+
create_list(:active_vendor_list, 30)}
|
|
8
10
|
|
|
9
11
|
describe 'vendors#show' do
|
|
10
12
|
context 'with invalid slug param' do
|
|
@@ -49,4 +51,68 @@ describe 'API V2 Storefront Vendor Spec', type: :request do
|
|
|
49
51
|
end
|
|
50
52
|
end
|
|
51
53
|
end
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
describe 'vendors#index' do
|
|
57
|
+
context 'returns vendors list' do
|
|
58
|
+
|
|
59
|
+
it 'must return a list of vendor paged' do
|
|
60
|
+
get "/api/v2/storefront/vendors"
|
|
61
|
+
expect(response).to have_http_status(:ok)
|
|
62
|
+
json_response = JSON.parse(response.body)
|
|
63
|
+
expect(json_response)
|
|
64
|
+
expect(json_response['data'].count).to eq (25)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it 'can request different pages' do
|
|
68
|
+
get "/api/v2/storefront/vendors?page=2"
|
|
69
|
+
expect(response).to have_http_status(:ok)
|
|
70
|
+
json_response = JSON.parse(response.body)
|
|
71
|
+
expect(json_response)
|
|
72
|
+
expect(json_response['data'].count).to eq (6)
|
|
73
|
+
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it 'can control paging size' do
|
|
77
|
+
get "/api/v2/storefront/vendors?page=2&per_page=10"
|
|
78
|
+
expect(response).to have_http_status(:ok)
|
|
79
|
+
json_response = JSON.parse(response.body)
|
|
80
|
+
expect(json_response)
|
|
81
|
+
expect(json_response['data'].count).to eq (10)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
it 'returns data type vendor' do
|
|
86
|
+
get "/api/v2/storefront/vendors"
|
|
87
|
+
json_response = JSON.parse(response.body)
|
|
88
|
+
expect(json_response)
|
|
89
|
+
expect(json_response['data'][0]['type']).to eq('vendor')
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it 'does not return included' do
|
|
93
|
+
get "/api/v2/storefront/vendors"
|
|
94
|
+
json_response = JSON.parse(response.body)
|
|
95
|
+
expect(json_response.keys).to contain_exactly('data', "links", "meta")
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
context 'with products and images included' do
|
|
100
|
+
before { get "/api/v2/storefront/vendors?include=products,image" }
|
|
101
|
+
|
|
102
|
+
it_behaves_like 'returns 200 HTTP status'
|
|
103
|
+
|
|
104
|
+
it 'returns product information' do
|
|
105
|
+
json_response = JSON.parse(response.body)
|
|
106
|
+
expect(json_response.keys).to contain_exactly('data', 'included', "links", "meta")
|
|
107
|
+
expect(json_response['included'].first['id']).to eq(product.id.to_s)
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
it 'returns image information' do
|
|
111
|
+
json_response = JSON.parse(response.body)
|
|
112
|
+
expect(json_response.keys).to contain_exactly('data', 'included',"links", "meta")
|
|
113
|
+
|
|
114
|
+
expect(json_response['included'].second['id']).to eq(vendor_image.id.to_s)
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
52
118
|
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -8,4 +8,6 @@ require 'spree_dev_tools/rspec/spec_helper'
|
|
|
8
8
|
|
|
9
9
|
# Requires supporting ruby files with custom matchers and macros, etc,
|
|
10
10
|
# in spec/support/ and its subdirectories.
|
|
11
|
-
Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].sort.each { |f| require f }
|
|
11
|
+
Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].sort.each { |f| require f }
|
|
12
|
+
|
|
13
|
+
ActiveJob::Base.queue_adapter = :inline
|
data/spree_multi_vendor.gemspec
CHANGED
|
@@ -14,7 +14,7 @@ Gem::Specification.new do |s|
|
|
|
14
14
|
|
|
15
15
|
s.author = 'Spark Solutions'
|
|
16
16
|
s.email = 'we@sparksolutions.co'
|
|
17
|
-
s.homepage = 'https://
|
|
17
|
+
s.homepage = 'https://spreecommerce.org/use-cases/multi-vendor-marketplace-demo/'
|
|
18
18
|
s.license = 'BSD-3-Clause'
|
|
19
19
|
|
|
20
20
|
s.metadata = {
|
|
@@ -29,11 +29,12 @@ Gem::Specification.new do |s|
|
|
|
29
29
|
s.require_path = 'lib'
|
|
30
30
|
s.requirements << 'none'
|
|
31
31
|
|
|
32
|
-
spree_version = '>= 4.
|
|
33
|
-
s.add_dependency '
|
|
34
|
-
s.add_dependency 'spree_api', spree_version
|
|
32
|
+
spree_version = '>= 4.3.0.rc1'
|
|
33
|
+
s.add_dependency 'spree', spree_version
|
|
35
34
|
s.add_dependency 'spree_backend', spree_version
|
|
35
|
+
s.add_dependency 'spree_emails', spree_version
|
|
36
36
|
s.add_dependency 'spree_extension'
|
|
37
|
+
|
|
37
38
|
s.add_dependency 'deface', '~> 1.0'
|
|
38
39
|
|
|
39
40
|
s.add_development_dependency 'shoulda-matchers'
|
metadata
CHANGED
|
@@ -1,75 +1,57 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: spree_multi_vendor
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Spark Solutions
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2022-12-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
14
|
+
name: spree
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
17
|
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 4.
|
|
20
|
-
- - "<"
|
|
21
|
-
- !ruby/object:Gem::Version
|
|
22
|
-
version: '5.0'
|
|
19
|
+
version: 4.3.0.rc1
|
|
23
20
|
type: :runtime
|
|
24
21
|
prerelease: false
|
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
26
23
|
requirements:
|
|
27
24
|
- - ">="
|
|
28
25
|
- !ruby/object:Gem::Version
|
|
29
|
-
version: 4.
|
|
30
|
-
- - "<"
|
|
31
|
-
- !ruby/object:Gem::Version
|
|
32
|
-
version: '5.0'
|
|
26
|
+
version: 4.3.0.rc1
|
|
33
27
|
- !ruby/object:Gem::Dependency
|
|
34
|
-
name:
|
|
28
|
+
name: spree_backend
|
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
|
36
30
|
requirements:
|
|
37
31
|
- - ">="
|
|
38
32
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: 4.
|
|
40
|
-
- - "<"
|
|
41
|
-
- !ruby/object:Gem::Version
|
|
42
|
-
version: '5.0'
|
|
33
|
+
version: 4.3.0.rc1
|
|
43
34
|
type: :runtime
|
|
44
35
|
prerelease: false
|
|
45
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
46
37
|
requirements:
|
|
47
38
|
- - ">="
|
|
48
39
|
- !ruby/object:Gem::Version
|
|
49
|
-
version: 4.
|
|
50
|
-
- - "<"
|
|
51
|
-
- !ruby/object:Gem::Version
|
|
52
|
-
version: '5.0'
|
|
40
|
+
version: 4.3.0.rc1
|
|
53
41
|
- !ruby/object:Gem::Dependency
|
|
54
|
-
name:
|
|
42
|
+
name: spree_emails
|
|
55
43
|
requirement: !ruby/object:Gem::Requirement
|
|
56
44
|
requirements:
|
|
57
45
|
- - ">="
|
|
58
46
|
- !ruby/object:Gem::Version
|
|
59
|
-
version: 4.
|
|
60
|
-
- - "<"
|
|
61
|
-
- !ruby/object:Gem::Version
|
|
62
|
-
version: '5.0'
|
|
47
|
+
version: 4.3.0.rc1
|
|
63
48
|
type: :runtime
|
|
64
49
|
prerelease: false
|
|
65
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
66
51
|
requirements:
|
|
67
52
|
- - ">="
|
|
68
53
|
- !ruby/object:Gem::Version
|
|
69
|
-
version: 4.
|
|
70
|
-
- - "<"
|
|
71
|
-
- !ruby/object:Gem::Version
|
|
72
|
-
version: '5.0'
|
|
54
|
+
version: 4.3.0.rc1
|
|
73
55
|
- !ruby/object:Gem::Dependency
|
|
74
56
|
name: spree_extension
|
|
75
57
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -132,10 +114,10 @@ executables: []
|
|
|
132
114
|
extensions: []
|
|
133
115
|
extra_rdoc_files: []
|
|
134
116
|
files:
|
|
117
|
+
- ".github/dependabot.yml"
|
|
135
118
|
- ".gitignore"
|
|
136
119
|
- ".rspec"
|
|
137
120
|
- ".travis.yml"
|
|
138
|
-
- Appraisals
|
|
139
121
|
- Gemfile
|
|
140
122
|
- LICENSE
|
|
141
123
|
- README.md
|
|
@@ -166,7 +148,6 @@ files:
|
|
|
166
148
|
- app/models/spree/vendor_image.rb
|
|
167
149
|
- app/models/spree/vendor_order_totals.rb
|
|
168
150
|
- app/models/spree/vendor_user.rb
|
|
169
|
-
- app/models/spree_multi_vendor/configuration.rb
|
|
170
151
|
- app/models/spree_multi_vendor/spree/ability_decorator.rb
|
|
171
152
|
- app/models/spree_multi_vendor/spree/base_decorator.rb
|
|
172
153
|
- app/models/spree_multi_vendor/spree/line_item_decorator.rb
|
|
@@ -220,12 +201,14 @@ files:
|
|
|
220
201
|
- db/migrate/20190312130754_create_spree_order_commissions.rb
|
|
221
202
|
- db/migrate/20190322133128_add_notification_email_to_vendors.rb
|
|
222
203
|
- db/migrate/20200416030721_add_translations_to_vendor.rb
|
|
223
|
-
-
|
|
224
|
-
-
|
|
204
|
+
- db/migrate/20210728120649_change_vendorized_models_vendor_id_type.rb
|
|
205
|
+
- db/migrate/20210728120910_change_vendor_id_and_user_id_type_for_spree_vendor_users.rb
|
|
206
|
+
- db/migrate/20210728121024_change_vendor_id_and_order_id_type_for_spree_order_commissions.rb
|
|
225
207
|
- lib/generators/spree_multi_vendor/install/install_generator.rb
|
|
226
208
|
- lib/generators/spree_multi_vendor/mailers_preview/mailers_preview_generator.rb
|
|
227
209
|
- lib/generators/spree_multi_vendor/mailers_preview/templates/mailers/previews/vendor_notification_preview.rb
|
|
228
210
|
- lib/spree_multi_vendor.rb
|
|
211
|
+
- lib/spree_multi_vendor/configuration.rb
|
|
229
212
|
- lib/spree_multi_vendor/engine.rb
|
|
230
213
|
- lib/spree_multi_vendor/factories.rb
|
|
231
214
|
- lib/spree_multi_vendor/version.rb
|
|
@@ -262,14 +245,14 @@ files:
|
|
|
262
245
|
- spec/spec_helper.rb
|
|
263
246
|
- spec/support/shoulda_matchers.rb
|
|
264
247
|
- spree_multi_vendor.gemspec
|
|
265
|
-
homepage: https://
|
|
248
|
+
homepage: https://spreecommerce.org/use-cases/multi-vendor-marketplace-demo/
|
|
266
249
|
licenses:
|
|
267
250
|
- BSD-3-Clause
|
|
268
251
|
metadata:
|
|
269
252
|
bug_tracker_uri: https://github.com/spree-contrib/spree_multi_vendor/issues
|
|
270
|
-
changelog_uri: https://github.com/spree-contrib/spree_multi_vendor/releases/tag/v2.
|
|
253
|
+
changelog_uri: https://github.com/spree-contrib/spree_multi_vendor/releases/tag/v2.4.0
|
|
271
254
|
documentation_uri: https://guides.spreecommerce.org/
|
|
272
|
-
source_code_uri: https://github.com/spree-contrib/spree_multi_vendor/tree/v2.
|
|
255
|
+
source_code_uri: https://github.com/spree-contrib/spree_multi_vendor/tree/v2.4.0
|
|
273
256
|
post_install_message:
|
|
274
257
|
rdoc_options: []
|
|
275
258
|
require_paths:
|
|
@@ -286,7 +269,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
286
269
|
version: '0'
|
|
287
270
|
requirements:
|
|
288
271
|
- none
|
|
289
|
-
rubygems_version: 3.
|
|
272
|
+
rubygems_version: 3.0.9
|
|
290
273
|
signing_key:
|
|
291
274
|
specification_version: 4
|
|
292
275
|
summary: Spree Commerce multi vendor marketplace extension
|
data/Appraisals
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
appraise 'spree-4-2' do
|
|
2
|
-
gem 'spree', '~> 4.2.0.rc4'
|
|
3
|
-
gem 'spree_auth_devise', '~> 4.3'
|
|
4
|
-
gem 'rails-controller-testing'
|
|
5
|
-
end
|
|
6
|
-
|
|
7
|
-
appraise 'spree-master' do
|
|
8
|
-
gem 'spree', github: 'spree/spree', branch: 'master'
|
|
9
|
-
gem 'spree_auth_devise', github: 'spree/spree_auth_devise', branch: 'master'
|
|
10
|
-
gem 'rails-controller-testing'
|
|
11
|
-
end
|
data/gemfiles/spree_4_2.gemfile
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
# This file was generated by Appraisal
|
|
2
|
-
|
|
3
|
-
source "https://rubygems.org"
|
|
4
|
-
|
|
5
|
-
gem "spree", github: "spree/spree", branch: "master"
|
|
6
|
-
gem "spree_auth_devise", github: "spree/spree_auth_devise", branch: "master"
|
|
7
|
-
gem "rails-controller-testing"
|
|
8
|
-
|
|
9
|
-
gemspec path: "../"
|