solidus_json_api 0.3.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 +224 -0
- data/Gemfile +6 -0
- data/LICENSE +26 -0
- data/README.md +94 -0
- data/Rakefile +38 -0
- data/app/controllers/concerns/spree/api/v2/renderable.rb +63 -0
- data/app/controllers/spree/api/v2/base_controller.rb +9 -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 +21 -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/line_item_decorator.rb +3 -0
- data/app/models/spree/order_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 +55 -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 +20 -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/circle.yml +12 -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 +14 -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/CNAME +1 -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/favicon.ico +0 -0
- data/docs/source/images/navbar.png +0 -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 +143 -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 +150 -0
- data/docs/source/includes/_pagination.md +10 -0
- data/docs/source/includes/_prices.md +188 -0
- data/docs/source/includes/_products.md +407 -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 +51 -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 +110 -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_json_api/config.rb +8 -0
- data/lib/solidus_json_api/engine.rb +21 -0
- data/lib/solidus_json_api.rb +5 -0
- data/solidus_json_api.gemspec +36 -0
- data/spec/controllers/spree/api/v2/base_controller_spec.rb +46 -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 +91 -0
- data/spec/controllers/spree/api/v2/line_items_controller_spec.rb +101 -0
- data/spec/controllers/spree/api/v2/option_types_controller_spec.rb +71 -0
- data/spec/controllers/spree/api/v2/option_values_controller_spec.rb +88 -0
- data/spec/controllers/spree/api/v2/orders_controller_spec.rb +61 -0
- data/spec/controllers/spree/api/v2/prices_controller_spec.rb +55 -0
- data/spec/controllers/spree/api/v2/products_controller_spec.rb +99 -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 +106 -0
- data/spec/lib/solidus_json_api/config_spec.rb +10 -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 +141 -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 +68 -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 +57 -0
- data/spec/support/shoulda_matchers.rb +6 -0
- metadata +442 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V2
|
|
4
|
+
class OrdersController < Spree::Api::V2::BaseController
|
|
5
|
+
def index
|
|
6
|
+
render_collection orders
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def show
|
|
10
|
+
render_instance orders.find(params[:id])
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
private
|
|
14
|
+
|
|
15
|
+
def orders
|
|
16
|
+
@current_api_user.admin? ? Spree::Order : @current_api_user.orders
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
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.friendly.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 < SolidusJsonApi.parent_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,55 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
class ErrorSerializer
|
|
3
|
+
attr_accessor :resource, :options, :response
|
|
4
|
+
|
|
5
|
+
def initialize(resource, options = {})
|
|
6
|
+
@resource = resource
|
|
7
|
+
@response = options.delete(:response)
|
|
8
|
+
@options = options
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def as_json
|
|
12
|
+
{ errors: error_messages }.to_json
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
private
|
|
16
|
+
|
|
17
|
+
def resource_error_objects(messages)
|
|
18
|
+
messages.map do |title, detail|
|
|
19
|
+
pointer = "data/attributes/#{title.to_s.split('.').join('/')}"
|
|
20
|
+
error_object title.to_s.gsub('.', ' '), detail.to_sentence, pointer: pointer
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def error_messages
|
|
25
|
+
case resource
|
|
26
|
+
when Symbol
|
|
27
|
+
title_translation = Spree.t("api.errors.#{resource}.title")
|
|
28
|
+
detail_translation = Spree.t("api.errors.#{resource}.detail")
|
|
29
|
+
[error_object(title_translation, detail_translation)]
|
|
30
|
+
when Array
|
|
31
|
+
resource.map { |errors| resource_error_objects errors }.flatten
|
|
32
|
+
else
|
|
33
|
+
resource_error_objects resource.errors.messages
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def error_object(title, detail, pointer: '')
|
|
38
|
+
error = {
|
|
39
|
+
detail: detail.gsub("\n", ' ').strip,
|
|
40
|
+
meta: options,
|
|
41
|
+
title: title.to_s.titleize
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
error.merge!(response_attributes) if response.present?
|
|
45
|
+
pointer.present? ? error.merge(pointer: pointer) : error
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def response_attributes
|
|
49
|
+
{
|
|
50
|
+
status: response.status_message,
|
|
51
|
+
code: response.code
|
|
52
|
+
}
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
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,20 @@
|
|
|
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, :canceled_at,
|
|
6
|
+
:payment_total, :total, :display_total
|
|
7
|
+
|
|
8
|
+
%w(
|
|
9
|
+
item adjustment shipment promo additional_tax included_tax
|
|
10
|
+
).each do |money_method|
|
|
11
|
+
attributes "#{money_method}_total", "display_#{money_method}_total"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
has_one :user
|
|
15
|
+
has_one :bill_address
|
|
16
|
+
has_one :ship_address
|
|
17
|
+
|
|
18
|
+
has_many :line_items
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
class ProductSerializer < Spree::BaseSerializer
|
|
3
|
+
attributes :name, :description, :slug, :meta_description, :meta_keywords
|
|
4
|
+
|
|
5
|
+
has_one :master
|
|
6
|
+
|
|
7
|
+
has_many :variants
|
|
8
|
+
has_many :taxons
|
|
9
|
+
has_many :option_types
|
|
10
|
+
has_many :images
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
class TaxonSerializer < Spree::BaseSerializer
|
|
3
|
+
attributes :name, :permalink, :position, :description, :meta_title, :links,
|
|
4
|
+
:meta_description, :meta_keywords, :depth
|
|
5
|
+
|
|
6
|
+
belongs_to :taxonomy
|
|
7
|
+
belongs_to :parent, serializer: TaxonSerializer
|
|
8
|
+
has_many :children, serializer: TaxonSerializer
|
|
9
|
+
|
|
10
|
+
private
|
|
11
|
+
|
|
12
|
+
def links
|
|
13
|
+
image_links object.icon
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
class VariantSerializer < Spree::BaseSerializer
|
|
3
|
+
attributes :sku, :weight, :height, :width, :depth, :is_master, :position,
|
|
4
|
+
:name, :price, :display_price
|
|
5
|
+
|
|
6
|
+
has_many :prices
|
|
7
|
+
has_many :option_values
|
|
8
|
+
has_many :images
|
|
9
|
+
|
|
10
|
+
belongs_to :product
|
|
11
|
+
end
|
|
12
|
+
end
|
data/circle.yml
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
en:
|
|
2
|
+
spree:
|
|
3
|
+
api:
|
|
4
|
+
errors:
|
|
5
|
+
invalid_token:
|
|
6
|
+
detail: 'Your token is invalid, please use a different one.'
|
|
7
|
+
title: Invalid Token
|
|
8
|
+
order_complete:
|
|
9
|
+
detail: This order has been completed.
|
|
10
|
+
title: Order Complete
|
|
11
|
+
product_out_of_stock:
|
|
12
|
+
title: Product is out of Stock
|
|
13
|
+
detail: >
|
|
14
|
+
This product is out of stock for the selected quantity.
|
|
15
|
+
record_not_found:
|
|
16
|
+
title: Record Not Found
|
|
17
|
+
detail: >
|
|
18
|
+
One of the records that you were looking for could not be found.
|
|
19
|
+
Please check to see if the record exists or if you're permitted to
|
|
20
|
+
read it.
|
|
21
|
+
quantity_too_high:
|
|
22
|
+
title: Quantity is too High
|
|
23
|
+
detail: >
|
|
24
|
+
The quantity that you have submitted is astronomically high, please
|
|
25
|
+
tone it down a bit.
|
data/config/routes.rb
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
Spree::Core::Engine.routes.draw do
|
|
2
|
+
namespace :api, defaults: { format: :json } do
|
|
3
|
+
namespace :v2 do
|
|
4
|
+
resources :countries, only: [:index, :show] do
|
|
5
|
+
resources :states, only: [:index, :show]
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
resources :images, only: [:index, :show] do
|
|
9
|
+
resource :product, :variant, only: :show
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
resources :line_items, only: :create
|
|
13
|
+
|
|
14
|
+
resources :option_types, only: [:index, :show] do
|
|
15
|
+
resources :option_values, :products, only: [:index, :show]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
resources :option_values, only: [:index, :show] do
|
|
19
|
+
resource :option_type, only: :show
|
|
20
|
+
resources :variants, only: [:index, :show]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
resources :orders, only: [:index, :show]
|
|
24
|
+
|
|
25
|
+
resources :prices, only: [:index, :show] do
|
|
26
|
+
resource :variant, :product, only: :show
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
resources :products, only: [:index, :show] do
|
|
30
|
+
resources :option_types, :variants, :images, only: [:index, :show]
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
resources :states, only: [:index, :show] do
|
|
34
|
+
resource :country, only: :show
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
resources :taxonomies, only: [:index, :show] do
|
|
38
|
+
resources :taxons, only: [:index, :show]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
resources :taxons, only: [:index, :show] do
|
|
42
|
+
resources :children, :products, only: [:index, :show]
|
|
43
|
+
resource :parent, only: :show, controller: 'taxons'
|
|
44
|
+
resource :taxonomy, only: :show
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
resources :variants, only: [:index, :show] do
|
|
48
|
+
resources :prices, :option_values, :images, only: [:index, :show]
|
|
49
|
+
resource :product, only: :show
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
data/docs/.nojekyll
ADDED
|
File without changes
|
data/docs/Dockerfile
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
FROM ubuntu:trusty
|
|
2
|
+
|
|
3
|
+
RUN apt-get update
|
|
4
|
+
RUN apt-get install -yq ruby ruby-dev build-essential git
|
|
5
|
+
RUN gem install --no-ri --no-rdoc bundler
|
|
6
|
+
ADD Gemfile /app/Gemfile
|
|
7
|
+
ADD Gemfile.lock /app/Gemfile.lock
|
|
8
|
+
RUN cd /app; bundle install
|
|
9
|
+
ADD . /app
|
|
10
|
+
EXPOSE 4567
|
|
11
|
+
WORKDIR /app
|
|
12
|
+
CMD ["bundle", "exec", "middleman", "server"]
|
data/docs/Gemfile
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
source 'https://rubygems.org'
|
|
2
|
+
ruby '2.2.3'
|
|
3
|
+
|
|
4
|
+
# Middleman
|
|
5
|
+
gem 'middleman', '~> 3.3.10'
|
|
6
|
+
gem 'middleman-gh-pages', '~> 0.0.3'
|
|
7
|
+
gem 'middleman-syntax', '~> 2.0.0'
|
|
8
|
+
gem 'middleman-autoprefixer', '~> 2.4.4'
|
|
9
|
+
|
|
10
|
+
gem 'rouge', '~> 1.9.0'
|
|
11
|
+
gem 'redcarpet', '~> 3.3.2'
|
|
12
|
+
|
|
13
|
+
gem 'rake', '~> 10.4.2'
|
|
14
|
+
gem 'therubyracer', '~> 0.12.2', platforms: :ruby
|
data/docs/README.md
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Documentation for the Solidus JSON API
|
|
2
|
+
|
|
3
|
+
The documentation is hand written and forked from [Slate](https://github.com/tripit/slate).
|
|
4
|
+
Please update these docs when you make a contribution.
|
|
5
|
+
|
|
6
|
+
## Setup
|
|
7
|
+
|
|
8
|
+
```shell
|
|
9
|
+
cd docs
|
|
10
|
+
bundle
|
|
11
|
+
middleman server
|
|
12
|
+
```
|