Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .githooks/pre-push
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ if [ $? -ne 0 ]; then
fi

echo
echo "Starting rubocop"
bundle exec rubocop --format worst --format simple --format offenses
echo "Starting standard"
bundle exec standardrb
if [ $? -ne 0 ]; then
echo ""
echo ""
echo "Rubocop failed; push aborted!"
echo "Standard failed; push aborted!"
exit 1
fi

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:

strategy:
matrix:
ruby-version: ['3.3', '3.2', '3.1', '3.0', '2.7']
ruby-version: ['3.4', '3.3', '3.2']

steps:
- uses: actions/checkout@v4
Expand Down
64 changes: 0 additions & 64 deletions .rubocop.yml

This file was deleted.

11 changes: 11 additions & 0 deletions .standard.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Standard Ruby configuration
# https://github.com/testdouble/standard

ruby_version: 3.2

ignore:
- 'bin/**/*'
- 'vendor/**/*'
- 'tmp/**/*'

fix: true
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
source 'https://rubygems.org'
source "https://rubygems.org"

# Specify your gem's dependencies in slayer.gemspec
gemspec
12 changes: 9 additions & 3 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
require 'bundler/gem_tasks'
require 'rspec/core/rake_task'
require "bundler/gem_tasks"
require "rspec/core/rake_task"

RSpec::Core::RakeTask.new(:spec)

task default: :spec
begin
require "standard/rake"
rescue LoadError
# Standard not available
end

task default: [:standard, :spec]
4 changes: 2 additions & 2 deletions lib/ext/string_ext.rb
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
class String
def underscore
word = dup
word.gsub!(/::/, '/')
word.gsub!("::", "/")
word.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
word.tr!('-', '_')
word.tr!("-", "_")
word.downcase!
word
end
Expand Down
14 changes: 7 additions & 7 deletions lib/slayer.rb
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
require 'ext/string_ext' unless defined?(Rails)
require "ext/string_ext" unless defined?(Rails)

require 'slayer/version'
require 'slayer/errors'
require 'slayer/result'
require 'slayer/result_matcher'
require 'slayer/command'
require 'slayer/form'
require "slayer/version"
require "slayer/errors"
require "slayer/result"
require "slayer/result_matcher"
require "slayer/command"
require "slayer/form"
32 changes: 14 additions & 18 deletions lib/slayer/command.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,15 @@ module Slayer
class Command
class << self
def call(*args, **kwargs, &block)
instance = self.new
instance = new

res = __get_result(instance, *args, **kwargs, &block)
handle_match(res, instance, block) if block_given?

raise CommandNotImplementedError unless res.is_a? Result

return res
res
end
ruby2_keywords :call if respond_to?(:ruby2_keywords, true)

def ok(value: nil, status: :default, message: nil)
Result.new(value, status, message)
Expand All @@ -22,17 +21,17 @@ def err(value: nil, status: :default, message: nil)
end

def err!(value: nil, status: :default, message: nil)
unless ENV['SUPPRESS_SLAYER_WARNINGS']
warn '[DEPRECATION] `err!` is deprecated. Please use `return err` instead.'
unless ENV["SUPPRESS_SLAYER_WARNINGS"]
warn "[DEPRECATION] `err!` is deprecated. Please use `return err` instead."
end
raise ResultFailureError, err(value: value, status: status, message: message)
end

def __get_result(instance, *args, **kwargs, &block)
def __get_result(instance, ...)
res = nil

begin
res = instance.call(*args, **kwargs, &block)
res = instance.call(...)
rescue ResultFailureError => e
res = e.result
end
Expand All @@ -49,7 +48,7 @@ def handle_match(res, instance, block)

# raise error if not all defaults were handled
unless matcher.handled_defaults?
raise(ResultNotHandledError, 'The pass or fail condition of a result was not handled')
raise(ResultNotHandledError, "The pass or fail condition of a result was not handled")
end

begin
Expand All @@ -60,20 +59,17 @@ def handle_match(res, instance, block)
end
end

def ok(*args)
self.class.ok(*args)
def ok(...)
self.class.ok(...)
end
ruby2_keywords :ok if respond_to?(:ruby2_keywords, true)

def err(*args)
self.class.err(*args)
def err(...)
self.class.err(...)
end
ruby2_keywords :err if respond_to?(:ruby2_keywords, true)

def err!(*args)
self.class.err!(*args)
def err!(...)
self.class.err!(...)
end
ruby2_keywords :err! if respond_to?(:ruby2_keywords, true)

def try!(value: nil, status: nil, message: nil)
r = yield
Expand All @@ -84,7 +80,7 @@ def try!(value: nil, status: nil, message: nil)
end

def call
raise NotImplementedError, 'Commands must define method `#call`.'
raise NotImplementedError, "Commands must define method `#call`."
end
end
end
22 changes: 11 additions & 11 deletions lib/slayer/compat/compat_040.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,48 +4,48 @@ module Slayer
class Command
class << self
def pass(value: nil, status: :default, message: nil)
warn '[DEPRECATION] `pass` is deprecated. Please use `ok` instead.' unless ENV['SUPPRESS_SLAYER_WARNINGS']
warn "[DEPRECATION] `pass` is deprecated. Please use `ok` instead." unless ENV["SUPPRESS_SLAYER_WARNINGS"]
ok(value: value, status: status, message: message)
end

def flunk(value: nil, status: :default, message: nil)
warn '[DEPRECATION] `flunk` is deprecated. Please use `err` instead.' unless ENV['SUPPRESS_SLAYER_WARNINGS']
warn "[DEPRECATION] `flunk` is deprecated. Please use `err` instead." unless ENV["SUPPRESS_SLAYER_WARNINGS"]
err(value: value, status: status, message: message)
end

def flunk!(value: nil, status: :default, message: nil)
unless ENV['SUPPRESS_SLAYER_WARNINGS']
warn '[DEPRECATION] `flunk!` is deprecated. Please use `return err` instead.'
unless ENV["SUPPRESS_SLAYER_WARNINGS"]
warn "[DEPRECATION] `flunk!` is deprecated. Please use `return err` instead."
end
err!(value: value, status: status, message: message)
end
end

alias pass ok
alias flunk err
alias flunk! err!
alias_method :pass, :ok
alias_method :flunk, :err
alias_method :flunk!, :err!
end

class Result
def success?
warn '[DEPRECATION] `success?` is deprecated. Please use `ok?` instead.' unless ENV['SUPPRESS_SLAYER_WARNINGS']
warn "[DEPRECATION] `success?` is deprecated. Please use `ok?` instead." unless ENV["SUPPRESS_SLAYER_WARNINGS"]
ok?
end

def failure?
warn '[DEPRECATION] `failure?` is deprecated. Please use `err?` instead.' unless ENV['SUPPRESS_SLAYER_WARNINGS']
warn "[DEPRECATION] `failure?` is deprecated. Please use `err?` instead." unless ENV["SUPPRESS_SLAYER_WARNINGS"]
err?
end
end

class ResultMatcher
def pass(...)
warn '[DEPRECATION] `pass` is deprecated. Please use `ok` instead.' unless ENV['SUPPRESS_SLAYER_WARNINGS']
warn "[DEPRECATION] `pass` is deprecated. Please use `ok` instead." unless ENV["SUPPRESS_SLAYER_WARNINGS"]
ok(...)
end

def fail(...)
warn '[DEPRECATION] `fail` is deprecated. Please use `err` instead.' unless ENV['SUPPRESS_SLAYER_WARNINGS']
warn "[DEPRECATION] `fail` is deprecated. Please use `err` instead." unless ENV["SUPPRESS_SLAYER_WARNINGS"]
err(...)
end
end
Expand Down
10 changes: 5 additions & 5 deletions lib/slayer/compat/minitest_compat_040.rb
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# :nocov:

require 'minitest/assertions'
require "minitest/assertions"

module Minitest::Assertions
alias assert_success assert_ok
alias refute_failed assert_ok
alias assert_failed refute_ok
alias refute_success refute_ok
alias_method :assert_success, :assert_ok
alias_method :refute_failed, :assert_ok
alias_method :assert_failed, :refute_ok
alias_method :refute_success, :refute_ok
end

# :nocov:
2 changes: 1 addition & 1 deletion lib/slayer/compat/rspec_compat_040.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# :nocov:

require 'rspec/expectations'
require "rspec/expectations"

RSpec::Matchers.alias_matcher :be_failed_result, :be_err_result
RSpec::Matchers.alias_matcher :be_success_result, :be_ok_result
Expand Down
14 changes: 7 additions & 7 deletions lib/slayer/cops/return_matcher.rb
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
require 'rubocop'
require "rubocop"

module Slayer
class CommandReturn < RuboCop::Cop::Base
def_node_search :explicit_returns, 'return'
def_node_matcher :slayer_command?, '(class (const (const nil :Slayer) :Command) _)'
def_node_matcher :is_call_to_pass?, '(send nil :pass ?)'
def_node_matcher :is_call_to_flunk?, '(send nil :flunk! ?)'
def_node_search :explicit_returns, "return"
def_node_matcher :slayer_command?, "(class (const (const nil :Slayer) :Command) _)"
def_node_matcher :is_call_to_pass?, "(send nil :pass ?)"
def_node_matcher :is_call_to_flunk?, "(send nil :flunk! ?)"

def on_def(node)
return unless node.method?(:call)
Expand All @@ -27,7 +27,7 @@ def on_def(node)
# Continue traversing `node` until you get to the last expression.
# If that expression is a call to `.can_see?`, then add an offense.
def implicit_returns(_node)
raise 'Not Implemented Yet'
raise "Not Implemented Yet"
end

def in_slayer_command?(node)
Expand All @@ -39,7 +39,7 @@ def validate_return!(node, return_node = nil)
return if is_call_to_flunk? node

add_offense(return_node || node,
message: 'call in Slayer::Command must return the result of `pass` or call `flunk!`')
message: "call in Slayer::Command must return the result of `pass` or call `flunk!`")
end
end
end
4 changes: 2 additions & 2 deletions lib/slayer/errors.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ def initialize(result)

class CommandNotImplementedError < StandardError
def initialize(message = nil)
message ||= 'Command implementation must return a <Slayer::Result> object'
super message
message ||= "Command implementation must return a <Slayer::Result> object"
super
end
end

Expand Down
2 changes: 1 addition & 1 deletion lib/slayer/form.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
require 'virtus'
require "virtus"

module Slayer
class Form
Expand Down
Loading
Loading