From f9f05b37b5766253ffdd19756f9a81bef63dc087 Mon Sep 17 00:00:00 2001 From: Anton Chuchkalov Date: Wed, 22 Mar 2017 12:33:11 +0300 Subject: [PATCH] add rubocop --- .rubocop.yml | 51 +++++++++++++++++++++++++++++++++++++ .travis.yml | 2 +- Rakefile | 4 ++- interactor.gemspec | 4 ++- lib/interactor.rb | 6 ++--- lib/interactor/context.rb | 2 +- lib/interactor/hooks.rb | 4 +-- spec/integration_spec.rb | 53 ++++++++++++++++----------------------- spec/support/lint.rb | 4 ++- 9 files changed, 87 insertions(+), 43 deletions(-) create mode 100644 .rubocop.yml diff --git a/.rubocop.yml b/.rubocop.yml new file mode 100644 index 0000000..41c66a3 --- /dev/null +++ b/.rubocop.yml @@ -0,0 +1,51 @@ +Style/StringLiterals: + EnforcedStyle: double_quotes + +Style/FrozenStringLiteralComment: + Enabled: false + +# Allow some style changes in specs +Metrics/ModuleLength: + Exclude: + - spec/**/* +Metrics/BlockLength: + Exclude: + - spec/**/* +Style/BlockDelimiters: + Exclude: + - spec/**/* +Style/RescueModifier: + Exclude: + - spec/**/* +Metrics/MethodLength: + Exclude: + - spec/interactor/hooks_spec.rb +Style/IndentArray: + Exclude: + - spec/integration_spec.rb + - spec/interactor/hooks_spec.rb + +# Allow nice tree-like comments in specs +Style/AsciiComments: + Exclude: + - spec/integration_spec.rb + +# Here inconsistent indentation helps to understand +# tree nature of callbacks. +Style/AlignArray: + Exclude: + - spec/integration_spec.rb + +# Rubocop suggests using $INPUT_RECORD_SEPARATOR +# variable from stdlib 'English' module over $/. +# This module appeared in Ruby 2.0, so we could use it +# only if we drop 1.9.3 support +Style/SpecialGlobalVars: + Exclude: + - interactor.gemspec + +# This could be removed if throws are used instead of +# raising Failure in #fail! +Lint/HandleExceptions: + Exclude: + - lib/interactor.rb diff --git a/.travis.yml b/.travis.yml index 092f7fa..d36bbfa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -27,4 +27,4 @@ rvm: - "2.3.3" - "2.4.0" - ruby-head -script: bundle exec rspec +script: bundle exec rake diff --git a/Rakefile b/Rakefile index c92b11e..f0f5d6c 100644 --- a/Rakefile +++ b/Rakefile @@ -1,6 +1,8 @@ require "bundler/gem_tasks" require "rspec/core/rake_task" +require "rubocop/rake_task" RSpec::Core::RakeTask.new(:spec) +RuboCop::RakeTask.new(:rubocop) -task default: :spec +task default: [:spec, :rubocop] diff --git a/interactor.gemspec b/interactor.gemspec index 79c4338..c5240b0 100644 --- a/interactor.gemspec +++ b/interactor.gemspec @@ -6,7 +6,8 @@ Gem::Specification.new do |spec| spec.author = "Collective Idea" spec.email = "info@collectiveidea.com" - spec.description = "Interactor provides a common interface for performing complex user interactions." + spec.description = "Interactor provides a common interface for performing " \ + "complex user interactions." spec.summary = "Simple interactor implementation" spec.homepage = "https://github.com/collectiveidea/interactor" spec.license = "MIT" @@ -16,4 +17,5 @@ Gem::Specification.new do |spec| spec.add_development_dependency "bundler", "~> 1.7" spec.add_development_dependency "rake", "~> 10.3" + spec.add_development_dependency "rubocop", "~> 0.47.1" end diff --git a/lib/interactor.rb b/lib/interactor.rb index 2423630..d645ab3 100644 --- a/lib/interactor.rb +++ b/lib/interactor.rb @@ -153,14 +153,12 @@ def run! # each interactor class. # # Returns nothing. - def call - end + def call; end # Public: Reverse prior invocation of an Interactor instance. Any interactor # class that requires undoing upon downstream failure is expected to overwrite # the "rollback" instance method. # # Returns nothing. - def rollback - end + def rollback; end end diff --git a/lib/interactor/context.rb b/lib/interactor/context.rb index 030ef20..cb269d2 100644 --- a/lib/interactor/context.rb +++ b/lib/interactor/context.rb @@ -53,7 +53,7 @@ class Context < OpenStruct # # Returns the Interactor::Context. def self.build(context = {}) - self === context ? context : new(context) + context.is_a?(Context) ? context : new(context) end # Public: Whether the Interactor::Context is successful. By default, a new diff --git a/lib/interactor/hooks.rb b/lib/interactor/hooks.rb index d82e7a5..7ae4d00 100644 --- a/lib/interactor/hooks.rb +++ b/lib/interactor/hooks.rb @@ -219,9 +219,9 @@ def with_hooks # # Returns nothing. def run_around_hooks(&block) - self.class.around_hooks.reverse.inject(block) { |chain, hook| + self.class.around_hooks.reverse.inject(block) do |chain, hook| proc { run_hook(hook, chain) } - }.call + end.call end # Internal: Run before hooks. diff --git a/spec/integration_spec.rb b/spec/integration_spec.rb index 436f6b2..4177aaa 100644 --- a/spec/integration_spec.rb +++ b/spec/integration_spec.rb @@ -25,7 +25,8 @@ def build_organizer(options = {}, &block) # └─ interactor5 let(:organizer) { - build_organizer(organize: [organizer2, interactor3, organizer4, interactor5]) do + interactors = [organizer2, interactor3, organizer4, interactor5] + build_organizer(organize: interactors) do around do |interactor| context.steps << :around_before interactor.call @@ -315,7 +316,8 @@ def rollback context "when an around hook fails early" do let(:organizer) { - build_organizer(organize: [organizer2, interactor3, organizer4, interactor5]) do + interactors = [organizer2, interactor3, organizer4, interactor5] + build_organizer(organize: interactors) do around do |interactor| context.fail! context.steps << :around_before @@ -345,12 +347,10 @@ def rollback context "when an around hook errors early" do let(:organizer) { - build_organizer(organize: [organizer2, interactor3, organizer4, interactor5]) do - around do |interactor| + interactors = [organizer2, interactor3, organizer4, interactor5] + build_organizer(organize: interactors) do + around do |_interactor| raise "foo" - context.steps << :around_before - interactor.call - context.steps << :around_after end before do @@ -381,7 +381,8 @@ def rollback context "when a before hook fails" do let(:organizer) { - build_organizer(organize: [organizer2, interactor3, organizer4, interactor5]) do + interactors = [organizer2, interactor3, organizer4, interactor5] + build_organizer(organize: interactors) do around do |interactor| context.steps << :around_before interactor.call @@ -412,7 +413,8 @@ def rollback context "when a before hook errors" do let(:organizer) { - build_organizer(organize: [organizer2, interactor3, organizer4, interactor5]) do + interactors = [organizer2, interactor3, organizer4, interactor5] + build_organizer(organize: interactors) do around do |interactor| context.steps << :around_before interactor.call @@ -421,7 +423,6 @@ def rollback before do raise "foo" - context.steps << :before end after do @@ -449,7 +450,8 @@ def rollback context "when an after hook fails" do let(:organizer) { - build_organizer(organize: [organizer2, interactor3, organizer4, interactor5]) do + interactors = [organizer2, interactor3, organizer4, interactor5] + build_organizer(organize: interactors) do around do |interactor| context.steps << :around_before interactor.call @@ -500,7 +502,8 @@ def rollback context "when an after hook errors" do let(:organizer) { - build_organizer(organize: [organizer2, interactor3, organizer4, interactor5]) do + interactors = [organizer2, interactor3, organizer4, interactor5] + build_organizer(organize: interactors) do around do |interactor| context.steps << :around_before interactor.call @@ -513,7 +516,6 @@ def rollback after do raise "foo" - context.steps << :after end end } @@ -557,7 +559,8 @@ def rollback context "when an around hook fails late" do let(:organizer) { - build_organizer(organize: [organizer2, interactor3, organizer4, interactor5]) do + interactors = [organizer2, interactor3, organizer4, interactor5] + build_organizer(organize: interactors) do around do |interactor| context.steps << :around_before interactor.call @@ -609,12 +612,12 @@ def rollback context "when an around hook errors late" do let(:organizer) { - build_organizer(organize: [organizer2, interactor3, organizer4, interactor5]) do + interactors = [organizer2, interactor3, organizer4, interactor5] + build_organizer(organize: interactors) do around do |interactor| context.steps << :around_before interactor.call raise "foo" - context.steps << :around_after end before do @@ -715,11 +718,8 @@ def rollback context "when a nested around hook errors early" do let(:interactor3) { build_interactor do - around do |interactor| + around do |_interactor| raise "foo" - context.steps << :around_before3 - interactor.call - context.steps << :around_after3 end before do @@ -824,7 +824,6 @@ def rollback before do raise "foo" - context.steps << :before3 end after do @@ -934,7 +933,6 @@ def rollback def call raise "foo" - context.steps << :call3 end def rollback @@ -1033,7 +1031,6 @@ def rollback after do raise "foo" - context.steps << :after3 end def call @@ -1129,7 +1126,6 @@ def rollback context.steps << :around_before3 interactor.call raise "foo" - context.steps << :around_after3 end before do @@ -1232,11 +1228,8 @@ def rollback context "when a deeply nested around hook errors early" do let(:interactor4b) { build_interactor do - around do |interactor| + around do |_interactor| raise "foo" - context.steps << :around_before4b - interactor.call - context.steps << :around_after4b end before do @@ -1351,7 +1344,6 @@ def rollback before do raise "foo" - context.steps << :before4b end after do @@ -1471,7 +1463,6 @@ def rollback def call raise "foo" - context.steps << :call4b end def rollback @@ -1580,7 +1571,6 @@ def rollback after do raise "foo" - context.steps << :after4b end def call @@ -1686,7 +1676,6 @@ def rollback context.steps << :around_before4b interactor.call raise "foo" - context.steps << :around_after4b end before do diff --git a/spec/support/lint.rb b/spec/support/lint.rb index bfbc97c..b8fd9d3 100644 --- a/spec/support/lint.rb +++ b/spec/support/lint.rb @@ -43,7 +43,9 @@ let(:context) { double(:context) } it "initializes a context" do - expect(Interactor::Context).to receive(:build).once.with(foo: "bar") { context } + expect( + Interactor::Context + ).to receive(:build).once.with(foo: "bar") { context } instance = interactor.new(foo: "bar")