solidus_subscription_boxes 0.0.9 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +29 -29
  3. data/README.md +26 -26
  4. data/Rakefile +47 -47
  5. data/app/assets/config/solidus_subscription_boxes_manifest.js +2 -2
  6. data/app/assets/javascripts/solidus_subscription_boxes/application.js +13 -13
  7. data/app/assets/javascripts/solidus_subscription_boxes/subscription_selection.js +64 -64
  8. data/app/assets/stylesheets/_solidus_subscription_boxes.scss +16 -16
  9. data/app/assets/stylesheets/solidus_subscription_boxes/subscription_box.css.scss +29 -29
  10. data/app/controllers/solidus_subscription_boxes/application_controller.rb +4 -4
  11. data/app/controllers/solidus_subscription_boxes/subscription_boxes_controller.rb +6 -6
  12. data/app/decorators/solidus_subscriptions/models/checkout/update_preference_decorator.rb +13 -14
  13. data/app/decorators/spree/controllers/api/v1/subscriptions/meal_preference_decorator.rb +20 -20
  14. data/app/decorators/spree/controllers/orders/meal_preference_decorator.rb +35 -35
  15. data/app/decorators/spree/controllers/users/set_box_preference_decorator.rb +31 -31
  16. data/app/decorators/spree/orders/preference_decorator.rb +14 -14
  17. data/app/decorators/spree/products/boxable_decorator.rb +15 -11
  18. data/app/decorators/spree/variants/subscription_period_decorator.rb +14 -0
  19. data/app/helpers/solidus_subscription_boxes/application_helper.rb +19 -19
  20. data/app/jobs/solidus_subscription_boxes/application_job.rb +4 -4
  21. data/app/mailers/solidus_subscription_boxes/application_mailer.rb +6 -6
  22. data/app/models/solidus_subscription_boxes/application_record.rb +5 -5
  23. data/app/models/solidus_subscription_boxes/box_preference.rb +10 -10
  24. data/app/models/solidus_subscription_boxes/subscription_period.rb +15 -15
  25. data/app/models/solidus_subscription_boxes/subscription_periods_variant.rb +6 -6
  26. data/app/overrides/views/admin_boxable_checkbox.rb +5 -5
  27. data/app/views/layouts/solidus_subscription_boxes/application.html.erb +14 -14
  28. data/app/views/solidus_subscription_boxes/subscription_boxes/_box_variants.html.erb +14 -14
  29. data/app/views/solidus_subscription_boxes/subscription_boxes/_manage.html.erb +39 -39
  30. data/app/views/solidus_subscription_boxes/subscription_boxes/get_started.html.erb +52 -52
  31. data/app/views/spree/admin/products/_boxable_checkbox.html.erb +27 -8
  32. data/app/views/spree/admin/variants/_boxable_checkbox.html.erb +8 -8
  33. data/config/routes.rb +4 -4
  34. data/db/migrate/20170609065436_create_solidus_subscription_boxes_box_preferences.rb +10 -10
  35. data/db/migrate/20170906015531_create_solidus_subscription_boxes_subscription_periods.rb +9 -9
  36. data/db/migrate/20170906021159_create_solidus_subscription_boxes_subscription_periods_variants.rb +10 -10
  37. data/db/migrate/20170919054537_add_boxable_to_spree_variants.rb +5 -5
  38. data/db/migrate/20170919063437_add_boxable_variant_id_to_solidus_subscription_boxes_subscription_periods.rb +5 -5
  39. data/lib/solidus_subscription_boxes.rb +4 -4
  40. data/lib/solidus_subscription_boxes/engine.rb +13 -13
  41. data/lib/solidus_subscription_boxes/version.rb +3 -3
  42. data/lib/tasks/solidus_subscription_boxes_tasks.rake +4 -4
  43. data/test/integration/navigation_test.rb +8 -8
  44. data/test/solidus_subscription_boxes_test.rb +7 -7
  45. data/test/test_helper.rb +21 -21
  46. metadata +4 -3
@@ -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,15 +1,15 @@
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
- <div class="image">
5
- <%= image_tag variant.display_image.attachment.url(:large) %>
6
- <h4><%= variant.name %></h4>
7
- </div>
8
- <div class="box-controls display-4">
9
- <i class="fa fa-3 fa-minus-circle remove" aria-hidden="true"></i>
10
- <input class="border-0 col-4 text-right" type="number" name="<%= preference_scope %>[<%= variant.id %>]" value="<%= preferable_value(preferable.box_preference, variant.id) %>" readonly>
11
- <i class="fa fa-3 fa-plus-circle add" aria-hidden="true"></i>
12
- </div>
13
- </div>
14
- <% 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
+ <div class="image">
5
+ <%= image_tag variant.display_image.attachment.url(:large) %>
6
+ <h4><%= variant.name %></h4>
7
+ </div>
8
+ <div class="box-controls display-4">
9
+ <i class="fa fa-3 fa-minus-circle remove" aria-hidden="true"></i>
10
+ <input class="border-0 col-4 text-right" type="number" name="<%= preference_scope %>[<%= variant.id %>]" value="<%= preferable_value(preferable.box_preference, variant.id) %>" readonly>
11
+ <i class="fa fa-3 fa-plus-circle add" aria-hidden="true"></i>
12
+ </div>
13
+ </div>
14
+ <% end %>
15
15
  </div>
@@ -1,40 +1,40 @@
1
- <% @user.subscriptions.where(state: 'active').each do |subscription| %>
2
- <div class="manage-subscription">
3
- <h2>My Next Order (<span class="actionable-date-update"><%= subscription.actionable_date.strftime("%B %d") %></span>)</h2>
4
- <div class="row">
5
- <div class="col-xs-12 col-md-8">
6
- <%= form_with url: "/api/v1/subscriptions/#{subscription.id}", method: 'put', class: 'menu meal-selector' do |form| %>
7
- <%= hidden_field_tag(:token, @user.spree_api_key) %>
8
- <%= render partial: 'solidus_subscription_boxes/subscription_boxes/box_variants',
9
- locals: {
10
- box_variants: SolidusSubscriptionBoxes::SubscriptionPeriod.period_for_date(subscription.actionable_date).variants,
11
- preference_scope: "subscription[box_preference_attributes][preference]",
12
- preferable: subscription
13
- }
14
- %>
15
- <div class="row">
16
- <div class="col-xs-12 content text-center">
17
- <%= form.submit 'Update My Order', class: "btn btn-primary btn-large purchase-link meal-update" %>
18
- </div>
19
- </div>
20
- <% end %>
21
- </div>
22
- <div class="col-xs-12 col-md-4">
23
- <div class="row">
24
- <div class="col-xs-12 content text-center">
25
- <%= form_with url: "/api/v1/subscriptions/#{subscription.id}/skip", class: 'menu' do |form| %>
26
- <%= hidden_field_tag(:token, @user.spree_api_key) %>
27
- <%= form.submit 'Skip My Next Order', class: "btn btn-primary btn-large purchase-link" %>
28
- <% end %>
29
- </div>
30
- <div class="col-xs-12 content text-center">
31
- <%= form_with url: "/api/v1/subscriptions/#{subscription.id}/cancel", class: 'menu' do |form| %>
32
- <%= hidden_field_tag(:token, @user.spree_api_key) %>
33
- <%= form.submit 'Cancel', class: "btn btn-primary btn-large purchase-link" %>
34
- <% end %>
35
- </div>
36
- </div>
37
- </div>
38
- </div>
39
- </div>
1
+ <% @user.subscriptions.where(state: 'active').each do |subscription| %>
2
+ <div class="manage-subscription">
3
+ <h2>My Next Order (<span class="actionable-date-update"><%= subscription.actionable_date.strftime("%B %d") %></span>)</h2>
4
+ <div class="row">
5
+ <div class="col-xs-12 col-md-8">
6
+ <%= form_with url: "/api/v1/subscriptions/#{subscription.id}", method: 'put', class: 'menu meal-selector' do |form| %>
7
+ <%= hidden_field_tag(:token, @user.spree_api_key) %>
8
+ <%= render partial: 'solidus_subscription_boxes/subscription_boxes/box_variants',
9
+ locals: {
10
+ box_variants: SolidusSubscriptionBoxes::SubscriptionPeriod.period_for_date(subscription.actionable_date).variants,
11
+ preference_scope: "subscription[box_preference_attributes][preference]",
12
+ preferable: subscription
13
+ }
14
+ %>
15
+ <div class="row">
16
+ <div class="col-xs-12 content text-center">
17
+ <%= form.submit 'Update My Order', class: "btn btn-primary btn-large purchase-link meal-update" %>
18
+ </div>
19
+ </div>
20
+ <% end %>
21
+ </div>
22
+ <div class="col-xs-12 col-md-4">
23
+ <div class="row">
24
+ <div class="col-xs-12 content text-center">
25
+ <%= form_with url: "/api/v1/subscriptions/#{subscription.id}/skip", class: 'menu' do |form| %>
26
+ <%= hidden_field_tag(:token, @user.spree_api_key) %>
27
+ <%= form.submit 'Skip My Next Order', class: "btn btn-primary btn-large purchase-link" %>
28
+ <% end %>
29
+ </div>
30
+ <div class="col-xs-12 content text-center">
31
+ <%= form_with url: "/api/v1/subscriptions/#{subscription.id}/cancel", class: 'menu' do |form| %>
32
+ <%= hidden_field_tag(:token, @user.spree_api_key) %>
33
+ <%= form.submit 'Cancel', class: "btn btn-primary btn-large purchase-link" %>
34
+ <% end %>
35
+ </div>
36
+ </div>
37
+ </div>
38
+ </div>
39
+ </div>
40
40
  <% end %>
@@ -1,52 +1,52 @@
1
- <div class="container-fluid bg-jumbotron mb-5">
2
- <section class="how-it-works">
3
- <div class="row text-center how-it-works background-grey">
4
- <div class="col-12 pt-4 pb-4">
5
- <h1 class="font-weight-bold">Here's How It Works</h1>
6
- </div>
7
- <div class="col-12 col-sm">
8
- <h2 class="statistic">3 meals</h2>
9
- <h5>pick your meals each week</h4>
10
- </div>
11
- <span class="chevron right"></span>
12
- <div class="col-12 col-sm">
13
- <h2 class="statistic">$36</h2>
14
- <h4>per week<h4>
15
- <h5 class="font-weight-bold font-italic">Shipping is FREE</h4>
16
- </div>
17
- <span class="chevron right"></span>
18
- <div class="col-12 col-sm">
19
- <h2 class="statistic">Sunday</h2>
20
- <h5>Delivered to your door</h4>
21
- </div>
22
- <span class="chevron right"></span>
23
- <div class="col-12 col-sm">
24
- <h2 class="statistic">NO</h2>
25
- <h4 class="font-weight-bold">COMMITMENTS</h3>
26
- <h5>cancel anytime, online</h4>
27
- </div>
28
- </div>
29
- </section>
30
- </div>
31
-
32
- <div class="menu">
33
- <h2 class="text-center">Choose Your First Three Meals</h2>
34
- <h4 class="text-center">We update the menu seasonally to use the freshest ingredients</h4>
35
- <div class="pt-5">
36
- <%= form_for :order, url: '/orders/populate' do |f| %>
37
- <%= render partial: 'box_variants', locals: {box_variants: @box_variants, preference_scope: "box_preference_attributes[preference]", preferable: f.object} %>
38
- <div class="row mt-5">
39
- <div class="col-12 content text-center">
40
- <%= hidden_field_tag :variant_id, @variant.id %>
41
- <%= hidden_field_tag :quantity, 1 %>
42
- <%= hidden_field_tag :'subscription_line_item[quantity]', 1 %>
43
- <%= hidden_field_tag :'subscription_line_item[subscribable_id]', 1 %>
44
- <%= hidden_field_tag :'subscription_line_item[interval_length]', 1 %>
45
- <%= hidden_field_tag :'subscription_line_item[interval_units]', 'week' %>
46
- <%= f.submit 'Choose 3 More', onclick: "window.dataLayer.push({event: 'click', clickAction:'selectorPurchase'})", class: "btn btn-primary btn-lg purchase-link meal-update", disabled: 'disabled', :'data-disable-with' => 'Submitting...' %>
47
- </div>
48
- </div>
49
- <% end %>
50
- </div>
51
- </div>
52
-
1
+ <div class="container-fluid bg-jumbotron mb-5">
2
+ <section class="how-it-works">
3
+ <div class="row text-center how-it-works background-grey">
4
+ <div class="col-12 pt-4 pb-4">
5
+ <h1 class="font-weight-bold">Here's How It Works</h1>
6
+ </div>
7
+ <div class="col-12 col-sm">
8
+ <h2 class="statistic">3 meals</h2>
9
+ <h5>pick your meals each week</h4>
10
+ </div>
11
+ <span class="chevron right"></span>
12
+ <div class="col-12 col-sm">
13
+ <h2 class="statistic">$36</h2>
14
+ <h4>per week<h4>
15
+ <h5 class="font-weight-bold font-italic">Shipping is FREE</h4>
16
+ </div>
17
+ <span class="chevron right"></span>
18
+ <div class="col-12 col-sm">
19
+ <h2 class="statistic">Sunday</h2>
20
+ <h5>Delivered to your door</h4>
21
+ </div>
22
+ <span class="chevron right"></span>
23
+ <div class="col-12 col-sm">
24
+ <h2 class="statistic">NO</h2>
25
+ <h4 class="font-weight-bold">COMMITMENTS</h3>
26
+ <h5>cancel anytime, online</h4>
27
+ </div>
28
+ </div>
29
+ </section>
30
+ </div>
31
+
32
+ <div class="menu">
33
+ <h2 class="text-center">Choose Your First Three Meals</h2>
34
+ <h4 class="text-center">We update the menu seasonally to use the freshest ingredients</h4>
35
+ <div class="pt-5">
36
+ <%= form_for :order, url: '/orders/populate' do |f| %>
37
+ <%= render partial: 'box_variants', locals: {box_variants: @box_variants, preference_scope: "box_preference_attributes[preference]", preferable: f.object} %>
38
+ <div class="row mt-5">
39
+ <div class="col-12 content text-center">
40
+ <%= hidden_field_tag :variant_id, @variant.id %>
41
+ <%= hidden_field_tag :quantity, 1 %>
42
+ <%= hidden_field_tag :'subscription_line_item[quantity]', 1 %>
43
+ <%= hidden_field_tag :'subscription_line_item[subscribable_id]', 1 %>
44
+ <%= hidden_field_tag :'subscription_line_item[interval_length]', 1 %>
45
+ <%= hidden_field_tag :'subscription_line_item[interval_units]', 'week' %>
46
+ <%= f.submit 'Choose 3 More', onclick: "window.dataLayer.push({event: 'click', clickAction:'selectorPurchase'})", class: "btn btn-primary btn-lg purchase-link meal-update", disabled: 'disabled', :'data-disable-with' => 'Submitting...' %>
47
+ </div>
48
+ </div>
49
+ <% end %>
50
+ </div>
51
+ </div>
52
+
@@ -1,8 +1,27 @@
1
- <% if !@product.has_variants? && @product.subscribable then %>
2
- <div class="field four columns checkbox" data-hook="boxable">
3
- <%= f.label :boxable do %>
4
- <%= f.check_box :boxable %>
5
- <%= Spree::Product.human_attribute_name(:boxable) %>
6
- <% end %>
7
- </div>
8
- <% end %>
1
+ <% if !@product.has_variants? && @product.subscribable then %>
2
+ <div class="field four columns checkbox" data-hook="boxable">
3
+ <%= f.label :boxable do %>
4
+ <%= f.check_box :boxable %>
5
+ <%= Spree::Product.human_attribute_name(:boxable) %>
6
+ <% end %>
7
+ </div>
8
+ <% end %>
9
+
10
+ <% if @product.boxable then %>
11
+ <%= f.fields_for :master_attributes, @product.master do |master_form|%>
12
+ <%= master_form.hidden_field :id%>
13
+ <%= master_form.fields_for :"subscription_periods_attributes[]", SolidusSubscriptionBoxes::SubscriptionPeriod.new do |subscription_period_form| %>
14
+ <%= subscription_period_form.text_field :start_date %>
15
+ <%= subscription_period_form.text_field :variant_ids, multiple: true %>
16
+ <%= subscription_period_form.text_field :variant_ids, multiple: true %>
17
+ <%= subscription_period_form.text_field :variant_ids, multiple: true %>
18
+ <% end %>
19
+ <% end %>
20
+ <%- @product.subscription_periods.order('start_date desc').each do |period| %>
21
+ <p><%= period.start_date %></p>
22
+ <%- period.variants.each do |period_variant| %>
23
+ <%= period_variant.name %>
24
+ <% end %>
25
+ </div>
26
+ <% end %>
27
+ <% end %>
@@ -1,8 +1,8 @@
1
- <% if @variant.subscribable then %>
2
- <div class="field four columns checkbox" data-hook="boxable">
3
- <%= f.label :boxable do %>
4
- <%= f.check_box :boxable %>
5
- <%= Spree::Variant.human_attribute_name(:boxable) %>
6
- <% end %>
7
- </div>
8
- <% end %>
1
+ <% if @variant.subscribable then %>
2
+ <div class="field four columns checkbox" data-hook="boxable">
3
+ <%= f.label :boxable do %>
4
+ <%= f.check_box :boxable %>
5
+ <%= Spree::Variant.human_attribute_name(:boxable) %>
6
+ <% end %>
7
+ </div>
8
+ <% end %>
data/config/routes.rb CHANGED
@@ -1,4 +1,4 @@
1
- SolidusSubscriptionBoxes::Engine.routes.draw do
2
- mount SolidusSubscriptions::Engine, at: '/'
3
- get '/get-started/:product_id' => 'subscription_boxes#get_started'
4
- end
1
+ SolidusSubscriptionBoxes::Engine.routes.draw do
2
+ mount SolidusSubscriptions::Engine, at: '/'
3
+ get '/get-started/:product_id' => 'subscription_boxes#get_started'
4
+ end
@@ -1,10 +1,10 @@
1
- class CreateSolidusSubscriptionBoxesBoxPreferences < ActiveRecord::Migration[5.0]
2
- def change
3
- create_table :solidus_subscription_boxes_box_preferences do |t|
4
- t.json :preference
5
- t.references :preferable, polymorphic: true, index: { name: 'subscription_box_preferable' }
6
-
7
- t.timestamps
8
- end
9
- end
10
- end
1
+ class CreateSolidusSubscriptionBoxesBoxPreferences < ActiveRecord::Migration[5.0]
2
+ def change
3
+ create_table :solidus_subscription_boxes_box_preferences do |t|
4
+ t.json :preference
5
+ t.references :preferable, polymorphic: true, index: { name: 'subscription_box_preferable' }
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -1,9 +1,9 @@
1
- class CreateSolidusSubscriptionBoxesSubscriptionPeriods < ActiveRecord::Migration[5.1]
2
- def change
3
- create_table :solidus_subscription_boxes_subscription_periods do |t|
4
- t.date :start_date
5
-
6
- t.timestamps
7
- end
8
- end
9
- end
1
+ class CreateSolidusSubscriptionBoxesSubscriptionPeriods < ActiveRecord::Migration[5.1]
2
+ def change
3
+ create_table :solidus_subscription_boxes_subscription_periods do |t|
4
+ t.date :start_date
5
+
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -1,10 +1,10 @@
1
- class CreateSolidusSubscriptionBoxesSubscriptionPeriodsVariants < ActiveRecord::Migration[5.1]
2
- def change
3
- create_table :solidus_subscription_boxes_subscription_periods_variants do |t|
4
- t.references :spree_variant, foreign_key: true, index: {name: 'subscription_box_period_variant'}
5
- t.references :solidus_subscription_boxes_subscription_period, foreign_key: true, index: {name: 'subscription_box_period_period'}
6
-
7
- t.timestamps
8
- end
9
- end
10
- end
1
+ class CreateSolidusSubscriptionBoxesSubscriptionPeriodsVariants < ActiveRecord::Migration[5.1]
2
+ def change
3
+ create_table :solidus_subscription_boxes_subscription_periods_variants do |t|
4
+ t.references :spree_variant, foreign_key: true, index: {name: 'subscription_box_period_variant'}
5
+ t.references :solidus_subscription_boxes_subscription_period, foreign_key: true, index: {name: 'subscription_box_period_period'}
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -1,5 +1,5 @@
1
- class AddBoxableToSpreeVariants < ActiveRecord::Migration[5.1]
2
- def change
3
- add_column :spree_variants, :boxable, :boolean
4
- end
5
- end
1
+ class AddBoxableToSpreeVariants < ActiveRecord::Migration[5.1]
2
+ def change
3
+ add_column :spree_variants, :boxable, :boolean
4
+ end
5
+ end
@@ -1,5 +1,5 @@
1
- class AddBoxableVariantIdToSolidusSubscriptionBoxesSubscriptionPeriods < ActiveRecord::Migration[5.1]
2
- def change
3
- add_column :solidus_subscription_boxes_subscription_periods, :boxable_variant_id, :integer
4
- end
5
- end
1
+ class AddBoxableVariantIdToSolidusSubscriptionBoxesSubscriptionPeriods < ActiveRecord::Migration[5.1]
2
+ def change
3
+ add_column :solidus_subscription_boxes_subscription_periods, :boxable_variant_id, :integer
4
+ end
5
+ end
@@ -1,4 +1,4 @@
1
- require "solidus_subscription_boxes/engine"
2
-
3
- module SolidusSubscriptionBoxes
4
- end
1
+ require "solidus_subscription_boxes/engine"
2
+
3
+ module SolidusSubscriptionBoxes
4
+ end
@@ -1,13 +1,13 @@
1
- module SolidusSubscriptionBoxes
2
- class Engine < ::Rails::Engine
3
- isolate_namespace SolidusSubscriptionBoxes
4
-
5
- def self.activate
6
- Dir.glob(File.join(File.dirname(__FILE__), '../../app/decorators/**/*.rb')) do |c|
7
- Rails.configuration.cache_classes ? require(c) : load(c)
8
- end
9
- end
10
-
11
- config.to_prepare(&method(:activate).to_proc)
12
- end
13
- end
1
+ module SolidusSubscriptionBoxes
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace SolidusSubscriptionBoxes
4
+
5
+ def self.activate
6
+ Dir.glob(File.join(File.dirname(__FILE__), '../../app/decorators/**/*.rb')) do |c|
7
+ Rails.configuration.cache_classes ? require(c) : load(c)
8
+ end
9
+ end
10
+
11
+ config.to_prepare(&method(:activate).to_proc)
12
+ end
13
+ end