Skip to content

Commit

Permalink
Merge pull request #14 from charitywater/update-rubocop
Browse files Browse the repository at this point in the history
Update Rubocop
  • Loading branch information
tristanoneil committed Jan 6, 2021
2 parents a57158e + 7c8d02f commit 793763a
Show file tree
Hide file tree
Showing 9 changed files with 29 additions and 132 deletions.
4 changes: 2 additions & 2 deletions cw-style.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,11 @@ Gem::Specification.new do |spec|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
spec.require_paths = ["lib"]

spec.add_dependency "rubocop", "~> 0.84.0"
spec.add_dependency "rubocop", "~> 0.89.1"
spec.add_dependency "rubocop-rspec-focused", "= 0.0.3"
spec.add_dependency "rubocop-thread_safety"
spec.add_dependency "rubocop-rails"
spec.add_development_dependency "bundler", "~> 2.1.4"
spec.add_development_dependency "bundler", "~> 2.2.4"
spec.add_development_dependency "rake", "~> 10.0"
spec.add_development_dependency "rspec"
spec.add_development_dependency "debugger-ruby_core_source"
Expand Down
1 change: 1 addition & 0 deletions default.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ require:
- ./lib/update_not_update_attributes

AllCops:
NewCops: enable
TargetRubyVersion: 2.6
Exclude:
- '*.gemspec'
Expand Down
2 changes: 1 addition & 1 deletion lib/charity_water/style/version.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
module CharityWater
module Style
VERSION = '4.0.3'.freeze
VERSION = '4.0.4'.freeze
end
end
2 changes: 1 addition & 1 deletion lib/private_attribute_accessors.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ def private_nodes(body)
index = body.child_nodes.index { |x| x.send_type? && x.access_modifier? && x.method_name == :private }
return [] unless index

body.child_nodes[(index + 1)..-1]
body.child_nodes[(index + 1)..]
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion lib/update_not_update_attributes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def autocorrect(node)

def update_attributes_or_update_attributes_bang?(node)
node.method?(:update_attributes) || node.method?(:update_attributes!)
end
end

def message(node)
format(MSG, replacement_method(node))
Expand Down
15 changes: 5 additions & 10 deletions spec/private_attribute_accessors_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def inspect_source(cop, source, file = nil)
def parse_source(source, file = nil)
source = source.join($RS) if source.is_a?(Array)

if file && file.respond_to?(:write)
if file&.respond_to?(:write)
file.write(source)
file.rewind
file = file.path
Expand All @@ -29,15 +29,10 @@ def parse_source(source, file = nil)
end

def _investigate(cop, processed_source)
forces = RuboCop::Cop::Force.all.each_with_object([]) do |klass, instances|
next unless cop.join_force?(klass)
instances << klass.new([cop])
end

commissioner =
RuboCop::Cop::Commissioner.new([cop], forces, raise_error: true)
commissioner.investigate(processed_source)
commissioner
team = RuboCop::Cop::Team.new([cop], nil, raise_error: true)
report = team.investigate(processed_source)
@last_corrector = report.correctors.first || RuboCop::Cop::Corrector.new(processed_source)
report.offenses
end

it 'registers an offense for using any attr_* methods in private scope' do
Expand Down
89 changes: 0 additions & 89 deletions spec/spec_helper.rb
Original file line number Diff line number Diff line change
@@ -1,100 +1,11 @@
# This file was generated by the `rspec --init` command. Conventionally, all
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
# The generated `.rspec` file contains `--require spec_helper` which will cause
# this file to always be loaded, without a need to explicitly require it in any
# files.
#
# Given that it is always loaded, you are encouraged to keep this file as
# light-weight as possible. Requiring heavyweight dependencies from this file
# will add to the boot time of your test suite on EVERY test run, even for an
# individual file that may not need all of that loaded. Instead, consider making
# a separate helper file that requires the additional dependencies and performs
# the additional setup, and require it from the spec files that actually need
# it.
#
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
RSpec.configure do |config|
# rspec-expectations config goes here. You can use an alternate
# assertion/expectation library such as wrong or the stdlib/minitest
# assertions if you prefer.
config.expect_with :rspec do |expectations|
# This option will default to `true` in RSpec 4. It makes the `description`
# and `failure_message` of custom matchers include text for helper methods
# defined using `chain`, e.g.:
# be_bigger_than(2).and_smaller_than(4).description
# # => "be bigger than 2 and smaller than 4"
# ...rather than:
# # => "be bigger than 2"
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
end

# rspec-mocks config goes here. You can use an alternate test double
# library (such as bogus or mocha) by changing the `mock_with` option here.
config.mock_with :rspec do |mocks|
# Prevents you from mocking or stubbing a method that does not exist on
# a real object. This is generally recommended, and will default to
# `true` in RSpec 4.
mocks.verify_partial_doubles = true
end

# This option will default to `:apply_to_host_groups` in RSpec 4 (and will
# have no way to turn it off -- the option exists only for backwards
# compatibility in RSpec 3). It causes shared context metadata to be
# inherited by the metadata hash of host groups and examples, rather than
# triggering implicit auto-inclusion in groups with matching metadata.
config.shared_context_metadata_behavior = :apply_to_host_groups

# The settings below are suggested to provide a good initial experience
# with RSpec, but feel free to customize to your heart's content.
=begin
# This allows you to limit a spec run to individual examples or groups
# you care about by tagging them with `:focus` metadata. When nothing
# is tagged with `:focus`, all examples get run. RSpec also provides
# aliases for `it`, `describe`, and `context` that include `:focus`
# metadata: `fit`, `fdescribe` and `fcontext`, respectively.
config.filter_run_when_matching :focus
# Allows RSpec to persist some state between runs in order to support
# the `--only-failures` and `--next-failure` CLI options. We recommend
# you configure your source control system to ignore this file.
config.example_status_persistence_file_path = "spec/examples.txt"
# Limits the available syntax to the non-monkey patched syntax that is
# recommended. For more details, see:
# - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
# - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
# - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
config.disable_monkey_patching!
# This setting enables warnings. It's recommended, but in some cases may
# be too noisy due to issues in dependencies.
config.warnings = true
# Many RSpec users commonly either run the entire suite or an individual
# file, and it's useful to allow more verbose output when running an
# individual spec file.
if config.files_to_run.one?
# Use the documentation formatter for detailed output,
# unless a formatter has already been configured
# (e.g. via a command-line flag).
config.default_formatter = "doc"
end
# Print the 10 slowest examples and example groups at the
# end of the spec run, to help surface which specs are running
# particularly slow.
config.profile_examples = 10
# Run specs in random order to surface order dependencies. If you find an
# order dependency and want to debug it, you can fix the order by providing
# the seed, which is printed after each run.
# --seed 1234
config.order = :random
# Seed global randomization in this process using the `--seed` CLI option.
# Setting this allows you to use `--seed` to deterministically reproduce
# test failures related to randomization by passing the same `--seed` value
# as the one that triggered the failure.
Kernel.srand config.seed
=end
end
15 changes: 5 additions & 10 deletions spec/unless_with_multiple_conditions_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def inspect_source(cop, source, file = nil)
def parse_source(source, file = nil)
source = source.join($RS) if source.is_a?(Array)

if file && file.respond_to?(:write)
if file&.respond_to?(:write)
file.write(source)
file.rewind
file = file.path
Expand All @@ -27,15 +27,10 @@ def parse_source(source, file = nil)
end

def _investigate(cop, processed_source)
forces = RuboCop::Cop::Force.all.each_with_object([]) do |klass, instances|
next unless cop.join_force?(klass)
instances << klass.new([cop])
end

commissioner =
RuboCop::Cop::Commissioner.new([cop], forces, raise_error: true)
commissioner.investigate(processed_source)
commissioner
team = RuboCop::Cop::Team.new([cop], nil, raise_error: true)
report = team.investigate(processed_source)
@last_corrector = report.correctors.first || RuboCop::Cop::Corrector.new(processed_source)
report.offenses
end

it "isn't offended by single conditions, if statements with multiple conditions" do
Expand Down
31 changes: 13 additions & 18 deletions spec/update_not_update_attributes_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def inspect_source(cop, source, file = nil)
def parse_source(source, file = nil)
source = source.join($RS) if source.is_a?(Array)

if file && file.respond_to?(:write)
if file&.respond_to?(:write)
file.write(source)
file.rewind
file = file.path
Expand All @@ -27,25 +27,20 @@ def parse_source(source, file = nil)
end

def _investigate(cop, processed_source)
forces = RuboCop::Cop::Force.all.each_with_object([]) do |klass, instances|
next unless cop.join_force?(klass)
instances << klass.new([cop])
end

commissioner =
RuboCop::Cop::Commissioner.new([cop], forces, raise_error: true)
commissioner.investigate(processed_source)
commissioner
team = RuboCop::Cop::Team.new([cop], nil, raise_error: true)
report = team.investigate(processed_source)
@last_corrector = report.correctors.first || RuboCop::Cop::Corrector.new(processed_source)
report.offenses
end

def autocorrect_source(cop, source, file = nil)
def autocorrect_source(source, file = nil)
RuboCop::Formatter::DisabledConfigFormatter.config_to_allow_offenses = {}
RuboCop::Formatter::DisabledConfigFormatter.detected_styles = {}
cop.instance_variable_get(:@options)[:auto_correct] = true
processed_source = parse_source(source, file)
_investigate(cop, processed_source)

corrector =
RuboCop::Cop::Corrector.new(processed_source.buffer, cop.corrections)
corrector.rewrite
@last_corrector.rewrite
end
# end helper methods

Expand Down Expand Up @@ -82,15 +77,15 @@ def autocorrect_source(cop, source, file = nil)
end

context 'auto-corrects' do
let(:cop) { described_class.new }

it 'update_attributes to update' do
cop = described_class.new
new_source = autocorrect_source(cop, 'user.update_attributes full_name: "joe"')
new_source = autocorrect_source('user.update_attributes full_name: "joe"')
expect(new_source).to eq('user.update full_name: "joe"')
end

it 'update_attributes! to update!' do
cop = described_class.new
new_source = autocorrect_source(cop, 'user.update_attributes! full_name: "joe"')
new_source = autocorrect_source('user.update_attributes! full_name: "joe"')
expect(new_source).to eq('user.update! full_name: "joe"')
end
end
Expand Down

0 comments on commit 793763a

Please sign in to comment.