rubocop-solidus 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,35 +3,31 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Solidus
6
- # TODO: Write cop description and example of bad / good code. For every
7
- # `SupportedStyle` and unique configuration, there needs to be examples.
8
- # Examples must have valid Ruby syntax. Do not use upticks.
6
+ # Solidus suggests a decorator module instead of `class_eval` when overriding some features.
7
+ # This cop finds any `class_eval` and asks to use a decorator module instead.
8
+ # More info: https://guides.solidus.io/customization/customizing-the-core.
9
9
  #
10
- #
11
- # @example EnforcedStyle: SpreeClass
12
- # # Description of the `SpreeClass` style.
10
+ # @example
13
11
  #
14
12
  # # bad
15
13
  # SpreeClass.class_eval do
16
- # .
17
- # .
14
+ # # your code here
18
15
  # end
19
16
  #
20
- #
21
17
  # # good
22
- # module SpreeClassDecorator
23
- # .
24
- # .
18
+ # module Spree
19
+ # module SpreeClassDecorator
20
+ # # your code here
21
+ # end
22
+ #
23
+ # Spree::SpreeClass.prepend self
25
24
  # end
26
25
  #
27
26
  class ClassEvalDecorator < Base
28
- MSG = 'Do not use `class_eval` flag. Use a decorator module instead. Check this link for an example https://guides.solidus.io/cookbook/redefining-checkout-steps'
27
+ MSG = 'Do not use `class_eval` flag. Use a decorator module instead. More info: https://guides.solidus.io/customization/customizing-the-core.'
29
28
 
30
- # TODO: Don't call `on_send` unless the method name is in this list
31
- # If you don't need `on_send` in the cop you created, remove it.
32
29
  RESTRICT_ON_SEND = %i[class_eval].freeze
33
30
 
34
- # @!method on_class_eval?(node)
35
31
  def_node_matcher :on_class_eval?, <<~PATTERN
36
32
  (send ($...) :class_eval)
37
33
  PATTERN
@@ -5,6 +5,23 @@ module RuboCop
5
5
  module Solidus
6
6
  # This cop finds reimbursement_success_hooks and reimbursement_failed_hooks calls and
7
7
  # asks to remove them and subscribe to reimbursement_reimbursed event instead.
8
+ #
9
+ # @example
10
+ #
11
+ # # bad
12
+ # reimbursement_success_hooks.each { |h| h.call self }
13
+ # reimbursement_failed_hooks.each { |h| h.call self }
14
+ #
15
+ # # good
16
+ #
17
+ # @example
18
+ #
19
+ # # bad
20
+ # reimbursement_success_hooks.any?
21
+ # reimbursement_failed_hooks.any?
22
+ #
23
+ # # good
24
+ #
8
25
  class ReimbursementHookDeprecated < Base
9
26
  include TargetSolidusVersion
10
27
  minimum_solidus_version 2.11
@@ -6,6 +6,13 @@ module RuboCop
6
6
  # This cop finds Spree::Calculator::FreeShipping calls.
7
7
  # This cop is needed as they have been deprecated in future version.
8
8
  #
9
+ # @example
10
+ #
11
+ # # bad
12
+ # Spree::Calculator::FreeShipping
13
+ #
14
+ # # good
15
+ #
9
16
  class SpreeCalculatorFreeShippingDeprecated < Base
10
17
  MSG = 'Spree::Calculator::FreeShipping is deprecated.'
11
18
 
@@ -6,10 +6,18 @@ module RuboCop
6
6
  # This cop finds Spree::Calculator::PercentPerItem calls.
7
7
  # This cop is needed as they have been deprecated in future version.
8
8
  #
9
+ # @example
10
+ #
11
+ # # bad
12
+ # Spree::Calculator::PercentPerItem
13
+ #
14
+ # # good
15
+ # Spree::Calculator::PercentOnLineItem
16
+ #
9
17
  class SpreeCalculatorPercentPerItemDeprecated < Base
10
18
  extend AutoCorrector
11
19
 
12
- MSG = 'Spree::Calculator::PercentPerItem is deprecated.'
20
+ MSG = 'Spree::Calculator::PercentPerItem is deprecated. Use Spree::Calculator::PercentOnLineItem instead.'
13
21
 
14
22
  def_node_matcher :percent_per_item?, <<~PATTERN
15
23
  (send (... (... :Calculator) :PercentPerItem) $_)
@@ -6,6 +6,13 @@ module RuboCop
6
6
  # This cop finds Spree::Calculator::PriceSack calls.
7
7
  # This cop is needed as they have been deprecated in future version.
8
8
  #
9
+ # @example
10
+ #
11
+ # # bad
12
+ # Spree::Calculator::PriceSack
13
+ #
14
+ # # good
15
+ #
9
16
  class SpreeCalculatorPriceSackDeprecated < Base
10
17
  MSG = 'Spree::Calculator::PriceSack is deprecated.'
11
18
 
@@ -3,16 +3,16 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Solidus
6
- # This cop finds user.default_credit_card suggest using user.wallet.default_wallet_payment_source
6
+ # This cop finds user.default_credit_card suggest using user.wallet.default_wallet_payment_source.
7
+ #
8
+ # @example
7
9
  #
8
- # @example EnforcedStyle:
9
10
  # # bad
10
11
  # user.default_credit_card
11
12
  #
12
13
  # # good
13
14
  # user.wallet.default_wallet_payment_source
14
15
  #
15
- #
16
16
  class SpreeDefaultCreditCardDeprecated < Base
17
17
  extend AutoCorrector
18
18
  include TargetSolidusVersion
@@ -20,7 +20,6 @@ module RuboCop
20
20
 
21
21
  MSG = 'user.default_credit_card is deprecated. Please use user.wallet.default_wallet_payment_source instead.'
22
22
 
23
- # @!method bad_method?(node)
24
23
  def_node_matcher :default_credit_card?, <<~PATTERN
25
24
  (send ... :default_credit_card)
26
25
  PATTERN
@@ -3,29 +3,20 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Solidus
6
- # This cop finds Spree::Gateway::Bogus calls and replaces them with the Spree::PaymentMethod::BogusCreditCard call
6
+ # This cop finds Spree::Gateway::Bogus calls and replaces them with the Spree::PaymentMethod::BogusCreditCard.
7
7
  # This cop is needed as the Spree::Gateway::Bogus has been deprecated in future version.
8
8
  #
9
- # @example EnforcedStyle:
9
+ # @example
10
10
  # # bad
11
11
  # Spree::Gateway::Bogus.new
12
- #
13
- # # good
14
- # Spree::PaymentMethod::BogusCreditCard.new
15
- #
16
- # # bad
17
12
  # Spree::Gateway::Bogus.create
18
- #
19
- # # good
20
- # Spree::PaymentMethod::BogusCreditCard.create
21
- #
22
- # # bad
23
13
  # Spree::Gateway::Bogus.create!
24
14
  #
25
15
  # # good
16
+ # Spree::PaymentMethod::BogusCreditCard.new
17
+ # Spree::PaymentMethod::BogusCreditCard.create
26
18
  # Spree::PaymentMethod::BogusCreditCard.create!
27
19
  #
28
- #
29
20
  class SpreeGatewayBogusDeprecated < Base
30
21
  extend AutoCorrector
31
22
  include TargetSolidusVersion
@@ -33,7 +24,6 @@ module RuboCop
33
24
 
34
25
  MSG = 'Spree::Gateway::Bogus is deprecated. Please use Spree::PaymentMethod::BogusCreditCard instead.'
35
26
 
36
- # @!method bad_method?(node)
37
27
  def_node_matcher :bad_class?, <<~PATTERN
38
28
  (send (... (... :Gateway) :Bogus) $_)
39
29
  PATTERN
@@ -3,16 +3,16 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Solidus
6
- # This cop finds icon helper calls and suggest using solidus_icon
6
+ # This cop finds icon helper calls and suggest using solidus_icon.
7
+ #
8
+ # @example
7
9
  #
8
- # @example EnforcedStyle:
9
10
  # # bad
10
11
  # helper.icon('example')
11
12
  #
12
13
  # # good
13
14
  # helper.solidus_icon('example')
14
15
  #
15
- #
16
16
  class SpreeIconDeprecated < Base
17
17
  extend AutoCorrector
18
18
  include TargetSolidusVersion
@@ -4,7 +4,15 @@ module RuboCop
4
4
  module Cop
5
5
  module Solidus
6
6
  # This cop finds Spree::Refund.create(your: attributes) calls and
7
- # replaces them with the Spree::Refund.create(your: attributes, perform_after_create: false).perform! call
7
+ # replaces them with the Spree::Refund.create(your: attributes, perform_after_create: false).perform! call.
8
+ #
9
+ # @example
10
+ #
11
+ # # bad
12
+ # Spree::Refund.create(your: attributes)
13
+ #
14
+ # # good
15
+ # Spree::Refund.create(your: attributes, perform_after_create: false).perform!
8
16
  #
9
17
  class SpreeRefundCallPerform < Base
10
18
  include TargetSolidusVersion
@@ -16,7 +24,6 @@ module RuboCop
16
24
 
17
25
  RESTRICT_ON_SEND = %i[create].freeze
18
26
 
19
- # @!method bad_method?(node)
20
27
  def_node_matcher :create_refund?, <<~PATTERN
21
28
  (send (const (const nil? :Spree) :Refund) :create ...)
22
29
  PATTERN
@@ -3,43 +3,51 @@
3
3
  module RuboCop
4
4
  module Cop
5
5
  module Solidus
6
- # This cop finds Spree.t method calls and replaces them with the I18n,t method call
6
+ # This cop finds Spree.t method calls and replaces them with the I18n,t method call.
7
7
  # This cop is needed as the Spree.t version has been deprecated in future version.
8
8
  #
9
+ # @example
10
+ # # Without any parameters
9
11
  #
10
- # @example EnforcedStyle: bar (default)
11
12
  # # bad
12
13
  # Spree.t(:bar)
13
14
  #
14
15
  # # good
15
16
  # I18n.t(:bar, scope: :spree)
16
17
  #
18
+ # @example
19
+ # # With the scope parameter
20
+ #
17
21
  # # bad
18
22
  # Spree.t(:bar, scope: [:city])
19
23
  #
20
24
  # # good
21
25
  # I18n.t(:bar, scope: [:spree, :city])
22
26
  #
27
+ # @example
28
+ # # With the scope and other parameters
29
+ #
23
30
  # # bad
24
31
  # Spree.t(:bar, scope: [:city], email: email)
25
32
  #
26
33
  # # good
27
34
  # I18n.t(:bar, scope: [:spree, :city], email: email)
28
35
  #
36
+ # @example
37
+ # # With the scope parameter as a string
38
+ #
29
39
  # # bad
30
40
  # Spree.t('bar', scope: 'admin.city')
31
41
  #
32
42
  # # good
33
43
  # I18n.t('bar', scope: 'spree.admin.city')
34
44
  #
35
- #
36
45
  class SpreeTDeprecated < Base
37
46
  extend AutoCorrector
38
47
  MSG = 'Use I18n.t instead of Spree.t which has been deprecated in future versions.'
39
48
 
40
49
  RESTRICT_ON_SEND = %i[t].freeze
41
50
 
42
- # @!method spree_t?(node)
43
51
  def_node_matcher :spree_t?, <<~PATTERN
44
52
  (send ($...) :t ...)
45
53
  PATTERN
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RuboCop
4
4
  module Solidus
5
- VERSION = '0.1.2'
5
+ VERSION = '0.1.4'
6
6
  end
7
7
  end
data/relnotes/v0.1.2.md CHANGED
@@ -1,5 +1,5 @@
1
1
  ### New features
2
2
 
3
- * [#45](https://github.com/nebulab/rubocop-solidus/pull/45): Fix gem version comparison. ([@MassimilianoLattanzio][])
3
+ * [#45](https://github.com/solidusio/rubocop-solidus/pull/45): Fix gem version comparison. ([@MassimilianoLattanzio][])
4
4
 
5
5
  [@MassimilianoLattanzio]: https://github.com/MassimilianoLattanzio
@@ -0,0 +1,9 @@
1
+ ### New features
2
+
3
+ * [#47](https://github.com/solidusio/rubocop-solidus/pull/47): Remove support for old versions of ruby. ([@MassimilianoLattanzio][])
4
+
5
+ ### Bug fixes
6
+
7
+ * [#48](https://github.com/solidusio/rubocop-solidus/pull/48): Fix typos in README and add instructions on how to use the changelog rake task. ([@MassimilianoLattanzio][])
8
+
9
+ [@MassimilianoLattanzio]: https://github.com/MassimilianoLattanzio
@@ -0,0 +1,5 @@
1
+ ### New features
2
+
3
+ * [#51](https://github.com/solidusio/rubocop-solidus/pull/51): Create automatic documentation based on the cop's descriptions. ([@MassimilianoLattanzio][])
4
+
5
+ [@MassimilianoLattanzio]: https://github.com/MassimilianoLattanzio
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/rubocop/solidus/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'rubocop-solidus'
7
+ spec.version = RuboCop::Solidus::VERSION
8
+ spec.authors = ['piyushswain']
9
+ spec.email = ['piyush.swain3@gmail.com']
10
+
11
+ spec.summary = 'Automatic Solidus code style checking tool.'
12
+ spec.description = <<~DESCRIPTION
13
+ Automatic Solidus code style checking tool.
14
+ A RuboCop extension focused on enforcing Solidus best practices and coding conventions.
15
+ DESCRIPTION
16
+ spec.homepage = 'https://www.github.com/solidusio/rubocop-solidus'
17
+ spec.license = 'MIT'
18
+ spec.required_ruby_version = '>= 2.7.0'
19
+
20
+ spec.metadata['homepage_uri'] = spec.homepage
21
+ spec.metadata['source_code_uri'] = 'https://www.github.com/solidusio/rubocop-solidus'
22
+ spec.metadata['changelog_uri'] = 'https://www.github.com/solidusio/rubocop-solidus/blob/master/CHANGELOG.md'
23
+ spec.metadata['documentation_uri'] = 'https://www.github.com/solidusio/rubocop-solidus/blob/master/docs/cops.md'
24
+
25
+ # Specify which files should be added to the gem when it is released.
26
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
27
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
28
+ `git ls-files -z`.split("\x0").reject do |f|
29
+ (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
30
+ end
31
+ end
32
+ spec.bindir = 'exe'
33
+ spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
34
+ spec.require_paths = ['lib']
35
+
36
+ # Uncomment to register a new dependency of your gem
37
+ # spec.add_dependency "example-gem", "~> 1.0"
38
+
39
+ # For more information and examples about making a new gem, check out our
40
+ # guide at: https://bundler.io/guides/creating_gem.html
41
+
42
+ spec.add_runtime_dependency 'rubocop'
43
+ end
data/tasks/changelog.rb CHANGED
@@ -9,7 +9,7 @@ class Changelog
9
9
  TYPE_TO_HEADER = { new: 'New features', fix: 'Bug fixes', change: 'Changes' }.freeze
10
10
  HEADER = /### (.*)/.freeze
11
11
  PATH = 'CHANGELOG.md'
12
- REF_URL = 'https://github.com/nebulab/rubocop-solidus'
12
+ REF_URL = 'https://github.com/solidusio/rubocop-solidus'
13
13
  MAX_LENGTH = 40
14
14
  CONTRIBUTOR = '[@%<user>s]: https://github.com/%<user>s'
15
15
  SIGNATURE = Regexp.new(format(Regexp.escape('[@%<user>s][]'), user: '([\w-]+)'))
@@ -64,8 +64,8 @@ class Changelog
64
64
  end
65
65
 
66
66
  def github_user
67
- user = `git config --global credential.username`.chomp
68
- warn 'Set your username with `git config --global credential.username "myusernamehere"`' if user.empty?
67
+ user = `git config --global user.username`.chomp
68
+ warn 'Set your username with `git config --global user.username "myusernamehere"`' if user.empty?
69
69
 
70
70
  user
71
71
  end