From 7b151b49f199553f3387de10eac0ecfffbdcfdab Mon Sep 17 00:00:00 2001 From: Mayur Shah Date: Wed, 9 Apr 2025 13:53:59 +0530 Subject: [PATCH 1/5] Add User Group model and associations to core Added associations in Spree::User model for user groups to support grouping users for targeted pricing and management. Created Spree::UserGroup model with associations to users and stores to enable flexible user group management. Updated locale files to include translations for user groups. Added migrations to create spree_user_groups table and add user group references to users and stores. --- .../app/models/concerns/spree/user_methods.rb | 2 + core/app/models/spree/store.rb | 2 + core/app/models/spree/user_group.rb | 10 +++ core/config/locales/en.yml | 7 ++ .../20250409082118_create_user_groups.rb | 9 +++ ...250409082222_add_user_group_id_to_users.rb | 7 ++ ...082257_add_default_user_group_to_stores.rb | 8 +++ .../factories/user_group_factory.rb | 7 ++ core/spec/models/spree/store_spec.rb | 21 ++++++ core/spec/models/spree/user_group_spec.rb | 68 +++++++++++++++++++ core/spec/models/spree/user_spec.rb | 21 ++++++ 11 files changed, 162 insertions(+) create mode 100644 core/app/models/spree/user_group.rb create mode 100644 core/db/migrate/20250409082118_create_user_groups.rb create mode 100644 core/db/migrate/20250409082222_add_user_group_id_to_users.rb create mode 100644 core/db/migrate/20250409082257_add_default_user_group_to_stores.rb create mode 100644 core/lib/spree/testing_support/factories/user_group_factory.rb create mode 100644 core/spec/models/spree/user_group_spec.rb diff --git a/core/app/models/concerns/spree/user_methods.rb b/core/app/models/concerns/spree/user_methods.rb index 9218e26cd7a..950cc3a35c6 100644 --- a/core/app/models/concerns/spree/user_methods.rb +++ b/core/app/models/concerns/spree/user_methods.rb @@ -26,6 +26,8 @@ module UserMethods has_many :credit_cards, class_name: "Spree::CreditCard", foreign_key: :user_id has_many :wallet_payment_sources, foreign_key: 'user_id', class_name: 'Spree::WalletPaymentSource', inverse_of: :user + belongs_to :user_group, class_name: 'Spree::UserGroup', optional: true + after_create :auto_generate_spree_api_key before_destroy :check_for_deletion diff --git a/core/app/models/spree/store.rb b/core/app/models/spree/store.rb index fd5aef8289c..b0917bcbe0b 100644 --- a/core/app/models/spree/store.rb +++ b/core/app/models/spree/store.rb @@ -17,6 +17,8 @@ class Store < Spree::Base has_many :orders, class_name: "Spree::Order" + belongs_to :default_cart_user_group, class_name: 'Spree::UserGroup', optional: true + validates :code, presence: true, uniqueness: { allow_blank: true, case_sensitive: true } validates :name, presence: true validates :url, presence: true diff --git a/core/app/models/spree/user_group.rb b/core/app/models/spree/user_group.rb new file mode 100644 index 00000000000..89e69250cb2 --- /dev/null +++ b/core/app/models/spree/user_group.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +module Spree + class UserGroup < Spree::Base + has_many :users, class_name: Spree::UserClassHandle.new + has_one :store, class_name: 'Spree::Store', foreign_key: 'default_cart_user_group_id' + + validates :group_name, presence: true + end +end diff --git a/core/config/locales/en.yml b/core/config/locales/en.yml index 138ee452c9c..4629c67e7b4 100644 --- a/core/config/locales/en.yml +++ b/core/config/locales/en.yml @@ -359,6 +359,7 @@ en: cart_tax_country_iso: Tax Country for Empty Carts code: Slug default: Default + default_cart_user_group_id: Default User Group default_currency: Default Currency mail_from_address: Mail From Address meta_description: Meta Description @@ -757,6 +758,9 @@ en: spree/user: one: User other: Users + spree/user_group: + one: User Group + other: User Groups spree/variant: one: Variant other: Variants @@ -959,6 +963,7 @@ en: taxes: Taxes taxonomies: Taxonomies taxons: Taxons + user_groups: User Groups users: Users zones: Zones taxons: @@ -972,6 +977,7 @@ en: order_num: 'Order #' orders: Orders store_credit: Store Credit + user_group: User Group user_information: User Information users: edit: @@ -1808,6 +1814,7 @@ en: new_taxonomy: New Taxonomy new_tracker: New Analytics Tracker new_user: New User + new_user_group: New User Group new_variant: New Variant new_zone: New Zone next: Next diff --git a/core/db/migrate/20250409082118_create_user_groups.rb b/core/db/migrate/20250409082118_create_user_groups.rb new file mode 100644 index 00000000000..ba9b069a6a1 --- /dev/null +++ b/core/db/migrate/20250409082118_create_user_groups.rb @@ -0,0 +1,9 @@ +class CreateUserGroups < ActiveRecord::Migration[7.0] + def change + create_table :spree_user_groups do |t| + t.string :group_name + + t.timestamps + end + end +end diff --git a/core/db/migrate/20250409082222_add_user_group_id_to_users.rb b/core/db/migrate/20250409082222_add_user_group_id_to_users.rb new file mode 100644 index 00000000000..4ee363e3aa6 --- /dev/null +++ b/core/db/migrate/20250409082222_add_user_group_id_to_users.rb @@ -0,0 +1,7 @@ +class AddUserGroupIdToUsers < ActiveRecord::Migration[7.0] + def change + change_table Spree.user_class.table_name do |t| + t.references :user_group, type: :integer, foreign_key: { to_table: :spree_user_groups } + end + end +end diff --git a/core/db/migrate/20250409082257_add_default_user_group_to_stores.rb b/core/db/migrate/20250409082257_add_default_user_group_to_stores.rb new file mode 100644 index 00000000000..90a1ceaafd7 --- /dev/null +++ b/core/db/migrate/20250409082257_add_default_user_group_to_stores.rb @@ -0,0 +1,8 @@ +class AddDefaultUserGroupToStores < ActiveRecord::Migration[7.0] + def change + change_table :spree_stores do |t| + t.references :default_cart_user_group, type: :integer, foreign_key: { to_table: :spree_user_groups } + t.boolean :enforce_group_upon_signup, default: false + end + end +end diff --git a/core/lib/spree/testing_support/factories/user_group_factory.rb b/core/lib/spree/testing_support/factories/user_group_factory.rb new file mode 100644 index 00000000000..224f841c407 --- /dev/null +++ b/core/lib/spree/testing_support/factories/user_group_factory.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +FactoryBot.define do + factory :user_group, class: 'Spree::UserGroup' do + group_name { "Default User Group" } + end +end diff --git a/core/spec/models/spree/store_spec.rb b/core/spec/models/spree/store_spec.rb index 9bf552581d6..786e1f80f7e 100644 --- a/core/spec/models/spree/store_spec.rb +++ b/core/spec/models/spree/store_spec.rb @@ -50,6 +50,27 @@ end end + describe '#default_cart_user_group' do + subject { described_class.new(default_cart_user_group_id:) } + + context "when there is no default_cart_user_group set" do + let(:default_cart_user_group_id) { nil } + + it "responds with an empty default_cart_user_group" do + expect(subject.default_cart_user_group).to be_nil + end + end + + context "when there is a default_cart_user_group set" do + let(:user_group) { create(:user_group) } + let(:default_cart_user_group_id) { user_group.id } + + it "responds with a default_cart_user_group with that user group" do + expect(subject.default_cart_user_group).to eq(user_group) + end + end + end + describe '#available_locales' do let(:store) { described_class.new(available_locales: locales) } subject { store.available_locales } diff --git a/core/spec/models/spree/user_group_spec.rb b/core/spec/models/spree/user_group_spec.rb new file mode 100644 index 00000000000..63029c7c34c --- /dev/null +++ b/core/spec/models/spree/user_group_spec.rb @@ -0,0 +1,68 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Spree::UserGroup, type: :model do + describe 'associations' do + it 'has many users' do + association = described_class.reflect_on_association(:users) + + expect(association.macro).to eq :has_many + expect(association.class_name).to eq Spree::UserClassHandle.new.to_s + end + + it 'has one store' do + association = described_class.reflect_on_association(:store) + + expect(association.macro).to eq :has_one + expect(association.class_name).to eq 'Spree::Store' + expect(association.options[:foreign_key]).to eq 'default_cart_user_group_id' + end + end + + describe 'validations' do + context 'when validating presence' do + it 'validates presence of group_name' do + user_group = Spree::UserGroup.new + user_group.valid? + + expect(user_group.errors[:group_name]).to include("can't be blank") + end + end + + context 'when creating a valid user group' do + it 'is valid with a group_name' do + user_group = Spree::UserGroup.new(group_name: 'Test Group') + + expect(user_group).to be_valid + end + end + end + + describe 'user group relations' do + let(:user_group) { create(:user_group) } + + context '#users' do + let(:user) { create(:user) } + + before do + user_group.users << user + end + + it 'returns the associated users' do + expect(user_group.users).to include(user) + end + end + + context '#store' do + let(:store) { create(:store, default_cart_user_group: user_group) } + + it 'returns the associated store' do + store.reload + user_group.reload + + expect(user_group.store).to eq(store) + end + end + end +end diff --git a/core/spec/models/spree/user_spec.rb b/core/spec/models/spree/user_spec.rb index 3b8b7dc6496..5365497dc8c 100644 --- a/core/spec/models/spree/user_spec.rb +++ b/core/spec/models/spree/user_spec.rb @@ -157,5 +157,26 @@ def load_orders expect(subject.display_average_order_value).to eq Spree::Money.new(value) end end + + describe "user_group" do + subject { described_class.new(user_group_id:) } + + context "when there is no user_group set" do + let(:user_group_id) { nil } + + it "responds with an empty user_group" do + expect(subject.user_group).to be_nil + end + end + + context "when there is a user_group set" do + let(:user_group) { create(:user_group) } + let(:user_group_id) { user_group.id } + + it "responds with a default_cart_user_group with that user group" do + expect(subject.user_group).to eq(user_group) + end + end + end end end From e40ec8de860b788bdf96db97f56a1a5f3a850ac3 Mon Sep 17 00:00:00 2001 From: Mayur Shah Date: Wed, 9 Apr 2025 14:06:21 +0530 Subject: [PATCH 2/5] Implement User Groups Management in Spree Admin - Added UserGroupsController to manage user groups. - Created views for user group management, including: - New user group form (`new.html.erb`) - User group edit form (`edit.html.erb`) - User group index view (`index.html.erb`) - Partial view for user group form fields. - Enhanced user management by allowing assignment of user groups to users in the user form. - Updated store form to include a selection for the default cart user group. - Added breadcrumb navigation for improved user experience in the admin panel. This feature allows administrators to create, edit, and manage user groups, facilitating better organization and access control for users within the Spree application. --- .../spree/admin/user_groups_controller.rb | 8 ++ .../spree/admin/users_controller.rb | 4 + .../views/spree/admin/stores/_form.html.erb | 7 + .../spree/admin/user_groups/_form.html.erb | 9 ++ .../spree/admin/user_groups/edit.html.erb | 24 ++++ .../spree/admin/user_groups/index.html.erb | 47 +++++++ .../spree/admin/user_groups/new.html.erb | 24 ++++ .../views/spree/admin/users/_form.html.erb | 13 ++ .../admin/user_groups_controller_spec.rb | 131 ++++++++++++++++++ backend/spec/features/admin/stores_spec.rb | 27 +++- .../spec/features/admin/user_group_spec.rb | 48 +++++++ 11 files changed, 341 insertions(+), 1 deletion(-) create mode 100644 backend/app/controllers/spree/admin/user_groups_controller.rb create mode 100644 backend/app/views/spree/admin/user_groups/_form.html.erb create mode 100644 backend/app/views/spree/admin/user_groups/edit.html.erb create mode 100644 backend/app/views/spree/admin/user_groups/index.html.erb create mode 100644 backend/app/views/spree/admin/user_groups/new.html.erb create mode 100644 backend/spec/controllers/spree/admin/user_groups_controller_spec.rb create mode 100644 backend/spec/features/admin/user_group_spec.rb diff --git a/backend/app/controllers/spree/admin/user_groups_controller.rb b/backend/app/controllers/spree/admin/user_groups_controller.rb new file mode 100644 index 00000000000..81cf1828579 --- /dev/null +++ b/backend/app/controllers/spree/admin/user_groups_controller.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +module Spree + module Admin + class UserGroupsController < ResourceController + end + end +end diff --git a/backend/app/controllers/spree/admin/users_controller.rb b/backend/app/controllers/spree/admin/users_controller.rb index 177827780af..6ed1e335576 100644 --- a/backend/app/controllers/spree/admin/users_controller.rb +++ b/backend/app/controllers/spree/admin/users_controller.rb @@ -111,6 +111,10 @@ def user_params attributes -= [:password, :password_confirmation] end + if can? :manage, Spree::UserGroup + attributes += [:user_group_id] + end + params.require(:user).permit(attributes) end diff --git a/backend/app/views/spree/admin/stores/_form.html.erb b/backend/app/views/spree/admin/stores/_form.html.erb index 52cdaf346e8..1804c1812dd 100644 --- a/backend/app/views/spree/admin/stores/_form.html.erb +++ b/backend/app/views/spree/admin/stores/_form.html.erb @@ -41,6 +41,13 @@ <%= f.error_message_on :reverse_charge_status %> <% end %> <% end %> + + <%= f.field_container :default_cart_user_group_id do %> + <%= f.label :default_cart_user_group_id %> + <%= f.collection_select :default_cart_user_group_id, Spree::UserGroup.all, :id, :group_name, { include_blank: true }, { class: 'custom-select' } %> + <%= f.error_message_on :default_cart_user_group_id %> + <% end %> +
<%= f.field_container :url do %> diff --git a/backend/app/views/spree/admin/user_groups/_form.html.erb b/backend/app/views/spree/admin/user_groups/_form.html.erb new file mode 100644 index 00000000000..2ee861195bc --- /dev/null +++ b/backend/app/views/spree/admin/user_groups/_form.html.erb @@ -0,0 +1,9 @@ +
+
+ <%= f.field_container :group_name do %> + <%= f.label :group_name, class: 'required' %> + <%= f.text_field :group_name, class: 'fullwidth' %> + <%= error_message_on :user_group, :group_name %> + <% end %> +
+
diff --git a/backend/app/views/spree/admin/user_groups/edit.html.erb b/backend/app/views/spree/admin/user_groups/edit.html.erb new file mode 100644 index 00000000000..9f1795fdc94 --- /dev/null +++ b/backend/app/views/spree/admin/user_groups/edit.html.erb @@ -0,0 +1,24 @@ +<% admin_breadcrumb(link_to plural_resource_name(Spree::LegacyUser), spree.admin_users_path) %> +<% admin_breadcrumb(link_to plural_resource_name(Spree::UserGroup), spree.admin_user_groups_path) %> +<% admin_breadcrumb(@user_group.group_name) %> + +<% content_for :page_actions do %> +<% end %> + +
+ <%= render partial: 'spree/shared/error_messages', locals: { target: @user_group } %> +
+ +
+ <%= form_for [:admin, @user_group] do |f| %> +
+ <%= render partial: 'form', locals: { f: f } %> + +
+ +
+ <%= render partial: 'spree/admin/shared/edit_resource_links' %> +
+
+ <% end %> +
diff --git a/backend/app/views/spree/admin/user_groups/index.html.erb b/backend/app/views/spree/admin/user_groups/index.html.erb new file mode 100644 index 00000000000..717ac92c5cc --- /dev/null +++ b/backend/app/views/spree/admin/user_groups/index.html.erb @@ -0,0 +1,47 @@ +<% admin_breadcrumb(link_to plural_resource_name(Spree::LegacyUser), spree.admin_users_path) %> +<% admin_breadcrumb(plural_resource_name(Spree::UserGroup)) %> + +<% content_for :page_actions do %> + <% if can?(:create, Spree::UserGroup) %> +
  • + <%= link_to t('spree.new_user_group'), new_object_url, id: 'admin_new_user_group_link', class: 'btn btn-primary' %> +
  • + <% end %> +<% end %> + +<% if @user_groups.any? %> + + + + + + + + + + + + + <% @user_groups.each do |user_group| %> + + + + + <% end %> + +
    <%= Spree::UserGroup.human_attribute_name(:group_name) %>
    <%= link_to user_group.try(:group_name), edit_admin_user_group_path(user_group) %> + <% if can?(:update, user_group) %> + <%= link_to_edit user_group, no_text: true %> + <% end %> + + <% if can?(:destroy, user_group) %> + <%= link_to_delete user_group, no_text: true %> + <% end %> +
    +<% else %> +
    + <%= render 'spree/admin/shared/no_objects_found', + resource: Spree::UserGroup, + new_resource_url: new_object_url %> +
    +<% end %> diff --git a/backend/app/views/spree/admin/user_groups/new.html.erb b/backend/app/views/spree/admin/user_groups/new.html.erb new file mode 100644 index 00000000000..804aae7503b --- /dev/null +++ b/backend/app/views/spree/admin/user_groups/new.html.erb @@ -0,0 +1,24 @@ +<% admin_breadcrumb(link_to plural_resource_name(Spree::LegacyUser), spree.admin_users_path) %> +<% admin_breadcrumb(link_to plural_resource_name(Spree::UserGroup), spree.admin_user_groups_path) %> +<% admin_breadcrumb(t('spree.new_user_group')) %> + +<% content_for :page_actions do %> +<% end %> + +
    + <%= render partial: 'spree/shared/error_messages', locals: { target: @user_group } %> +
    + +
    + <%= form_for [:admin, @user_group] do |f| %> +
    + <%= render partial: 'form', locals: { f: f } %> + +
    + +
    + <%= render partial: 'spree/admin/shared/new_resource_links' %> +
    +
    + <% end %> +
    diff --git a/backend/app/views/spree/admin/users/_form.html.erb b/backend/app/views/spree/admin/users/_form.html.erb index 760d62a516c..9e29570363d 100644 --- a/backend/app/views/spree/admin/users/_form.html.erb +++ b/backend/app/views/spree/admin/users/_form.html.erb @@ -78,3 +78,16 @@ <% end %>
    + +<% if can?(:update, @user) && can?(:manage, :user_group) %> +
    + <%= t('spree.admin.user.user_group') %> +
    + <%= f.field_container :user_group_id do %> + <%= f.label :user_group_id, t('spree.admin.user.user_group') %> + <%= f.collection_select :user_group_id, Spree::UserGroup.all, :id, :group_name, { include_blank: true }, { class: 'custom-select' } %> + <%= f.error_message_on :user_group_id %> + <% end %> +
    +
    +<% end %> diff --git a/backend/spec/controllers/spree/admin/user_groups_controller_spec.rb b/backend/spec/controllers/spree/admin/user_groups_controller_spec.rb new file mode 100644 index 00000000000..43eba84391c --- /dev/null +++ b/backend/spec/controllers/spree/admin/user_groups_controller_spec.rb @@ -0,0 +1,131 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Spree::Admin::UserGroupsController, type: :controller do + stub_authorization! + + let(:user_group) { create(:user_group) } + + describe '#index' do + it 'retrieves all user groups and assigns them to the view' do + get :index + + expect(assigns(:user_groups)).to eq([user_group]) + end + end + + describe '#new' do + it 'prepares a new user group for the form' do + get :new + + expect(assigns(:user_group)).to be_a_new(Spree::UserGroup) + end + end + + describe '#edit' do + it 'loads the specified user group for editing' do + get :edit, params: { id: user_group.id } + + expect(assigns(:user_group)).to eq(user_group) + end + end + + describe '#create' do + context 'with valid params' do + let(:valid_attributes) { { group_name: 'New User Group' } } + + it 'saves a new user group to the database' do + expect { + post :create, params: { user_group: valid_attributes } + }.to change(Spree::UserGroup, :count).by(1) + end + + it 'makes the newly created user group available to the view' do + post :create, params: { user_group: valid_attributes } + + expect(assigns(:user_group)).to be_a(Spree::UserGroup) + expect(assigns(:user_group)).to be_persisted + end + + it 'redirects to the user groups list page' do + post :create, params: { user_group: valid_attributes } + + expect(response).to redirect_to(spree.admin_user_groups_path) + end + end + + context 'with invalid params' do + let(:invalid_attributes) { { group_name: nil } } + + it 'does not save the user group and prepares a new instance for the form' do + post :create, params: { user_group: invalid_attributes } + + expect(assigns(:user_group)).to be_a_new(Spree::UserGroup) + end + + it 'renders the "new" form again' do + post :create, params: { user_group: invalid_attributes } + + expect(response).to render_template('new') + end + end + end + + describe '#update' do + context 'with valid params' do + let(:new_attributes) { { group_name: 'Updated Group Name' } } + + it 'updates the user group with the provided attributes' do + put :update, params: { id: user_group.id, user_group: new_attributes } + + user_group.reload + + expect(user_group.group_name).to eq('Updated Group Name') + end + + it 'makes the updated user group available to the view' do + put :update, params: { id: user_group.id, user_group: new_attributes } + + expect(assigns(:user_group)).to eq(user_group) + end + + it 'redirects to the user groups list page' do + put :update, params: { id: user_group.id, user_group: new_attributes } + + expect(response).to redirect_to(spree.admin_user_groups_path) + end + end + + context 'with invalid params' do + let(:invalid_attributes) { { group_name: nil } } + + it 'does not update the user group and keeps the original instance' do + put :update, params: { id: user_group.id, user_group: invalid_attributes } + + expect(assigns(:user_group)).to eq(user_group) + end + + it 'renders the "edit" form again' do + put :update, params: { id: user_group.id, user_group: invalid_attributes } + + expect(response).to render_template('edit') + end + end + end + + describe '#destroy' do + it 'removes the user group from the database' do + user_group = create(:user_group) + expect { + delete :destroy, params: { id: user_group.id } + }.to change(Spree::UserGroup, :count).by(-1) + end + + it 'redirects to the user groups list page' do + delete :destroy, params: { id: user_group.id } + + expect(response).to redirect_to(spree.admin_user_groups_path) + end + end +end diff --git a/backend/spec/features/admin/stores_spec.rb b/backend/spec/features/admin/stores_spec.rb index 1ae571671b4..bdc8875d3af 100644 --- a/backend/spec/features/admin/stores_spec.rb +++ b/backend/spec/features/admin/stores_spec.rb @@ -5,6 +5,9 @@ describe 'Stores', type: :feature do stub_authorization! + let!(:user_group) { create :user_group, group_name: 'Default Group' } + let!(:new_user_group) { create :user_group, group_name: 'New Group' } + context 'when adding a store' do before { visit spree.new_admin_store_path } @@ -22,10 +25,25 @@ expect(@store.default_currency).to eq 'EUR' end + + it 'admin should be able to set the default_cart_user_group' do + expect(find('#store_default_cart_user_group_id').value).to eq '' + + fill_in 'store_name', with: 'Solidus Store' + fill_in 'store_code', with: 'solidus' + fill_in 'store_url', with: 'example.solidus.io' + fill_in 'store_mail_from_address', with: 'from@solidus.io' + select 'Default Group', from: 'store_default_cart_user_group_id' + click_button 'Create' + + @store = Spree::Store.last + + expect(@store.default_cart_user_group).to eq user_group + end end context 'when editing a store' do - let(:store) { create :store, default_currency: 'AUD' } + let(:store) { create :store, default_currency: 'AUD', default_cart_user_group: user_group } before { visit spree.edit_admin_store_path(store) } it 'admin should be able to change the default_currency' do @@ -33,5 +51,12 @@ click_button 'Update' expect(store.reload.default_currency).to eq 'EUR' end + + it 'admin should be able to change the default_cart_user_group' do + select 'New Group', from: 'store_default_cart_user_group_id' + click_button 'Update' + + expect(store.reload.default_cart_user_group).to eq new_user_group + end end end diff --git a/backend/spec/features/admin/user_group_spec.rb b/backend/spec/features/admin/user_group_spec.rb new file mode 100644 index 00000000000..962e2a490ce --- /dev/null +++ b/backend/spec/features/admin/user_group_spec.rb @@ -0,0 +1,48 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe 'User Groups', type: :feature do + stub_authorization! + + let!(:user_group) { create :user_group, group_name: 'Default Group' } + + context 'when adding a user group' do + before { visit spree.new_admin_user_group_path } + + it 'admin should be able to create a user group' do + fill_in 'user_group_group_name', with: 'VIP Group' + click_button 'Create' + + @user_group = Spree::UserGroup.last + + expect(@user_group.group_name).to eq 'VIP Group' + end + end + + context 'when editing a user group' do + before { visit spree.edit_admin_user_group_path(user_group) } + + it 'admin should be able to change the group name' do + fill_in 'user_group_group_name', with: 'Updated Group' + click_button 'Update' + + expect(user_group.reload.group_name).to eq 'Updated Group' + end + end + + context 'when deleting a user group' do + before { visit spree.admin_user_groups_path } + + it 'admin should be able to delete a user group', js: true do + within("#spree_user_group_#{user_group.id}") do + accept_alert do + click_icon :trash + end + end + + expect(page).not_to have_content(user_group.group_name) + expect(Spree::UserGroup.exists?(user_group.id)).to be_falsey + end + end +end From 123adcc3fbd269a6e41263a8e7c0fec05dd264eb Mon Sep 17 00:00:00 2001 From: Mayur Shah Date: Wed, 9 Apr 2025 14:13:39 +0530 Subject: [PATCH 3/5] Add User Group routes and menu item - Created a new users sub-menu partial to manage user-related navigation, including links to users and user groups. These enhancements improve the organization of the admin interface, making it easier for administrators to manage user groups effectively. --- .../admin/shared/users_sub_menu.html.erb | 11 +++++++ backend/config/routes.rb | 1 + backend/lib/spree/backend_configuration.rb | 16 ++++++++++ .../spree/admin/users_controller_spec.rb | 30 +++++++++++++++++++ .../spec/features/admin/store_credits_spec.rb | 8 ++--- backend/spec/features/admin/users_spec.rb | 4 +-- 6 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 backend/app/views/spree/admin/shared/users_sub_menu.html.erb diff --git a/backend/app/views/spree/admin/shared/users_sub_menu.html.erb b/backend/app/views/spree/admin/shared/users_sub_menu.html.erb new file mode 100644 index 00000000000..5121327cb3b --- /dev/null +++ b/backend/app/views/spree/admin/shared/users_sub_menu.html.erb @@ -0,0 +1,11 @@ +<% Spree.deprecator.warn "Using the #{@virtual_path.inspect} partial is deprecated, please use MenuItem#children instead." %> + +
      + <% if can?(:admin, Spree.user_class) %> + <%= tab label: :users, url: spree.admin_users_path %> + <% end %> + + <% if can?(:admin, Spree::UserGroup) %> + <%= tab label: :user_groups, url: spree.admin_user_groups_path %> + <% end %> +
    diff --git a/backend/config/routes.rb b/backend/config/routes.rb index a0fc0fad00e..656d822c730 100644 --- a/backend/config/routes.rb +++ b/backend/config/routes.rb @@ -16,6 +16,7 @@ resources :zones + resources :user_groups resources :tax_categories resources :products do diff --git a/backend/lib/spree/backend_configuration.rb b/backend/lib/spree/backend_configuration.rb index 5621fb4641a..690baa26838 100644 --- a/backend/lib/spree/backend_configuration.rb +++ b/backend/lib/spree/backend_configuration.rb @@ -234,8 +234,24 @@ def menu_items label: :users, icon: admin_updated_navbar ? 'ri-user-line' : 'user', match_path: %r{/(users|store_credits)}, + data_hook: :admin_users_sub_tabs, + partial: 'spree/admin/shared/users_sub_menu', condition: -> { Spree.user_class && can?(:admin, Spree.user_class) }, url: :admin_users_path, + children: [ + MenuItem.new( + label: :users, + condition: -> { Spree.user_class && can?(:admin, Spree.user_class) }, + url: :admin_users_path + ), + MenuItem.new( + label: :user_groups, + condition: -> { + can?(:admin, Spree::UserGroup) + }, + url: :admin_user_groups_path + ), + ] ), MenuItem.new( label: :settings, diff --git a/backend/spec/controllers/spree/admin/users_controller_spec.rb b/backend/spec/controllers/spree/admin/users_controller_spec.rb index c8ad0d41f61..403aab5ae41 100644 --- a/backend/spec/controllers/spree/admin/users_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/users_controller_spec.rb @@ -295,6 +295,21 @@ def user expect(user.stock_locations).to eq([location1]) end end + + context "When the user can manage user group" do + stub_authorization! do |_user| + can :manage, Spree.user_class + can :manage, Spree::UserGroup + end + + it "can create user with user group" do + user_group = Spree::UserGroup.create(group_name: "my_user_group") + + post :create, params: { user: { user_group_id: user_group } } + + expect(user.user_group).to eq(user_group) + end + end end describe "#update" do @@ -479,6 +494,21 @@ def user expect(user.reload.stock_locations).to eq([location1]) end end + + context "When the user can manage user group" do + stub_authorization! do |_user| + can :manage, Spree.user_class + can :manage, Spree::UserGroup + end + + it "can update user with user group" do + user_group = Spree::UserGroup.create(group_name: "my_user_group") + + post :update, params: { id: user.id, user: { user_group_id: user_group } } + + expect(user.reload.user_group).to eq(user_group) + end + end end describe "#destroy" do diff --git a/backend/spec/features/admin/store_credits_spec.rb b/backend/spec/features/admin/store_credits_spec.rb index aa05612a028..afdf85184d0 100644 --- a/backend/spec/features/admin/store_credits_spec.rb +++ b/backend/spec/features/admin/store_credits_spec.rb @@ -17,7 +17,7 @@ describe "visiting the store credits page" do before do visit spree.admin_path - click_link "Users" + click_nav "Users" end it "should be on the store credits page" do @@ -37,7 +37,7 @@ describe "creating store credit" do before do visit spree.admin_path - click_link "Users" + click_nav "Users" click_link store_credit.user.email click_link "Store Credit" allow_any_instance_of(Spree::Admin::StoreCreditsController).to receive_messages(spree_current_user: admin_user) @@ -59,7 +59,7 @@ describe "displaying a store credit details page" do before do visit spree.admin_path - click_link "Users" + click_nav "Users" click_link store_credit.user.email click_link "Store Credit" page.find(".sc-table td.actions a.fa-edit").click @@ -111,7 +111,7 @@ before do visit spree.admin_path - click_link "Users" + click_nav "Users" click_link store_credit.user.email click_link "Store Credit" allow_any_instance_of(Spree::Admin::StoreCreditsController).to receive_messages(spree_current_user: admin_user) diff --git a/backend/spec/features/admin/users_spec.rb b/backend/spec/features/admin/users_spec.rb index 5fdcdbb568d..2e1ffd8ca0d 100644 --- a/backend/spec/features/admin/users_spec.rb +++ b/backend/spec/features/admin/users_spec.rb @@ -99,7 +99,7 @@ before do visit spree.admin_path - click_link 'Users' + click_nav 'Users' end context 'users index' do @@ -357,7 +357,7 @@ def always_invalid_email context 'if an user has placed orders' do before do visit spree.admin_path - click_link 'Users' + click_nav 'Users' end it "can't be deleted" do From fb116e265b30ae5eaaeb7049bc3739ab245783f3 Mon Sep 17 00:00:00 2001 From: Mayur Shah Date: Wed, 9 Apr 2025 14:18:29 +0530 Subject: [PATCH 4/5] Enforce User Group Assignment Upon Signup - Updated UsersController to assign the default user group to new users if the current store has the `enforce_group_upon_signup` setting enabled. - Added a checkbox in the store settings form to allow administrators to enable or disable the `enforce_group_upon_signup` feature. - Included a new translation key for the `enforce_group_upon_signup` label in the English locale file. This feature ensures that all new users are automatically added to a specified user group, improving user management and organization within the Spree application. --- .../controllers/spree/admin/users_controller.rb | 13 +++++++++++++ .../app/views/spree/admin/stores/_form.html.erb | 7 +++++++ .../spree/admin/users_controller_spec.rb | 16 ++++++++++++++++ core/config/locales/en.yml | 1 + 4 files changed, 37 insertions(+) diff --git a/backend/app/controllers/spree/admin/users_controller.rb b/backend/app/controllers/spree/admin/users_controller.rb index 6ed1e335576..a4acbb0dc9c 100644 --- a/backend/app/controllers/spree/admin/users_controller.rb +++ b/backend/app/controllers/spree/admin/users_controller.rb @@ -25,6 +25,7 @@ def create if @user.save set_roles set_stock_locations + set_user_group if current_store&.enforce_group_upon_signup flash[:success] = t('spree.created_successfully') redirect_to edit_admin_user_url(@user) @@ -157,6 +158,18 @@ def set_stock_locations Spree::StockLocation.accessible_by(current_ability).where(id: user_params[:stock_location_ids]) end end + + # Sets the user group for a user if they don't have one assigned + # This method checks if there's a user (@user) and if they don't have a user group on sign up + # If these conditions are met, it assigns the default cart user group from the current store + # If enforce_group_upon_signup is enabled on the store settings + # @return [void] + def set_user_group + if @user && @user.user_group.nil? + user_group = current_store.default_cart_user_group + @user.update(user_group: user_group) if user_group + end + end end end end diff --git a/backend/app/views/spree/admin/stores/_form.html.erb b/backend/app/views/spree/admin/stores/_form.html.erb index 1804c1812dd..26fce11f6ce 100644 --- a/backend/app/views/spree/admin/stores/_form.html.erb +++ b/backend/app/views/spree/admin/stores/_form.html.erb @@ -48,6 +48,13 @@ <%= f.error_message_on :default_cart_user_group_id %> <% end %> + <%= f.field_container :enforce_group_upon_signup, class: %w(checkbox) do %> + + <%= f.error_message_on :enforce_group_upon_signup %> + <% end %>
    <%= f.field_container :url do %> diff --git a/backend/spec/controllers/spree/admin/users_controller_spec.rb b/backend/spec/controllers/spree/admin/users_controller_spec.rb index 403aab5ae41..9bb1d8b3eda 100644 --- a/backend/spec/controllers/spree/admin/users_controller_spec.rb +++ b/backend/spec/controllers/spree/admin/users_controller_spec.rb @@ -310,6 +310,22 @@ def user expect(user.user_group).to eq(user_group) end end + + context "when the user is created and store enforce user group on sign up" do + stub_authorization! do |_user| + can :manage, Spree.user_class + can :manage, Spree::UserGroup + end + + it "can create user with user group" do + user_group = Spree::UserGroup.create(group_name: "my_user_group") + store = create(:store, default_cart_user_group: user_group, enforce_group_upon_signup: true) + + post :create, params: { user: { email: 'new_user@exapmle.com' } } + + expect(user.user_group).to eq(store.default_cart_user_group) + end + end end describe "#update" do diff --git a/core/config/locales/en.yml b/core/config/locales/en.yml index 4629c67e7b4..1864ac24615 100644 --- a/core/config/locales/en.yml +++ b/core/config/locales/en.yml @@ -1534,6 +1534,7 @@ en: enable_mail_delivery: Enable Mail Delivery end: End ending_in: Ending in + enforce_group_upon_signup: Add all new users to Group error: error error_user_destroy_with_orders: Cannot delete a user with orders errors: From 1fb35b258d039a21e8f85042737d3ec2e0cacb13 Mon Sep 17 00:00:00 2001 From: Mayur Shah Date: Thu, 10 Apr 2025 20:06:05 +0530 Subject: [PATCH 5/5] update rubocop_todo to avoid Rails/ReflectionClassName --- .rubocop_todo.yml | 581 +++++++++++++++++++++------------------------- 1 file changed, 260 insertions(+), 321 deletions(-) diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 01036cce43f..80b9a1ac1bd 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `rubocop --auto-gen-config` -# on 2023-05-08 16:13:11 UTC using RuboCop version 1.42.0. +# on 2025-04-10 14:33:02 UTC using RuboCop version 1.75.2. # The point is for the user to remove these configuration records # one by one as the offenses are removed from the code base. # Note that changes in the inspected code, or installation of new @@ -12,9 +12,9 @@ # Include: **/*.gemspec Gemspec/OrderedDependencies: Exclude: - - "core/solidus_core.gemspec" + - 'core/solidus_core.gemspec' -# Offense count: 95 +# Offense count: 161 # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: EnforcedStyle, IndentationWidth. # SupportedStyles: with_first_argument, with_fixed_indentation @@ -27,15 +27,15 @@ Layout/ArgumentAlignment: # SupportedStylesAlignWith: start_of_line, begin Layout/BeginEndAlignment: Exclude: - - "backend/app/controllers/spree/admin/orders_controller.rb" - - "core/app/models/spree/order.rb" - - "core/lib/spree/preferences/preferable_class_methods.rb" + - 'backend/app/controllers/spree/admin/orders_controller.rb' + - 'core/app/models/spree/order.rb' + - 'core/lib/spree/preferences/preferable_class_methods.rb' # Offense count: 1 # This cop supports safe autocorrection (--autocorrect). Layout/BlockEndNewline: Exclude: - - "core/spec/lib/spree/core/importer/order_spec.rb" + - 'core/spec/lib/spree/core/importer/order_spec.rb' # Offense count: 1 # This cop supports safe autocorrection (--autocorrect). @@ -43,15 +43,15 @@ Layout/BlockEndNewline: # SupportedStyles: case, end Layout/CaseIndentation: Exclude: - - "core/app/models/spree/payment/processing.rb" + - 'core/app/models/spree/payment/processing.rb' # Offense count: 1 # This cop supports safe autocorrection (--autocorrect). Layout/ClosingHeredocIndentation: Exclude: - - "core/solidus_core.gemspec" + - 'core/solidus_core.gemspec' -# Offense count: 86 +# Offense count: 94 # This cop supports safe autocorrection (--autocorrect). Layout/EmptyLineAfterGuardClause: Enabled: false @@ -60,42 +60,42 @@ Layout/EmptyLineAfterGuardClause: # This cop supports safe autocorrection (--autocorrect). Layout/EmptyLineAfterMagicComment: Exclude: - - "core/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb" - - "core/lib/spree/testing_support/flaky.rb" + - 'core/db/migrate/20200320144521_add_default_billng_flag_to_user_addresses.rb' + - 'core/lib/spree/testing_support/flaky.rb' # Offense count: 3 # This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: EmptyLineBetweenMethodDefs, EmptyLineBetweenClassDefs, EmptyLineBetweenModuleDefs, AllowAdjacentOneLineDefs, NumberOfEmptyLines. +# Configuration parameters: EmptyLineBetweenMethodDefs, EmptyLineBetweenClassDefs, EmptyLineBetweenModuleDefs, DefLikeMacros, AllowAdjacentOneLineDefs, NumberOfEmptyLines. Layout/EmptyLineBetweenDefs: Exclude: - - "core/app/models/spree/order.rb" - - "core/db/migrate/20160420181916_migrate_credit_cards_to_wallet_payment_sources.rb" - - "core/spec/lib/spree/core/role_configuration_spec.rb" + - 'core/app/models/spree/order.rb' + - 'core/db/migrate/20160420181916_migrate_credit_cards_to_wallet_payment_sources.rb' + - 'core/spec/lib/spree/core/role_configuration_spec.rb' # Offense count: 4 # This cop supports safe autocorrection (--autocorrect). Layout/EmptyLines: Exclude: - - "backend/spec/features/admin/store_credit_reasons_spec.rb" - - "core/db/default/spree/store_credit.rb" - - "core/spec/models/spree/concerns/active_storage_adapter/attachment_spec.rb" - - "core/spec/models/spree/refund_spec.rb" + - 'backend/spec/features/admin/store_credit_reasons_spec.rb' + - 'core/db/default/spree/store_credit.rb' + - 'core/spec/models/spree/concerns/active_storage_adapter/attachment_spec.rb' + - 'core/spec/models/spree/refund_spec.rb' -# Offense count: 15 +# Offense count: 13 # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: AllowAliasSyntax, AllowedMethods. # AllowedMethods: alias_method, public, protected, private Layout/EmptyLinesAroundAttributeAccessor: Exclude: - - "core/app/models/spree/address/state_validator.rb" - - "core/app/models/spree/order_updater.rb" - - "core/app/models/spree/stock_quantities.rb" - - "core/app/models/spree/variant.rb" - - "core/lib/spree/app_configuration.rb" - - "core/lib/spree/preferences/configuration.rb" - - "core/spec/lib/spree/core/validators/email_spec.rb" - - "core/spec/models/spree/preferences/statically_configurable_spec.rb" - - "core/spec/models/spree/reimbursement_type/credit_spec.rb" + - 'core/app/models/spree/address/state_validator.rb' + - 'core/app/models/spree/order_updater.rb' + - 'core/app/models/spree/stock_quantities.rb' + - 'core/app/models/spree/variant.rb' + - 'core/lib/spree/app_configuration.rb' + - 'core/lib/spree/preferences/configuration.rb' + - 'core/spec/lib/spree/core/validators/email_spec.rb' + - 'core/spec/models/spree/preferences/statically_configurable_spec.rb' + - 'core/spec/models/spree/reimbursement_type/credit_spec.rb' # Offense count: 1 # This cop supports safe autocorrection (--autocorrect). @@ -103,17 +103,17 @@ Layout/EmptyLinesAroundAttributeAccessor: # SupportedStyles: empty_lines, no_empty_lines Layout/EmptyLinesAroundBlockBody: Exclude: - - "core/spec/models/spree/order/checkout_spec.rb" + - 'core/spec/models/spree/order/checkout_spec.rb' # Offense count: 4 # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: AllowForAlignment, AllowBeforeTrailingComments, ForceEqualSignAlignment. Layout/ExtraSpacing: Exclude: - - "api/spec/requests/jbuilder_cache_spec.rb" - - "api/spec/requests/spree/api/orders_spec.rb" - - "api/spec/requests/spree/api/taxons_spec.rb" - - "backend/spec/controllers/spree/admin/store_credits_controller_spec.rb" + - 'api/spec/requests/jbuilder_cache_spec.rb' + - 'api/spec/requests/spree/api/orders_spec.rb' + - 'api/spec/requests/spree/api/taxons_spec.rb' + - 'backend/spec/controllers/spree/admin/store_credits_controller_spec.rb' # Offense count: 2 # This cop supports safe autocorrection (--autocorrect). @@ -121,49 +121,49 @@ Layout/ExtraSpacing: # SupportedStyles: consistent, consistent_relative_to_receiver, special_for_inner_method_call, special_for_inner_method_call_in_parentheses Layout/FirstArgumentIndentation: Exclude: - - "core/app/models/spree/stock/availability_validator.rb" - - "core/app/models/spree/stock/inventory_validator.rb" + - 'core/app/models/spree/stock/availability_validator.rb' + - 'core/app/models/spree/stock/inventory_validator.rb' -# Offense count: 2 +# Offense count: 1 # This cop supports safe autocorrection (--autocorrect). Layout/HeredocIndentation: Exclude: - - "core/solidus_core.gemspec" + - 'core/solidus_core.gemspec' # Offense count: 1 # This cop supports safe autocorrection (--autocorrect). Layout/LeadingEmptyLines: Exclude: - - "api/spec/support/have_attributes_matcher.rb" + - 'api/spec/support/have_attributes_matcher.rb' -# Offense count: 10 +# Offense count: 5 # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: EnforcedStyle, IndentationWidth. # SupportedStyles: aligned, indented Layout/MultilineOperationIndentation: Exclude: - - "core/lib/spree/core/engine.rb" - - "core/lib/spree/core/importer/order.rb" - - "core/lib/spree/testing_support/factories/address_factory.rb" + - 'core/lib/spree/core/engine.rb' + - 'core/lib/spree/core/importer/order.rb' + - 'core/lib/spree/testing_support/factories/address_factory.rb' # Offense count: 3 # This cop supports safe autocorrection (--autocorrect). Layout/RescueEnsureAlignment: Exclude: - - "backend/app/controllers/spree/admin/orders_controller.rb" - - "core/app/models/spree/order.rb" + - 'backend/app/controllers/spree/admin/orders_controller.rb' + - 'core/app/models/spree/order.rb' -# Offense count: 6 +# Offense count: 4 # This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: AllowForAlignment, EnforcedStyleForExponentOperator. +# Configuration parameters: AllowForAlignment, EnforcedStyleForExponentOperator, EnforcedStyleForRationalLiterals. # SupportedStylesForExponentOperator: space, no_space +# SupportedStylesForRationalLiterals: space, no_space Layout/SpaceAroundOperators: Exclude: - - "api/spec/requests/spree/api/taxons_spec.rb" - - "backend/spec/features/admin/orders/order_details_spec.rb" - - "bin/__rspec" - - "bin/rspec" - - "core/spec/models/spree/order/number_generator_spec.rb" + - 'api/spec/requests/spree/api/taxons_spec.rb' + - 'backend/spec/features/admin/orders/order_details_spec.rb' + - 'bin/rspec' + - 'core/spec/models/spree/order/number_generator_spec.rb' # Offense count: 8 # This cop supports safe autocorrection (--autocorrect). @@ -172,11 +172,11 @@ Layout/SpaceAroundOperators: # SupportedStylesForEmptyBraces: space, no_space Layout/SpaceInsideBlockBraces: Exclude: - - "backend/spec/features/admin/orders/shipments_spec.rb" - - "core/lib/spree/migrations.rb" - - "core/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb" - - "core/spec/lib/spree/preferences/preference_differentiator_spec.rb" - - "core/spec/models/spree/variant_spec.rb" + - 'backend/spec/features/admin/orders/shipments_spec.rb' + - 'core/lib/spree/migrations.rb' + - 'core/spec/lib/spree/core/testing_support/factories/address_factory_spec.rb' + - 'core/spec/lib/spree/preferences/preference_differentiator_spec.rb' + - 'core/spec/models/spree/variant_spec.rb' # Offense count: 1 # This cop supports safe autocorrection (--autocorrect). @@ -185,167 +185,130 @@ Layout/SpaceInsideBlockBraces: # SupportedStylesForEmptyBraces: space, no_space Layout/SpaceInsideHashLiteralBraces: Exclude: - - "api/spec/requests/spree/api/address_books_spec.rb" - -# Offense count: 1 -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: EnforcedStyle. -# SupportedStyles: final_newline, final_blank_line -Layout/TrailingEmptyLines: - Exclude: - - "bin/rails" + - 'api/spec/requests/spree/api/address_books_spec.rb' # Offense count: 1 # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: AllowInHeredoc. Layout/TrailingWhitespace: Exclude: - - "core/lib/spree/core/stock_configuration.rb" + - 'core/lib/spree/core/stock_configuration.rb' -# Offense count: 3 +# Offense count: 2 # This cop supports safe autocorrection (--autocorrect). Lint/AmbiguousOperator: Exclude: - - "bin/__rspec" - - "bin/rails-application-template" - - "bin/rspec" + - 'bin/rails-application-template' + - 'bin/rspec' -# Offense count: 43 +# Offense count: 44 # Configuration parameters: AllowedMethods. # AllowedMethods: enums Lint/ConstantDefinitionInBlock: Enabled: false # Offense count: 1 -# This cop supports unsafe autocorrection (--autocorrect-all). -# Configuration parameters: AllowComments. +# This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: AutoCorrect, AllowComments. Lint/EmptyConditionalBody: Exclude: - - "core/lib/spree/preferences/statically_configurable.rb" + - 'core/lib/spree/preferences/statically_configurable.rb' # Offense count: 1 # This cop supports safe autocorrection (--autocorrect). Lint/RedundantCopDisableDirective: Exclude: - - "Gemfile" + - 'Gemfile' -# Offense count: 4 +# Offense count: 1 Lint/ShadowingOuterLocalVariable: Exclude: - - "core/app/models/spree/order_inventory.rb" - - "core/lib/generators/solidus/install/install_generator.rb" + - 'core/lib/generators/solidus/install/install_generator.rb' -# Offense count: 3 +# Offense count: 2 # This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: IgnoreEmptyBlocks, AllowUnusedKeywordArguments. +# Configuration parameters: AutoCorrect, IgnoreEmptyBlocks, AllowUnusedKeywordArguments. Lint/UnusedBlockArgument: Exclude: - - "Rakefile" - - "core/spec/models/spree/order_spec.rb" - - "dev_tools/lib/solidus/pipeline_context.rb" - -# Offense count: 7 -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods, IgnoreNotImplementedMethods. -Lint/UnusedMethodArgument: - Exclude: - -# Offense count: 1 -# Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames. -# AllowedNames: as, at, by, cc, db, id, if, in, io, ip, of, on, os, pp, to -Naming/MethodParameterName: - Exclude: + - 'core/spec/models/spree/order_spec.rb' # Offense count: 3 # This cop supports safe autocorrection (--autocorrect). Performance/RegexpMatch: Exclude: - - "core/app/models/spree/credit_card.rb" - - "core/spec/lib/search/variant_spec.rb" + - 'core/app/models/spree/credit_card.rb' + - 'core/spec/lib/search/variant_spec.rb' # Offense count: 1 # This cop supports safe autocorrection (--autocorrect). Performance/StringReplacement: Exclude: - - "core/lib/spree/testing_support/common_rake.rb" + - 'core/lib/spree/testing_support/common_rake.rb' # Offense count: 1 # This cop supports unsafe autocorrection (--autocorrect-all). Rails/ApplicationController: Exclude: - - "api/app/controllers/spree/api/base_controller.rb" + - 'api/app/controllers/spree/api/base_controller.rb' -# Offense count: 1 +# Offense count: 2 # This cop supports unsafe autocorrection (--autocorrect-all). Rails/ApplicationJob: Exclude: - - "legacy_promotions/app/jobs/spree/promotion_code_batch_job.rb" - - "promotions/app/jobs/solidus_promotions/promotion_code_batch_job.rb" + - 'legacy_promotions/app/jobs/spree/promotion_code_batch_job.rb' + - 'promotions/app/jobs/solidus_promotions/promotion_code_batch_job.rb' # Offense count: 1 # This cop supports unsafe autocorrection (--autocorrect-all). Rails/ApplicationMailer: Exclude: - - "core/app/mailers/spree/base_mailer.rb" + - 'core/app/mailers/spree/base_mailer.rb' # Offense count: 16 # This cop supports unsafe autocorrection (--autocorrect-all). Rails/ApplicationRecord: Exclude: - - "backend/spec/controllers/spree/admin/resource_controller_spec.rb" - - "core/app/models/spree/base.rb" - - "core/db/migrate/20160420181916_migrate_credit_cards_to_wallet_payment_sources.rb" - - "core/db/migrate/20170319191942_remove_order_id_from_inventory_units.rb" - - "core/db/migrate/20170412103617_transform_tax_rate_category_relation.rb" - - "core/db/migrate/20180322142651_add_amount_remaining_to_store_credit_events.rb" - - "core/db/migrate/20180710170104_create_spree_store_credit_reasons_table.rb" - - "legacy_promotions/db/migrate/20190106184413_remove_code_from_spree_promotions.rb" - - "core/spec/lib/calculated_adjustments_spec.rb" - - "core/spec/models/spree/validations/db_maximum_length_validator_spec.rb" - - "core/spec/models/spree/wallet_payment_source_spec.rb" - -# Offense count: 14 + - 'backend/spec/controllers/spree/admin/resource_controller_spec.rb' + - 'core/app/models/spree/base.rb' + - 'core/db/migrate/20160420181916_migrate_credit_cards_to_wallet_payment_sources.rb' + - 'core/db/migrate/20170319191942_remove_order_id_from_inventory_units.rb' + - 'core/db/migrate/20170412103617_transform_tax_rate_category_relation.rb' + - 'core/db/migrate/20180322142651_add_amount_remaining_to_store_credit_events.rb' + - 'core/db/migrate/20180710170104_create_spree_store_credit_reasons_table.rb' + - 'core/spec/lib/calculated_adjustments_spec.rb' + - 'core/spec/models/spree/validations/db_maximum_length_validator_spec.rb' + - 'core/spec/models/spree/wallet_payment_source_spec.rb' + - 'legacy_promotions/db/migrate/20190106184413_remove_code_from_spree_promotions.rb' + +# Offense count: 11 # This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: NilOrEmpty, NotPresent, UnlessPresent. Rails/Blank: Exclude: - - "core/app/models/spree/credit_card.rb" - - "core/app/models/spree/line_item.rb" - - "core/app/models/spree/order.rb" - - "core/app/models/spree/order_contents.rb" - - "core/app/models/spree/reimbursement_type/exchange.rb" - - "core/app/models/spree/wallet_payment_source.rb" - - "core/app/models/spree/zone.rb" - - "core/lib/spree/core/importer/order.rb" - - "core/lib/spree/core/search/base.rb" + - 'core/app/models/spree/credit_card.rb' + - 'core/app/models/spree/line_item.rb' + - 'core/app/models/spree/order.rb' + - 'core/app/models/spree/reimbursement_type/exchange.rb' + - 'core/app/models/spree/wallet_payment_source.rb' + - 'core/app/models/spree/zone.rb' + - 'core/lib/spree/core/importer/order.rb' + - 'core/lib/spree/core/search/base.rb' # Offense count: 1 # This cop supports safe autocorrection (--autocorrect). Rails/ContentTag: Exclude: - - "core/app/helpers/spree/base_helper.rb" + - 'core/app/helpers/spree/base_helper.rb' # Offense count: 4 +# This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: EnforcedStyle, AllowToTime. # SupportedStyles: strict, flexible Rails/Date: Exclude: - - "api/spec/requests/spree/api/orders_spec.rb" - - "core/app/helpers/spree/products_helper.rb" - - "core/spec/models/spree/log_entry_spec.rb" - -# Offense count: 10 -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: EnforceForPrefixed. -Rails/Delegate: - Exclude: - - "core/app/models/concerns/spree/active_storage_adapter.rb" - - "core/app/models/spree/image/paperclip_attachment.rb" - - "core/app/models/spree/order_inventory.rb" - - "core/app/models/spree/return_authorization.rb" - - "core/app/models/spree/stock/content_item.rb" - - "core/app/models/spree/stock/package.rb" - - "core/app/models/spree/taxon/paperclip_attachment.rb" + - 'api/spec/requests/spree/api/orders_spec.rb' + - 'core/app/helpers/spree/products_helper.rb' + - 'core/spec/models/spree/log_entry_spec.rb' # Offense count: 1 # This cop supports unsafe autocorrection (--autocorrect-all). @@ -355,16 +318,17 @@ Rails/Delegate: # AllowedReceivers: Gem::Specification, page Rails/DynamicFindBy: Exclude: - - "api/spec/requests/spree/api/variants_spec.rb" + - 'api/spec/requests/spree/api/variants_spec.rb' # Offense count: 4 +# This cop supports safe autocorrection (--autocorrect). # Configuration parameters: EnforcedStyle. # SupportedStyles: slashes, arguments Rails/FilePath: Exclude: - - "core/lib/spree/app_configuration.rb" - - "core/lib/spree/testing_support/dummy_app.rb" - - "sample/lib/spree/sample.rb" + - 'core/lib/spree/app_configuration.rb' + - 'core/lib/spree/testing_support/dummy_app.rb' + - 'sample/lib/spree/sample.rb' # Offense count: 15 # This cop supports safe autocorrection (--autocorrect). @@ -372,346 +336,321 @@ Rails/FilePath: # SupportedStyles: numeric, symbolic Rails/HttpStatus: Exclude: - - "api/app/controllers/spree/api/coupon_codes_controller.rb" - - "api/app/controllers/spree/api/inventory_units_controller.rb" - - "api/app/controllers/spree/api/option_types_controller.rb" - - "api/app/controllers/spree/api/option_values_controller.rb" - - "api/app/controllers/spree/api/payments_controller.rb" - - "api/app/controllers/spree/api/shipments_controller.rb" - - "api/app/controllers/spree/api/stock_items_controller.rb" - - "api/app/controllers/spree/api/users_controller.rb" - - "backend/app/controllers/spree/admin/locale_controller.rb" + - 'api/app/controllers/spree/api/coupon_codes_controller.rb' + - 'api/app/controllers/spree/api/inventory_units_controller.rb' + - 'api/app/controllers/spree/api/option_types_controller.rb' + - 'api/app/controllers/spree/api/option_values_controller.rb' + - 'api/app/controllers/spree/api/payments_controller.rb' + - 'api/app/controllers/spree/api/shipments_controller.rb' + - 'api/app/controllers/spree/api/stock_items_controller.rb' + - 'api/app/controllers/spree/api/users_controller.rb' + - 'backend/app/controllers/spree/admin/locale_controller.rb' # Offense count: 2 # This cop supports safe autocorrection (--autocorrect). Rails/IndexWith: Exclude: - - "core/lib/spree/core/search/variant.rb" - - "core/lib/spree/preferences/preferable.rb" + - 'core/lib/spree/core/search/variant.rb' + - 'core/lib/spree/preferences/preferable.rb' # Offense count: 9 Rails/OutputSafety: Exclude: - - "backend/app/helpers/spree/admin/navigation_helper.rb" - - "backend/config/initializers/form_builder.rb" - - "core/app/helpers/spree/base_helper.rb" - - "core/app/helpers/spree/checkout_helper.rb" - - "core/app/helpers/spree/products_helper.rb" - - "core/app/models/spree/money.rb" + - 'backend/app/helpers/spree/admin/navigation_helper.rb' + - 'backend/config/initializers/form_builder.rb' + - 'core/app/helpers/spree/base_helper.rb' + - 'core/app/helpers/spree/checkout_helper.rb' + - 'core/app/helpers/spree/products_helper.rb' + - 'core/app/models/spree/money.rb' -# Offense count: 10 +# Offense count: 9 # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: NotNilAndNotEmpty, NotBlank, UnlessBlank. Rails/Present: Exclude: - - "api/app/controllers/spree/api/shipments_controller.rb" - - "api/app/controllers/spree/api/taxonomies_controller.rb" - - "api/app/controllers/spree/api/taxons_controller.rb" - - "backend/app/helpers/spree/admin/stock_movements_helper.rb" - - "core/app/models/concerns/spree/ordered_property_value_list.rb" - - "core/app/models/spree/stock/availability_validator.rb" - - "core/lib/spree/core/search/base.rb" - - "core/spec/models/spree/stock/availability_validator_spec.rb" + - 'api/app/controllers/spree/api/shipments_controller.rb' + - 'api/app/controllers/spree/api/taxonomies_controller.rb' + - 'api/app/controllers/spree/api/taxons_controller.rb' + - 'backend/app/helpers/spree/admin/stock_movements_helper.rb' + - 'core/app/models/concerns/spree/ordered_property_value_list.rb' + - 'core/app/models/spree/stock/availability_validator.rb' + - 'core/lib/spree/core/search/base.rb' + - 'core/spec/models/spree/stock/availability_validator_spec.rb' # Offense count: 8 # This cop supports safe autocorrection (--autocorrect). Rails/RedundantForeignKey: Exclude: - - "core/app/models/spree/credit_card.rb" - - "core/app/models/spree/order.rb" - - "core/app/models/spree/return_item.rb" - - "core/app/models/spree/shipping_rate.rb" - - "core/app/models/spree/user_address.rb" - - "core/app/models/spree/wallet_payment_source.rb" + - 'core/app/models/spree/credit_card.rb' + - 'core/app/models/spree/order.rb' + - 'core/app/models/spree/return_item.rb' + - 'core/app/models/spree/shipping_rate.rb' + - 'core/app/models/spree/user_address.rb' + - 'core/app/models/spree/wallet_payment_source.rb' -# Offense count: 13 +# Offense count: 16 # This cop supports unsafe autocorrection (--autocorrect-all). Rails/ReflectionClassName: Exclude: - - "core/app/models/spree/credit_card.rb" - - "core/app/models/spree/order.rb" - - "legacy_promotions/app/models/spree/promotion/rules/user.rb" - - "legacy_promotions/app/models/spree/promotion_rule_user.rb" - - "core/app/models/spree/role_user.rb" - - "core/app/models/spree/store_credit.rb" - - "core/app/models/spree/user_address.rb" - - "core/app/models/spree/user_stock_location.rb" - - "core/app/models/spree/wallet_payment_source.rb" - - "promotions/app/models/solidus_promotions/condition_user.rb" - - "promotions/app/models/solidus_promotions/conditions/user.rb" - -# Offense count: 23 + - 'core/app/models/spree/credit_card.rb' + - 'core/app/models/spree/order.rb' + - 'core/app/models/spree/role_user.rb' + - 'core/app/models/spree/store_credit.rb' + - 'core/app/models/spree/user_address.rb' + - 'core/app/models/spree/user_group.rb' + - 'core/app/models/spree/user_stock_location.rb' + - 'core/app/models/spree/wallet_payment_source.rb' + - 'legacy_promotions/app/models/spree/promotion/rules/user.rb' + - 'legacy_promotions/app/models/spree/promotion_rule_user.rb' + - 'promotions/app/models/solidus_promotions/condition_user.rb' + - 'promotions/app/models/solidus_promotions/conditions/user.rb' + +# Offense count: 22 # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: ConvertTry. Rails/SafeNavigation: Exclude: - - "core/app/models/concerns/spree/user_methods.rb" - - "core/app/models/spree/order.rb" - - "core/app/models/spree/payment.rb" - - "core/app/models/spree/payment/processing.rb" - - "core/app/models/spree/role_user.rb" - - "core/app/models/spree/shipment.rb" - - "core/app/models/spree/taxon.rb" - - "core/app/models/spree/variant/pricing_options.rb" - - "core/app/models/spree/wallet.rb" - - "core/app/models/spree/wallet/default_payment_builder.rb" - - "core/spec/models/spree/variant/vat_price_generator_spec.rb" - -# Offense count: 43 + - 'core/app/models/concerns/spree/user_methods.rb' + - 'core/app/models/spree/order.rb' + - 'core/app/models/spree/payment.rb' + - 'core/app/models/spree/payment/processing.rb' + - 'core/app/models/spree/role_user.rb' + - 'core/app/models/spree/shipment.rb' + - 'core/app/models/spree/taxon.rb' + - 'core/app/models/spree/variant/pricing_options.rb' + - 'core/app/models/spree/wallet.rb' + - 'core/app/models/spree/wallet/default_payment_builder.rb' + - 'core/spec/models/spree/variant/vat_price_generator_spec.rb' + +# Offense count: 50 # Configuration parameters: ForbiddenMethods, AllowedMethods. # ForbiddenMethods: decrement!, decrement_counter, increment!, increment_counter, insert, insert!, insert_all, insert_all!, toggle!, touch, touch_all, update_all, update_attribute, update_column, update_columns, update_counters, upsert, upsert_all Rails/SkipsModelValidations: Enabled: false -# Offense count: 6 +# Offense count: 4 # This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: EnforcedStyle. # SupportedStyles: strict, flexible Rails/TimeZone: Exclude: - - "api/spec/requests/spree/api/orders_spec.rb" - - "core/spec/helpers/base_helper_spec.rb" - - "core/spec/models/spree/order/outstanding_balance_integration_spec.rb" - - "core/spec/models/spree/tax/taxation_integration_spec.rb" + - 'api/spec/requests/spree/api/orders_spec.rb' + - 'core/spec/helpers/base_helper_spec.rb' + - 'core/spec/models/spree/order/outstanding_balance_integration_spec.rb' + - 'core/spec/models/spree/tax/taxation_integration_spec.rb' -# Offense count: 1 -Security/Open: - Exclude: - -# Offense count: 24 +# Offense count: 21 # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: EnforcedStyle. # SupportedStyles: separated, grouped Style/AccessorGrouping: Exclude: - - "backend/lib/spree/backend/action_callbacks.rb" - - "core/app/models/spree/legacy_user.rb" - - "core/app/models/spree/order.rb" - - "core/lib/generators/spree/dummy/dummy_generator.rb" - - "core/lib/spree/core/search/base.rb" - - "core/lib/spree/core/stock_configuration.rb" + - 'backend/lib/spree/backend/action_callbacks.rb' + - 'core/app/models/spree/legacy_user.rb' + - 'core/app/models/spree/order.rb' + - 'core/lib/generators/spree/dummy/dummy_generator.rb' + - 'core/lib/spree/core/search/base.rb' + - 'core/lib/spree/core/stock_configuration.rb' # Offense count: 1 # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: AllowOnConstant, AllowOnSelfClass. Style/CaseEquality: Exclude: - - "core/spec/models/spree/store_credit_spec.rb" - -# Offense count: 2 -# This cop supports unsafe autocorrection (--autocorrect-all). -Style/CaseLikeIf: - Exclude: - - "backend/spec/support/feature/order_feature_helper.rb" - - "core/lib/spree/core.rb" + - 'core/spec/models/spree/store_credit_spec.rb' # Offense count: 1 -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods. +# This cop supports unsafe autocorrection (--autocorrect-all). +# Configuration parameters: AllowedMethods, AllowedPatterns. # AllowedMethods: ==, equal?, eql? Style/ClassEqualityComparison: Exclude: - - "core/lib/spree/core.rb" + - 'core/lib/spree/core.rb' -# Offense count: 8 +# Offense count: 6 # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: Keywords, RequireColon. # Keywords: TODO, FIXME, OPTIMIZE, HACK, REVIEW, NOTE Style/CommentAnnotation: Exclude: - - "api/app/controllers/spree/api/address_books_controller.rb" - - "backend/app/controllers/spree/admin/products_controller.rb" - - "backend/app/controllers/spree/admin/resource_controller.rb" - - "core/app/models/spree/payment_method/store_credit.rb" - - "core/lib/spree/testing_support/rake.rb" - - "core/spec/models/spree/variant/scopes_spec.rb" + - 'api/app/controllers/spree/api/address_books_controller.rb' + - 'backend/app/controllers/spree/admin/products_controller.rb' + - 'backend/app/controllers/spree/admin/resource_controller.rb' + - 'core/app/models/spree/payment_method/store_credit.rb' + - 'core/lib/spree/testing_support/rake.rb' + - 'core/spec/models/spree/variant/scopes_spec.rb' # Offense count: 2 # This cop supports safe autocorrection (--autocorrect). Style/ExplicitBlockArgument: Exclude: - - "api/app/controllers/spree/api/base_controller.rb" - - "backend/app/controllers/spree/admin/base_controller.rb" + - 'api/app/controllers/spree/api/base_controller.rb' + - 'backend/app/controllers/spree/admin/base_controller.rb' -# Offense count: 29 -# This cop supports unsafe autocorrection (--autocorrect-all). -# Configuration parameters: EnforcedStyle. -# SupportedStyles: always, always_true, never -Style/FrozenStringLiteralComment: - Enabled: false - -# Offense count: 13 +# Offense count: 18 # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: EnforcedStyle. # SupportedStyles: braces, no_braces Style/HashAsLastArrayItem: Exclude: - - "api/app/controllers/spree/api/base_controller.rb" - - "api/app/controllers/spree/api/orders_controller.rb" - - "api/spec/requests/spree/api/orders_spec.rb" - - "backend/app/controllers/spree/admin/products_controller.rb" - - "core/lib/spree/permitted_attributes.rb" + - 'api/app/controllers/spree/api/base_controller.rb' + - 'api/app/controllers/spree/api/orders_controller.rb' + - 'api/spec/requests/spree/api/orders_spec.rb' + - 'backend/app/controllers/spree/admin/products_controller.rb' + - 'core/lib/spree/permitted_attributes.rb' # Offense count: 3 # This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: AllowedReceivers. +# AllowedReceivers: Thread.current Style/HashEachMethods: Exclude: - - "api/app/controllers/spree/api/orders_controller.rb" - - "core/app/models/spree/stock/differentiator.rb" - - "core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb" + - 'api/app/controllers/spree/api/orders_controller.rb' + - 'core/app/models/spree/stock/differentiator.rb' + - 'core/spec/models/spree/reimbursement/reimbursement_type_engine_spec.rb' # Offense count: 2 # This cop supports safe autocorrection (--autocorrect). Style/KeywordParametersOrder: Exclude: - - "bin/build-ci" + - 'bin/build-ci' # Offense count: 1 Style/MixinUsage: Exclude: - - "bin/setup" - -# Offense count: 5 -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: AllowedMethods. -# AllowedMethods: be, be_a, be_an, be_between, be_falsey, be_kind_of, be_instance_of, be_truthy, be_within, eq, eql, end_with, include, match, raise_error, respond_to, start_with -Style/NestedParenthesizedCalls: - Exclude: - - "core/spec/generators/solidus/install/install_generator_spec.rb" + - 'bin/setup' # Offense count: 9 # Configuration parameters: AllowedMethods. # AllowedMethods: respond_to_missing? Style/OptionalBooleanParameter: Exclude: - - "api/app/controllers/spree/api/orders_controller.rb" - - "core/app/mailers/spree/order_mailer.rb" - - "core/app/mailers/spree/reimbursement_mailer.rb" - - "core/app/models/concerns/spree/user_address_book.rb" - - "core/app/models/spree/order.rb" - - "core/app/models/spree/simple_order_contents.rb" - - "core/app/models/spree/stock/estimator.rb" + - 'api/app/controllers/spree/api/orders_controller.rb' + - 'core/app/mailers/spree/order_mailer.rb' + - 'core/app/mailers/spree/reimbursement_mailer.rb' + - 'core/app/models/concerns/spree/user_address_book.rb' + - 'core/app/models/spree/order.rb' + - 'core/app/models/spree/simple_order_contents.rb' + - 'core/app/models/spree/stock/estimator.rb' -# Offense count: 4 +# Offense count: 3 # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: AllowSafeAssignment, AllowInMultilineConditions. Style/ParenthesesAroundCondition: Exclude: - - "core/lib/spree/testing_support/dummy_app.rb" - - "core/spec/models/spree/concerns/active_storage_adapter/attachment_spec.rb" - - "core/spec/rails_helper.rb" + - 'core/lib/spree/testing_support/dummy_app.rb' + - 'core/spec/models/spree/concerns/active_storage_adapter/attachment_spec.rb' + - 'core/spec/rails_helper.rb' -# Offense count: 2 +# Offense count: 1 # This cop supports safe autocorrection (--autocorrect). Style/RedundantAssignment: Exclude: - - "backend/app/controllers/spree/admin/stock_items_controller.rb" - - "core/lib/spree/core/search/base.rb" + - 'core/lib/spree/core/search/base.rb' -# Offense count: 5 +# Offense count: 2 # This cop supports safe autocorrection (--autocorrect). Style/RedundantBegin: Exclude: - - "core/app/models/spree/user_last_url_storer/rules/authentication_rule.rb" - - "core/spec/models/spree/stock/simple_coordinator_spec.rb" + - 'core/app/models/spree/user_last_url_storer/rules/authentication_rule.rb' + - 'core/spec/models/spree/stock/simple_coordinator_spec.rb' # Offense count: 2 # This cop supports safe autocorrection (--autocorrect). +# Configuration parameters: AllowedMethods. +# AllowedMethods: nonzero? Style/RedundantCondition: Exclude: - - "backend/app/controllers/spree/admin/reimbursements_controller.rb" - - "backend/app/controllers/spree/admin/resource_controller.rb" + - 'backend/app/controllers/spree/admin/reimbursements_controller.rb' + - 'backend/app/controllers/spree/admin/resource_controller.rb' # Offense count: 4 # This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: SafeForConstants. Style/RedundantFetchBlock: Exclude: - - "core/spec/models/spree/preferences/scoped_store_spec.rb" - - "core/spec/models/spree/preferences/static_model_preferences_spec.rb" + - 'core/spec/models/spree/preferences/scoped_store_spec.rb' + - 'core/spec/models/spree/preferences/static_model_preferences_spec.rb' # Offense count: 5 # This cop supports safe autocorrection (--autocorrect). Style/RedundantFileExtensionInRequire: Exclude: - - "api/solidus_api.gemspec" - - "backend/solidus_backend.gemspec" - - "core/solidus_core.gemspec" - - "sample/solidus_sample.gemspec" - - "solidus.gemspec" + - 'api/solidus_api.gemspec' + - 'backend/solidus_backend.gemspec' + - 'core/solidus_core.gemspec' + - 'sample/solidus_sample.gemspec' + - 'solidus.gemspec' -# Offense count: 3 +# Offense count: 1 # This cop supports safe autocorrection (--autocorrect). Style/RedundantFreeze: Exclude: - - "bin/build-ci" - - "core/app/models/spree/payment/cancellation.rb" + - 'core/app/models/spree/payment/cancellation.rb' # Offense count: 1 # This cop supports unsafe autocorrection (--autocorrect-all). Style/RedundantInterpolation: Exclude: - - "core/lib/spree/testing_support/common_rake.rb" + - 'core/lib/spree/testing_support/common_rake.rb' # Offense count: 2 # This cop supports safe autocorrection (--autocorrect). Style/RedundantParentheses: Exclude: - - "bin/console" - - "core/lib/generators/spree/dummy/dummy_generator.rb" + - 'bin/console' + - 'core/lib/generators/spree/dummy/dummy_generator.rb' # Offense count: 3 # This cop supports safe autocorrection (--autocorrect). Style/RedundantRegexpEscape: Exclude: - - "core/lib/spree/testing_support/translations.rb" - - "core/spec/models/spree/calculator_spec.rb" + - 'core/lib/spree/testing_support/translations.rb' + - 'core/spec/models/spree/calculator_spec.rb' -# Offense count: 2 +# Offense count: 1 # This cop supports safe autocorrection (--autocorrect). # Configuration parameters: AllowMultipleReturnValues. Style/RedundantReturn: Exclude: - - "core/lib/spree/preferences/store.rb" + - 'core/lib/spree/preferences/store.rb' -# Offense count: 2 +# Offense count: 1 # This cop supports safe autocorrection (--autocorrect). Style/RedundantSelf: Exclude: - - "core/app/models/spree/product.rb" + - 'core/app/models/spree/product.rb' # Offense count: 1 # This cop supports unsafe autocorrection (--autocorrect-all). Style/RedundantSort: Exclude: - - "core/lib/spree/testing_support/factories/state_factory.rb" + - 'core/lib/spree/testing_support/factories/state_factory.rb' -# Offense count: 21 +# Offense count: 30 # This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: ConvertCodeThatCanStartToReturnNil, AllowedMethods, MaxChainLength. # AllowedMethods: present?, blank?, presence, try, try! Style/SafeNavigation: Enabled: false -# Offense count: 13 +# Offense count: 12 # This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: Mode. Style/StringConcatenation: Exclude: - - "api/spec/spec_helper.rb" - - "bin/__rspec" - - "bin/rspec" - - "core/app/helpers/spree/base_helper.rb" - - "core/app/models/spree/credit_card.rb" - - "core/app/models/spree/variant.rb" - - "core/lib/spree/testing_support/capybara_ext.rb" - - "core/spec/models/spree/product_spec.rb" - - "core/spec/models/spree/variant_spec.rb" - - "sample/db/samples/assets.rb" + - 'api/spec/spec_helper.rb' + - 'bin/rspec' + - 'core/app/helpers/spree/base_helper.rb' + - 'core/app/models/spree/credit_card.rb' + - 'core/app/models/spree/variant.rb' + - 'core/lib/spree/testing_support/capybara_ext.rb' + - 'core/spec/models/spree/product_spec.rb' + - 'core/spec/models/spree/variant_spec.rb' + - 'sample/db/samples/assets.rb' # Offense count: 1 # This cop supports unsafe autocorrection (--autocorrect-all). Style/ZeroLengthPredicate: Exclude: - - "core/app/models/spree/fulfilment_changer.rb" + - 'core/app/models/spree/fulfilment_changer.rb'