solidus_frontend 2.5.2 → 2.6.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of solidus_frontend might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Rakefile +3 -1
- data/app/assets/javascripts/spree/frontend/checkout/address.js +4 -5
- data/app/assets/javascripts/spree/frontend/locale_selector.js +5 -0
- data/app/assets/javascripts/spree/frontend.js +1 -0
- data/app/assets/stylesheets/spree/frontend/screen.css.scss +33 -7
- data/app/controllers/spree/checkout_controller.rb +5 -4
- data/app/controllers/spree/content_controller.rb +2 -0
- data/app/controllers/spree/home_controller.rb +2 -0
- data/app/controllers/spree/locale_controller.rb +10 -6
- data/app/controllers/spree/orders_controller.rb +3 -1
- data/app/controllers/spree/products_controller.rb +3 -1
- data/app/controllers/spree/store_controller.rb +2 -0
- data/app/controllers/spree/taxons_controller.rb +3 -1
- data/app/helpers/spree/orders_helper.rb +2 -0
- data/app/helpers/spree/taxon_filters_helper.rb +13 -0
- data/app/models/spree/frontend_configuration.rb +2 -0
- data/app/views/spree/address/_form.html.erb +33 -33
- data/app/views/spree/checkout/_address.html.erb +2 -2
- data/app/views/spree/checkout/_delivery.html.erb +1 -1
- data/app/views/spree/checkout/_payment.html.erb +3 -3
- data/app/views/spree/checkout/edit.html.erb +2 -2
- data/app/views/spree/checkout/payment/_gateway.html.erb +12 -13
- data/app/views/spree/orders/_form.html.erb +1 -1
- data/app/views/spree/shared/_filters.html.erb +1 -1
- data/app/views/spree/shared/_locale_selector.html.erb +25 -0
- data/app/views/spree/shared/_nav_bar.html.erb +1 -0
- data/config/initializers/assets.rb +2 -0
- data/config/initializers/canonical_rails.rb +2 -0
- data/config/routes.rb +3 -0
- data/lib/generators/solidus/views/override_generator.rb +2 -0
- data/lib/solidus_frontend.rb +2 -0
- data/lib/spree/frontend/engine.rb +2 -0
- data/lib/spree/frontend/middleware/seo_assist.rb +2 -0
- data/lib/spree/frontend.rb +2 -0
- data/lib/spree_frontend.rb +2 -0
- data/lib/tasks/rake_util.rb +2 -0
- data/lib/tasks/taxon.rake +2 -0
- data/script/rails +4 -2
- data/solidus_frontend.gemspec +4 -3
- data/spec/controllers/controller_helpers_spec.rb +6 -0
- data/spec/controllers/locale_controller_spec.rb +57 -0
- data/spec/controllers/spree/checkout_controller_spec.rb +2 -0
- data/spec/controllers/spree/checkout_controller_with_views_spec.rb +3 -2
- data/spec/controllers/spree/content_controller_spec.rb +2 -0
- data/spec/controllers/spree/current_order_tracking_spec.rb +2 -0
- data/spec/controllers/spree/home_controller_spec.rb +2 -0
- data/spec/controllers/spree/orders_controller_ability_spec.rb +2 -0
- data/spec/controllers/spree/orders_controller_spec.rb +2 -0
- data/spec/controllers/spree/orders_controller_transitions_spec.rb +2 -0
- data/spec/controllers/spree/products_controller_spec.rb +2 -0
- data/spec/controllers/spree/taxons_controller_spec.rb +2 -0
- data/spec/features/address_spec.rb +2 -0
- data/spec/features/automatic_promotion_adjustments_spec.rb +2 -0
- data/spec/features/caching/products_spec.rb +2 -8
- data/spec/features/caching/taxons_spec.rb +2 -2
- data/spec/features/cart_spec.rb +2 -0
- data/spec/features/checkout_spec.rb +7 -5
- data/spec/features/checkout_unshippable_spec.rb +3 -1
- data/spec/features/coupon_code_spec.rb +2 -0
- data/spec/features/currency_spec.rb +2 -0
- data/spec/features/free_shipping_promotions_spec.rb +2 -0
- data/spec/features/locale_spec.rb +3 -7
- data/spec/features/order_spec.rb +3 -1
- data/spec/features/products_spec.rb +4 -3
- data/spec/features/promotion_code_invalidation_spec.rb +2 -0
- data/spec/features/quantity_promotions_spec.rb +2 -0
- data/spec/features/taxons_spec.rb +2 -0
- data/spec/features/template_rendering_spec.rb +2 -0
- data/spec/generators/solidus/views/override_generator_spec.rb +2 -0
- data/spec/helpers/base_helper_spec.rb +2 -0
- data/spec/helpers/order_helper_spec.rb +2 -0
- data/spec/helpers/taxon_filters_helper_spec.rb +12 -0
- data/spec/spec_helper.rb +4 -2
- data/spec/support/shared_contexts/checkout_setup.rb +2 -0
- data/spec/support/shared_contexts/custom_products.rb +2 -0
- data/spec/support/shared_contexts/locales.rb +16 -0
- data/spec/views/spree/checkout/_summary_spec.rb +2 -0
- metadata +35 -28
data/lib/spree_frontend.rb
CHANGED
data/lib/tasks/rake_util.rb
CHANGED
data/lib/tasks/taxon.rake
CHANGED
data/script/rails
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
2
4
|
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
3
5
|
|
4
|
-
ENGINE_ROOT = File.expand_path('
|
5
|
-
ENGINE_PATH = File.expand_path('
|
6
|
+
ENGINE_ROOT = File.expand_path('..', __dir__)
|
7
|
+
ENGINE_PATH = File.expand_path('../lib/spree/frontend/engine', __dir__)
|
6
8
|
|
7
9
|
require 'rails/all'
|
8
10
|
require 'rails/engine/commands'
|
data/solidus_frontend.gemspec
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require_relative '../core/lib/spree/core/version.rb'
|
3
4
|
|
4
5
|
Gem::Specification.new do |s|
|
@@ -24,11 +25,11 @@ Gem::Specification.new do |s|
|
|
24
25
|
s.add_dependency 'solidus_core', s.version
|
25
26
|
|
26
27
|
s.add_dependency 'canonical-rails', '~> 0.2.0'
|
28
|
+
s.add_dependency 'font-awesome-rails', '~> 4.0'
|
27
29
|
s.add_dependency 'jquery-rails'
|
30
|
+
s.add_dependency 'kaminari', '~> 1.1'
|
28
31
|
s.add_dependency 'sass-rails'
|
29
|
-
s.add_dependency 'font-awesome-rails', '~> 4.0'
|
30
32
|
s.add_dependency 'truncate_html', '~> 0.9', '>= 0.9.2'
|
31
|
-
s.add_dependency 'kaminari', '~> 1.1'
|
32
33
|
|
33
34
|
s.add_development_dependency 'capybara-accessible'
|
34
35
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
# In this file, we want to test that the controller helpers function correctly
|
@@ -7,9 +9,13 @@ describe Spree::ProductsController, type: :controller do
|
|
7
9
|
before do
|
8
10
|
I18n.enforce_available_locales = false
|
9
11
|
Spree::Frontend::Config[:locale] = :de
|
12
|
+
I18n.backend.store_translations(:de, spree: {
|
13
|
+
i18n: { this_file_language: "Deutsch (DE)" }
|
14
|
+
})
|
10
15
|
end
|
11
16
|
|
12
17
|
after do
|
18
|
+
I18n.reload!
|
13
19
|
Spree::Frontend::Config[:locale] = :en
|
14
20
|
I18n.locale = :en
|
15
21
|
I18n.enforce_available_locales = true
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Spree::LocaleController, type: :controller do
|
6
|
+
include_context "fr locale"
|
7
|
+
|
8
|
+
context 'switch_to_locale specified' do
|
9
|
+
context "available locale" do
|
10
|
+
it 'sets locale and redirects' do
|
11
|
+
get :set, params: { switch_to_locale: 'fr' }
|
12
|
+
expect(I18n.locale).to eq :fr
|
13
|
+
expect(response).to redirect_to('/')
|
14
|
+
expect(session[:locale]).to eq('fr')
|
15
|
+
expect(flash[:notice]).to eq(I18n.t("spree.locale_changed"))
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context "unavailable locale" do
|
20
|
+
it 'does not change locale and redirects' do
|
21
|
+
get :set, params: { switch_to_locale: 'klingon' }
|
22
|
+
expect(I18n.locale).to eq :en
|
23
|
+
expect(response).to redirect_to('/')
|
24
|
+
expect(flash[:error]).to eq(I18n.t("spree.locale_not_changed"))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'locale specified' do
|
30
|
+
context "available locale" do
|
31
|
+
it 'sets locale and redirects' do
|
32
|
+
get :set, params: { locale: 'fr' }
|
33
|
+
expect(I18n.locale).to eq :fr
|
34
|
+
expect(response).to redirect_to('/')
|
35
|
+
expect(flash[:notice]).to eq(I18n.t("spree.locale_changed"))
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context "unavailable locale" do
|
40
|
+
it 'does not change locale and redirects' do
|
41
|
+
get :set, params: { locale: 'klingon' }
|
42
|
+
expect(I18n.locale).to eq :en
|
43
|
+
expect(response).to redirect_to('/')
|
44
|
+
expect(flash[:error]).to eq(I18n.t("spree.locale_not_changed"))
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'both locale and switch_to_locale specified' do
|
50
|
+
it 'uses switch_to_locale value' do
|
51
|
+
get :set, params: { locale: 'en', switch_to_locale: 'fr' }
|
52
|
+
expect(I18n.locale).to eq :fr
|
53
|
+
expect(response).to redirect_to('/')
|
54
|
+
expect(flash[:notice]).to eq(I18n.t("spree.locale_changed"))
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'spec_helper'
|
3
4
|
|
4
5
|
# This spec is useful for when we just want to make sure a view is rendering correctly
|
@@ -22,7 +23,7 @@ describe Spree::CheckoutController, type: :controller do
|
|
22
23
|
before do
|
23
24
|
# Using a let block won't acknowledge the currency setting
|
24
25
|
# Therefore we just do it like this...
|
25
|
-
order = OrderWalkthrough.up_to(:address)
|
26
|
+
order = Spree::TestingSupport::OrderWalkthrough.up_to(:address)
|
26
27
|
allow(controller).to receive_messages current_order: order
|
27
28
|
end
|
28
29
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe 'products', type: :feature, caching: true do
|
@@ -10,9 +12,6 @@ describe 'products', type: :feature, caching: true do
|
|
10
12
|
product2.update_column(:updated_at, 1.day.ago)
|
11
13
|
# warm up the cache
|
12
14
|
visit spree.root_path
|
13
|
-
assert_written_to_cache("views/en/USD/spree/products/all--#{product.updated_at.utc.to_s(:number)}")
|
14
|
-
assert_written_to_cache("views/en/USD/spree/products/#{product.id}-#{product.updated_at.utc.to_s(:number)}")
|
15
|
-
assert_written_to_cache("views/en/spree/taxonomies/#{taxonomy.id}")
|
16
15
|
|
17
16
|
clear_cache_events
|
18
17
|
end
|
@@ -25,8 +24,6 @@ describe 'products', type: :feature, caching: true do
|
|
25
24
|
it "busts the cache when a product is updated" do
|
26
25
|
product.update_column(:updated_at, 1.day.from_now)
|
27
26
|
visit spree.root_path
|
28
|
-
assert_written_to_cache("views/en/USD/spree/products/all--#{product.updated_at.utc.to_s(:number)}")
|
29
|
-
assert_written_to_cache("views/en/USD/spree/products/#{product.id}-#{product.updated_at.utc.to_s(:number)}")
|
30
27
|
expect(cache_writes.count).to eq(2)
|
31
28
|
end
|
32
29
|
|
@@ -34,21 +31,18 @@ describe 'products', type: :feature, caching: true do
|
|
34
31
|
product.discard
|
35
32
|
product2.discard
|
36
33
|
visit spree.root_path
|
37
|
-
assert_written_to_cache("views/en/USD/spree/products/all--#{Date.today.to_s(:number)}-0")
|
38
34
|
expect(cache_writes.count).to eq(1)
|
39
35
|
end
|
40
36
|
|
41
37
|
it "busts the cache when the newest product is soft-deleted" do
|
42
38
|
product.discard
|
43
39
|
visit spree.root_path
|
44
|
-
assert_written_to_cache("views/en/USD/spree/products/all--#{product2.updated_at.utc.to_s(:number)}")
|
45
40
|
expect(cache_writes.count).to eq(1)
|
46
41
|
end
|
47
42
|
|
48
43
|
it "busts the cache when an older product is soft-deleted" do
|
49
44
|
product2.discard
|
50
45
|
visit spree.root_path
|
51
|
-
assert_written_to_cache("views/en/USD/spree/products/all--#{product.updated_at.utc.to_s(:number)}")
|
52
46
|
expect(cache_writes.count).to eq(1)
|
53
47
|
end
|
54
48
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe 'taxons', type: :feature, caching: true do
|
@@ -7,7 +9,6 @@ describe 'taxons', type: :feature, caching: true do
|
|
7
9
|
before do
|
8
10
|
# warm up the cache
|
9
11
|
visit spree.root_path
|
10
|
-
assert_written_to_cache("views/en/spree/taxonomies/#{taxonomy.id}")
|
11
12
|
|
12
13
|
clear_cache_events
|
13
14
|
end
|
@@ -15,7 +16,6 @@ describe 'taxons', type: :feature, caching: true do
|
|
15
16
|
it "busts the cache when max_level_in_taxons_menu conf changes" do
|
16
17
|
Spree::Config[:max_level_in_taxons_menu] = 5
|
17
18
|
visit spree.root_path
|
18
|
-
assert_written_to_cache("views/en/spree/taxonomies/#{taxonomy.id}")
|
19
19
|
expect(cache_writes.count).to eq(1)
|
20
20
|
end
|
21
21
|
end
|
data/spec/features/cart_spec.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe "Checkout", type: :feature, inaccessible: true do
|
@@ -213,7 +215,7 @@ describe "Checkout", type: :feature, inaccessible: true do
|
|
213
215
|
context "doesn't allow bad credit card numbers" do
|
214
216
|
let!(:payment_method) { create(:credit_card_payment_method) }
|
215
217
|
before(:each) do
|
216
|
-
order = OrderWalkthrough.up_to(:delivery)
|
218
|
+
order = Spree::TestingSupport::OrderWalkthrough.up_to(:delivery)
|
217
219
|
|
218
220
|
user = create(:user)
|
219
221
|
order.user = user
|
@@ -241,7 +243,7 @@ describe "Checkout", type: :feature, inaccessible: true do
|
|
241
243
|
let!(:user) { create(:user) }
|
242
244
|
|
243
245
|
let!(:order) do
|
244
|
-
order = OrderWalkthrough.up_to(:delivery)
|
246
|
+
order = Spree::TestingSupport::OrderWalkthrough.up_to(:delivery)
|
245
247
|
|
246
248
|
order.reload
|
247
249
|
order.user = user
|
@@ -289,7 +291,7 @@ describe "Checkout", type: :feature, inaccessible: true do
|
|
289
291
|
|
290
292
|
before do
|
291
293
|
Capybara.ignore_hidden_elements = false
|
292
|
-
order = OrderWalkthrough.up_to(:delivery)
|
294
|
+
order = Spree::TestingSupport::OrderWalkthrough.up_to(:delivery)
|
293
295
|
allow(order).to receive_messages(available_payment_methods: [check_payment, credit_cart_payment])
|
294
296
|
order.user = create(:user)
|
295
297
|
order.recalculate
|
@@ -324,7 +326,7 @@ describe "Checkout", type: :feature, inaccessible: true do
|
|
324
326
|
|
325
327
|
before do
|
326
328
|
user.wallet.add(credit_card)
|
327
|
-
order = OrderWalkthrough.up_to(:delivery)
|
329
|
+
order = Spree::TestingSupport::OrderWalkthrough.up_to(:delivery)
|
328
330
|
|
329
331
|
allow_any_instance_of(Spree::CheckoutController).to receive_messages(current_order: order)
|
330
332
|
allow_any_instance_of(Spree::CheckoutController).to receive_messages(try_spree_current_user: user)
|
@@ -566,7 +568,7 @@ describe "Checkout", type: :feature, inaccessible: true do
|
|
566
568
|
|
567
569
|
context "when order is completed" do
|
568
570
|
let!(:user) { create(:user) }
|
569
|
-
let!(:order) { OrderWalkthrough.up_to(:delivery) }
|
571
|
+
let!(:order) { Spree::TestingSupport::OrderWalkthrough.up_to(:delivery) }
|
570
572
|
|
571
573
|
before(:each) do
|
572
574
|
allow_any_instance_of(Spree::CheckoutController).to receive_messages(current_order: order)
|
@@ -1,8 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe "checkout with unshippable items", type: :feature, inaccessible: true do
|
4
6
|
let!(:stock_location) { create(:stock_location) }
|
5
|
-
let(:order) { OrderWalkthrough.up_to(:address) }
|
7
|
+
let(:order) { Spree::TestingSupport::OrderWalkthrough.up_to(:address) }
|
6
8
|
|
7
9
|
before do
|
8
10
|
create(:line_item, order: order)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe 'setting locale', type: :feature do
|
@@ -12,13 +14,7 @@ describe 'setting locale', type: :feature do
|
|
12
14
|
end
|
13
15
|
|
14
16
|
context 'shopping cart link and page' do
|
15
|
-
|
16
|
-
I18n.backend.store_translations(:fr,
|
17
|
-
spree: {
|
18
|
-
cart: 'Panier',
|
19
|
-
shopping_cart: 'Panier'
|
20
|
-
})
|
21
|
-
end
|
17
|
+
include_context "fr locale"
|
22
18
|
|
23
19
|
it 'should be in french' do
|
24
20
|
with_locale('fr') do
|
data/spec/features/order_spec.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe 'orders', type: :feature do
|
4
|
-
let(:order) { OrderWalkthrough.up_to(:complete) }
|
6
|
+
let(:order) { Spree::TestingSupport::OrderWalkthrough.up_to(:complete) }
|
5
7
|
let(:user) { create(:user) }
|
6
8
|
|
7
9
|
before do
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require 'spec_helper'
|
3
4
|
|
4
5
|
describe "Visiting Products", type: :feature, inaccessible: true do
|
@@ -153,7 +154,7 @@ describe "Visiting Products", type: :feature, inaccessible: true do
|
|
153
154
|
|
154
155
|
before do
|
155
156
|
# Need to have two images to trigger the error
|
156
|
-
image = File.open(File.expand_path('
|
157
|
+
image = File.open(File.expand_path('../fixtures/thinking-cat.jpg', __dir__))
|
157
158
|
product.images.create!(attachment: image)
|
158
159
|
product.images.create!(attachment: image)
|
159
160
|
|
@@ -183,7 +184,7 @@ describe "Visiting Products", type: :feature, inaccessible: true do
|
|
183
184
|
let(:product) { Spree::Product.find_by(name: "Ruby on Rails Baseball Jersey") }
|
184
185
|
|
185
186
|
before do
|
186
|
-
image = File.open(File.expand_path('
|
187
|
+
image = File.open(File.expand_path('../fixtures/thinking-cat.jpg', __dir__))
|
187
188
|
v1 = product.variants.create!(price: 9.99)
|
188
189
|
v2 = product.variants.create!(price: 10.99)
|
189
190
|
v1.images.create!(attachment: image)
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Spree::TaxonFiltersHelper, type: :helper do
|
6
|
+
let(:taxon) { nil }
|
7
|
+
subject { applicable_filters_for(taxon) }
|
8
|
+
|
9
|
+
it "returns the price/brand filters" do
|
10
|
+
expect(subject.map { |y| y[:name] }).to eq ['Brands', 'Price Range']
|
11
|
+
end
|
12
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
if ENV["COVERAGE"]
|
2
4
|
require 'simplecov'
|
3
5
|
SimpleCov.start('rails')
|
@@ -10,7 +12,7 @@ ENV["RAILS_ENV"] ||= 'test'
|
|
10
12
|
require 'solidus_frontend'
|
11
13
|
require 'spree/testing_support/dummy_app'
|
12
14
|
DummyApp.setup(
|
13
|
-
gem_root: File.expand_path('
|
15
|
+
gem_root: File.expand_path('..', __dir__),
|
14
16
|
lib_name: 'solidus_frontend'
|
15
17
|
)
|
16
18
|
|
@@ -53,7 +55,7 @@ RSpec.configure do |config|
|
|
53
55
|
c.syntax = :expect
|
54
56
|
end
|
55
57
|
|
56
|
-
config.fixture_path = File.join(
|
58
|
+
config.fixture_path = File.join(__dir__, "fixtures")
|
57
59
|
|
58
60
|
# If you're not using ActiveRecord, or you'd prefer not to run each of your
|
59
61
|
# examples within a transaction, comment the following line or assign false
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
shared_context 'fr locale' do
|
4
|
+
before do
|
5
|
+
I18n.backend.store_translations(:fr, spree: {
|
6
|
+
i18n: { this_file_language: "Français" },
|
7
|
+
cart: 'Panier',
|
8
|
+
shopping_cart: 'Panier'
|
9
|
+
})
|
10
|
+
end
|
11
|
+
|
12
|
+
after do
|
13
|
+
I18n.locale = :en # reset locale after each spec.
|
14
|
+
I18n.reload!
|
15
|
+
end
|
16
|
+
end
|