Skip to content

Commit

Permalink
Add new Solidus/SpreeDefaultAddressDeprecated cop
Browse files Browse the repository at this point in the history
  • Loading branch information
the-krg committed Nov 22, 2023
1 parent ea03a4b commit 08ac282
Show file tree
Hide file tree
Showing 6 changed files with 107 additions and 0 deletions.
6 changes: 6 additions & 0 deletions config/default.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,12 @@ Solidus/SpreeCalculatorPriceSackDeprecated:
VersionAdded: '0.1'
Reference: 'https://github.com/solidusio/rubocop-solidus/issues/29'

Solidus/SpreeDefaultAddressDeprecated:
Description: 'Checks if user.default_address or user.default_user_address is used and suggest using user.ship_address or user.default_user_ship_address'
Enabled: true
VersionAdded: '0.1'
Reference: 'https://github.com/solidusio/rubocop-solidus/issues/61'

Solidus/SpreeDefaultCreditCardDeprecated:
Description: 'Checks if user.default_credit_card is used and suggest using user.wallet.default_wallet_payment_source'
Enabled: true
Expand Down
1 change: 1 addition & 0 deletions docs/cops.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ In the following section you find all available cops:
* [Solidus/SpreeCalculatorFreeShippingDeprecated](cops_solidus.md#solidusspreecalculatorfreeshippingdeprecated)
* [Solidus/SpreeCalculatorPercentPerItemDeprecated](cops_solidus.md#solidusspreecalculatorpercentperitemdeprecated)
* [Solidus/SpreeCalculatorPriceSackDeprecated](cops_solidus.md#solidusspreecalculatorpricesackdeprecated)
* [Solidus/SpreeDefaultAddressDeprecated](cops_solidus.md#solidusspreedefaultaddressdeprecated)
* [Solidus/SpreeDefaultCreditCardDeprecated](cops_solidus.md#solidusspreedefaultcreditcarddeprecated)
* [Solidus/SpreeGatewayBogusDeprecated](cops_solidus.md#solidusspreegatewaybogusdeprecated)
* [Solidus/SpreeIconDeprecated](cops_solidus.md#solidusspreeicondeprecated)
Expand Down
25 changes: 25 additions & 0 deletions docs/cops_solidus.md
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,31 @@ Spree::Calculator::PriceSack

* [https://github.com/solidusio/rubocop-solidus/issues/29](https://github.com/solidusio/rubocop-solidus/issues/29)

## Solidus/SpreeDefaultAddressDeprecated

Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged | Required Solidus Version
--- | --- | --- | --- | --- | ---
Enabled | Yes | No | 0.1 | - | 2.11

This cop finds user.default_address or user.default_address and suggest
using user.ship_address or user.default_user_ship_address instead.

### Examples

```ruby
# bad
user.default_address
user.default_user_address

# good
user.ship_address
user.default_user_ship_address
```

### References

* [https://github.com/solidusio/rubocop-solidus/issues/61](https://github.com/solidusio/rubocop-solidus/issues/61)

## Solidus/SpreeDefaultCreditCardDeprecated

Enabled by default | Safe | Supports autocorrection | VersionAdded | VersionChanged | Required Solidus Version
Expand Down
45 changes: 45 additions & 0 deletions lib/rubocop/cop/solidus/spree_default_address_deprecated.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# frozen_string_literal: true

module RuboCop
module Cop
module Solidus
# This cop finds user.default_address or user.default_address and suggest
# using user.ship_address or user.default_user_ship_address instead.
#
# @example
#
# # bad
# user.default_address
# user.default_user_address
#
# # good
# user.ship_address
# user.default_user_ship_address
#
class SpreeDefaultAddressDeprecated < Base
include TargetSolidusVersion
minimum_solidus_version 2.11

MSG = 'user.default_address and user.default_user_address are deprecated and will be removed on Solidus 3.0. ' \
'Please use user.ship_address or user.default_user_ship_address instead.'

def_node_matcher :default_address?, <<~PATTERN
(send ... :default_address)
PATTERN

def_node_matcher :default_user_address?, <<~PATTERN
(send ... :default_user_address)
PATTERN

def on_send(node)
return unless default_address?(node) || default_user_address?(node)

add_offense(node) do |corrector|
corrector.replace(node, node.source.gsub('default_address', 'ship_address')) if default_address?(node)
corrector.replace(node, node.source.gsub('default_user_address', 'default_user_ship_address')) if default_user_address?(node)
end
end
end
end
end
end
1 change: 1 addition & 0 deletions lib/rubocop/cop/solidus_cops.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
require_relative 'solidus/spree_calculator_free_shipping_deprecated'
require_relative 'solidus/spree_calculator_percent_per_item_deprecated'
require_relative 'solidus/spree_calculator_price_sack_deprecated'
require_relative 'solidus/spree_default_address_deprecated'
require_relative 'solidus/spree_default_credit_card_deprecated'
require_relative 'solidus/spree_gateway_bogus_deprecated'
require_relative 'solidus/spree_icon_deprecated'
Expand Down
29 changes: 29 additions & 0 deletions spec/rubocop/cop/solidus/spree_default_address_deprecated_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# frozen_string_literal: true

RSpec.describe RuboCop::Cop::Solidus::SpreeDefaultAddressDeprecated, :config do
it 'registers an offense when using `#.default_address`' do
expect_offense(<<~RUBY)
user.default_address
^^^^^^^^^^^^^^^^^^^^ user.default_address and user.default_user_address are deprecated and will be removed on Solidus 3.0. Please use user.ship_address or user.default_user_ship_address instead.
RUBY
end

it 'does not register an offense when using `#ship_address`' do
expect_no_offenses(<<~RUBY)
user.ship_address
RUBY
end

it 'registers an offense when using `#.default_user_address`' do
expect_offense(<<~RUBY)
user.default_user_address
^^^^^^^^^^^^^^^^^^^^^^^^^ user.default_address and user.default_user_address are deprecated and will be removed on Solidus 3.0. Please use user.ship_address or user.default_user_ship_address instead.
RUBY
end

it 'does not register an offense when using `#default_user_ship_address`' do
expect_no_offenses(<<~RUBY)
user.default_user_ship_address
RUBY
end
end

0 comments on commit 08ac282

Please sign in to comment.