spree_api_v2 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|