slayer 0.5.4 → 0.6.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7a68e66d2025d43b8d41085b0f3c3b0b7a6af22c7231927fe85829afd2af0552
4
- data.tar.gz: a12f7e965d6c51a6c2136ca72fa3256e2c7bdab67393795b8f8f603c66405e50
3
+ metadata.gz: b6f82c242f8078a15915b6f27c700b7bc009a9d6548f24bf90fd17f7b9c5ab97
4
+ data.tar.gz: d1a7431e64c408467d91952f0370e07fb4e6793087a6a58e6ffa6ce15f72aa05
5
5
  SHA512:
6
- metadata.gz: 38c301ff78a9c2e4cbfbfbd1525fb57f4831c15dbd08518856c4062e80ed115af22544b8a7efa520eea9b2a0f773b28ed049282c4497e8c03bd8e4b2a678c0a8
7
- data.tar.gz: 586d23d4aa0af1df2e3f96d08ce8e41b54991f2a5d0a9a05bd45ab6b4dd9b39c0ddb3b9b1530b88d019d208710c194b1191570032d9da182362ffa7b7692f425
6
+ metadata.gz: 42c3853a16eb179369376edd9c96afd813904e245848511c6dc242da793846c897f90e6cdce5eb5fbbd190017f43001a1bbfccb33f9cfd6040581334056e68d9
7
+ data.tar.gz: 8b3c8268ee16209f7a752374f8048362b6b38f73c3382b2f6a6791ad1aa834deb281f65e4438c6c7c4697807c6b5a8c324f8005f3ce9e5fa5b47e92dc3661bf9
data/.githooks/pre-push CHANGED
@@ -17,12 +17,12 @@ if [ $? -ne 0 ]; then
17
17
  fi
18
18
 
19
19
  echo
20
- echo "Starting rubocop"
21
- bundle exec rubocop --format worst --format simple --format offenses
20
+ echo "Starting standard"
21
+ bundle exec standardrb
22
22
  if [ $? -ne 0 ]; then
23
23
  echo ""
24
24
  echo ""
25
- echo "Rubocop failed; push aborted!"
25
+ echo "Standard failed; push aborted!"
26
26
  exit 1
27
27
  fi
28
28
 
@@ -0,0 +1,60 @@
1
+ name: Publish
2
+ run-name: Publish ${{ github.ref_name }}
3
+
4
+ on:
5
+ push:
6
+ tags:
7
+ - "v*"
8
+
9
+ permissions:
10
+ contents: write
11
+
12
+ jobs:
13
+ publish:
14
+ name: Release ${{ github.ref_name }}
15
+ runs-on: ubuntu-latest
16
+
17
+ steps:
18
+ - name: Checkout
19
+ uses: actions/checkout@v6
20
+
21
+ - name: Setup Ruby
22
+ uses: ruby/setup-ruby@v1
23
+ with:
24
+ bundler-cache: true
25
+
26
+ - name: Build gem
27
+ run: bundle exec rake build
28
+
29
+ - name: Configure RubyGems credentials
30
+ run: |
31
+ mkdir -p ~/.gem
32
+ cat > ~/.gem/credentials <<EOF
33
+ ---
34
+ :rubygems_api_key: ${{ secrets.RUBYGEMS_AUTH_TOKEN }}
35
+ EOF
36
+ chmod 0600 ~/.gem/credentials
37
+
38
+ - name: Publish gem
39
+ run: gem push pkg/*.gem
40
+
41
+ - name: Create GitHub Release
42
+ env:
43
+ GH_TOKEN: ${{ github.token }}
44
+ run: |
45
+ TAG="${GITHUB_REF_NAME}"
46
+
47
+ if [[ "$TAG" =~ \.(pre|rc|beta)(\.|$) ]]; then
48
+ gh release create \
49
+ "$TAG" \
50
+ pkg/*.gem \
51
+ --title "$TAG" \
52
+ --generate-notes \
53
+ --prerelease
54
+ else
55
+ gh release create \
56
+ "$TAG" \
57
+ pkg/*.gem \
58
+ --title "$TAG" \
59
+ --generate-notes
60
+ fi
@@ -12,7 +12,7 @@ jobs:
12
12
 
13
13
  strategy:
14
14
  matrix:
15
- ruby-version: ['3.3', '3.2', '3.1', '3.0', '2.7']
15
+ ruby-version: ['4.0', '3.4', '3.3']
16
16
 
17
17
  steps:
18
18
  - uses: actions/checkout@v4
@@ -22,7 +22,5 @@ jobs:
22
22
  ruby-version: ${{ matrix.ruby-version }}
23
23
  - name: Install dependencies
24
24
  run: bundle install
25
- - name: Rubocop
26
- run: rubocop
27
- - name: Run tests
25
+ - name: Lint and test
28
26
  run: bundle exec rake
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.4
data/.standard.yml ADDED
@@ -0,0 +1,11 @@
1
+ # Standard Ruby configuration
2
+ # https://github.com/testdouble/standard
3
+
4
+ ruby_version: 3.3
5
+
6
+ ignore:
7
+ - 'bin/**/*'
8
+ - 'vendor/**/*'
9
+ - 'tmp/**/*'
10
+
11
+ fix: true
data/Gemfile CHANGED
@@ -1,4 +1,4 @@
1
- source 'https://rubygems.org'
1
+ source "https://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in slayer.gemspec
4
4
  gemspec
data/README.md CHANGED
@@ -421,12 +421,25 @@ require 'slayer/compat/rspec_compat_040'
421
421
 
422
422
  ## Development
423
423
 
424
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
424
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `bundle exec rake` to run the tests and lint checks. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
425
425
 
426
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
426
+ To install this gem onto your local machine, run `bundle exec rake install`.
427
427
 
428
428
  To generate documentation run `yard`. To view undocumented files run `yard stats --list-undoc`.
429
429
 
430
+ ### Releasing
431
+
432
+ Create a release from `main`:
433
+
434
+ ```sh
435
+ bin/release {major|minor|patch|pre}
436
+ git push --follow-tags
437
+ ```
438
+
439
+ The release script validates the repository, bumps the version, creates a git tag.
440
+
441
+ Publishing to RubyGems and creating a GitHub Release are handled automatically by GitHub Actions.
442
+
430
443
  ### Development w/ Docker
431
444
 
432
445
  $ docker-compose up
data/Rakefile CHANGED
@@ -1,6 +1,12 @@
1
- require 'bundler/gem_tasks'
2
- require 'rspec/core/rake_task'
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
3
 
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task default: :spec
6
+ begin
7
+ require "standard/rake"
8
+ rescue LoadError
9
+ # Standard not available
10
+ end
11
+
12
+ task default: [:standard, :spec]
data/bin/release ADDED
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ BUMP_TYPE="${1:-}"
6
+
7
+ case "$BUMP_TYPE" in
8
+ major|minor|patch|pre)
9
+ ;;
10
+ *)
11
+ echo "Usage: bin/release [major|minor|patch|pre]" >&2
12
+ exit 1
13
+ ;;
14
+ esac
15
+
16
+ run() {
17
+ echo "==> $*"
18
+ "$@"
19
+ }
20
+
21
+ if [ -n "$(git status --porcelain)" ]; then
22
+ echo "Git working tree is not clean" >&2
23
+ exit 1
24
+ fi
25
+
26
+ CURRENT_BRANCH="$(git branch --show-current)"
27
+
28
+ if [ "$CURRENT_BRANCH" != "main" ]; then
29
+ echo "Releases must be cut from main" >&2
30
+ exit 1
31
+ fi
32
+
33
+ run bundle exec bump "$BUMP_TYPE" --tag
34
+
35
+ VERSION="$(bundle exec bump current | awk '{print $NF}')"
36
+ TAG="v${VERSION}"
37
+
38
+ echo
39
+ echo "Released $TAG"
@@ -1,10 +1,10 @@
1
1
  class String
2
2
  def underscore
3
3
  word = dup
4
- word.gsub!(/::/, '/')
4
+ word.gsub!("::", "/")
5
5
  word.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
6
6
  word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
7
- word.tr!('-', '_')
7
+ word.tr!("-", "_")
8
8
  word.downcase!
9
9
  word
10
10
  end
@@ -2,16 +2,15 @@ module Slayer
2
2
  class Command
3
3
  class << self
4
4
  def call(*args, **kwargs, &block)
5
- instance = self.new
5
+ instance = new
6
6
 
7
7
  res = __get_result(instance, *args, **kwargs, &block)
8
8
  handle_match(res, instance, block) if block_given?
9
9
 
10
10
  raise CommandNotImplementedError unless res.is_a? Result
11
11
 
12
- return res
12
+ res
13
13
  end
14
- ruby2_keywords :call if respond_to?(:ruby2_keywords, true)
15
14
 
16
15
  def ok(value: nil, status: :default, message: nil)
17
16
  Result.new(value, status, message)
@@ -22,17 +21,17 @@ module Slayer
22
21
  end
23
22
 
24
23
  def err!(value: nil, status: :default, message: nil)
25
- unless ENV['SUPPRESS_SLAYER_WARNINGS']
26
- warn '[DEPRECATION] `err!` is deprecated. Please use `return err` instead.'
24
+ unless ENV["SUPPRESS_SLAYER_WARNINGS"]
25
+ warn "[DEPRECATION] `err!` is deprecated. Please use `return err` instead."
27
26
  end
28
27
  raise ResultFailureError, err(value: value, status: status, message: message)
29
28
  end
30
29
 
31
- def __get_result(instance, *args, **kwargs, &block)
30
+ def __get_result(instance, ...)
32
31
  res = nil
33
32
 
34
33
  begin
35
- res = instance.call(*args, **kwargs, &block)
34
+ res = instance.call(...)
36
35
  rescue ResultFailureError => e
37
36
  res = e.result
38
37
  end
@@ -49,7 +48,7 @@ module Slayer
49
48
 
50
49
  # raise error if not all defaults were handled
51
50
  unless matcher.handled_defaults?
52
- raise(ResultNotHandledError, 'The pass or fail condition of a result was not handled')
51
+ raise(ResultNotHandledError, "The pass or fail condition of a result was not handled")
53
52
  end
54
53
 
55
54
  begin
@@ -60,20 +59,17 @@ module Slayer
60
59
  end
61
60
  end
62
61
 
63
- def ok(*args)
64
- self.class.ok(*args)
62
+ def ok(...)
63
+ self.class.ok(...)
65
64
  end
66
- ruby2_keywords :ok if respond_to?(:ruby2_keywords, true)
67
65
 
68
- def err(*args)
69
- self.class.err(*args)
66
+ def err(...)
67
+ self.class.err(...)
70
68
  end
71
- ruby2_keywords :err if respond_to?(:ruby2_keywords, true)
72
69
 
73
- def err!(*args)
74
- self.class.err!(*args)
70
+ def err!(...)
71
+ self.class.err!(...)
75
72
  end
76
- ruby2_keywords :err! if respond_to?(:ruby2_keywords, true)
77
73
 
78
74
  def try!(value: nil, status: nil, message: nil)
79
75
  r = yield
@@ -84,7 +80,7 @@ module Slayer
84
80
  end
85
81
 
86
82
  def call
87
- raise NotImplementedError, 'Commands must define method `#call`.'
83
+ raise NotImplementedError, "Commands must define method `#call`."
88
84
  end
89
85
  end
90
86
  end
@@ -4,48 +4,48 @@ module Slayer
4
4
  class Command
5
5
  class << self
6
6
  def pass(value: nil, status: :default, message: nil)
7
- warn '[DEPRECATION] `pass` is deprecated. Please use `ok` instead.' unless ENV['SUPPRESS_SLAYER_WARNINGS']
7
+ warn "[DEPRECATION] `pass` is deprecated. Please use `ok` instead." unless ENV["SUPPRESS_SLAYER_WARNINGS"]
8
8
  ok(value: value, status: status, message: message)
9
9
  end
10
10
 
11
11
  def flunk(value: nil, status: :default, message: nil)
12
- warn '[DEPRECATION] `flunk` is deprecated. Please use `err` instead.' unless ENV['SUPPRESS_SLAYER_WARNINGS']
12
+ warn "[DEPRECATION] `flunk` is deprecated. Please use `err` instead." unless ENV["SUPPRESS_SLAYER_WARNINGS"]
13
13
  err(value: value, status: status, message: message)
14
14
  end
15
15
 
16
16
  def flunk!(value: nil, status: :default, message: nil)
17
- unless ENV['SUPPRESS_SLAYER_WARNINGS']
18
- warn '[DEPRECATION] `flunk!` is deprecated. Please use `return err` instead.'
17
+ unless ENV["SUPPRESS_SLAYER_WARNINGS"]
18
+ warn "[DEPRECATION] `flunk!` is deprecated. Please use `return err` instead."
19
19
  end
20
20
  err!(value: value, status: status, message: message)
21
21
  end
22
22
  end
23
23
 
24
- alias pass ok
25
- alias flunk err
26
- alias flunk! err!
24
+ alias_method :pass, :ok
25
+ alias_method :flunk, :err
26
+ alias_method :flunk!, :err!
27
27
  end
28
28
 
29
29
  class Result
30
30
  def success?
31
- warn '[DEPRECATION] `success?` is deprecated. Please use `ok?` instead.' unless ENV['SUPPRESS_SLAYER_WARNINGS']
31
+ warn "[DEPRECATION] `success?` is deprecated. Please use `ok?` instead." unless ENV["SUPPRESS_SLAYER_WARNINGS"]
32
32
  ok?
33
33
  end
34
34
 
35
35
  def failure?
36
- warn '[DEPRECATION] `failure?` is deprecated. Please use `err?` instead.' unless ENV['SUPPRESS_SLAYER_WARNINGS']
36
+ warn "[DEPRECATION] `failure?` is deprecated. Please use `err?` instead." unless ENV["SUPPRESS_SLAYER_WARNINGS"]
37
37
  err?
38
38
  end
39
39
  end
40
40
 
41
41
  class ResultMatcher
42
42
  def pass(...)
43
- warn '[DEPRECATION] `pass` is deprecated. Please use `ok` instead.' unless ENV['SUPPRESS_SLAYER_WARNINGS']
43
+ warn "[DEPRECATION] `pass` is deprecated. Please use `ok` instead." unless ENV["SUPPRESS_SLAYER_WARNINGS"]
44
44
  ok(...)
45
45
  end
46
46
 
47
47
  def fail(...)
48
- warn '[DEPRECATION] `fail` is deprecated. Please use `err` instead.' unless ENV['SUPPRESS_SLAYER_WARNINGS']
48
+ warn "[DEPRECATION] `fail` is deprecated. Please use `err` instead." unless ENV["SUPPRESS_SLAYER_WARNINGS"]
49
49
  err(...)
50
50
  end
51
51
  end
@@ -1,12 +1,12 @@
1
1
  # :nocov:
2
2
 
3
- require 'minitest/assertions'
3
+ require "minitest/assertions"
4
4
 
5
5
  module Minitest::Assertions
6
- alias assert_success assert_ok
7
- alias refute_failed assert_ok
8
- alias assert_failed refute_ok
9
- alias refute_success refute_ok
6
+ alias_method :assert_success, :assert_ok
7
+ alias_method :refute_failed, :assert_ok
8
+ alias_method :assert_failed, :refute_ok
9
+ alias_method :refute_success, :refute_ok
10
10
  end
11
11
 
12
12
  # :nocov:
@@ -1,6 +1,6 @@
1
1
  # :nocov:
2
2
 
3
- require 'rspec/expectations'
3
+ require "rspec/expectations"
4
4
 
5
5
  RSpec::Matchers.alias_matcher :be_failed_result, :be_err_result
6
6
  RSpec::Matchers.alias_matcher :be_success_result, :be_ok_result
@@ -1,11 +1,11 @@
1
- require 'rubocop'
1
+ require "rubocop"
2
2
 
3
3
  module Slayer
4
4
  class CommandReturn < RuboCop::Cop::Base
5
- def_node_search :explicit_returns, 'return'
6
- def_node_matcher :slayer_command?, '(class (const (const nil :Slayer) :Command) _)'
7
- def_node_matcher :is_call_to_pass?, '(send nil :pass ?)'
8
- def_node_matcher :is_call_to_flunk?, '(send nil :flunk! ?)'
5
+ def_node_search :explicit_returns, "return"
6
+ def_node_matcher :slayer_command?, "(class (const (const nil :Slayer) :Command) _)"
7
+ def_node_matcher :is_call_to_pass?, "(send nil :pass ?)"
8
+ def_node_matcher :is_call_to_flunk?, "(send nil :flunk! ?)"
9
9
 
10
10
  def on_def(node)
11
11
  return unless node.method?(:call)
@@ -27,7 +27,7 @@ module Slayer
27
27
  # Continue traversing `node` until you get to the last expression.
28
28
  # If that expression is a call to `.can_see?`, then add an offense.
29
29
  def implicit_returns(_node)
30
- raise 'Not Implemented Yet'
30
+ raise "Not Implemented Yet"
31
31
  end
32
32
 
33
33
  def in_slayer_command?(node)
@@ -39,7 +39,7 @@ module Slayer
39
39
  return if is_call_to_flunk? node
40
40
 
41
41
  add_offense(return_node || node,
42
- message: 'call in Slayer::Command must return the result of `pass` or call `flunk!`')
42
+ message: "call in Slayer::Command must return the result of `pass` or call `flunk!`")
43
43
  end
44
44
  end
45
45
  end
data/lib/slayer/errors.rb CHANGED
@@ -10,8 +10,8 @@ module Slayer
10
10
 
11
11
  class CommandNotImplementedError < StandardError
12
12
  def initialize(message = nil)
13
- message ||= 'Command implementation must return a <Slayer::Result> object'
14
- super message
13
+ message ||= "Command implementation must return a <Slayer::Result> object"
14
+ super
15
15
  end
16
16
  end
17
17
 
data/lib/slayer/form.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'virtus'
1
+ require "virtus"
2
2
 
3
3
  module Slayer
4
4
  class Form
@@ -1,9 +1,9 @@
1
1
  # :nocov:
2
- require 'minitest/assertions'
2
+ require "minitest/assertions"
3
3
  # rubocop:disable Metrics/MethodLength
4
4
  module Minitest::Assertions
5
5
  def assert_ok(result, status: nil, message: nil, value: nil)
6
- assert result.ok?, 'Expected command to succeed.'
6
+ assert result.ok?, "Expected command to succeed."
7
7
 
8
8
  unless status.nil?
9
9
  assert_equal(
@@ -29,10 +29,10 @@ module Minitest::Assertions
29
29
  )
30
30
  end
31
31
  end
32
- alias refute_err assert_ok
32
+ alias_method :refute_err, :assert_ok
33
33
 
34
34
  def refute_ok(result, status: nil, message: nil, value: nil)
35
- refute result.ok?, 'Expected command to fail.'
35
+ refute result.ok?, "Expected command to fail."
36
36
 
37
37
  unless status.nil?
38
38
  refute_equal(
@@ -58,7 +58,7 @@ module Minitest::Assertions
58
58
  )
59
59
  end
60
60
  end
61
- alias assert_err refute_ok
61
+ alias_method :assert_err, :refute_ok
62
62
  end
63
63
  # rubocop:enable Style/Documentation
64
64
  # rubocop:enable Metrics/MethodLength
data/lib/slayer/result.rb CHANGED
@@ -3,8 +3,8 @@ module Slayer
3
3
  attr_reader :value, :status, :message
4
4
 
5
5
  def initialize(value, status, message)
6
- @value = value
7
- @status = status
6
+ @value = value
7
+ @status = status
8
8
  @message = message
9
9
  end
10
10
 
@@ -110,11 +110,11 @@ module Slayer
110
110
 
111
111
  # These are set to false if they are never set. If they are set to `nil` that
112
112
  # means the block intentionally passed `nil` as the block to be executed.
113
- @matching_block = false
114
- @matching_all = false
115
- @default_block = false
116
- @default_all = false
117
- @ensure_block = false
113
+ @matching_block = false
114
+ @matching_all = false
115
+ @default_block = false
116
+ @default_all = false
117
+ @ensure_block = false
118
118
  end
119
119
 
120
120
  # Provide a block that should be invoked if the {Result} is a success.
@@ -129,11 +129,11 @@ module Slayer
129
129
  statuses << :default if statuses.empty?
130
130
  @handled_default_ok ||= statuses.include?(:default)
131
131
 
132
- block_is_match = @result.ok? && statuses.include?(@status)
132
+ block_is_match = @result.ok? && statuses.include?(@status)
133
133
  block_is_default = @result.ok? && statuses.include?(:default)
134
134
 
135
135
  @matching_block = block if block_is_match
136
- @default_block = block if block_is_default
136
+ @default_block = block if block_is_default
137
137
  end
138
138
 
139
139
  # Provide a block that should be invoked if the {Result} is a failure.
@@ -148,11 +148,11 @@ module Slayer
148
148
  statuses << :default if statuses.empty?
149
149
  @handled_default_err ||= statuses.include?(:default)
150
150
 
151
- block_is_match = @result.err? && statuses.include?(@status)
151
+ block_is_match = @result.err? && statuses.include?(@status)
152
152
  block_is_default = @result.err? && statuses.include?(:default)
153
153
 
154
154
  @matching_block = block if block_is_match
155
- @default_block = block if block_is_default
155
+ @default_block = block if block_is_default
156
156
  end
157
157
 
158
158
  # Provide a block that should be invoked for any {Result}. This has a lower precedence that
@@ -169,11 +169,11 @@ module Slayer
169
169
  @handled_default_ok ||= statuses.include?(:default)
170
170
  @handled_default_err ||= statuses.include?(:default)
171
171
 
172
- block_is_match = statuses.include?(@status)
172
+ block_is_match = statuses.include?(@status)
173
173
  block_is_default = statuses.include?(:default)
174
174
 
175
175
  @matching_all = block if block_is_match
176
- @default_all = block if block_is_default
176
+ @default_all = block if block_is_default
177
177
  end
178
178
 
179
179
  # Provide a block that should be always be invoked after other blocks have executed. This block
@@ -186,7 +186,7 @@ module Slayer
186
186
  #
187
187
  # @api private
188
188
  def handled_defaults?
189
- return @handled_default_ok && @handled_default_err
189
+ @handled_default_ok && @handled_default_err
190
190
  end
191
191
 
192
192
  # Executes the provided block that best matched the {Result}. If no block matched
data/lib/slayer/rspec.rb CHANGED
@@ -1,5 +1,5 @@
1
- require 'rspec/mocks'
2
- require 'rspec/expectations'
1
+ require "rspec/mocks"
2
+ require "rspec/expectations"
3
3
 
4
4
  # rubocop:disable Metrics/BlockLength
5
5
  RSpec::Matchers.define :be_ok_result do
@@ -31,7 +31,7 @@ RSpec::Matchers.define :be_ok_result do
31
31
 
32
32
  # :nocov:
33
33
  failure_message do |result|
34
- return 'expected command to succeed' if @status.nil? && @value.nil? && @message.nil?
34
+ return "expected command to succeed" if @status.nil? && @value.nil? && @message.nil?
35
35
  return "expected command to succeed with status: :#{@status}, but got: :#{result.status}" unless @status.nil?
36
36
  return "expected command to succeed with value: #{@value}, but got: #{result.value}" unless @value.nil?
37
37
  return "expected command to succeed with message: #{@message}, but got: :#{result.message}" unless @message.nil?
@@ -42,7 +42,7 @@ RSpec::Matchers.define :be_ok_result do
42
42
  return "expected command not to have value: #{@value}" if !@value.nil? && result.value == @value
43
43
  return "expected command not to have status :#{@status}" if !@status.nil? && result.status == @status
44
44
 
45
- return 'expected command to fail'
45
+ return "expected command to fail"
46
46
  end
47
47
  # :nocov:
48
48
  end
@@ -76,7 +76,7 @@ RSpec::Matchers.define :be_err_result do
76
76
 
77
77
  # :nocov:
78
78
  failure_message do |result|
79
- return 'expected command to fail' if @status.nil? && @value.nil? && @message.nil?
79
+ return "expected command to fail" if @status.nil? && @value.nil? && @message.nil?
80
80
  return "expected command to fail with status: :#{@status}, but got: :#{result.status}" unless @status.nil?
81
81
  return "expected command to fail with value: #{@value}, but got: #{result.value}" unless @value.nil?
82
82
  return "expected command to fail with message: #{@message}, but got: :#{result.message}" unless @message.nil?
@@ -87,7 +87,7 @@ RSpec::Matchers.define :be_err_result do
87
87
  return "expected command to have value: #{@value}" if !@value.nil? && result.value == @value
88
88
  return "expected command to have status :#{@status}" if !@status.nil? && result.status == @status
89
89
 
90
- return 'expected command to succeed'
90
+ return "expected command to succeed"
91
91
  end
92
92
  # :nocov:
93
93
  end
@@ -1,3 +1,3 @@
1
1
  module Slayer
2
- VERSION = '0.5.4'
2
+ VERSION = "0.6.1"
3
3
  end
data/lib/slayer.rb CHANGED
@@ -1,8 +1,8 @@
1
- require 'ext/string_ext' unless defined?(Rails)
1
+ require "ext/string_ext" unless defined?(Rails)
2
2
 
3
- require 'slayer/version'
4
- require 'slayer/errors'
5
- require 'slayer/result'
6
- require 'slayer/result_matcher'
7
- require 'slayer/command'
8
- require 'slayer/form'
3
+ require "slayer/version"
4
+ require "slayer/errors"
5
+ require "slayer/result"
6
+ require "slayer/result_matcher"
7
+ require "slayer/command"
8
+ require "slayer/form"
data/slayer.gemspec CHANGED
@@ -1,32 +1,36 @@
1
-
2
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path("lib", __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'slayer/version'
3
+ require "slayer/version"
5
4
 
6
5
  Gem::Specification.new do |spec|
7
- spec.name = 'slayer'
8
- spec.version = Slayer::VERSION
9
- spec.authors = ['Wyatt Kirby', 'Noah Callaway']
10
- spec.email = ['wyatt@apsis.io', 'noah@apsis.io']
6
+ spec.name = "slayer"
7
+ spec.version = Slayer::VERSION
8
+ spec.authors = ["Wyatt Kirby", "Noah Callaway"]
9
+ spec.email = ["wyatt@apsis.io", "noah@apsis.io"]
10
+
11
+ spec.summary = "A killer service layer"
12
+ spec.homepage = "http://www.apsis.io"
13
+ spec.license = "MIT"
14
+
15
+ spec.required_ruby_version = ">= 3.3.0"
11
16
 
12
- spec.summary = 'A killer service layer'
13
- spec.homepage = 'http://www.apsis.io'
14
- spec.license = 'MIT'
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = "exe"
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ["lib"]
15
21
 
16
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
- spec.bindir = 'exe'
18
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
- spec.require_paths = ['lib']
22
+ spec.add_dependency "bigdecimal"
23
+ spec.add_dependency "ostruct"
24
+ spec.add_dependency "virtus", "~> 2.0"
20
25
 
21
- spec.add_dependency 'virtus', '~> 2.0'
26
+ spec.add_development_dependency "bump"
27
+ spec.add_development_dependency "bundler", ">= 2.2.0"
28
+ spec.add_development_dependency "debug"
29
+ spec.add_development_dependency "minitest"
30
+ spec.add_development_dependency "rake", "~> 13.3"
31
+ spec.add_development_dependency "rspec", "~> 3.13"
32
+ spec.add_development_dependency "simplecov"
33
+ spec.add_development_dependency "standard"
22
34
 
23
- spec.add_development_dependency 'bundler', '~> 2.0'
24
- spec.add_development_dependency 'byebug', '~> 9.0'
25
- spec.add_development_dependency 'minitest', '~> 5.0'
26
- spec.add_development_dependency 'minitest-reporters', '~> 1.1'
27
- spec.add_development_dependency 'rspec', '~> 3.12'
28
- spec.add_development_dependency 'rake', '~> 13.0'
29
- spec.add_development_dependency 'rubocop', '= 1.38.0'
30
- spec.add_development_dependency 'simplecov'
31
- spec.add_development_dependency 'yard', '~> 0.9'
35
+ spec.metadata["rubygems_mfa_required"] = "true"
32
36
  end
metadata CHANGED
@@ -1,38 +1,51 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slayer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.4
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wyatt Kirby
8
8
  - Noah Callaway
9
- autorequire:
10
9
  bindir: exe
11
10
  cert_chain: []
12
- date: 2024-02-13 00:00:00.000000000 Z
11
+ date: 1980-01-02 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: virtus
14
+ name: bigdecimal
16
15
  requirement: !ruby/object:Gem::Requirement
17
16
  requirements:
18
- - - "~>"
17
+ - - ">="
19
18
  - !ruby/object:Gem::Version
20
- version: '2.0'
19
+ version: '0'
21
20
  type: :runtime
22
21
  prerelease: false
23
22
  version_requirements: !ruby/object:Gem::Requirement
24
23
  requirements:
25
- - - "~>"
24
+ - - ">="
26
25
  - !ruby/object:Gem::Version
27
- version: '2.0'
26
+ version: '0'
28
27
  - !ruby/object:Gem::Dependency
29
- name: bundler
28
+ name: ostruct
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: virtus
30
43
  requirement: !ruby/object:Gem::Requirement
31
44
  requirements:
32
45
  - - "~>"
33
46
  - !ruby/object:Gem::Version
34
47
  version: '2.0'
35
- type: :development
48
+ type: :runtime
36
49
  prerelease: false
37
50
  version_requirements: !ruby/object:Gem::Requirement
38
51
  requirements:
@@ -40,89 +53,89 @@ dependencies:
40
53
  - !ruby/object:Gem::Version
41
54
  version: '2.0'
42
55
  - !ruby/object:Gem::Dependency
43
- name: byebug
56
+ name: bump
44
57
  requirement: !ruby/object:Gem::Requirement
45
58
  requirements:
46
- - - "~>"
59
+ - - ">="
47
60
  - !ruby/object:Gem::Version
48
- version: '9.0'
61
+ version: '0'
49
62
  type: :development
50
63
  prerelease: false
51
64
  version_requirements: !ruby/object:Gem::Requirement
52
65
  requirements:
53
- - - "~>"
66
+ - - ">="
54
67
  - !ruby/object:Gem::Version
55
- version: '9.0'
68
+ version: '0'
56
69
  - !ruby/object:Gem::Dependency
57
- name: minitest
70
+ name: bundler
58
71
  requirement: !ruby/object:Gem::Requirement
59
72
  requirements:
60
- - - "~>"
73
+ - - ">="
61
74
  - !ruby/object:Gem::Version
62
- version: '5.0'
75
+ version: 2.2.0
63
76
  type: :development
64
77
  prerelease: false
65
78
  version_requirements: !ruby/object:Gem::Requirement
66
79
  requirements:
67
- - - "~>"
80
+ - - ">="
68
81
  - !ruby/object:Gem::Version
69
- version: '5.0'
82
+ version: 2.2.0
70
83
  - !ruby/object:Gem::Dependency
71
- name: minitest-reporters
84
+ name: debug
72
85
  requirement: !ruby/object:Gem::Requirement
73
86
  requirements:
74
- - - "~>"
87
+ - - ">="
75
88
  - !ruby/object:Gem::Version
76
- version: '1.1'
89
+ version: '0'
77
90
  type: :development
78
91
  prerelease: false
79
92
  version_requirements: !ruby/object:Gem::Requirement
80
93
  requirements:
81
- - - "~>"
94
+ - - ">="
82
95
  - !ruby/object:Gem::Version
83
- version: '1.1'
96
+ version: '0'
84
97
  - !ruby/object:Gem::Dependency
85
- name: rspec
98
+ name: minitest
86
99
  requirement: !ruby/object:Gem::Requirement
87
100
  requirements:
88
- - - "~>"
101
+ - - ">="
89
102
  - !ruby/object:Gem::Version
90
- version: '3.12'
103
+ version: '0'
91
104
  type: :development
92
105
  prerelease: false
93
106
  version_requirements: !ruby/object:Gem::Requirement
94
107
  requirements:
95
- - - "~>"
108
+ - - ">="
96
109
  - !ruby/object:Gem::Version
97
- version: '3.12'
110
+ version: '0'
98
111
  - !ruby/object:Gem::Dependency
99
112
  name: rake
100
113
  requirement: !ruby/object:Gem::Requirement
101
114
  requirements:
102
115
  - - "~>"
103
116
  - !ruby/object:Gem::Version
104
- version: '13.0'
117
+ version: '13.3'
105
118
  type: :development
106
119
  prerelease: false
107
120
  version_requirements: !ruby/object:Gem::Requirement
108
121
  requirements:
109
122
  - - "~>"
110
123
  - !ruby/object:Gem::Version
111
- version: '13.0'
124
+ version: '13.3'
112
125
  - !ruby/object:Gem::Dependency
113
- name: rubocop
126
+ name: rspec
114
127
  requirement: !ruby/object:Gem::Requirement
115
128
  requirements:
116
- - - '='
129
+ - - "~>"
117
130
  - !ruby/object:Gem::Version
118
- version: 1.38.0
131
+ version: '3.13'
119
132
  type: :development
120
133
  prerelease: false
121
134
  version_requirements: !ruby/object:Gem::Requirement
122
135
  requirements:
123
- - - '='
136
+ - - "~>"
124
137
  - !ruby/object:Gem::Version
125
- version: 1.38.0
138
+ version: '3.13'
126
139
  - !ruby/object:Gem::Dependency
127
140
  name: simplecov
128
141
  requirement: !ruby/object:Gem::Requirement
@@ -138,20 +151,19 @@ dependencies:
138
151
  - !ruby/object:Gem::Version
139
152
  version: '0'
140
153
  - !ruby/object:Gem::Dependency
141
- name: yard
154
+ name: standard
142
155
  requirement: !ruby/object:Gem::Requirement
143
156
  requirements:
144
- - - "~>"
157
+ - - ">="
145
158
  - !ruby/object:Gem::Version
146
- version: '0.9'
159
+ version: '0'
147
160
  type: :development
148
161
  prerelease: false
149
162
  version_requirements: !ruby/object:Gem::Requirement
150
163
  requirements:
151
- - - "~>"
164
+ - - ">="
152
165
  - !ruby/object:Gem::Version
153
- version: '0.9'
154
- description:
166
+ version: '0'
155
167
  email:
156
168
  - wyatt@apsis.io
157
169
  - noah@apsis.io
@@ -160,11 +172,12 @@ extensions: []
160
172
  extra_rdoc_files: []
161
173
  files:
162
174
  - ".githooks/pre-push"
163
- - ".github/workflows/release.yml"
175
+ - ".github/workflows/publish.yml"
164
176
  - ".github/workflows/test.yml"
165
177
  - ".gitignore"
166
178
  - ".rspec"
167
- - ".rubocop.yml"
179
+ - ".ruby-version"
180
+ - ".standard.yml"
168
181
  - Dockerfile
169
182
  - Gemfile
170
183
  - LICENSE.txt
@@ -173,6 +186,7 @@ files:
173
186
  - bin/console
174
187
  - bin/helpers/docker
175
188
  - bin/install-githooks
189
+ - bin/release
176
190
  - bin/rubo_fix
177
191
  - bin/run_tests
178
192
  - bin/setup
@@ -198,8 +212,8 @@ files:
198
212
  homepage: http://www.apsis.io
199
213
  licenses:
200
214
  - MIT
201
- metadata: {}
202
- post_install_message:
215
+ metadata:
216
+ rubygems_mfa_required: 'true'
203
217
  rdoc_options: []
204
218
  require_paths:
205
219
  - lib
@@ -207,15 +221,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
207
221
  requirements:
208
222
  - - ">="
209
223
  - !ruby/object:Gem::Version
210
- version: '0'
224
+ version: 3.3.0
211
225
  required_rubygems_version: !ruby/object:Gem::Requirement
212
226
  requirements:
213
227
  - - ">="
214
228
  - !ruby/object:Gem::Version
215
229
  version: '0'
216
230
  requirements: []
217
- rubygems_version: 3.4.19
218
- signing_key:
231
+ rubygems_version: 3.6.9
219
232
  specification_version: 4
220
233
  summary: A killer service layer
221
234
  test_files: []
@@ -1,27 +0,0 @@
1
- # .github/workflows/release.yml
2
-
3
- name: Release
4
-
5
- on:
6
- workflow_dispatch:
7
-
8
- jobs:
9
- release:
10
- runs-on: ubuntu-latest
11
- steps:
12
- - uses: actions/checkout@v4
13
- - uses: ruby/setup-ruby@v1
14
- with:
15
- ruby-version: 3.2
16
- - run: bundle install
17
- - name: publish gem
18
- run: |
19
- mkdir -p $HOME/.gem
20
- touch $HOME/.gem/credentials
21
- chmod 0600 $HOME/.gem/credentials
22
- printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
23
- gem build *.gemspec
24
- gem push *.gem
25
- env:
26
- GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
27
-
data/.rubocop.yml DELETED
@@ -1,64 +0,0 @@
1
- AllCops:
2
- NewCops: enable
3
- SuggestExtensions: false
4
- TargetRubyVersion: 3.1
5
- Include:
6
- - 'lib/**/*.rb'
7
- - 'test/**/*.rb'
8
- - 'spec/**/*.rb'
9
- - '**/Gemfile'
10
- - '**/Rakefile'
11
- Exclude:
12
- - 'bin/**/*'
13
- - 'test/fixtures/**/*.rb'
14
-
15
- Style/HashSyntax:
16
- EnforcedShorthandSyntax: never
17
-
18
- Style/Documentation:
19
- Enabled: false
20
-
21
- Naming/BlockForwarding:
22
- Enabled: false
23
-
24
- Style/RedundantSelf:
25
- Enabled: false
26
-
27
- Style/RedundantReturn:
28
- Enabled: false
29
-
30
- Style/GuardClause:
31
- Enabled: false
32
-
33
- Style/ClassAndModuleChildren:
34
- Enabled: false
35
-
36
- Layout/EmptyLinesAroundClassBody:
37
- Enabled: false
38
-
39
- Style/FrozenStringLiteralComment:
40
- Enabled: false
41
-
42
- Layout/CommentIndentation:
43
- Enabled: false
44
-
45
- Layout/LineLength:
46
- Max: 120
47
-
48
- Metrics/ClassLength:
49
- Max: 120
50
-
51
- Layout/EmptyLineBetweenDefs:
52
- AllowAdjacentOneLineDefs: true
53
-
54
- Naming/MethodParameterName:
55
- AllowedNames:
56
- - _
57
-
58
- Style/ClassVars:
59
- Exclude:
60
- - 'lib/slayer/service.rb'
61
-
62
- Style/MutableConstant:
63
- Exclude:
64
- - 'lib/slayer/version.rb'