spree_api_v2 0.2.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 +7 -0
- data/.gitignore +15 -0
- data/.rspec +2 -0
- data/CHANGELOG.md +38 -0
- data/Gemfile +13 -0
- data/LICENSE +26 -0
- data/README.md +98 -0
- data/Rakefile +37 -0
- data/app/controllers/concerns/spree/api/v2/renderable.rb +51 -0
- data/app/controllers/spree/api/v2/base_controller.rb +31 -0
- data/app/controllers/spree/api/v2/children_controller.rb +29 -0
- data/app/controllers/spree/api/v2/countries_controller.rb +21 -0
- data/app/controllers/spree/api/v2/images_controller.rb +29 -0
- data/app/controllers/spree/api/v2/line_items_controller.rb +36 -0
- data/app/controllers/spree/api/v2/option_types_controller.rb +31 -0
- data/app/controllers/spree/api/v2/option_values_controller.rb +29 -0
- data/app/controllers/spree/api/v2/orders_controller.rb +11 -0
- data/app/controllers/spree/api/v2/prices_controller.rb +27 -0
- data/app/controllers/spree/api/v2/products_controller.rb +37 -0
- data/app/controllers/spree/api/v2/states_controller.rb +29 -0
- data/app/controllers/spree/api/v2/taxonomies_controller.rb +21 -0
- data/app/controllers/spree/api/v2/taxons_controller.rb +40 -0
- data/app/controllers/spree/api/v2/variants_controller.rb +35 -0
- data/app/models/spree/base_decorator.rb +5 -0
- data/app/models/spree/image_decorator.rb +3 -0
- data/app/models/spree/price_decorator.rb +3 -0
- data/app/models/spree/state_decorator.rb +3 -0
- data/app/serializers/spree/address_serializer.rb +9 -0
- data/app/serializers/spree/base_serializer.rb +13 -0
- data/app/serializers/spree/country_serializer.rb +7 -0
- data/app/serializers/spree/error_serializer.rb +52 -0
- data/app/serializers/spree/image_serializer.rb +13 -0
- data/app/serializers/spree/line_item_serializer.rb +13 -0
- data/app/serializers/spree/option_type_serializer.rb +8 -0
- data/app/serializers/spree/option_value_serializer.rb +8 -0
- data/app/serializers/spree/order_serializer.rb +21 -0
- data/app/serializers/spree/price_serializer.rb +7 -0
- data/app/serializers/spree/product_serializer.rb +12 -0
- data/app/serializers/spree/role_serializer.rb +5 -0
- data/app/serializers/spree/state_serializer.rb +7 -0
- data/app/serializers/spree/store_serializer.rb +6 -0
- data/app/serializers/spree/taxon_serializer.rb +16 -0
- data/app/serializers/spree/taxonomy_serializer.rb +7 -0
- data/app/serializers/spree/user_serializer.rb +5 -0
- data/app/serializers/spree/variant_serializer.rb +12 -0
- data/bin/rails +7 -0
- data/circle.yml +13 -0
- data/config/locales/en.yml +25 -0
- data/config/routes.rb +53 -0
- data/docs/.nojekyll +0 -0
- data/docs/Dockerfile +12 -0
- data/docs/Gemfile +13 -0
- data/docs/README.md +12 -0
- data/docs/Rakefile +9 -0
- data/docs/config.rb +39 -0
- data/docs/font-selection.json +148 -0
- data/docs/source/fonts/slate.eot +0 -0
- data/docs/source/fonts/slate.svg +14 -0
- data/docs/source/fonts/slate.ttf +0 -0
- data/docs/source/fonts/slate.woff +0 -0
- data/docs/source/fonts/slate.woff2 +0 -0
- data/docs/source/images/logo.png +0 -0
- data/docs/source/images/navbar.png +0 -0
- data/docs/source/includes/_authentication.md +61 -0
- data/docs/source/includes/_countries.md +133 -0
- data/docs/source/includes/_errors.md +17 -0
- data/docs/source/includes/_filtering.md +11 -0
- data/docs/source/includes/_images.md +201 -0
- data/docs/source/includes/_line_items.md +137 -0
- data/docs/source/includes/_option_types.md +267 -0
- data/docs/source/includes/_option_values.md +227 -0
- data/docs/source/includes/_orders.md +75 -0
- data/docs/source/includes/_pagination.md +10 -0
- data/docs/source/includes/_prices.md +188 -0
- data/docs/source/includes/_products.md +403 -0
- data/docs/source/includes/_states.md +96 -0
- data/docs/source/includes/_taxonomies.md +325 -0
- data/docs/source/includes/_taxons.md +414 -0
- data/docs/source/includes/_variants.md +430 -0
- data/docs/source/index.md +53 -0
- data/docs/source/javascripts/all.js +4 -0
- data/docs/source/javascripts/all_nosearch.js +3 -0
- data/docs/source/javascripts/app/_lang.js +162 -0
- data/docs/source/javascripts/app/_search.js +74 -0
- data/docs/source/javascripts/app/_toc.js +55 -0
- data/docs/source/javascripts/lib/_energize.js +169 -0
- data/docs/source/javascripts/lib/_imagesloaded.min.js +7 -0
- data/docs/source/javascripts/lib/_jquery.highlight.js +108 -0
- data/docs/source/javascripts/lib/_jquery.tocify.js +1042 -0
- data/docs/source/javascripts/lib/_jquery_ui.js +566 -0
- data/docs/source/javascripts/lib/_lunr.js +1910 -0
- data/docs/source/layouts/layout.erb +102 -0
- data/docs/source/stylesheets/_icon-font.scss +38 -0
- data/docs/source/stylesheets/_normalize.css +427 -0
- data/docs/source/stylesheets/_syntax.scss.erb +27 -0
- data/docs/source/stylesheets/_variables.scss +109 -0
- data/docs/source/stylesheets/print.css.scss +142 -0
- data/docs/source/stylesheets/screen.css.scss +622 -0
- data/lib/solidus_api_v2.rb +5 -0
- data/lib/spree_api_v2.rb +4 -0
- data/lib/spree_api_v2/engine.rb +21 -0
- data/solidus_api_v2.gemspec +36 -0
- data/spec/controllers/spree/api/v2/children_controller_spec.rb +28 -0
- data/spec/controllers/spree/api/v2/countries_controller_spec.rb +25 -0
- data/spec/controllers/spree/api/v2/images_controller_spec.rb +93 -0
- data/spec/controllers/spree/api/v2/line_items_controller_spec.rb +86 -0
- data/spec/controllers/spree/api/v2/option_types_controller_spec.rb +73 -0
- data/spec/controllers/spree/api/v2/option_values_controller_spec.rb +88 -0
- data/spec/controllers/spree/api/v2/orders_controller_spec.rb +15 -0
- data/spec/controllers/spree/api/v2/prices_controller_spec.rb +55 -0
- data/spec/controllers/spree/api/v2/products_controller_spec.rb +95 -0
- data/spec/controllers/spree/api/v2/states_controller_spec.rb +42 -0
- data/spec/controllers/spree/api/v2/taxonomies_controller_spec.rb +31 -0
- data/spec/controllers/spree/api/v2/taxons_controller_spec.rb +54 -0
- data/spec/controllers/spree/api/v2/variants_controller_spec.rb +108 -0
- data/spec/models/spree/base_decorator_spec.rb +9 -0
- data/spec/models/spree/price_decorator_spec.rb +3 -0
- data/spec/serializers/spree/address_serializer_spec.rb +35 -0
- data/spec/serializers/spree/country_serializer_spec.rb +27 -0
- data/spec/serializers/spree/error_serializer_spec.rb +116 -0
- data/spec/serializers/spree/image_serializer_spec.rb +30 -0
- data/spec/serializers/spree/line_item_serializer_spec.rb +40 -0
- data/spec/serializers/spree/option_type_serializer_spec.rb +27 -0
- data/spec/serializers/spree/option_value_serializer_spec.rb +29 -0
- data/spec/serializers/spree/order_serializer_spec.rb +69 -0
- data/spec/serializers/spree/price_serializer_spec.rb +28 -0
- data/spec/serializers/spree/product_serializer_spec.rb +47 -0
- data/spec/serializers/spree/role_serializer_spec.rb +17 -0
- data/spec/serializers/spree/state_serializer_spec.rb +25 -0
- data/spec/serializers/spree/store_serializer_spec.rb +25 -0
- data/spec/serializers/spree/taxon_serializer_spec.rb +44 -0
- data/spec/serializers/spree/taxonomy_serializer_spec.rb +27 -0
- data/spec/serializers/spree/user_serializer_spec.rb +17 -0
- data/spec/serializers/spree/variant_serializer_spec.rb +55 -0
- data/spec/spec_helper.rb +51 -0
- data/spec/support/shoulda_matchers.rb +6 -0
- data/spree_api_v2.gemspec +36 -0
- metadata +437 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V2
|
|
4
|
+
class OptionTypesController < Spree::Api::V2::BaseController
|
|
5
|
+
skip_before_action :authenticate_user, only: [:index, :show]
|
|
6
|
+
|
|
7
|
+
def index
|
|
8
|
+
render_collection option_types.includes(:option_values, :products)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def show
|
|
12
|
+
if params[:option_value_id]
|
|
13
|
+
render_instance Spree::OptionValue.find(params[:option_value_id]).option_type
|
|
14
|
+
else
|
|
15
|
+
render_instance option_types.find(params[:id])
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def option_types
|
|
22
|
+
if params[:product_id]
|
|
23
|
+
Spree::Product.find(params[:product_id]).option_types
|
|
24
|
+
else
|
|
25
|
+
Spree::OptionType
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V2
|
|
4
|
+
class OptionValuesController < Spree::Api::V2::BaseController
|
|
5
|
+
skip_before_action :authenticate_user, only: [:index, :show]
|
|
6
|
+
|
|
7
|
+
def index
|
|
8
|
+
render_collection option_values.includes(:option_type, :variants)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def show
|
|
12
|
+
render_instance option_values.find(params[:id])
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
private
|
|
16
|
+
|
|
17
|
+
def option_values
|
|
18
|
+
if params[:option_type_id]
|
|
19
|
+
Spree::OptionType.find(params[:option_type_id]).option_values
|
|
20
|
+
elsif params[:variant_id]
|
|
21
|
+
Spree::Variant.find(params[:variant_id]).option_values
|
|
22
|
+
else
|
|
23
|
+
Spree::OptionValue
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V2
|
|
4
|
+
class PricesController < Spree::Api::V2::BaseController
|
|
5
|
+
skip_before_action :authenticate_user
|
|
6
|
+
|
|
7
|
+
def index
|
|
8
|
+
render_collection params[:variant_id] ? prices : prices.includes(:variant)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def show
|
|
12
|
+
render_instance prices.find(params[:id])
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
private
|
|
16
|
+
|
|
17
|
+
def prices
|
|
18
|
+
if params[:variant_id]
|
|
19
|
+
Spree::Variant.find(params[:variant_id]).prices
|
|
20
|
+
else
|
|
21
|
+
Spree::Price
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V2
|
|
4
|
+
class ProductsController < Spree::Api::V2::BaseController
|
|
5
|
+
skip_before_action :authenticate_user, only: [:index, :show]
|
|
6
|
+
|
|
7
|
+
def index
|
|
8
|
+
render_collection products.includes :variants, :master, :taxons, :option_types, master: :images
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def show
|
|
12
|
+
if params[:price_id]
|
|
13
|
+
render_instance Spree::Price.find(params[:price_id]).product
|
|
14
|
+
elsif params[:variant_id]
|
|
15
|
+
render_instance Spree::Variant.find(params[:variant_id]).product
|
|
16
|
+
elsif params[:image_id]
|
|
17
|
+
render_instance Spree::Image.variants.find(params[:image_id]).viewable.product
|
|
18
|
+
else
|
|
19
|
+
render_instance products.find(params[:id])
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def products
|
|
26
|
+
if params[:taxon_id].present?
|
|
27
|
+
Spree::Taxon.find(params[:taxon_id]).products
|
|
28
|
+
elsif params[:option_type_id]
|
|
29
|
+
Spree::OptionType.find(params[:option_type_id]).products
|
|
30
|
+
else
|
|
31
|
+
Spree::Product
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V2
|
|
4
|
+
class StatesController < Spree::Api::V2::BaseController
|
|
5
|
+
skip_before_action :authenticate_user
|
|
6
|
+
|
|
7
|
+
def index
|
|
8
|
+
render_collection states
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def show
|
|
12
|
+
render_instance states.find(params[:id])
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
private
|
|
16
|
+
|
|
17
|
+
def states
|
|
18
|
+
@states ||= begin
|
|
19
|
+
if params[:country_id].present?
|
|
20
|
+
Spree::Country.find(params[:country_id]).states.includes(:country)
|
|
21
|
+
else
|
|
22
|
+
Spree::State.includes(:country)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V2
|
|
4
|
+
class TaxonomiesController < Spree::Api::V2::BaseController
|
|
5
|
+
skip_before_action :authenticate_user, only: [:index, :show]
|
|
6
|
+
|
|
7
|
+
def index
|
|
8
|
+
render_collection Spree::Taxonomy.includes(:taxons)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def show
|
|
12
|
+
if params[:taxon_id].present?
|
|
13
|
+
render_instance Spree::Taxon.find(params[:taxon_id]).taxonomy
|
|
14
|
+
else
|
|
15
|
+
render_instance Spree::Taxonomy.find(params[:id])
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V2
|
|
4
|
+
class TaxonsController < Spree::Api::V2::BaseController
|
|
5
|
+
skip_before_action :authenticate_user, only: [:index, :show]
|
|
6
|
+
|
|
7
|
+
def index
|
|
8
|
+
render_collection taxons
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def show
|
|
12
|
+
render_instance taxon
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
private
|
|
16
|
+
|
|
17
|
+
def taxon
|
|
18
|
+
if params[:taxon_id].present?
|
|
19
|
+
taxons.includes(parent: taxon_associations).find(params[:taxon_id]).parent
|
|
20
|
+
else
|
|
21
|
+
taxons.find(params[:id])
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def taxons
|
|
26
|
+
if params[:taxonomy_id].present?
|
|
27
|
+
Spree::Taxonomy.find(params[:taxonomy_id]).taxons
|
|
28
|
+
.includes(*taxon_associations.-([:taxonomy]))
|
|
29
|
+
else
|
|
30
|
+
Spree::Taxon.includes(*taxon_associations)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def taxon_associations
|
|
35
|
+
[:products, :taxonomy, :parent]
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V2
|
|
4
|
+
class VariantsController < Spree::Api::V2::BaseController
|
|
5
|
+
skip_before_action :authenticate_user
|
|
6
|
+
|
|
7
|
+
def index
|
|
8
|
+
render_collection variants.includes(:default_price, :prices, :option_values, :product, :images)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def show
|
|
12
|
+
if params[:price_id]
|
|
13
|
+
render_instance Spree::Price.find(params[:price_id]).variant
|
|
14
|
+
elsif params[:image_id]
|
|
15
|
+
render_instance Spree::Image.variants.find(params[:image_id]).viewable
|
|
16
|
+
else
|
|
17
|
+
render_instance variants.find(params[:id])
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
def variants
|
|
24
|
+
if params[:product_id]
|
|
25
|
+
Spree::Product.find(params[:product_id]).variants_including_master
|
|
26
|
+
elsif params[:option_value_id]
|
|
27
|
+
Spree::OptionValue.find(params[:option_value_id]).variants
|
|
28
|
+
else
|
|
29
|
+
Spree::Variant
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
class BaseSerializer < ActiveModel::Serializer
|
|
3
|
+
def image_links(object)
|
|
4
|
+
{
|
|
5
|
+
original: object.url(:original),
|
|
6
|
+
mini: object.url(:mini),
|
|
7
|
+
small: object.url(:small),
|
|
8
|
+
product: object.url(:product),
|
|
9
|
+
large: object.url(:large)
|
|
10
|
+
}
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
class ErrorSerializer
|
|
3
|
+
attr_accessor :resource, :options
|
|
4
|
+
|
|
5
|
+
def initialize(resource, options = {})
|
|
6
|
+
@resource = resource
|
|
7
|
+
@options = options
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def as_json
|
|
11
|
+
{ errors: error_messages }.to_json
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def resource_error_objects(messages)
|
|
17
|
+
messages.map do |title, detail|
|
|
18
|
+
if title.is_a?(Hash) && title[:title]
|
|
19
|
+
error_object title[:title], title[:detail]
|
|
20
|
+
else
|
|
21
|
+
pointer = "data/attributes/#{title.to_s.split('.').join('/')}"
|
|
22
|
+
error_object title.to_s.gsub('.', ' '), detail.to_sentence, pointer: pointer
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def error_messages
|
|
28
|
+
case resource
|
|
29
|
+
when Symbol
|
|
30
|
+
title_translation = Spree.t("api.errors.#{resource}.title")
|
|
31
|
+
detail_translation = Spree.t("api.errors.#{resource}.detail")
|
|
32
|
+
[error_object(title_translation, detail_translation)]
|
|
33
|
+
when Array
|
|
34
|
+
resource.map do |errors|
|
|
35
|
+
resource_error_objects errors
|
|
36
|
+
end.flatten
|
|
37
|
+
else
|
|
38
|
+
resource_error_objects resource.errors.messages
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def error_object(title, detail, pointer: '')
|
|
43
|
+
error = {
|
|
44
|
+
detail: detail.gsub("\n", ' ').strip,
|
|
45
|
+
meta: options,
|
|
46
|
+
title: title.to_s.titleize
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
pointer.present? ? error.merge(pointer: pointer) : error
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
class LineItemSerializer < Spree::BaseSerializer
|
|
3
|
+
attributes :id, :quantity, :variant_id, :order_id, :currency, :cost_price,
|
|
4
|
+
:adjustment_total, :additional_tax_total, :price
|
|
5
|
+
|
|
6
|
+
%w(amount total).each do |money_method|
|
|
7
|
+
attributes money_method, "display_#{money_method}"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
belongs_to :order
|
|
11
|
+
belongs_to :variant
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
class OrderSerializer < Spree::BaseSerializer
|
|
3
|
+
attributes :email, :number, :state, :completed_at, :shipment_state,
|
|
4
|
+
:payment_state, :special_instructions, :currency, :channel,
|
|
5
|
+
:item_count, :approved_at, :confirmation_delivered,
|
|
6
|
+
:considered_risky, :canceled_at, :payment_total, :total,
|
|
7
|
+
:display_total
|
|
8
|
+
|
|
9
|
+
%w(
|
|
10
|
+
item adjustment shipment promo additional_tax included_tax
|
|
11
|
+
).each do |money_method|
|
|
12
|
+
attributes "#{money_method}_total", "display_#{money_method}_total"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
has_one :user
|
|
16
|
+
has_one :bill_address
|
|
17
|
+
has_one :ship_address
|
|
18
|
+
|
|
19
|
+
has_many :line_items
|
|
20
|
+
end
|
|
21
|
+
end
|