solidus_sale_pricing 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/.rspec +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +25 -0
- data/LICENSE +26 -0
- data/README.md +173 -0
- data/Rakefile +21 -0
- data/app/assets/javascripts/spree/backend/solidus_sale_pricing.js +2 -0
- data/app/assets/javascripts/spree/frontend/solidus_sale_pricing.js +2 -0
- data/app/assets/stylesheets/spree/backend/solidus_sale_pricing.css +13 -0
- data/app/assets/stylesheets/spree/frontend/solidus_sale_pricing.css +4 -0
- data/app/controllers/spree/admin/product_controller_decorator.rb +10 -0
- data/app/controllers/spree/admin/sale_prices_controller.rb +73 -0
- data/app/helpers/spree/base_helper_decorator.rb +21 -0
- data/app/models/spree/calculator/dollar_amount_sale_price_calculator.rb +12 -0
- data/app/models/spree/calculator/percent_off_sale_price_calculator.rb +12 -0
- data/app/models/spree/price_decorator.rb +93 -0
- data/app/models/spree/product_decorator.rb +49 -0
- data/app/models/spree/sale_price.rb +55 -0
- data/app/models/spree/variant_decorator.rb +65 -0
- data/app/overrides/add_sale_price_to_product_view.rb +12 -0
- data/app/overrides/add_sale_product_admin_tabs.rb +6 -0
- data/app/views/spree/admin/products/_sale_products.html.erb +3 -0
- data/app/views/spree/admin/sale_prices/_form.html.erb +31 -0
- data/app/views/spree/admin/sale_prices/edit.html.erb +17 -0
- data/app/views/spree/admin/sale_prices/index.html.erb +54 -0
- data/app/views/spree/admin/sale_prices/new.html.erb +15 -0
- data/bin/rails +7 -0
- data/config/locales/en.yml +34 -0
- data/config/routes.rb +10 -0
- data/db/migrate/20160622203615_add_spree_create_sale_prices_table.rb +19 -0
- data/lib/generators/solidus_sale_pricing/install/install_generator.rb +31 -0
- data/lib/solidus_sale_pricing.rb +8 -0
- data/lib/solidus_sale_pricing/engine.rb +22 -0
- data/lib/solidus_sale_pricing/factories.rb +6 -0
- data/lib/solidus_sale_pricing/version.rb +18 -0
- data/solidus_sale_pricing.gemspec +38 -0
- data/spec/controllers/sale_prices_controller_spec.rb +56 -0
- data/spec/factories/sale_price.rb +14 -0
- data/spec/models/sale_price_spec.rb +5 -0
- data/spec/spec_helper.rb +95 -0
- metadata +262 -0
@@ -0,0 +1,49 @@
|
|
1
|
+
Spree::Product.class_eval do
|
2
|
+
|
3
|
+
# Essentially all read values here are delegated to reading the value on the Master variant
|
4
|
+
# All write values will write to all variants (including the Master) unless that method's all_variants parameter is set to false, in which case it will only write to the Master variant
|
5
|
+
|
6
|
+
delegate_belongs_to :master, :active_sale_in, :current_sale_in, :next_active_sale_in, :next_current_sale_in, :sale_price_in, :on_sale_in?, :original_price_in, :discount_percent_in, :sale_price, :original_price, :on_sale?, :sale_prices
|
7
|
+
|
8
|
+
# attr_accessible :sale_price, :original_price
|
9
|
+
# TODO Should the all_variants flag be on option you set on creating the sale and then it always behaves as such? Seems unsafe to pass this flag one way during create and use a different value for it later (they can actively bypass by accessing each variant directly and changing the values)
|
10
|
+
|
11
|
+
# TODO also accept a class reference for calculator type instead of only a string
|
12
|
+
def put_on_sale(attrs={}, all_variants=true)
|
13
|
+
run_on_variants(all_variants) { |v| v.put_on_sale(attrs) }
|
14
|
+
end
|
15
|
+
alias :create_sale :put_on_sale
|
16
|
+
|
17
|
+
def enable_sale(all_variants = true)
|
18
|
+
run_on_variants(all_variants) { |v| v.enable_sale }
|
19
|
+
end
|
20
|
+
|
21
|
+
def disable_sale(all_variants = true)
|
22
|
+
run_on_variants(all_variants) { |v| v.disable_sale }
|
23
|
+
end
|
24
|
+
|
25
|
+
def start_sale(end_time = nil, all_variants = true)
|
26
|
+
run_on_variants(all_variants) { |v| v.start_sale(end_time) }
|
27
|
+
end
|
28
|
+
|
29
|
+
def stop_sale(all_variants = true)
|
30
|
+
run_on_variants(all_variants) { |v| v.stop_sale }
|
31
|
+
end
|
32
|
+
|
33
|
+
def update_sale(attrs={}, all_variants = true)
|
34
|
+
run_on_variants(all_variants) { |v| v.update_sale(attrs) }
|
35
|
+
end
|
36
|
+
|
37
|
+
def active_sale_prices?
|
38
|
+
sale_prices.where(enabled: true)
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def run_on_variants(all_variants, &block)
|
44
|
+
if all_variants && variants.present?
|
45
|
+
variants.each { |v| block.call v }
|
46
|
+
end
|
47
|
+
block.call master
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Spree
|
2
|
+
class SalePrice < ActiveRecord::Base
|
3
|
+
# TODO validations
|
4
|
+
belongs_to :price, class_name: 'Spree::Price'
|
5
|
+
has_one :calculator, class_name: 'Spree::Calculator', as: :calculable, dependent: :destroy
|
6
|
+
accepts_nested_attributes_for :calculator
|
7
|
+
validates :value, presence: true
|
8
|
+
validates :calculator, presence: true
|
9
|
+
|
10
|
+
scope :active, lambda {
|
11
|
+
where("enabled = 't' AND (start_at <= ? OR start_at IS NULL) AND (end_at >= ? OR end_at IS NULL)", Time.now, Time.now)
|
12
|
+
}
|
13
|
+
|
14
|
+
# TODO make this work or remove it
|
15
|
+
#def self.calculators
|
16
|
+
# Rails.application.config.spree.calculators.send(self.to_s.tableize.gsub('/', '_').sub('spree_', ''))
|
17
|
+
#end
|
18
|
+
|
19
|
+
def calculator_type
|
20
|
+
calculator.class.to_s if calculator
|
21
|
+
end
|
22
|
+
|
23
|
+
def calculator_type=(calculator_type)
|
24
|
+
clazz = calculator_type.constantize if calculator_type
|
25
|
+
self.calculator = clazz.new if clazz and not self.calculator.is_a? clazz
|
26
|
+
end
|
27
|
+
|
28
|
+
def price
|
29
|
+
calculator.compute self
|
30
|
+
end
|
31
|
+
|
32
|
+
def enable
|
33
|
+
update_attributes(end_at: nil, enabled: true)
|
34
|
+
end
|
35
|
+
|
36
|
+
def disable
|
37
|
+
update_attribute(:enabled, false)
|
38
|
+
end
|
39
|
+
|
40
|
+
def start(end_time = nil)
|
41
|
+
end_time = nil if end_time.present? && end_time <= Time.now # if end_time is not in the future then make it nil (no end)
|
42
|
+
attr = { end_at: end_time, enabled: true }
|
43
|
+
attr[:start_at] = Time.now if self.start_at.present? && self.start_at > Time.now # only set start_at if it's not set in the past
|
44
|
+
update_attributes(attr)
|
45
|
+
end
|
46
|
+
|
47
|
+
def stop
|
48
|
+
update_attributes(end_at: Time.now, enabled: false)
|
49
|
+
end
|
50
|
+
|
51
|
+
def update(attrs={})
|
52
|
+
update_attributes(attrs)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
Spree::Variant.class_eval do
|
2
|
+
delegate_belongs_to :default_price, :sale_price, :sale_prices, :original_price, :on_sale?
|
3
|
+
|
4
|
+
# TODO also accept a class reference for calculator type instead of only a string
|
5
|
+
def put_on_sale(attrs={}, all_currencies=true)
|
6
|
+
run_on_prices(all_currencies) { |p| p.put_on_sale(attrs) }
|
7
|
+
end
|
8
|
+
alias :create_sale :put_on_sale
|
9
|
+
|
10
|
+
def active_sale_in(currency)
|
11
|
+
price_in(currency).active_sale
|
12
|
+
end
|
13
|
+
alias :current_sale_in :active_sale_in
|
14
|
+
|
15
|
+
def next_active_sale_in(currency)
|
16
|
+
price_in(currency).next_active_sale
|
17
|
+
end
|
18
|
+
alias :next_current_sale_in :next_active_sale_in
|
19
|
+
|
20
|
+
def sale_price_in(currency)
|
21
|
+
Spree::Price.new variant_id: self.id, currency: currency, amount: price_in(currency).sale_price
|
22
|
+
end
|
23
|
+
|
24
|
+
def discount_percent_in(currency)
|
25
|
+
price_in(currency).discount_percent
|
26
|
+
end
|
27
|
+
|
28
|
+
def on_sale_in?(currency)
|
29
|
+
price_in(currency).on_sale?
|
30
|
+
end
|
31
|
+
|
32
|
+
def original_price_in(currency)
|
33
|
+
Spree::Price.new variant_id: self.id, currency: currency, amount: price_in(currency).original_price
|
34
|
+
end
|
35
|
+
|
36
|
+
def enable_sale(all_currencies = true)
|
37
|
+
run_on_prices(all_currencies) { |p| p.enable_sale }
|
38
|
+
end
|
39
|
+
|
40
|
+
def disable_sale(all_currencies = true)
|
41
|
+
run_on_prices(all_currencies) { |p| p.disable_sale }
|
42
|
+
end
|
43
|
+
|
44
|
+
def start_sale(end_time = nil, all_currencies = true)
|
45
|
+
run_on_prices(all_currencies) { |p| p.start_sale end_time }
|
46
|
+
end
|
47
|
+
|
48
|
+
def stop_sale(all_currencies=true)
|
49
|
+
run_on_prices(all_currencies) { |p| p.stop_sale }
|
50
|
+
end
|
51
|
+
|
52
|
+
def update_sale(attrs, all_currencies=true)
|
53
|
+
run_on_prices(all_currencies) { |p| p.update_sale(attrs) }
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def run_on_prices(all_currencies, &block)
|
59
|
+
if all_currencies && prices.present?
|
60
|
+
prices.each { |p| block.call p }
|
61
|
+
else
|
62
|
+
block.call default_price
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
Deface::Override.new(
|
2
|
+
virtual_path: 'spree/shared/_products',
|
3
|
+
name: 'add_sale_price_to_product',
|
4
|
+
replace: 'span.price'
|
5
|
+
) do
|
6
|
+
"<% if product.on_sale? %>
|
7
|
+
<span class='price sale' itemprop='sale_price'><%= number_to_currency(product.sale_price) %></span>
|
8
|
+
<span class='price selling' itemprop='price'><%= display_price(product) %></span>
|
9
|
+
<% else %>
|
10
|
+
<span class='price selling' itemprop='price'><%= display_price(product) %></span>
|
11
|
+
<% end %>"
|
12
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<div data-hook='admin_sale_price_form_fields' class='row'>
|
2
|
+
<div class='alpha four columns'>
|
3
|
+
<div class='field'>
|
4
|
+
<%= f.field_container :value do %>
|
5
|
+
<%= f.label :value, Spree.t(:value) %><br />
|
6
|
+
<%= f.text_field :value, class: 'fullwidth' %>
|
7
|
+
<%= f.error_message_on :value %>
|
8
|
+
<% end %>
|
9
|
+
</div>
|
10
|
+
</div>
|
11
|
+
|
12
|
+
<div class='alpha four columns'>
|
13
|
+
<div class='field'>
|
14
|
+
<%= f.field_container :start_at do %>
|
15
|
+
<%= f.label :start_at, Spree.t(:start_at) %><br />
|
16
|
+
<%= f.text_field :start_at, value: datepicker_field_value(@sale_price.start_at), class: 'datepicker fullwidth' %>
|
17
|
+
<%= f.error_message_on :start_at %>
|
18
|
+
<% end %>
|
19
|
+
</div>
|
20
|
+
</div>
|
21
|
+
|
22
|
+
<div class='alpha four columns'>
|
23
|
+
<div class='field'>
|
24
|
+
<%= f.field_container :end_at do %>
|
25
|
+
<%= f.label :end_at, Spree.t(:end_at) %><br />
|
26
|
+
<%= f.text_field :end_at, value: datepicker_field_value(@sale_price.end_at), class: 'datepicker fullwidth' %>
|
27
|
+
<%= f.error_message_on :end_at %>
|
28
|
+
<% end %>
|
29
|
+
</div>
|
30
|
+
</div>
|
31
|
+
</div>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<% content_for :page_actions do %>
|
2
|
+
<% if can?(:admin, Spree::SalePrice) %>
|
3
|
+
<li><%= button_link_to Spree.t(:back_to_sale_prices_list), admin_product_sale_prices_path(@product), icon: 'arrow-left' %></li>
|
4
|
+
<% end %>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<%= render partial: 'spree/admin/shared/product_tabs', locals: { current: 'On Sale' } %>
|
8
|
+
<%= render partial: 'spree/shared/error_messages', locals: { target: @sale_price } %>
|
9
|
+
|
10
|
+
<% content_for :page_title do %>
|
11
|
+
<%= Spree.t(:sale_price) %>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<%= form_for [:admin, @product, @sale_price], method: :put do |f| %>
|
15
|
+
<%= render 'form', f: f %>
|
16
|
+
<%= render 'spree/admin/shared/edit_resource_links', collection_url: admin_product_sale_prices_url %>
|
17
|
+
<% end %>
|
@@ -0,0 +1,54 @@
|
|
1
|
+
<% content_for :page_title do %>
|
2
|
+
<%= Spree.t(:listing_sale_prices) %>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<% content_for :page_actions do %>
|
6
|
+
<%= button_link_to Spree.t(:new_sale_price), new_admin_product_sale_price_url(@product), icon: 'add', class: 'btn-success', id: 'admin_new_sale_price_link' %>
|
7
|
+
<% end %>
|
8
|
+
|
9
|
+
<%= render partial: 'spree/admin/shared/product_tabs', locals: { current: 'On Sale' } %>
|
10
|
+
|
11
|
+
<% if @sale_prices.any? %>
|
12
|
+
<table class='table' id='listing_sale_prices'>
|
13
|
+
<thead>
|
14
|
+
<tr data-hook='admin_sale_prices_index_headers'>
|
15
|
+
<th class='text-center'><%= Spree.t(:original_price) %></th>
|
16
|
+
<th class='text-center'><%= Spree.t(:value) %></th>
|
17
|
+
<th class='text-center'><%= Spree.t(:start_at) %></th>
|
18
|
+
<th class='text-center'><%= Spree.t(:end_at) %></th>
|
19
|
+
<th class='text-center'><%= Spree.t(:enabled) %></th>
|
20
|
+
<th class='actions' data-hook='admin_sale_prices_index_header_actions'></th>
|
21
|
+
</tr>
|
22
|
+
</thead>
|
23
|
+
|
24
|
+
<tbody>
|
25
|
+
<% @sale_prices.each do |sale_price| %>
|
26
|
+
<tr id='<%= spree_dom_id sale_price %>' data-hook='admin_sale_prices_index_rows' class='<%= cycle('odd', 'even') %>'>
|
27
|
+
<td class='align-center'><%= number_to_currency(@product.original_price.to_f) %></td>
|
28
|
+
<td class='align-center'><%= number_to_currency(sale_price.value) %></td>
|
29
|
+
<td class='align-center'><%= format_date(sale_price.start_at) %></td>
|
30
|
+
<td class='align-center'><%= format_date(sale_price.end_at) %></td>
|
31
|
+
<td class='align-center'><%= sale_price.enabled %></td>
|
32
|
+
<td class='actions actions-3 text-right' data-hook='admin_sale_prices_index_row_actions'>
|
33
|
+
<%= link_to_edit sale_price, url: edit_admin_product_sale_price_url(@product, sale_price), no_text: true, class: 'edit' if can?(:edit, sale_price) %>
|
34
|
+
|
35
|
+
<% if sale_price.enabled? %>
|
36
|
+
<%= link_to_with_icon 'remove', Spree.t(:stop), admin_product_sale_price_stop_path(@product, sale_price), no_text: true, class: 'stop' if can?(:edit, sale_price) %>
|
37
|
+
|
38
|
+
<% else %>
|
39
|
+
<%= link_to_with_icon 'check', Spree.t(:enable), admin_product_sale_price_enable_path(@product, sale_price), no_text: true, class: 'enable' if can?(:edit, sale_price) %>
|
40
|
+
|
41
|
+
<% end %>
|
42
|
+
<%= link_to_delete sale_price, url: admin_product_sale_price_path(@product, sale_price), no_text: true if can?(:delete, sale_price) %>
|
43
|
+
</td>
|
44
|
+
</tr>
|
45
|
+
<% end %>
|
46
|
+
</tbody>
|
47
|
+
</table>
|
48
|
+
<% else %>
|
49
|
+
<div class='alpha twelve columns no-objects-found'>
|
50
|
+
<%= render 'spree/admin/shared/no_objects_found',
|
51
|
+
resource: Spree::SalePrice,
|
52
|
+
new_resource_url: spree.new_admin_product_sale_price_path(@product) %>
|
53
|
+
</div>
|
54
|
+
<% end %>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<% content_for :page_actions do %>
|
2
|
+
<%= button_link_to Spree.t(:back_to_sale_prices_list), admin_product_sale_prices_path(@product), icon: 'arrow-left', class: 'btn-primary' %>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<% content_for :page_title do %>
|
6
|
+
<%= Spree.t(:new_sale_price) %>
|
7
|
+
<% end %>
|
8
|
+
|
9
|
+
<%= render partial: 'spree/admin/shared/product_tabs', locals: { current: 'On Sale' } %>
|
10
|
+
<%= render partial: 'spree/shared/error_messages', locals: { target: @sale_price } %>
|
11
|
+
|
12
|
+
<%= form_for [:admin, :product, @sale_price] do |f| %>
|
13
|
+
<%= render 'form', f: f %>
|
14
|
+
<%= render 'spree/admin/shared/new_resource_links', collection_url: admin_product_sale_prices_path(@product) %>
|
15
|
+
<% end %>
|
data/bin/rails
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
2
|
+
|
3
|
+
ENGINE_ROOT = File.expand_path('../..', __FILE__)
|
4
|
+
ENGINE_PATH = File.expand_path('../../lib/solidus_sale_pricing/engine', __FILE__)
|
5
|
+
|
6
|
+
require 'rails/all'
|
7
|
+
require 'rails/engine/commands'
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# Sample localization file for English. Add more files in this directory for other locales.
|
2
|
+
# See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
|
3
|
+
|
4
|
+
en:
|
5
|
+
activerecord:
|
6
|
+
models:
|
7
|
+
spree/sale_price:
|
8
|
+
one: Sale Price
|
9
|
+
other: Sale Prices
|
10
|
+
spree:
|
11
|
+
admin:
|
12
|
+
tab:
|
13
|
+
sale_products: Sale Products
|
14
|
+
new_sale_price: New Sale Price
|
15
|
+
listing_sale_prices: Listing Sale Prices
|
16
|
+
creating_sale_price: Creating Sale Price
|
17
|
+
sale_price: Sale Price
|
18
|
+
sale_products: On Sale
|
19
|
+
price_id: Price ID
|
20
|
+
original_price: Original Price
|
21
|
+
value: Value
|
22
|
+
start_at: Start At
|
23
|
+
end_at: End At
|
24
|
+
enabled: Enabled
|
25
|
+
stop: Stop
|
26
|
+
enable: Enable
|
27
|
+
sale_price_stopped: The sale price was stopped successfully!
|
28
|
+
sale_price_enabled: The sale price was enabled successfully!
|
29
|
+
please_stop_other_sale_prices: Please stop the other sale prices
|
30
|
+
sale_price_successfully_created: The sale price was successfully created
|
31
|
+
error_on_create: Something went wrong, please check your data
|
32
|
+
sale_price_successfully_updated: The sale price was successfully updated
|
33
|
+
error_on_update: Something went wrong, please check your data
|
34
|
+
back_to_sale_prices_list: Back to Sale Prices List
|
data/config/routes.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
class AddSpreeCreateSalePricesTable < SolidusSupport::Migration[4.2]
|
2
|
+
def change
|
3
|
+
create_table :spree_sale_prices do |t|
|
4
|
+
t.integer :price_id
|
5
|
+
t.float :value
|
6
|
+
t.datetime :start_at
|
7
|
+
t.datetime :end_at
|
8
|
+
t.boolean :enabled
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
|
12
|
+
# Getting active sale prices for a price
|
13
|
+
add_index :spree_sale_prices, [:price_id, :start_at, :end_at, :enabled], :name => "index_active_sale_prices_for_price"
|
14
|
+
# Getting all active sale prices for all prices
|
15
|
+
add_index :spree_sale_prices, [:start_at, :end_at, :enabled], :name => "index_active_sale_prices_for_all_variants"
|
16
|
+
# Getting all sale prices for a price
|
17
|
+
add_index :spree_sale_prices, :price_id, :name => "index_sale_prices_for_price"
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module SolidusSalePricing
|
2
|
+
module Generators
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
4
|
+
|
5
|
+
class_option :auto_run_migrations, type: :boolean, default: false
|
6
|
+
|
7
|
+
def add_javascripts
|
8
|
+
append_file 'vendor/assets/javascripts/spree/frontend/all.js', "//= require spree/frontend/solidus_sale_pricing\n"
|
9
|
+
append_file 'vendor/assets/javascripts/spree/backend/all.js', "//= require spree/backend/solidus_sale_pricing\n"
|
10
|
+
end
|
11
|
+
|
12
|
+
def add_stylesheets
|
13
|
+
inject_into_file 'vendor/assets/stylesheets/spree/frontend/all.css', " *= require spree/frontend/solidus_sale_pricing\n", before: /\*\//, verbose: true
|
14
|
+
inject_into_file 'vendor/assets/stylesheets/spree/backend/all.css', " *= require spree/backend/solidus_sale_pricing\n", before: /\*\//, verbose: true
|
15
|
+
end
|
16
|
+
|
17
|
+
def add_migrations
|
18
|
+
run 'bundle exec rake railties:install:migrations FROM=solidus_sale_pricing'
|
19
|
+
end
|
20
|
+
|
21
|
+
def run_migrations
|
22
|
+
run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask 'Would you like to run the migrations now? [Y/n]')
|
23
|
+
if run_migrations
|
24
|
+
run 'bundle exec rake db:migrate'
|
25
|
+
else
|
26
|
+
puts 'Skipping rake db:migrate, don\'t forget to run it!'
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module SolidusSalePricing
|
2
|
+
class Engine < Rails::Engine
|
3
|
+
require 'spree/core'
|
4
|
+
isolate_namespace Spree
|
5
|
+
engine_name 'solidus_sale_pricing'
|
6
|
+
|
7
|
+
config.autoload_paths += %W(#{config.root}/lib)
|
8
|
+
|
9
|
+
# use rspec for tests
|
10
|
+
config.generators do |g|
|
11
|
+
g.test_framework :rspec
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.activate
|
15
|
+
Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c|
|
16
|
+
Rails.configuration.cache_classes ? require(c) : load(c)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
config.to_prepare &method(:activate).to_proc
|
21
|
+
end
|
22
|
+
end
|