solidus_subscription_boxes 0.0.4 → 0.0.5
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/LICENSE +29 -29
- data/README.md +26 -26
- data/Rakefile +47 -47
- data/app/assets/config/solidus_subscription_boxes_manifest.js +2 -2
- data/app/assets/javascripts/solidus_subscription_boxes/application.js +13 -13
- data/app/assets/javascripts/solidus_subscription_boxes/subscription_selection.js +54 -54
- data/app/assets/stylesheets/_solidus_subscription_boxes.scss +16 -16
- data/app/assets/stylesheets/solidus_subscription_boxes/subscription_box.css.scss +33 -35
- data/app/controllers/solidus_subscription_boxes/application_controller.rb +4 -4
- data/app/controllers/solidus_subscription_boxes/subscription_boxes_controller.rb +6 -6
- data/app/decorators/solidus_subscriptions/models/checkout/update_preference_decorator.rb +14 -14
- data/app/decorators/spree/controllers/api/v1/subscriptions/meal_preference_decorator.rb +20 -20
- data/app/decorators/spree/controllers/orders/meal_preference_decorator.rb +24 -24
- data/app/decorators/spree/controllers/users/set_box_preference_decorator.rb +30 -30
- data/app/decorators/spree/orders/preference_decorator.rb +14 -14
- data/app/decorators/spree/products/boxable_decorator.rb +11 -11
- data/app/helpers/solidus_subscription_boxes/application_helper.rb +11 -11
- data/app/jobs/solidus_subscription_boxes/application_job.rb +4 -4
- data/app/mailers/solidus_subscription_boxes/application_mailer.rb +6 -6
- data/app/models/solidus_subscription_boxes/application_record.rb +5 -5
- data/app/models/solidus_subscription_boxes/box_preference.rb +10 -10
- data/app/models/solidus_subscription_boxes/subscription_period.rb +15 -15
- data/app/models/solidus_subscription_boxes/subscription_periods_variant.rb +6 -6
- data/app/overrides/views/admin_boxable_checkbox.rb +5 -5
- data/app/views/layouts/solidus_subscription_boxes/application.html.erb +14 -14
- data/app/views/solidus_subscription_boxes/subscription_boxes/_box_variants.html.erb +12 -12
- data/app/views/solidus_subscription_boxes/subscription_boxes/_manage.html.erb +39 -39
- data/app/views/solidus_subscription_boxes/subscription_boxes/get_started.html.erb +52 -44
- data/app/views/spree/admin/products/_boxable_checkbox.html.erb +8 -8
- data/app/views/spree/admin/variants/_boxable_checkbox.html.erb +8 -8
- data/config/routes.rb +4 -4
- data/db/migrate/20170609065436_create_solidus_subscription_boxes_box_preferences.rb +10 -10
- data/db/migrate/20170906015531_create_solidus_subscription_boxes_subscription_periods.rb +9 -9
- data/db/migrate/20170906021159_create_solidus_subscription_boxes_subscription_periods_variants.rb +10 -10
- data/db/migrate/20170919054537_add_boxable_to_spree_variants.rb +5 -5
- data/db/migrate/20170919063437_add_boxable_variant_id_to_solidus_subscription_boxes_subscription_periods.rb +5 -5
- data/lib/solidus_subscription_boxes.rb +4 -4
- data/lib/solidus_subscription_boxes/engine.rb +13 -13
- data/lib/solidus_subscription_boxes/version.rb +3 -3
- data/lib/tasks/solidus_subscription_boxes_tasks.rake +4 -4
- data/test/integration/navigation_test.rb +8 -8
- data/test/solidus_subscription_boxes_test.rb +7 -7
- data/test/test_helper.rb +21 -21
- metadata +3 -3
@@ -1,4 +1,4 @@
|
|
1
|
-
module SolidusSubscriptionBoxes
|
2
|
-
class ApplicationController < ActionController::Base
|
3
|
-
end
|
4
|
-
end
|
1
|
+
module SolidusSubscriptionBoxes
|
2
|
+
class ApplicationController < ActionController::Base
|
3
|
+
end
|
4
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
class SolidusSubscriptionBoxes::SubscriptionBoxesController < Spree::StoreController
|
2
|
-
def get_started
|
3
|
-
@variant = Spree::Product.find_by_slug(params[:product_id]).master
|
4
|
-
@box_variants = SolidusSubscriptionBoxes::SubscriptionPeriod.where(boxable_variant_id: @variant.id).current.variants
|
5
|
-
end
|
6
|
-
end
|
1
|
+
class SolidusSubscriptionBoxes::SubscriptionBoxesController < Spree::StoreController
|
2
|
+
def get_started
|
3
|
+
@variant = Spree::Product.find_by_slug(params[:product_id]).master
|
4
|
+
@box_variants = SolidusSubscriptionBoxes::SubscriptionPeriod.where(boxable_variant_id: @variant.id).current.variants
|
5
|
+
end
|
6
|
+
end
|
@@ -1,15 +1,15 @@
|
|
1
|
-
module SolidusSubscriptions
|
2
|
-
module Models
|
3
|
-
module Checkout
|
4
|
-
module UpdatePreferenceDecorator
|
5
|
-
def order
|
6
|
-
byebug
|
7
|
-
order = super
|
8
|
-
order.box_preference = subscription.box_preference unless order.box_preference.present?
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
1
|
+
module SolidusSubscriptions
|
2
|
+
module Models
|
3
|
+
module Checkout
|
4
|
+
module UpdatePreferenceDecorator
|
5
|
+
def order
|
6
|
+
byebug
|
7
|
+
order = super
|
8
|
+
order.box_preference = subscription.box_preference unless order.box_preference.present?
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
15
|
SolidusSubscriptions::Checkout.prepend(SolidusSubscriptions::Models::Checkout::UpdatePreferenceDecorator)
|
@@ -1,21 +1,21 @@
|
|
1
|
-
module Spree
|
2
|
-
module Controllers
|
3
|
-
module Api
|
4
|
-
module V1
|
5
|
-
module Subscriptions
|
6
|
-
module MealPreferenceDecorator
|
7
|
-
def subscription_params
|
8
|
-
params.require(:subscription).permit(
|
9
|
-
line_items_attributes: line_item_attributes,
|
10
|
-
shipping_address_attributes: Spree::PermittedAttributes.address_attributes,
|
11
|
-
box_preference_attributes: {}
|
12
|
-
)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
1
|
+
module Spree
|
2
|
+
module Controllers
|
3
|
+
module Api
|
4
|
+
module V1
|
5
|
+
module Subscriptions
|
6
|
+
module MealPreferenceDecorator
|
7
|
+
def subscription_params
|
8
|
+
params.require(:subscription).permit(
|
9
|
+
line_items_attributes: line_item_attributes,
|
10
|
+
shipping_address_attributes: Spree::PermittedAttributes.address_attributes,
|
11
|
+
box_preference_attributes: {}
|
12
|
+
)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
21
|
SolidusSubscriptions::Api::V1::SubscriptionsController.prepend(Spree::Controllers::Api::V1::Subscriptions::MealPreferenceDecorator)
|
@@ -1,24 +1,24 @@
|
|
1
|
-
module Spree
|
2
|
-
module Controllers
|
3
|
-
module Orders
|
4
|
-
module MealPreferenceDecorator
|
5
|
-
def self.prepended(base)
|
6
|
-
base.after_action(
|
7
|
-
:set_box_preference,
|
8
|
-
only: :populate
|
9
|
-
)
|
10
|
-
end
|
11
|
-
|
12
|
-
private
|
13
|
-
def set_box_preference
|
14
|
-
if params[:box_preference_attributes]
|
15
|
-
params[:box_preference_attributes].permit!
|
16
|
-
@order.update_attributes(box_preference_attributes: params[:box_preference_attributes].to_hash)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
Spree::OrdersController.prepend(Spree::Controllers::Orders::MealPreferenceDecorator)
|
1
|
+
module Spree
|
2
|
+
module Controllers
|
3
|
+
module Orders
|
4
|
+
module MealPreferenceDecorator
|
5
|
+
def self.prepended(base)
|
6
|
+
base.after_action(
|
7
|
+
:set_box_preference,
|
8
|
+
only: :populate
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
def set_box_preference
|
14
|
+
if params[:box_preference_attributes]
|
15
|
+
params[:box_preference_attributes].permit!
|
16
|
+
@order.update_attributes(box_preference_attributes: params[:box_preference_attributes].to_hash)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
Spree::OrdersController.prepend(Spree::Controllers::Orders::MealPreferenceDecorator)
|
@@ -1,30 +1,30 @@
|
|
1
|
-
module Spree
|
2
|
-
module Controllers
|
3
|
-
module Users
|
4
|
-
module SetBoxPreferenceDecorator
|
5
|
-
def self.prepended(base)
|
6
|
-
base.before_action(
|
7
|
-
:set_box_preferences,
|
8
|
-
only: :show
|
9
|
-
)
|
10
|
-
end
|
11
|
-
|
12
|
-
private
|
13
|
-
def set_box_preferences
|
14
|
-
@user.generate_spree_api_key! unless @user.spree_api_key
|
15
|
-
|
16
|
-
must_change_subscriptions = @user.subscriptions.find_all do |subscription|
|
17
|
-
subscription.box_preference.nil?
|
18
|
-
end
|
19
|
-
|
20
|
-
must_change_subscriptions.each do |subscription|
|
21
|
-
potential_variants = SolidusSubscriptionBoxes::SubscriptionPeriod.period_for_date(subscription.actionable_date).variants
|
22
|
-
subscription.box_preference = SolidusSubscriptionBoxes::BoxPreference.new(preference: potential_variants.sample(3).map(&:id))
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
Spree::UsersController.prepend(Spree::Controllers::Users::SetBoxPreferenceDecorator)
|
1
|
+
module Spree
|
2
|
+
module Controllers
|
3
|
+
module Users
|
4
|
+
module SetBoxPreferenceDecorator
|
5
|
+
def self.prepended(base)
|
6
|
+
base.before_action(
|
7
|
+
:set_box_preferences,
|
8
|
+
only: :show
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
def set_box_preferences
|
14
|
+
@user.generate_spree_api_key! unless @user.spree_api_key
|
15
|
+
|
16
|
+
must_change_subscriptions = @user.subscriptions.find_all do |subscription|
|
17
|
+
subscription.box_preference.nil?
|
18
|
+
end
|
19
|
+
|
20
|
+
must_change_subscriptions.each do |subscription|
|
21
|
+
potential_variants = SolidusSubscriptionBoxes::SubscriptionPeriod.period_for_date(subscription.actionable_date).variants
|
22
|
+
subscription.box_preference = SolidusSubscriptionBoxes::BoxPreference.new(preference: potential_variants.sample(3).map(&:id))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
Spree::UsersController.prepend(Spree::Controllers::Users::SetBoxPreferenceDecorator)
|
@@ -1,14 +1,14 @@
|
|
1
|
-
module Spree
|
2
|
-
module Orders
|
3
|
-
module PreferenceDecorator
|
4
|
-
def self.prepended(base)
|
5
|
-
base.has_one :box_preference, as: :preferable, class_name: 'SolidusSubscriptionBoxes::BoxPreference'
|
6
|
-
base.accepts_nested_attributes_for :box_preference
|
7
|
-
end
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
Spree::Order.prepend(Spree::Orders::PreferenceDecorator)
|
13
|
-
SolidusSubscriptions::Subscription.prepend(Spree::Orders::PreferenceDecorator)
|
14
|
-
SolidusSubscriptions::Installment.prepend(Spree::Orders::PreferenceDecorator)
|
1
|
+
module Spree
|
2
|
+
module Orders
|
3
|
+
module PreferenceDecorator
|
4
|
+
def self.prepended(base)
|
5
|
+
base.has_one :box_preference, as: :preferable, class_name: 'SolidusSubscriptionBoxes::BoxPreference'
|
6
|
+
base.accepts_nested_attributes_for :box_preference
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
Spree::Order.prepend(Spree::Orders::PreferenceDecorator)
|
13
|
+
SolidusSubscriptions::Subscription.prepend(Spree::Orders::PreferenceDecorator)
|
14
|
+
SolidusSubscriptions::Installment.prepend(Spree::Orders::PreferenceDecorator)
|
@@ -1,11 +1,11 @@
|
|
1
|
-
module Spree
|
2
|
-
module Products
|
3
|
-
module Boxable
|
4
|
-
def self.prepended(klass)
|
5
|
-
klass.delegate :"boxable", :"boxable=", to: :find_or_build_master
|
6
|
-
end
|
7
|
-
end
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
Spree::Product.prepend Spree::Products::Boxable
|
1
|
+
module Spree
|
2
|
+
module Products
|
3
|
+
module Boxable
|
4
|
+
def self.prepended(klass)
|
5
|
+
klass.delegate :"boxable", :"boxable=", to: :find_or_build_master
|
6
|
+
end
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
Spree::Product.prepend Spree::Products::Boxable
|
@@ -1,11 +1,11 @@
|
|
1
|
-
module SolidusSubscriptionBoxes
|
2
|
-
module ApplicationHelper
|
3
|
-
def is_checked(preferable, variant)
|
4
|
-
if preferable.present? && preferable.box_preference.preference.map(&:to_i).include?(variant.id)
|
5
|
-
"checked"
|
6
|
-
else
|
7
|
-
""
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
1
|
+
module SolidusSubscriptionBoxes
|
2
|
+
module ApplicationHelper
|
3
|
+
def is_checked(preferable, variant)
|
4
|
+
if preferable.present? && preferable.box_preference.preference.map(&:to_i).include?(variant.id)
|
5
|
+
"checked"
|
6
|
+
else
|
7
|
+
""
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module SolidusSubscriptionBoxes
|
2
|
-
class ApplicationJob < ActiveJob::Base
|
3
|
-
end
|
4
|
-
end
|
1
|
+
module SolidusSubscriptionBoxes
|
2
|
+
class ApplicationJob < ActiveJob::Base
|
3
|
+
end
|
4
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
module SolidusSubscriptionBoxes
|
2
|
-
class ApplicationMailer < ActionMailer::Base
|
3
|
-
default from: 'from@example.com'
|
4
|
-
layout 'mailer'
|
5
|
-
end
|
6
|
-
end
|
1
|
+
module SolidusSubscriptionBoxes
|
2
|
+
class ApplicationMailer < ActionMailer::Base
|
3
|
+
default from: 'from@example.com'
|
4
|
+
layout 'mailer'
|
5
|
+
end
|
6
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
module SolidusSubscriptionBoxes
|
2
|
-
class ApplicationRecord < ActiveRecord::Base
|
3
|
-
self.abstract_class = true
|
4
|
-
end
|
5
|
-
end
|
1
|
+
module SolidusSubscriptionBoxes
|
2
|
+
class ApplicationRecord < ActiveRecord::Base
|
3
|
+
self.abstract_class = true
|
4
|
+
end
|
5
|
+
end
|
@@ -1,10 +1,10 @@
|
|
1
|
-
module SolidusSubscriptionBoxes
|
2
|
-
class BoxPreference < ApplicationRecord
|
3
|
-
belongs_to :preferable, polymorphic: true
|
4
|
-
serialize :preference, Array
|
5
|
-
|
6
|
-
def variants
|
7
|
-
Spree::Variant.where(id: preference.map(&:to_i))
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
1
|
+
module SolidusSubscriptionBoxes
|
2
|
+
class BoxPreference < ApplicationRecord
|
3
|
+
belongs_to :preferable, polymorphic: true
|
4
|
+
serialize :preference, Array
|
5
|
+
|
6
|
+
def variants
|
7
|
+
Spree::Variant.where(id: preference.map(&:to_i))
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -1,15 +1,15 @@
|
|
1
|
-
module SolidusSubscriptionBoxes
|
2
|
-
class SubscriptionPeriod < ApplicationRecord
|
3
|
-
has_many :subscription_periods_variants, foreign_key: :solidus_subscription_boxes_subscription_period_id, class_name: 'SolidusSubscriptionBoxes::SubscriptionPeriodsVariant'
|
4
|
-
has_many :variants, through: :subscription_periods_variants, class_name: 'Spree::Variant'
|
5
|
-
belongs_to :boxable_variant, class_name: 'Spree::Variant', foreign_key: 'boxable_variant_id'
|
6
|
-
|
7
|
-
def self.current
|
8
|
-
period_for_date(Date.today)
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.period_for_date(date)
|
12
|
-
SubscriptionPeriod.where('start_date <= ?', date).order('start_date desc').last
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
1
|
+
module SolidusSubscriptionBoxes
|
2
|
+
class SubscriptionPeriod < ApplicationRecord
|
3
|
+
has_many :subscription_periods_variants, foreign_key: :solidus_subscription_boxes_subscription_period_id, class_name: 'SolidusSubscriptionBoxes::SubscriptionPeriodsVariant'
|
4
|
+
has_many :variants, through: :subscription_periods_variants, class_name: 'Spree::Variant'
|
5
|
+
belongs_to :boxable_variant, class_name: 'Spree::Variant', foreign_key: 'boxable_variant_id'
|
6
|
+
|
7
|
+
def self.current
|
8
|
+
period_for_date(Date.today)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.period_for_date(date)
|
12
|
+
SubscriptionPeriod.where('start_date <= ?', date).order('start_date desc').last
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
module SolidusSubscriptionBoxes
|
2
|
-
class SubscriptionPeriodsVariant < ApplicationRecord
|
3
|
-
belongs_to :variant, class_name: 'Spree::Variant', foreign_key: :spree_variant_id
|
4
|
-
belongs_to :subscription_period, foreign_key: :solidus_subscription_boxes_subscription_period_id, class_name: 'SolidusSubscriptionBoxes::SubscriptionPeriod'
|
5
|
-
end
|
6
|
-
end
|
1
|
+
module SolidusSubscriptionBoxes
|
2
|
+
class SubscriptionPeriodsVariant < ApplicationRecord
|
3
|
+
belongs_to :variant, class_name: 'Spree::Variant', foreign_key: :spree_variant_id
|
4
|
+
belongs_to :subscription_period, foreign_key: :solidus_subscription_boxes_subscription_period_id, class_name: 'SolidusSubscriptionBoxes::SubscriptionPeriod'
|
5
|
+
end
|
6
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
Deface::Override.new(
|
2
|
-
virtual_path: "spree/admin/products/_form",
|
3
|
-
name: "solidus_subscriptions_product_boxable_checkbox",
|
4
|
-
insert_after: "[data-hook='admin_product_form_meta']",
|
5
|
-
partial: "spree/admin/products/boxable_checkbox"
|
1
|
+
Deface::Override.new(
|
2
|
+
virtual_path: "spree/admin/products/_form",
|
3
|
+
name: "solidus_subscriptions_product_boxable_checkbox",
|
4
|
+
insert_after: "[data-hook='admin_product_form_meta']",
|
5
|
+
partial: "spree/admin/products/boxable_checkbox"
|
6
6
|
)
|
@@ -1,14 +1,14 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
<html>
|
3
|
-
<head>
|
4
|
-
<title>SolidusSubscriptionBoxes</title>
|
5
|
-
<%= stylesheet_link_tag "solidus_subscription_boxes/application", media: "all" %>
|
6
|
-
<%= javascript_include_tag "solidus_subscription_boxes/application" %>
|
7
|
-
<%= csrf_meta_tags %>
|
8
|
-
</head>
|
9
|
-
<body>
|
10
|
-
|
11
|
-
<%= yield %>
|
12
|
-
|
13
|
-
</body>
|
14
|
-
</html>
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>SolidusSubscriptionBoxes</title>
|
5
|
+
<%= stylesheet_link_tag "solidus_subscription_boxes/application", media: "all" %>
|
6
|
+
<%= javascript_include_tag "solidus_subscription_boxes/application" %>
|
7
|
+
<%= csrf_meta_tags %>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
|
11
|
+
<%= yield %>
|
12
|
+
|
13
|
+
</body>
|
14
|
+
</html>
|
@@ -1,13 +1,13 @@
|
|
1
|
-
<div class="meal-selector row row-centered">
|
2
|
-
<%- box_variants.each do |variant| %>
|
3
|
-
<div class="col-xs-12 col-md-4 col-centered text-center meal">
|
4
|
-
<label class="meal-selection">
|
5
|
-
<input class="hidden" type="checkbox" name="<%= preference_scope %>" value="<%= variant.id %>" <%= is_checked(preferable, variant) %>>
|
6
|
-
<div class="image">
|
7
|
-
<%= image_tag variant.display_image.attachment.url(:large) %>
|
8
|
-
|
9
|
-
|
10
|
-
</label>
|
11
|
-
</div>
|
12
|
-
<% end %>
|
1
|
+
<div class="meal-selector row row-centered">
|
2
|
+
<%- box_variants.each do |variant| %>
|
3
|
+
<div class="col-xs-12 col-md-4 col-centered text-center meal">
|
4
|
+
<label class="meal-selection">
|
5
|
+
<input class="hidden" type="checkbox" name="<%= preference_scope %>" value="<%= variant.id %>" <%= is_checked(preferable, variant) %>>
|
6
|
+
<div class="image">
|
7
|
+
<%= image_tag variant.display_image.attachment.url(:large) %>
|
8
|
+
<h4><%= variant.name %></h4>
|
9
|
+
</div>
|
10
|
+
</label>
|
11
|
+
</div>
|
12
|
+
<% end %>
|
13
13
|
</div>
|