comable-backend 0.6.0 → 0.7.0.beta1
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/app/assets/javascripts/comable/admin/dispatcher.coffee +12 -2
- data/app/assets/javascripts/comable/admin/navigations.coffee +37 -0
- data/app/assets/javascripts/comable/admin/pages.coffee +0 -3
- data/app/assets/javascripts/comable/admin/products.coffee +35 -0
- data/app/assets/javascripts/comable/admin/search.coffee +6 -6
- data/app/assets/javascripts/comable/admin/themes.coffee +53 -64
- data/app/assets/javascripts/comable/admin/variants.coffee +106 -0
- data/app/assets/stylesheets/comable/admin/_common.scss +9 -0
- data/app/assets/stylesheets/comable/admin/_navigations.scss +13 -0
- data/app/assets/stylesheets/comable/admin/_variants.scss +40 -0
- data/app/assets/stylesheets/comable/admin/application.scss +2 -0
- data/app/controllers/comable/admin/navigations_controller.rb +84 -0
- data/app/controllers/comable/admin/orders_controller.rb +7 -14
- data/app/controllers/comable/admin/products_controller.rb +14 -6
- data/app/controllers/comable/admin/stocks_controller.rb +5 -2
- data/app/controllers/comable/admin/themes_controller.rb +5 -9
- data/app/controllers/comable/admin/variants_controller.rb +59 -0
- data/app/helpers/comable/admin/application_helper.rb +19 -12
- data/app/helpers/comable/admin/navigations_helper.rb +23 -0
- data/app/helpers/comable/admin/themes_helper.rb +1 -1
- data/{config/initializers/awesome_admin_layout.rb → app/navigations/comable/admin/application.rb} +8 -4
- data/app/views/comable/admin/navigations/_form.slim +40 -0
- data/app/views/comable/admin/navigations/_navigation_item_fields.slim +24 -0
- data/app/views/comable/admin/navigations/edit.slim +27 -0
- data/app/views/comable/admin/navigations/index.slim +25 -0
- data/app/views/comable/admin/navigations/new.slim +16 -0
- data/app/views/comable/admin/navigations/search_linkable_ids.coffee +15 -0
- data/app/views/comable/admin/orders/show.slim +1 -1
- data/app/views/comable/admin/products/_form.slim +91 -68
- data/app/views/comable/admin/products/edit.slim +4 -0
- data/app/views/comable/admin/products/index.slim +13 -11
- data/app/views/comable/admin/shared/{_image_fields.slim → _images_fields.slim} +5 -5
- data/app/views/comable/admin/shared/_option_type_fields.slim +13 -0
- data/app/views/comable/admin/shared/_option_types_fields.slim +13 -0
- data/app/views/comable/admin/shared/_variant_form.slim +26 -0
- data/app/views/comable/admin/shared/_variants_fields.slim +14 -0
- data/app/views/comable/admin/stocks/index.slim +16 -11
- data/app/views/comable/admin/variants/_form.slim +34 -0
- data/app/views/comable/admin/variants/edit.slim +31 -0
- data/app/views/comable/admin/variants/index.slim +97 -0
- data/app/views/comable/admin/variants/new.slim +16 -0
- data/app/views/layouts/comable/admin/application.slim +1 -1
- data/config/routes.rb +8 -1
- metadata +166 -49
@@ -0,0 +1,84 @@
|
|
1
|
+
require_dependency 'comable/admin/application_controller'
|
2
|
+
|
3
|
+
module Comable
|
4
|
+
module Admin
|
5
|
+
class NavigationsController < Comable::Admin::ApplicationController
|
6
|
+
load_and_authorize_resource class: Comable::Navigation.name, except: :index
|
7
|
+
|
8
|
+
def index
|
9
|
+
@q = Comable::Navigation.ransack(params[:q])
|
10
|
+
@navigations = @q.result.accessible_by(current_ability)
|
11
|
+
end
|
12
|
+
|
13
|
+
def show
|
14
|
+
edit
|
15
|
+
render :edit
|
16
|
+
end
|
17
|
+
|
18
|
+
def new
|
19
|
+
@navigation.navigation_items.build
|
20
|
+
end
|
21
|
+
|
22
|
+
def edit
|
23
|
+
end
|
24
|
+
|
25
|
+
def create
|
26
|
+
@navigation = Comable::Navigation.new(navigation_params)
|
27
|
+
if @navigation.save
|
28
|
+
redirect_to comable.admin_navigation_path(@navigation), notice: Comable.t('successful')
|
29
|
+
else
|
30
|
+
render :new
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def update
|
35
|
+
@navigation.attributes = navigation_params
|
36
|
+
if @navigation.save
|
37
|
+
redirect_to comable.admin_navigation_path(@navigation), notice: Comable.t('successful')
|
38
|
+
else
|
39
|
+
render :edit
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def destroy
|
44
|
+
@navigation.destroy
|
45
|
+
redirect_to comable.admin_navigations_path, notice: Comable.t('successful')
|
46
|
+
end
|
47
|
+
|
48
|
+
def search_linkable_ids
|
49
|
+
@linkable_id_options = linkable_id_options
|
50
|
+
render layout: false
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def linkable_type
|
56
|
+
return if params[:linkable_type].blank?
|
57
|
+
params[:linkable_type] if Comable.const_defined?(params[:linkable_type].demodulize)
|
58
|
+
end
|
59
|
+
|
60
|
+
def linkable_id_options
|
61
|
+
linkable_type ? linkable_type.constantize.linkable_id_options : [[]]
|
62
|
+
end
|
63
|
+
|
64
|
+
def navigation_params
|
65
|
+
params.require(:navigation).permit(
|
66
|
+
:name,
|
67
|
+
navigation_items_attributes: navigation_items_attributes_keys
|
68
|
+
)
|
69
|
+
end
|
70
|
+
|
71
|
+
def navigation_items_attributes_keys
|
72
|
+
[
|
73
|
+
:id,
|
74
|
+
:position,
|
75
|
+
:linkable_id,
|
76
|
+
:linkable_type,
|
77
|
+
:name,
|
78
|
+
:url,
|
79
|
+
:_destroy
|
80
|
+
]
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -7,6 +7,9 @@ module Comable
|
|
7
7
|
|
8
8
|
load_and_authorize_resource class: Comable::Order.name, except: :index
|
9
9
|
|
10
|
+
rescue_from ActiveRecord::RecordInvalid, with: :redirect_to_back_with_alert
|
11
|
+
rescue_from Comable::PaymentError, with: :redirect_to_back_with_alert
|
12
|
+
|
10
13
|
def index
|
11
14
|
@q = Comable::Order.complete.ransack(params[:q])
|
12
15
|
@orders = @q.result.page(params[:page]).per(15).recent.accessible_by(current_ability)
|
@@ -38,50 +41,36 @@ module Comable
|
|
38
41
|
def cancel
|
39
42
|
@order.cancel!
|
40
43
|
redirect_to :back, notice: Comable.t('successful')
|
41
|
-
rescue ActiveRecord::RecordInvalid => e
|
42
|
-
redirect_to :back, alert: e.message
|
43
44
|
end
|
44
45
|
|
45
46
|
def resume
|
46
47
|
@order.resume!
|
47
48
|
redirect_to :back, notice: Comable.t('successful')
|
48
|
-
rescue ActiveRecord::RecordInvalid => e
|
49
|
-
redirect_to :back, alert: e.message
|
50
49
|
end
|
51
50
|
|
52
51
|
def cancel_payment
|
53
52
|
@order.payment.cancel!
|
54
53
|
redirect_to :back, notice: Comable.t('successful')
|
55
|
-
rescue ActiveRecord::RecordInvalid => e
|
56
|
-
redirect_to :back, alert: e.message
|
57
54
|
end
|
58
55
|
|
59
56
|
def resume_payment
|
60
57
|
@order.payment.resume!
|
61
58
|
redirect_to :back, notice: Comable.t('successful')
|
62
|
-
rescue ActiveRecord::RecordInvalid => e
|
63
|
-
redirect_to :back, alert: e.message
|
64
59
|
end
|
65
60
|
|
66
61
|
def ship
|
67
62
|
@order.shipment.ship!
|
68
63
|
redirect_to :back, notice: Comable.t('successful')
|
69
|
-
rescue ActiveRecord::RecordInvalid => e
|
70
|
-
redirect_to :back, alert: e.message
|
71
64
|
end
|
72
65
|
|
73
66
|
def cancel_shipment
|
74
67
|
@order.shipment.cancel!
|
75
68
|
redirect_to :back, notice: Comable.t('successful')
|
76
|
-
rescue ActiveRecord::RecordInvalid => e
|
77
|
-
redirect_to :back, alert: e.message
|
78
69
|
end
|
79
70
|
|
80
71
|
def resume_shipment
|
81
72
|
@order.shipment.resume!
|
82
73
|
redirect_to :back, notice: Comable.t('successful')
|
83
|
-
rescue ActiveRecord::RecordInvalid => e
|
84
|
-
redirect_to :back, alert: e.message
|
85
74
|
end
|
86
75
|
|
87
76
|
private
|
@@ -97,6 +86,10 @@ module Comable
|
|
97
86
|
order_items_attributes: [:id, :name, :code, :price, :quantity]
|
98
87
|
)
|
99
88
|
end
|
89
|
+
|
90
|
+
def redirect_to_back_with_alert(exception)
|
91
|
+
redirect_to :back, alert: exception.message
|
92
|
+
end
|
100
93
|
end
|
101
94
|
end
|
102
95
|
end
|
@@ -7,14 +7,17 @@ module Comable
|
|
7
7
|
|
8
8
|
def index
|
9
9
|
@q = Comable::Product.ransack(params[:q])
|
10
|
-
@products = @q.result(distinct: true).includes(:
|
10
|
+
@products = @q.result(distinct: true).includes(:images, variants: [:option_values, :stock]).page(params[:page]).accessible_by(current_ability)
|
11
11
|
end
|
12
12
|
|
13
13
|
def show
|
14
|
+
edit
|
14
15
|
render :edit
|
15
16
|
end
|
16
17
|
|
17
18
|
def new
|
19
|
+
@product.variants.build
|
20
|
+
@product.published_at = Date.today
|
18
21
|
end
|
19
22
|
|
20
23
|
def create
|
@@ -27,6 +30,7 @@ module Comable
|
|
27
30
|
end
|
28
31
|
|
29
32
|
def edit
|
33
|
+
set_preview_session
|
30
34
|
end
|
31
35
|
|
32
36
|
def update
|
@@ -68,15 +72,19 @@ module Comable
|
|
68
72
|
def product_params
|
69
73
|
params.require(:product).permit(
|
70
74
|
:name,
|
71
|
-
:code,
|
72
75
|
:caption,
|
73
|
-
:
|
74
|
-
:sku_h_item_name,
|
75
|
-
:sku_v_item_name,
|
76
|
+
:published_at,
|
76
77
|
category_path_names: [],
|
77
|
-
images_attributes: [:id, :file, :_destroy]
|
78
|
+
images_attributes: [:id, :file, :_destroy],
|
79
|
+
variants_attributes: [:id, :price, :sku, :options, :quantity, :_destroy],
|
80
|
+
option_types_attributes: [:id, :name, { values: [] }]
|
78
81
|
)
|
79
82
|
end
|
83
|
+
|
84
|
+
def set_preview_session
|
85
|
+
session[Comable::Product::PREVIEW_SESSION_KEY] ||= {}
|
86
|
+
session[Comable::Product::PREVIEW_SESSION_KEY][@product.to_param] = true
|
87
|
+
end
|
80
88
|
end
|
81
89
|
end
|
82
90
|
end
|
@@ -10,7 +10,7 @@ module Comable
|
|
10
10
|
|
11
11
|
def index
|
12
12
|
@q = @stocks.ransack(params[:q])
|
13
|
-
@stocks = @q.result.includes(:product).page(params[:page]).accessible_by(current_ability)
|
13
|
+
@stocks = @q.result.includes(variant: [:product, :option_values]).page(params[:page]).accessible_by(current_ability)
|
14
14
|
end
|
15
15
|
|
16
16
|
def show
|
@@ -21,6 +21,9 @@ module Comable
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def create
|
24
|
+
# TODO: Remove
|
25
|
+
@stock.build_variant(product: @product) unless @stock.variant
|
26
|
+
|
24
27
|
if @stock.save
|
25
28
|
redirect_to comable.admin_stock_path(@stock), notice: Comable.t('successful')
|
26
29
|
else
|
@@ -52,7 +55,7 @@ module Comable
|
|
52
55
|
|
53
56
|
def export
|
54
57
|
q = @stocks.ransack(params[:q])
|
55
|
-
stocks = q.result.includes(:product).accessible_by(current_ability)
|
58
|
+
stocks = q.result.includes(variant: :product).accessible_by(current_ability)
|
56
59
|
|
57
60
|
respond_to_export_with stocks
|
58
61
|
end
|
@@ -42,7 +42,7 @@ module Comable
|
|
42
42
|
|
43
43
|
def destroy
|
44
44
|
@theme.destroy
|
45
|
-
|
45
|
+
@theme.dir.rmtree if @theme.dir.exist?
|
46
46
|
redirect_to comable.admin_themes_path, notice: Comable.t('successful')
|
47
47
|
end
|
48
48
|
|
@@ -51,7 +51,7 @@ module Comable
|
|
51
51
|
end
|
52
52
|
|
53
53
|
def show_file
|
54
|
-
@code =
|
54
|
+
@code = filepath.read if filepath.try(:file?)
|
55
55
|
end
|
56
56
|
|
57
57
|
def update_file
|
@@ -74,17 +74,13 @@ module Comable
|
|
74
74
|
# Validate the Liquid syntax
|
75
75
|
Liquid::Template.parse(params[:code])
|
76
76
|
|
77
|
-
|
78
|
-
|
79
|
-
end
|
80
|
-
|
81
|
-
def theme_dir
|
82
|
-
File.join('themes', @theme.name)
|
77
|
+
filepath.dirname.mkpath unless filepath.dirname.exist?
|
78
|
+
filepath.write(params[:code])
|
83
79
|
end
|
84
80
|
|
85
81
|
def filepath
|
86
82
|
return unless params[:path]
|
87
|
-
|
83
|
+
@theme.dir + params[:path]
|
88
84
|
end
|
89
85
|
|
90
86
|
def theme_params
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require_dependency 'comable/admin/application_controller'
|
2
|
+
|
3
|
+
module Comable
|
4
|
+
module Admin
|
5
|
+
class VariantsController < Comable::Admin::ApplicationController
|
6
|
+
load_and_authorize_resource :product, class: Comable::Product.name
|
7
|
+
load_and_authorize_resource :variant, class: Comable::Variant.name, through: :product
|
8
|
+
|
9
|
+
def index
|
10
|
+
@q = @variants.ransack(params[:q])
|
11
|
+
@variants = @q.result.includes(:product).page(params[:page]).accessible_by(current_ability)
|
12
|
+
end
|
13
|
+
|
14
|
+
def show
|
15
|
+
render :edit
|
16
|
+
end
|
17
|
+
|
18
|
+
def new
|
19
|
+
end
|
20
|
+
|
21
|
+
def create
|
22
|
+
if @variant.save
|
23
|
+
redirect_to comable.admin_product_variant_path(@product, @variant), notice: Comable.t('successful')
|
24
|
+
else
|
25
|
+
flash.now[:alert] = Comable.t('failure')
|
26
|
+
render :new
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def edit
|
31
|
+
end
|
32
|
+
|
33
|
+
def update
|
34
|
+
if @variant.update_attributes(variant_params)
|
35
|
+
redirect_to comable.admin_product_variant_path(@product, @variant), notice: Comable.t('successful')
|
36
|
+
else
|
37
|
+
flash.now[:alert] = Comable.t('failure')
|
38
|
+
render :edit
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def destroy
|
43
|
+
@variant.destroy
|
44
|
+
redirect_to comable.admin_product_variants_path(@product), notice: Comable.t('successful')
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def variant_params
|
50
|
+
params.require(:variant).permit(
|
51
|
+
:price,
|
52
|
+
:sku,
|
53
|
+
stock_attributes: [:quantity],
|
54
|
+
option_values_attributes: [:id, :name]
|
55
|
+
)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -10,28 +10,29 @@ module Comable
|
|
10
10
|
image_tag "//www.gravatar.com/avatar/#{hash}?default=mm", options
|
11
11
|
end
|
12
12
|
|
13
|
-
def link_to_add_fields(name, f,
|
14
|
-
|
15
|
-
|
16
|
-
render("comable/admin/shared/#{association.to_s.singularize}_fields", ff: builder)
|
17
|
-
end
|
18
|
-
link_to(name, 'javascript:void(0)', options.merge(onclick: "add_fields(this, '#{association}', '#{escape_javascript(fields)}')"))
|
13
|
+
def link_to_add_fields(name, f, type, options = {})
|
14
|
+
new_fields = build_fields(f, type)
|
15
|
+
link_to(name, 'javascript:void(0)', options.merge(class: "add_fields #{options[:class]}", 'data-field-type' => type, 'data-content' => "#{new_fields}"))
|
19
16
|
end
|
20
17
|
|
21
18
|
def button_to_remove_fields(name, options = {})
|
22
|
-
content_tag(:button, name, options.merge(class: "
|
19
|
+
content_tag(:button, name, options.merge(class: "remove_fields #{options[:class]}"))
|
23
20
|
end
|
24
21
|
|
25
22
|
def button_to_add_fields(name, f, type, options = {})
|
26
23
|
new_fields = build_fields(f, type)
|
27
|
-
content_tag(:button, name, options.merge(class: "
|
24
|
+
content_tag(:button, name, options.merge(class: "add_fields #{options[:class]}", 'data-field-type' => type, 'data-content' => "#{new_fields}"))
|
28
25
|
end
|
29
26
|
|
30
27
|
def build_fields(f, type)
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
28
|
+
render_block = -> (builder) { render("comable/admin/shared/#{type}_fields", f: builder) }
|
29
|
+
|
30
|
+
if singular? type
|
31
|
+
new_object = f.object.send("build_#{type}")
|
32
|
+
f.send("#{type}_fields", new_object, child_index: "new_#{type}", &render_block)
|
33
|
+
else
|
34
|
+
new_object = f.object.send(type).build
|
35
|
+
f.send('fields_for', type, new_object, child_index: "new_#{type}", &render_block)
|
35
36
|
end
|
36
37
|
end
|
37
38
|
|
@@ -48,6 +49,12 @@ module Comable
|
|
48
49
|
def page_name
|
49
50
|
[controller_name, action_name].join(':')
|
50
51
|
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def singular?(string)
|
56
|
+
string.to_s.try(:singularize) == string.to_s
|
57
|
+
end
|
51
58
|
end
|
52
59
|
end
|
53
60
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Comable
|
2
|
+
module Admin
|
3
|
+
module NavigationsHelper
|
4
|
+
def linkable_type_options
|
5
|
+
Comable::NavigationItem.linkable_params_lists.map { |attr| attr.slice(:name, :type).values }
|
6
|
+
end
|
7
|
+
|
8
|
+
def linkable_id_options(navigation_item)
|
9
|
+
navigation_item.linkable_class.try(:linkable_id_options) || [[]]
|
10
|
+
end
|
11
|
+
|
12
|
+
# アイテム追加ボタン設置
|
13
|
+
def add_fields_button_tag(name, f, association)
|
14
|
+
new_object = f.object.send(association).klass.new
|
15
|
+
index = new_object.object_id # 後で置換するために必要な文字を入れる
|
16
|
+
fields = f.fields_for(association, new_object, child_index: index) do |builder|
|
17
|
+
render(association.to_s.singularize + '_fields', f: builder)
|
18
|
+
end
|
19
|
+
button_tag(name, type: :button, class: 'add_fields btn btn-default pull-right', data: { index: index, fields: fields.delete("\n") })
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/{config/initializers/awesome_admin_layout.rb → app/navigations/comable/admin/application.rb}
RENAMED
@@ -1,8 +1,8 @@
|
|
1
|
-
AwesomeAdminLayout.
|
1
|
+
AwesomeAdminLayout.define(only: Comable::Admin::ApplicationController) do |controller|
|
2
2
|
comable = controller.comable
|
3
3
|
current_comable_user = controller.current_comable_user
|
4
4
|
|
5
|
-
navigation do
|
5
|
+
navigation :admin do
|
6
6
|
brand Comable.app_name do
|
7
7
|
external_link comable.root_path
|
8
8
|
end
|
@@ -47,7 +47,7 @@ AwesomeAdminLayout.setup(only: Comable::Admin::ApplicationController) do |contro
|
|
47
47
|
brand Comable.t('admin.nav.product')
|
48
48
|
|
49
49
|
item Comable.t('admin.nav.products.list') do
|
50
|
-
link comable.admin_products_path
|
50
|
+
link comable.admin_products_path
|
51
51
|
end
|
52
52
|
|
53
53
|
item Comable.t('admin.nav.stock') do
|
@@ -72,6 +72,10 @@ AwesomeAdminLayout.setup(only: Comable::Admin::ApplicationController) do |contro
|
|
72
72
|
link comable.admin_pages_path
|
73
73
|
end
|
74
74
|
|
75
|
+
item Comable.t('admin.nav.navigation') do
|
76
|
+
link comable.admin_navigations_path
|
77
|
+
end
|
78
|
+
|
75
79
|
divider
|
76
80
|
|
77
81
|
item Comable.t('admin.nav.shipment_method') do
|
@@ -104,7 +108,7 @@ AwesomeAdminLayout.setup(only: Comable::Admin::ApplicationController) do |contro
|
|
104
108
|
divider
|
105
109
|
|
106
110
|
item Comable.t('admin.sign_out') do
|
107
|
-
link comable.
|
111
|
+
link comable.destroy_admin_user_session_path, method: :delete
|
108
112
|
end
|
109
113
|
end
|
110
114
|
end
|