comable 0.0.3 → 0.1.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/README.md +8 -0
- data/Rakefile +60 -4
- data/lib/comable/version.rb +14 -1
- data/lib/comable.rb +4 -8
- metadata +18 -244
- data/app/assets/javascripts/comable/application.js +0 -13
- data/app/assets/stylesheets/comable/application.css +0 -13
- data/app/controllers/comable/application_controller.rb +0 -5
- data/app/controllers/comable/carts_controller.rb +0 -40
- data/app/controllers/comable/orders_controller.rb +0 -115
- data/app/controllers/comable/products_controller.rb +0 -11
- data/app/helpers/comable/application_helper.rb +0 -18
- data/app/helpers/comable/products_helper.rb +0 -55
- data/app/models/comable/customer.rb +0 -97
- data/app/models/comable/order.rb +0 -93
- data/app/models/comable/order_delivery.rb +0 -16
- data/app/models/comable/order_detail.rb +0 -42
- data/app/models/comable/payment.rb +0 -26
- data/app/models/comable/product.rb +0 -32
- data/app/models/comable/stock.rb +0 -82
- data/app/views/comable/carts/show.slim +0 -22
- data/app/views/comable/orders/confirm.slim +0 -25
- data/app/views/comable/orders/create.slim +0 -5
- data/app/views/comable/orders/delivery.slim +0 -8
- data/app/views/comable/orders/new.slim +0 -4
- data/app/views/comable/orders/orderer.slim +0 -7
- data/app/views/comable/orders/payment.slim +0 -12
- data/app/views/comable/products/index.slim +0 -11
- data/app/views/comable/products/show.slim +0 -21
- data/app/views/layouts/comable/application.slim +0 -11
- data/config/locales/ja.yml +0 -11
- data/config/routes.rb +0 -23
- data/db/migrate/20131214194807_create_comable_products.rb +0 -14
- data/db/migrate/20140120032559_create_comable_customers.rb +0 -8
- data/db/migrate/20140502060116_create_comable_stocks.rb +0 -14
- data/db/migrate/20140723175431_create_comable_orders.rb +0 -15
- data/db/migrate/20140723175624_create_comable_order_deliveries.rb +0 -9
- data/db/migrate/20140723175810_create_comable_order_details.rb +0 -12
- data/db/migrate/20140817194104_create_comable_payments.rb +0 -11
- data/lib/comable/cart_owner.rb +0 -79
- data/lib/comable/decoratable.rb +0 -10
- data/lib/comable/engine.rb +0 -7
- data/lib/comable/errors.rb +0 -4
- data/lib/comable/migration.rb +0 -16
- data/lib/comable/payment_method/base.rb +0 -26
- data/lib/comable/payment_method/general.rb +0 -15
- data/lib/comable/payment_method.rb +0 -14
- data/lib/tasks/comable_tasks.rake +0 -4
- data/lib/tasks/comable_yardoc.task +0 -14
@@ -1,55 +0,0 @@
|
|
1
|
-
module Comable
|
2
|
-
module ProductsHelper
|
3
|
-
def sku_table(product, options = nil)
|
4
|
-
stocks = product.stocks
|
5
|
-
content_tag(:table, nil, options) do
|
6
|
-
html = ''
|
7
|
-
html << build_sku_v_table_header(product, stocks)
|
8
|
-
html << build_sku_table_rows(product, stocks)
|
9
|
-
html.html_safe
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
private
|
14
|
-
|
15
|
-
def build_sku_v_table_header(product, stocks)
|
16
|
-
sku_item_name = product.sku_h_item_name
|
17
|
-
sku_item_name += '/' + product.sku_v_item_name if product.sku_v?
|
18
|
-
|
19
|
-
html = ''
|
20
|
-
html << content_tag(:th, sku_item_name)
|
21
|
-
stocks.group_by(&:sku_h_choice_name).keys.each do |sku_h_choice_name|
|
22
|
-
next if sku_h_choice_name.blank?
|
23
|
-
html << content_tag(:th, sku_h_choice_name)
|
24
|
-
end
|
25
|
-
html.html_safe
|
26
|
-
end
|
27
|
-
|
28
|
-
def build_sku_table_rows(product, stocks)
|
29
|
-
return content_tag(:tr, build_sku_table_row(stocks)) unless product.sku_v?
|
30
|
-
|
31
|
-
html = ''
|
32
|
-
stocks.group_by(&:sku_v_choice_name).each_pair do |sku_v_choice_name, sku_v_stocks|
|
33
|
-
next if sku_v_choice_name.blank?
|
34
|
-
html << content_tag(:tr, build_sku_table_row(sku_v_stocks, sku_v_choice_name))
|
35
|
-
end
|
36
|
-
html.html_safe
|
37
|
-
end
|
38
|
-
|
39
|
-
def build_sku_table_row(stocks, sku_v_choice_name = nil)
|
40
|
-
html = ''
|
41
|
-
html << content_tag(:th, sku_v_choice_name)
|
42
|
-
html << stocks.map { |stock| content_tag(:td, build_sku_product_label(stock)) }.join
|
43
|
-
html.html_safe
|
44
|
-
end
|
45
|
-
|
46
|
-
def build_sku_product_label(stock)
|
47
|
-
content_tag(:label) do
|
48
|
-
html = ''
|
49
|
-
html << radio_button_tag(:stock_id, stock.id, false, disabled: stock.soldout?)
|
50
|
-
html << stock.code
|
51
|
-
html.html_safe
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
@@ -1,97 +0,0 @@
|
|
1
|
-
module Comable
|
2
|
-
class Customer < ActiveRecord::Base
|
3
|
-
include Decoratable
|
4
|
-
include CartOwner
|
5
|
-
|
6
|
-
has_many :comable_orders, class_name: Comable::Order.name, foreign_key: table_name.singularize.foreign_key
|
7
|
-
alias_method :orders, :comable_orders
|
8
|
-
|
9
|
-
def initialize(*args)
|
10
|
-
obj = args.first
|
11
|
-
case obj.class.name
|
12
|
-
when /Cookies/
|
13
|
-
@cookies = obj
|
14
|
-
super()
|
15
|
-
else
|
16
|
-
super
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
def logged_in?
|
21
|
-
!new_record?
|
22
|
-
end
|
23
|
-
|
24
|
-
def not_logged_in?
|
25
|
-
!logged_in?
|
26
|
-
end
|
27
|
-
|
28
|
-
def reset_cart
|
29
|
-
return unless @incomplete_order
|
30
|
-
if @incomplete_order.complete?
|
31
|
-
@incomplete_order = nil
|
32
|
-
else
|
33
|
-
# TODO: テストケースの作成
|
34
|
-
@incomplete_order.destroy
|
35
|
-
@incomplete_order = nil
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def cart_items
|
40
|
-
incomplete_order.order_deliveries.first.order_details
|
41
|
-
end
|
42
|
-
|
43
|
-
def incomplete_order
|
44
|
-
@incomplete_order ||= initialize_incomplete_order
|
45
|
-
end
|
46
|
-
|
47
|
-
def preorder(order_params = {})
|
48
|
-
incomplete_order.attributes = order_params
|
49
|
-
incomplete_order.precomplete
|
50
|
-
end
|
51
|
-
|
52
|
-
def order(order_params = {})
|
53
|
-
incomplete_order.attributes = order_params
|
54
|
-
incomplete_order.complete.tap { |completed_flag| reset_cart if completed_flag }
|
55
|
-
end
|
56
|
-
|
57
|
-
private
|
58
|
-
|
59
|
-
def current_guest_token
|
60
|
-
return if logged_in?
|
61
|
-
@cookies.signed[:guest_token]
|
62
|
-
end
|
63
|
-
|
64
|
-
def initialize_incomplete_order
|
65
|
-
orders = find_incomplete_orders
|
66
|
-
return orders.first if orders.any?
|
67
|
-
order = orders.create(family_name: family_name, first_name: first_name, order_deliveries_attributes: [{ family_name: family_name, first_name: first_name }])
|
68
|
-
@cookies.permanent.signed[:guest_token] = order.guest_token if not_logged_in?
|
69
|
-
order
|
70
|
-
end
|
71
|
-
|
72
|
-
def find_incomplete_orders
|
73
|
-
Comable::Order
|
74
|
-
.incomplete
|
75
|
-
.includes(order_deliveries: :order_details)
|
76
|
-
.where(
|
77
|
-
Comable::Customer.table_name.singularize.foreign_key => self,
|
78
|
-
:guest_token => current_guest_token
|
79
|
-
)
|
80
|
-
.limit(1)
|
81
|
-
end
|
82
|
-
|
83
|
-
# Rails 3.x だと has_many 先のインスタンスが追加されても
|
84
|
-
# 親インスタンスが感知できないので、いちいちリロードするように変更
|
85
|
-
if Rails::VERSION::MAJOR == 3
|
86
|
-
def add_stock_to_cart_with_reload(*args)
|
87
|
-
add_stock_to_cart_without_reload(*args).tap { @incomplete_order = nil }
|
88
|
-
end
|
89
|
-
alias_method_chain :add_stock_to_cart, :reload
|
90
|
-
|
91
|
-
def reset_stock_from_cart_with_reload(*args)
|
92
|
-
reset_stock_from_cart_without_reload(*args).tap { @incomplete_order = nil }
|
93
|
-
end
|
94
|
-
alias_method_chain :reset_stock_from_cart, :reload
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
data/app/models/comable/order.rb
DELETED
@@ -1,93 +0,0 @@
|
|
1
|
-
module Comable
|
2
|
-
class Order < ActiveRecord::Base
|
3
|
-
include Decoratable
|
4
|
-
|
5
|
-
belongs_to :customer, class_name: Comable::Customer.name, foreign_key: Comable::Customer.table_name.singularize.foreign_key, autosave: false
|
6
|
-
belongs_to :payment, class_name: Comable::Payment.name, foreign_key: Comable::Payment.table_name.singularize.foreign_key, autosave: false
|
7
|
-
has_many :order_deliveries, dependent: :destroy, class_name: Comable::OrderDelivery.name, foreign_key: table_name.singularize.foreign_key
|
8
|
-
|
9
|
-
accepts_nested_attributes_for :order_deliveries
|
10
|
-
|
11
|
-
with_options if: :complete? do |complete_order|
|
12
|
-
complete_order.validates :code, presence: true
|
13
|
-
complete_order.validates :first_name, presence: true
|
14
|
-
complete_order.validates :family_name, presence: true
|
15
|
-
complete_order.validates Comable::Payment.table_name.singularize.foreign_key, presence: true
|
16
|
-
end
|
17
|
-
|
18
|
-
with_options if: :incomplete? do |incomplete_order|
|
19
|
-
incomplete_order.validates Comable::Customer.table_name.singularize.foreign_key, uniqueness: { scope: [Comable::Customer.table_name.singularize.foreign_key, :completed_at] }, if: :customer
|
20
|
-
incomplete_order.validates :guest_token, uniqueness: { scope: [:guest_token, :completed_at] }, if: :guest_token
|
21
|
-
end
|
22
|
-
|
23
|
-
before_create :generate_guest_token
|
24
|
-
|
25
|
-
scope :complete, -> { where.not(completed_at: nil) }
|
26
|
-
scope :incomplete, -> { where(completed_at: nil) }
|
27
|
-
|
28
|
-
def precomplete
|
29
|
-
valid_stock
|
30
|
-
fail Comable::InvalidOrder, errors.full_messages.join("\n") if errors.any?
|
31
|
-
self
|
32
|
-
end
|
33
|
-
|
34
|
-
def complete
|
35
|
-
# TODO: トランザクションの追加
|
36
|
-
precomplete
|
37
|
-
# TODO: コールバック化
|
38
|
-
# define_model_callbacks :complete
|
39
|
-
before_complete
|
40
|
-
save!
|
41
|
-
self
|
42
|
-
end
|
43
|
-
|
44
|
-
def complete?
|
45
|
-
!incomplete?
|
46
|
-
end
|
47
|
-
|
48
|
-
def incomplete?
|
49
|
-
completed_at.nil?
|
50
|
-
end
|
51
|
-
|
52
|
-
# 時価合計を取得
|
53
|
-
def current_total_price
|
54
|
-
order_deliveries.map(&:order_details).flatten.each(&:current_subtotal_price)
|
55
|
-
end
|
56
|
-
|
57
|
-
# 売価合計を取得
|
58
|
-
def total_price
|
59
|
-
order_deliveries.map(&:order_details).flatten.each(&:subtotal_price)
|
60
|
-
end
|
61
|
-
|
62
|
-
private
|
63
|
-
|
64
|
-
def before_complete
|
65
|
-
self.completed_at = Time.now
|
66
|
-
generate_code
|
67
|
-
order_deliveries.each(&:before_complete)
|
68
|
-
end
|
69
|
-
|
70
|
-
def valid_stock
|
71
|
-
order_deliveries.map(&:order_details).flatten.each do |order_detail|
|
72
|
-
return errors.add :base, "「#{order_detail.stock.name}」の注文数が不正です。" if order_detail.quantity <= 0
|
73
|
-
quantity = order_detail.stock.quantity - order_detail.quantity
|
74
|
-
return errors.add :base, "「#{order_detail.stock.name}」の在庫が不足しています。" if quantity < 0
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
def generate_code
|
79
|
-
self.code = loop do
|
80
|
-
random_token = "C#{Array.new(11) { rand(9) }.join}"
|
81
|
-
break random_token unless self.class.exists?(code: random_token)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
def generate_guest_token
|
86
|
-
return if send(Comable::Customer.table_name.singularize.foreign_key)
|
87
|
-
self.guest_token ||= loop do
|
88
|
-
random_token = SecureRandom.urlsafe_base64(nil, false)
|
89
|
-
break random_token unless self.class.exists?(guest_token: random_token)
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module Comable
|
2
|
-
class OrderDelivery < ActiveRecord::Base
|
3
|
-
include Decoratable
|
4
|
-
|
5
|
-
belongs_to :order, class_name: Comable::Order.name, foreign_key: Comable::Order.table_name.singularize.foreign_key
|
6
|
-
has_many :order_details, dependent: :destroy, class_name: Comable::OrderDetail.name, foreign_key: table_name.singularize.foreign_key
|
7
|
-
|
8
|
-
delegate :customer, to: :order
|
9
|
-
delegate :guest_token, to: :order
|
10
|
-
delegate :complete?, to: :order
|
11
|
-
|
12
|
-
def before_complete
|
13
|
-
order_details.each(&:before_complete)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,42 +0,0 @@
|
|
1
|
-
module Comable
|
2
|
-
class OrderDetail < ActiveRecord::Base
|
3
|
-
include Decoratable
|
4
|
-
|
5
|
-
belongs_to :stock, class_name: Comable::Stock.name, foreign_key: Comable::Stock.table_name.singularize.foreign_key
|
6
|
-
belongs_to :order_delivery, class_name: Comable::OrderDelivery.name, foreign_key: Comable::OrderDelivery.table_name.singularize.foreign_key
|
7
|
-
|
8
|
-
# TODO: バリデーションの追加
|
9
|
-
|
10
|
-
delegate :product, to: :stock
|
11
|
-
delegate :guest_token, to: :order_delivery
|
12
|
-
delegate :complete?, to: :order_delivery
|
13
|
-
|
14
|
-
def before_complete
|
15
|
-
save_price
|
16
|
-
decrement_stock
|
17
|
-
end
|
18
|
-
|
19
|
-
# 時価を取得
|
20
|
-
def current_price
|
21
|
-
stock.price
|
22
|
-
end
|
23
|
-
|
24
|
-
# 時価小計を取得
|
25
|
-
def current_subtotal_price
|
26
|
-
current_price * quantity
|
27
|
-
end
|
28
|
-
|
29
|
-
# 売価小計を取得
|
30
|
-
def subtotal_price
|
31
|
-
price * quantity
|
32
|
-
end
|
33
|
-
|
34
|
-
def decrement_stock
|
35
|
-
stock.decrement!(quantity: quantity)
|
36
|
-
end
|
37
|
-
|
38
|
-
def save_price
|
39
|
-
self.price = stock.price
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module Comable
|
2
|
-
class Payment < ActiveRecord::Base
|
3
|
-
include Decoratable
|
4
|
-
|
5
|
-
validates :name, presence: true
|
6
|
-
validates :payment_method_type, presence: true
|
7
|
-
validates :payment_method_kind, presence: true
|
8
|
-
|
9
|
-
def payment_method
|
10
|
-
return unless Object.const_defined?(payment_method_type)
|
11
|
-
Object.const_get(payment_method_type)
|
12
|
-
end
|
13
|
-
|
14
|
-
def payment_method_name
|
15
|
-
payment_method.display_name
|
16
|
-
end
|
17
|
-
|
18
|
-
def payment_method_kind_key
|
19
|
-
payment_method.kind.keys.slice(payment_method_kind)
|
20
|
-
end
|
21
|
-
|
22
|
-
def payment_method_kind_name
|
23
|
-
payment_method.kind.slice(payment_method_kind_key).values.first
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
module Comable
|
2
|
-
class Product < ActiveRecord::Base
|
3
|
-
include Decoratable
|
4
|
-
|
5
|
-
has_many :stocks, class_name: Comable::Stock.name, foreign_key: table_name.singularize.foreign_key
|
6
|
-
after_create :create_stock
|
7
|
-
|
8
|
-
def unsold?
|
9
|
-
stocks.activated.unsold.exists?
|
10
|
-
end
|
11
|
-
|
12
|
-
def soldout?
|
13
|
-
!unsold?
|
14
|
-
end
|
15
|
-
|
16
|
-
def sku_h?
|
17
|
-
sku_h_item_name.present?
|
18
|
-
end
|
19
|
-
|
20
|
-
def sku_v?
|
21
|
-
sku_v_item_name.present?
|
22
|
-
end
|
23
|
-
|
24
|
-
alias_method :sku?, :sku_h?
|
25
|
-
|
26
|
-
private
|
27
|
-
|
28
|
-
def create_stock
|
29
|
-
stocks.create(code: code) unless stocks.exists?
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
data/app/models/comable/stock.rb
DELETED
@@ -1,82 +0,0 @@
|
|
1
|
-
module Comable
|
2
|
-
#
|
3
|
-
# 在庫モデル。
|
4
|
-
# 商品に複数紐付き、品数やSKU(Stock Keeping Unit)情報を保持する。
|
5
|
-
#
|
6
|
-
class Stock < ActiveRecord::Base
|
7
|
-
include Decoratable
|
8
|
-
|
9
|
-
belongs_to :product, class_name: Comable::Product.name, foreign_key: Comable::Product.table_name.singularize.foreign_key
|
10
|
-
|
11
|
-
#
|
12
|
-
# @!group Scope
|
13
|
-
#
|
14
|
-
|
15
|
-
# @!scope class
|
16
|
-
# 有効な在庫インスタンスを返す
|
17
|
-
scope :activated, -> { where.not(product_id_num: nil) }
|
18
|
-
|
19
|
-
# @!scope class
|
20
|
-
# 品切れでない在庫インスタンスを返す
|
21
|
-
scope :unsold, -> { where('quantity > ?', 0) }
|
22
|
-
|
23
|
-
# @!scope class
|
24
|
-
# 品切れの在庫インスタンスを返す
|
25
|
-
scope :soldout, -> { where('quantity <= ?', 0) }
|
26
|
-
|
27
|
-
#
|
28
|
-
# @!endgroup
|
29
|
-
#
|
30
|
-
|
31
|
-
delegate :price, to: :product
|
32
|
-
delegate :sku?, to: :product
|
33
|
-
|
34
|
-
def name
|
35
|
-
return product.name unless product.sku?
|
36
|
-
sku_name = sku_h_choice_name
|
37
|
-
sku_name += '/' + sku_v_choice_name if sku_v_choice_name.present?
|
38
|
-
product.name + "(#{sku_name})"
|
39
|
-
end
|
40
|
-
|
41
|
-
# 在庫の有無を取得する
|
42
|
-
#
|
43
|
-
# @example
|
44
|
-
# stock.unsold? #=> true
|
45
|
-
#
|
46
|
-
# @return [Boolean] 在庫があれば true を返す
|
47
|
-
# @see #soldout?
|
48
|
-
def unsold?
|
49
|
-
return false if product_id_num.nil?
|
50
|
-
return false if quantity.nil?
|
51
|
-
quantity > 0
|
52
|
-
end
|
53
|
-
|
54
|
-
# 在庫の有無を取得する
|
55
|
-
#
|
56
|
-
# @example
|
57
|
-
# stock.soldout? #=> false
|
58
|
-
#
|
59
|
-
# @return [Boolean] {#unsold?} の逆。在庫がなければ true を返す
|
60
|
-
# @see #unsold?
|
61
|
-
def soldout?
|
62
|
-
!unsold?
|
63
|
-
end
|
64
|
-
|
65
|
-
# 在庫減算を行う
|
66
|
-
#
|
67
|
-
# @example
|
68
|
-
# stock.quantity #=> 10
|
69
|
-
# stock.decrement!(quantity: 1) #=> true
|
70
|
-
# stock.quantity #=> 9
|
71
|
-
#
|
72
|
-
# @param quantity [Fixnum] 減算する在庫数を指定する
|
73
|
-
# @return [Boolean] レコードの保存に成功すると true を返す
|
74
|
-
def decrement!(quantity: 1)
|
75
|
-
with_lock do
|
76
|
-
# TODO: カラムマッピングのdecrementメソッドへの対応
|
77
|
-
self.quantity -= quantity
|
78
|
-
save!
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
h1 カート
|
2
|
-
|
3
|
-
ul.cart
|
4
|
-
- current_customer.cart.each do |cart_item|
|
5
|
-
= form_tag comable.cart_path, method: :put do
|
6
|
-
- stock = cart_item.stock
|
7
|
-
- product = stock.product
|
8
|
-
li.product
|
9
|
-
h2.name
|
10
|
-
= link_to stock.name, comable.product_path(product)
|
11
|
-
.caption
|
12
|
-
= product.caption
|
13
|
-
.price
|
14
|
-
= number_to_currency product.price
|
15
|
-
.quantity
|
16
|
-
- selected = cart_item.quantity
|
17
|
-
= select_tag :quantity, options_for_select(1.upto([10, selected].max).to_a, selected)
|
18
|
-
= hidden_field_tag :stock_id, stock.id
|
19
|
-
= submit_tag '変更'
|
20
|
-
|
21
|
-
.order
|
22
|
-
= link_to '注文', comable.new_order_path
|
@@ -1,25 +0,0 @@
|
|
1
|
-
h1 注文情報確認
|
2
|
-
|
3
|
-
.order
|
4
|
-
.orderer
|
5
|
-
.family_name
|
6
|
-
= @order.family_name
|
7
|
-
.first_name
|
8
|
-
= @order.first_name
|
9
|
-
.deliveries
|
10
|
-
- @order.order_deliveries.each do |order_delivery|
|
11
|
-
.first_name
|
12
|
-
= order_delivery.family_name
|
13
|
-
.first_name
|
14
|
-
= order_delivery.first_name
|
15
|
-
.details
|
16
|
-
- order_delivery.order_details.each do |order_detail|
|
17
|
-
.name
|
18
|
-
= order_detail.product.name
|
19
|
-
.price
|
20
|
-
= order_detail.price
|
21
|
-
.quantity
|
22
|
-
= order_detail.quantity
|
23
|
-
|
24
|
-
= form_for @order, as: :order, url: comable.order_path, method: :post do |f|
|
25
|
-
= f.submit
|
@@ -1,8 +0,0 @@
|
|
1
|
-
h1 配送先情報入力
|
2
|
-
|
3
|
-
.orderer
|
4
|
-
= form_for @order, as: :order, url: comable.delivery_order_path, method: :put do |f|
|
5
|
-
= f.fields_for :order_deliveries do |order_delivery|
|
6
|
-
= order_delivery.text_field :family_name, placeholder: '姓'
|
7
|
-
= order_delivery.text_field :first_name, placeholder: '名'
|
8
|
-
= f.submit
|
@@ -1,12 +0,0 @@
|
|
1
|
-
h1 決済方法
|
2
|
-
|
3
|
-
.order.payment
|
4
|
-
= form_for @order, as: :order, url: comable.payment_order_path, method: :put do |f|
|
5
|
-
ul
|
6
|
-
- Comable::Payment.all.each.with_index do |payment, index|
|
7
|
-
li
|
8
|
-
- payment_foreign_key = Comable::Payment.table_name.singularize.foreign_key.to_sym
|
9
|
-
- checked_flag = @order.payment ? (@order.payment.id == payment.id) : index.zero?
|
10
|
-
= f.radio_button payment_foreign_key, payment.id, checked: checked_flag
|
11
|
-
= f.label payment_foreign_key, payment.name, value: payment.id
|
12
|
-
= f.submit
|
@@ -1,21 +0,0 @@
|
|
1
|
-
.product
|
2
|
-
h1.name
|
3
|
-
= @product.name
|
4
|
-
.caption
|
5
|
-
= @product.caption
|
6
|
-
.price
|
7
|
-
= number_to_currency @product.price
|
8
|
-
|
9
|
-
= form_tag comable.add_cart_path do
|
10
|
-
- if @product.sku?
|
11
|
-
.sku
|
12
|
-
= sku_table @product, border: 1
|
13
|
-
|
14
|
-
- if @product.unsold?
|
15
|
-
.add_cart
|
16
|
-
= hidden_field_tag :product_id, @product.id
|
17
|
-
= select_tag :quantity, options_for_select(1.upto(10).to_a)
|
18
|
-
= submit_tag 'カートに入れる'
|
19
|
-
- else
|
20
|
-
.sold_out
|
21
|
-
| 品切れ中
|
@@ -1,11 +0,0 @@
|
|
1
|
-
doctype html
|
2
|
-
html
|
3
|
-
head
|
4
|
-
title Comable
|
5
|
-
= stylesheet_link_tag "comable/application", media: "all"
|
6
|
-
= javascript_include_tag "comable/application"
|
7
|
-
= csrf_meta_tags
|
8
|
-
body
|
9
|
-
- flash.each do |name, msg|
|
10
|
-
= content_tag(:div, msg, id: "flash_#{name}")
|
11
|
-
== yield
|
data/config/locales/ja.yml
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
ja:
|
2
|
-
comable:
|
3
|
-
carts:
|
4
|
-
add_product: '1つの商品がカートに入りしました'
|
5
|
-
product_not_found: 'ご指定の商品は見つかりませんでした'
|
6
|
-
product_not_stocked: 'ご指定の商品は在庫がありません'
|
7
|
-
empty: 'カートに商品が入っていません'
|
8
|
-
update: 'カートの内容が変更されました'
|
9
|
-
orders:
|
10
|
-
success: '注文が完了しました'
|
11
|
-
failure: '注文に失敗しました。入力項目を見直してください。'
|
data/config/routes.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
Comable::Engine.routes.draw do
|
2
|
-
get '/' => 'products#index'
|
3
|
-
|
4
|
-
resources :products
|
5
|
-
|
6
|
-
resource :cart do
|
7
|
-
collection do
|
8
|
-
post :add
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
resource :order do
|
13
|
-
collection do
|
14
|
-
get :orderer
|
15
|
-
put :orderer
|
16
|
-
get :delivery
|
17
|
-
put :delivery
|
18
|
-
get :payment
|
19
|
-
put :payment
|
20
|
-
get :confirm
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
class CreateComableProducts < Comable::Migration
|
2
|
-
def change
|
3
|
-
create_table :comable_products do |t|
|
4
|
-
t.string :name, null: false
|
5
|
-
t.string :code, null: false
|
6
|
-
t.integer :price, null: false
|
7
|
-
t.text :caption
|
8
|
-
t.string :sku_h_item_name
|
9
|
-
t.string :sku_v_item_name
|
10
|
-
end
|
11
|
-
|
12
|
-
add_index :comable_products, :code, unique: true, name: :comable_products_idx_01
|
13
|
-
end
|
14
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
class CreateComableStocks < Comable::Migration
|
2
|
-
def change
|
3
|
-
create_table :comable_stocks do |t|
|
4
|
-
t.integer :comable_product_id
|
5
|
-
t.integer :product_id_num
|
6
|
-
t.string :code, null: false
|
7
|
-
t.integer :quantity
|
8
|
-
t.string :sku_h_choice_name
|
9
|
-
t.string :sku_v_choice_name
|
10
|
-
end
|
11
|
-
|
12
|
-
add_index :comable_stocks, :code, unique: true, name: :comable_stocks_idx_01
|
13
|
-
end
|
14
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
class CreateComableOrders < Comable::Migration
|
2
|
-
def change
|
3
|
-
create_table :comable_orders do |t|
|
4
|
-
t.integer :comable_customer_id
|
5
|
-
t.integer :comable_payment_id
|
6
|
-
t.string :guest_token
|
7
|
-
t.string :code
|
8
|
-
t.string :family_name
|
9
|
-
t.string :first_name
|
10
|
-
t.datetime :completed_at
|
11
|
-
end
|
12
|
-
|
13
|
-
add_index :comable_orders, :code, unique: true, name: :comable_orders_idx_01
|
14
|
-
end
|
15
|
-
end
|