diff --git a/.rubocop.yml b/.rubocop.yml index 022318c..aa81f84 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,6 +1,7 @@ AllCops: SuggestExtensions: false TargetRubyVersion: 2.6 + NewCops: enable Metrics: Enabled: false diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 22a69f7..058d064 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -1,6 +1,6 @@ # This configuration was generated by # `rubocop --auto-gen-config` -# on 2023-03-02 20:56:34 UTC using RuboCop version 1.47.0. +# on 2023-07-26 19:57:49 UTC using RuboCop version 1.47.0. # 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 @@ -77,16 +77,6 @@ Style/GlobalStdStream: - 'spec/database_adapters/activerecord/activerecord.rb' - 'tasks/db.rake' -# Offense count: 18 -# This cop supports safe autocorrection (--autocorrect). -# Configuration parameters: EnforcedStyle, EnforcedShorthandSyntax, UseHashRocketsWithSymbolValues, PreferHashRocketsForNonAlnumEndingSymbols. -# SupportedStyles: ruby19, hash_rockets, no_mixed_keys, ruby19_no_mixed_keys -# SupportedShorthandSyntax: always, never, either, consistent -Style/HashSyntax: - Exclude: - - 'lib/slack-ruby-bot-server/api/endpoints/teams_endpoint.rb' - - 'lib/slack-ruby-bot-server/models/team/methods.rb' - # Offense count: 1 # This cop supports unsafe autocorrection (--autocorrect-all). Style/HashTransformKeys: @@ -99,6 +89,12 @@ Style/HashTransformValues: Exclude: - 'lib/slack-ruby-bot-server/api/helpers/error_helpers.rb' +# Offense count: 2 +# This cop supports unsafe autocorrection (--autocorrect-all). +Style/MapToHash: + Exclude: + - 'spec/support/api/endpoints/it_behaves_like_a_cursor_api.rb' + # Offense count: 1 # This cop supports unsafe autocorrection (--autocorrect-all). # Configuration parameters: EnforcedStyle, Autocorrect. diff --git a/Gemfile b/Gemfile index 00b15f7..1401663 100644 --- a/Gemfile +++ b/Gemfile @@ -1,6 +1,6 @@ source 'https://rubygems.org' -case ENV['DATABASE_ADAPTER'] +case ENV.fetch('DATABASE_ADAPTER', nil) when 'mongoid' then gem 'kaminari-mongoid' gem 'mongoid', ENV['MONGOID_VERSION'] || '~> 7.3.0' @@ -14,7 +14,7 @@ when 'activerecord' then when nil warn "Missing ENV['DATABASE_ADAPTER']." else - warn "Invalid ENV['DATABASE_ADAPTER']: #{ENV['DATABASE_ADAPTER']}." + warn "Invalid ENV['DATABASE_ADAPTER']: #{ENV.fetch('DATABASE_ADAPTER', nil)}." end gemspec diff --git a/Rakefile b/Rakefile index 26ae53d..a41c85d 100644 --- a/Rakefile +++ b/Rakefile @@ -5,7 +5,7 @@ require 'rspec/core' require 'rspec/core/rake_task' RSpec::Core::RakeTask.new(:spec) do |spec| - spec.pattern = FileList['spec/**/*_spec.rb'].exclude(%r{ext\/(?!#{ENV['DATABASE_ADAPTER']})}) + spec.pattern = FileList['spec/**/*_spec.rb'].exclude(%r{ext\/(?!#{ENV.fetch('DATABASE_ADAPTER', nil)})}) end require 'rubocop/rake_task' diff --git a/lib/slack-ruby-bot-server/api/endpoints/teams_endpoint.rb b/lib/slack-ruby-bot-server/api/endpoints/teams_endpoint.rb index 7147f80..0514dba 100644 --- a/lib/slack-ruby-bot-server/api/endpoints/teams_endpoint.rb +++ b/lib/slack-ruby-bot-server/api/endpoints/teams_endpoint.rb @@ -41,8 +41,8 @@ class TeamsEndpoint < Grape::API raise 'Missing SLACK_CLIENT_ID or SLACK_CLIENT_SECRET.' unless ENV.key?('SLACK_CLIENT_ID') && ENV.key?('SLACK_CLIENT_SECRET') options = { - client_id: ENV['SLACK_CLIENT_ID'], - client_secret: ENV['SLACK_CLIENT_SECRET'], + client_id: ENV.fetch('SLACK_CLIENT_ID', nil), + client_secret: ENV.fetch('SLACK_CLIENT_SECRET', nil), code: params[:code] } diff --git a/lib/slack-ruby-bot-server/api/middleware.rb b/lib/slack-ruby-bot-server/api/middleware.rb index 47d05ef..bc4eac2 100644 --- a/lib/slack-ruby-bot-server/api/middleware.rb +++ b/lib/slack-ruby-bot-server/api/middleware.rb @@ -1,7 +1,7 @@ require 'rack/cors' require 'rack-rewrite' require 'rack-server-pages' -require 'otr-activerecord' if SlackRubyBotServer::Config.activerecord? && !defined?(::Rails) +require 'otr-activerecord' if SlackRubyBotServer::Config.activerecord? && !defined?(Rails) module SlackRubyBotServer module Api diff --git a/lib/slack-ruby-bot-server/config/database_adapters/activerecord.rb b/lib/slack-ruby-bot-server/config/database_adapters/activerecord.rb index 267ed44..d7ea4ad 100644 --- a/lib/slack-ruby-bot-server/config/database_adapters/activerecord.rb +++ b/lib/slack-ruby-bot-server/config/database_adapters/activerecord.rb @@ -33,4 +33,4 @@ def self.init! end end -::Boolean = Grape::API::Boolean +Boolean = Grape::API::Boolean diff --git a/lib/slack-ruby-bot-server/service.rb b/lib/slack-ruby-bot-server/service.rb index c500264..8aac577 100644 --- a/lib/slack-ruby-bot-server/service.rb +++ b/lib/slack-ruby-bot-server/service.rb @@ -78,8 +78,8 @@ def start_from_database! start_intervals! end - def start_intervals! - ::Async::Reactor.run do + def start_intervals!(&_block) + ::Async::Reactor.run do |task| @intervals.each_pair do |period, calls_with_options| calls_with_options.each do |call_with_options| call, options = *call_with_options @@ -88,6 +88,7 @@ def start_intervals! end end end + yield task if block_given? end end diff --git a/slack-ruby-bot-server.gemspec b/slack-ruby-bot-server.gemspec index 2e3aadb..19532ab 100644 --- a/slack-ruby-bot-server.gemspec +++ b/slack-ruby-bot-server.gemspec @@ -24,4 +24,5 @@ Gem::Specification.new do |spec| spec.add_dependency 'rack-rewrite' spec.add_dependency 'rack-server-pages' spec.add_dependency 'slack-ruby-client' + spec.metadata['rubygems_mfa_required'] = 'true' end diff --git a/spec/database_adapters/activerecord/activerecord.rb b/spec/database_adapters/activerecord/activerecord.rb index b2fb6db..69d1f06 100644 --- a/spec/database_adapters/activerecord/activerecord.rb +++ b/spec/database_adapters/activerecord/activerecord.rb @@ -1,8 +1,8 @@ yml = ERB.new(File.read(File.expand_path('config/postgresql.yml', __dir__))).result db_config = if Gem::Version.new(Psych::VERSION) >= Gem::Version.new('3.1.0.pre1') - ::YAML.safe_load(yml, aliases: true)[ENV['RACK_ENV']] + YAML.safe_load(yml, aliases: true)[ENV.fetch('RACK_ENV', nil)] else - ::YAML.safe_load(yml, [], [], true)[ENV['RACK_ENV']] + YAML.safe_load(yml, [], [], true)[ENV.fetch('RACK_ENV', nil)] end ActiveRecord::Tasks::DatabaseTasks.create(db_config) ActiveRecord::Base.establish_connection(db_config) diff --git a/spec/database_adapters/mongoid/mongoid.rb b/spec/database_adapters/mongoid/mongoid.rb index e7b5dee..c0e750d 100644 --- a/spec/database_adapters/mongoid/mongoid.rb +++ b/spec/database_adapters/mongoid/mongoid.rb @@ -1,2 +1,2 @@ Mongo::Logger.logger.level = Logger::INFO -Mongoid.load!(File.expand_path('config/mongoid.yml', __dir__), ENV['RACK_ENV']) +Mongoid.load!(File.expand_path('config/mongoid.yml', __dir__), ENV.fetch('RACK_ENV', nil)) diff --git a/spec/slack-ruby-bot-server/service_spec.rb b/spec/slack-ruby-bot-server/service_spec.rb index 1e6323c..956fc09 100644 --- a/spec/slack-ruby-bot-server/service_spec.rb +++ b/spec/slack-ruby-bot-server/service_spec.rb @@ -56,10 +56,7 @@ let(:instance) { SlackRubyBotServer::Service.instance } context 'without timers' do it 'noop' do - Async::Reactor.run do |task| - instance.start_intervals! - task.stop - end + instance.start_intervals!(&:stop) expect(instance.instance_variable_get(:@intervals).keys).to eq [] end end @@ -94,8 +91,7 @@ end end it 'sets up timers' do - Async::Reactor.run do |task| - instance.start_intervals! + instance.start_intervals! do |task| task.sleep 3 task.stop end @@ -115,8 +111,7 @@ end end it 'does not abort all timers on failure of the first one' do - Async::Reactor.run do |task| - instance.start_intervals! + instance.start_intervals! do |task| task.sleep 3 task.stop end @@ -132,8 +127,7 @@ end end it 'runs the timer once within 3 seconds' do - Async::Reactor.run do |task| - instance.start_intervals! + instance.start_intervals! do |task| task.sleep 3 task.stop end @@ -148,8 +142,7 @@ end end it 'runs the timer exactly twice within 3 seconds' do - Async::Reactor.run do |task| - instance.start_intervals! + instance.start_intervals! do |task| task.sleep 3 task.stop end diff --git a/spec/support/api/endpoints/it_behaves_like_a_cursor_api.rb b/spec/support/api/endpoints/it_behaves_like_a_cursor_api.rb index f48139c..d998338 100644 --- a/spec/support/api/endpoints/it_behaves_like_a_cursor_api.rb +++ b/spec/support/api/endpoints/it_behaves_like_a_cursor_api.rb @@ -35,7 +35,7 @@ models_ids.concat(response.map { |instance| instance._links.self._url.gsub("http://example.org/api/#{model_ps}/", '') }) break unless response._links[:next] - next_cursor = Hash[CGI.parse(URI.parse(response._links.next._url).query).map { |a| [a[0], a[1][0]] }] + next_cursor = CGI.parse(URI.parse(response._links.next._url).query).map { |a| [a[0], a[1][0]] }.to_h end expect(models_ids.uniq.count).to eq model.all.count end @@ -48,7 +48,7 @@ models_ids.concat(response.map { |instance| instance._links.self._url.gsub("http://example.org/api/#{model_ps}/", '') }) break unless response._links[:next] - next_cursor = Hash[CGI.parse(URI.parse(response._links.next._url).query).map { |a| [a[0], a[1][0]] }] + next_cursor = CGI.parse(URI.parse(response._links.next._url).query).map { |a| [a[0], a[1][0]] }.to_h end expect(models_ids.uniq.count).to eq model.all.count - 3 end