fix 1.0.0.beta8 → 1.0.0.beta10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9d095777befeb78f0e16a218f3f14c0f8b39955265db3848cd26a0afb0b224f3
4
- data.tar.gz: d918e8bfd693765450dfb14477f4fe9285642e22a35995446b89acac78662837
3
+ metadata.gz: af0a01072f39d7c105aff0bde77c97ce31c9aae8a1144e29a00b9098017cb436
4
+ data.tar.gz: cab7ff1e39fc58599b712ff53597534535e86bf1422f0f10c926e14d1e267e3f
5
5
  SHA512:
6
- metadata.gz: c063f295f4d133635d70da15659c613018b51931db21d40c3bedb7db9b442fa756e8ed52833fc49333a816749df99c73956d43c237159f7bd6e728ea36e7791d
7
- data.tar.gz: 1e4317121e610e67d0d396571b86e0a82b07c16122cc0be5c2c7ee5514136d9ec349282b643f06fe6d7f7b33cd04584048cf72ec3d8d88345e93f1135e7d5dee
6
+ metadata.gz: 90f831b90a8faaabf56db03f17d03905e6c41eb18e0f1873db78e0de30540e46b4b395c7fb19f80b3ccbc6b3e560978c42fb0ff8066b6b912151f2785249b51b
7
+ data.tar.gz: 4b1f58e67584042977f803b53119d090e76f9848b6b470a86aeefaa5f5a195afe11f3ab98d3383e1c5e1e819ff570b890bff58aa734d2c19c6e3079d75a95ffd
data/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
- The MIT License (MIT)
1
+ # The MIT License
2
2
 
3
- Copyright (c) 2014-2021 Cyril Kato
3
+ Copyright (c) 2014-2024 Cyril Kato
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,38 +1,36 @@
1
1
  # Fix
2
2
 
3
3
  [![Home](https://img.shields.io/badge/Home-fixrb.dev-00af8b)](https://fixrb.dev/)
4
- [![Version](https://img.shields.io/github/v/tag/fixrb/fix?label=Version&logo=github)](https://github.com/fixrb/fix/releases)
4
+ [![Version](https://img.shields.io/github/v/tag/fixrb/fix?label=Version&logo=github)](https://github.com/fixrb/fix/tags)
5
5
  [![Yard documentation](https://img.shields.io/badge/Yard-documentation-blue.svg?logo=github)](https://rubydoc.info/github/fixrb/fix/main)
6
- [![CI](https://github.com/fixrb/fix/workflows/CI/badge.svg?branch=main)](https://github.com/fixrb/fix/actions?query=workflow%3Aci+branch%3Amain)
6
+ [![Ruby](https://github.com/fixrb/fix/workflows/Ruby/badge.svg?branch=main)](https://github.com/fixrb/fix/actions?query=workflow%3Aruby+branch%3Amain)
7
7
  [![RuboCop](https://github.com/fixrb/fix/workflows/RuboCop/badge.svg?branch=main)](https://github.com/fixrb/fix/actions?query=workflow%3Arubocop+branch%3Amain)
8
8
  [![License](https://img.shields.io/github/license/fixrb/fix?label=License&logo=github)](https://github.com/fixrb/fix/raw/main/LICENSE.md)
9
9
 
10
- ⚠️ This project is still in the experimental phase. May be used at your own risk.
10
+ ![Fix specing framework for Ruby](https://fixrb.dev/fix.webp "Fix")
11
11
 
12
- ![Fix specing framework for Ruby](https://fixrb.dev/fix.webp)
12
+ ## Project Goals
13
13
 
14
- ## Project goals
15
-
16
- * Extract specs from the tests.
17
- * Look like English documents.
18
- * Be minimalist and easy to use.
19
- * Run tests quickly.
14
+ - **Distinguish Specifications from Examples**: Clear separation between what is expected (specifications) and how it's demonstrated (examples).
15
+ - **Logic-Free Specification Documents**: Create specifications that are straightforward and free of complex logic, focusing purely on defining expected behaviors.
16
+ - **Nuanced Semantic Language in Specifications**: Utilize a rich, nuanced semantic language, similar to that in RFC 2119, employing keywords like MUST, SHOULD, and MAY to define different levels of requirement in specifications.
17
+ - **Fast and Individual Test Execution**: Enable quick execution of tests on an individual basis, providing immediate feedback on compliance with specifications.
20
18
 
21
19
  ## Installation
22
20
 
23
- Add this line to your application's Gemfile:
21
+ Add to your Gemfile:
24
22
 
25
23
  ```ruby
26
- gem "fix", ">= 1.0.0.beta8"
24
+ gem "fix", ">= 1.0.0.beta10"
27
25
  ```
28
26
 
29
- And then execute:
27
+ Then execute:
30
28
 
31
29
  ```sh
32
- bundle
30
+ bundle install
33
31
  ```
34
32
 
35
- Or install it yourself as:
33
+ Or install it yourself:
36
34
 
37
35
  ```sh
38
36
  gem install fix --pre
@@ -40,7 +38,7 @@ gem install fix --pre
40
38
 
41
39
  ## Example
42
40
 
43
- Given these specifications:
41
+ Specifications for a `Duck` class:
44
42
 
45
43
  ```ruby
46
44
  # examples/duck/fix.rb
@@ -65,10 +63,11 @@ Fix :Duck do
65
63
  end
66
64
  ```
67
65
 
68
- When we load this `Duck` application:
66
+ Implementing the `Duck` class:
69
67
 
70
68
  ```ruby
71
69
  # examples/duck/app.rb
70
+
72
71
  class Duck
73
72
  def walks
74
73
  "Klop klop!"
@@ -84,7 +83,7 @@ class Duck
84
83
  end
85
84
  ```
86
85
 
87
- And we run this test:
86
+ Running the test:
88
87
 
89
88
  ```ruby
90
89
  # examples/duck/test.rb
@@ -92,14 +91,16 @@ And we run this test:
92
91
  require_relative "app"
93
92
  require_relative "fix"
94
93
 
95
- Fix[:Duck].against { Duck.new }
94
+ Fix[:Duck].test { Duck.new }
96
95
  ```
97
96
 
97
+ Execute:
98
+
98
99
  ```sh
99
100
  ruby examples/duck/test.rb
100
101
  ```
101
102
 
102
- We should see this output:
103
+ Expected output:
103
104
 
104
105
  ```txt
105
106
  (irb):3 Success: expected #<Duck:0x00007fb2fa208708> to be an instance of Duck.
@@ -111,10 +112,10 @@ We should see this output:
111
112
 
112
113
  ## Contact
113
114
 
114
- * Home page: [https://fixrb.dev/](https://fixrb.dev/)
115
- * Source code: [https://github.com/fixrb/fix](https://github.com/fixrb/fix)
116
- * API Doc: [https://rubydoc.info/gems/fix](https://rubydoc.info/gems/fix)
117
- * Twitter: [https://twitter.com/fix\_rb](https://twitter.com/fix\_rb)
115
+ - [Home page](https://fixrb.dev/)
116
+ - [Source code](https://github.com/fixrb/fix)
117
+ - [API Documentation](https://rubydoc.info/gems/fix)
118
+ - [Twitter](https://twitter.com/fix_rb)
118
119
 
119
120
  ## Versioning
120
121
 
@@ -124,11 +125,11 @@ __Fix__ follows [Semantic Versioning 2.0](https://semver.org/).
124
125
 
125
126
  The [gem](https://rubygems.org/gems/fix) is available as open source under the terms of the [MIT License](https://github.com/fixrb/fix/raw/main/LICENSE.md).
126
127
 
127
- ***
128
+ ---
128
129
 
129
130
  <p>
130
131
  This project is sponsored by:<br />
131
132
  <a href="https://sashite.com/"><img
132
133
  src="https://github.com/fixrb/fix/raw/main/img/sashite.png"
133
- alt="Sashite" /></a>
134
+ alt="Sashité" /></a>
134
135
  </p>
data/lib/fix/dsl.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "defi"
3
+ require "defi/method"
4
4
 
5
5
  require_relative "matcher"
6
6
  require_relative "requirement"
@@ -22,14 +22,15 @@ module Fix
22
22
  # let(:name) { "Bob" }
23
23
  # end
24
24
  #
25
- # @param name [String, Symbol] The name of the property.
26
- # @param block [Proc] The content of the method to define.
25
+ # @param name [String, Symbol] The name of the property.
26
+ # @yield The block that defines the property's value
27
+ # @yieldreturn [Object] The value to be returned by the property
27
28
  #
28
29
  # @return [Symbol] A private method that define the block content.
29
30
  #
30
31
  # @api public
31
- def self.let(name, &block)
32
- private define_method(name, &block)
32
+ def self.let(name, &)
33
+ private define_method(name, &)
33
34
  end
34
35
 
35
36
  # Defines an example group with user-defined properties that describes a
@@ -39,20 +40,21 @@ module Fix
39
40
  # require "fix"
40
41
  #
41
42
  # Fix do
42
- # with :password, "secret" do
43
+ # with password: "secret" do
43
44
  # it MUST be true
44
45
  # end
45
46
  # end
46
47
  #
47
48
  # @param kwargs [Hash] The list of propreties.
48
- # @param block [Proc] The block to define the specs.
49
+ # @yield The block that defines the specs for this context
50
+ # @yieldreturn [void]
49
51
  #
50
52
  # @api public
51
- def self.with(**kwargs, &block)
53
+ def self.with(**kwargs, &)
52
54
  klass = ::Class.new(self)
53
55
  klass.const_get(:CONTEXTS) << klass
54
56
  kwargs.each { |name, value| klass.let(name) { value } }
55
- klass.instance_eval(&block)
57
+ klass.instance_eval(&)
56
58
  klass
57
59
  end
58
60
 
@@ -75,10 +77,10 @@ module Fix
75
77
  klass = ::Class.new(self)
76
78
  klass.const_get(:CONTEXTS) << klass
77
79
 
78
- const_set("Child#{block.object_id}", klass)
80
+ const_set(:"Child#{block.object_id}", klass)
79
81
 
80
82
  klass.define_singleton_method(:challenges) do
81
- challenge = ::Defi.send(method_name, *args, **kwargs)
83
+ challenge = ::Defi::Method.new(method_name, *args, **kwargs)
82
84
  super() + [challenge]
83
85
  end
84
86
 
@@ -98,14 +100,14 @@ module Fix
98
100
  location = caller_locations(1, 1).fetch(0)
99
101
  location = [location.path, location.lineno].join(":")
100
102
 
101
- define_method("test_#{requirement.object_id}") do
103
+ define_method(:"test_#{requirement.object_id}") do
102
104
  [location, requirement, self.class.challenges]
103
105
  end
104
106
  end
105
107
 
106
108
  # The list of challenges to be addressed to the object to be tested.
107
109
  #
108
- # @return [Array<Defi::Challenge>] A list of challenges.
110
+ # @return [Array<Defi::Method>] A list of challenges.
109
111
  def self.challenges
110
112
  []
111
113
  end
data/lib/fix/matcher.rb CHANGED
@@ -181,14 +181,12 @@ module Fix
181
181
  #
182
182
  # @param object [#object_id] An object.
183
183
  # @param method [Symbol] The name of a method.
184
- # @param args [Array] A list of arguments.
185
- # @param kwargs [Hash] A list of keyword arguments.
186
184
  #
187
185
  # @return [#matches?] A change matcher.
188
186
  #
189
187
  # @api public
190
- def change(object, method, *args, **kwargs, &block)
191
- ::Matchi::Change.new(object, method, *args, **kwargs, &block)
188
+ def change(object, method, ...)
189
+ ::Matchi::Change.new(object, method, ...)
192
190
  end
193
191
 
194
192
  # Satisfy matcher
@@ -197,13 +195,15 @@ module Fix
197
195
  # matcher = satisfy { |value| value == 42 }
198
196
  # matcher.matches? { 42 } # => true
199
197
  #
200
- # @param expected [Proc] A block of code.
198
+ # @yield [value] A block that defines the satisfaction criteria
199
+ # @yieldparam value The value to test
200
+ # @yieldreturn [Boolean] true if the value satisfies the criteria
201
201
  #
202
202
  # @return [#matches?] A satisfy matcher.
203
203
  #
204
204
  # @api public
205
- def satisfy(&expected)
206
- ::Matchi::Satisfy.new(&expected)
205
+ def satisfy(&)
206
+ ::Matchi::Satisfy.new(&)
207
207
  end
208
208
 
209
209
  private
@@ -214,10 +214,10 @@ module Fix
214
214
  # matcher = be_empty
215
215
  # matcher.matches? { [] } # => true
216
216
  # matcher.matches? { [4] } # => false
217
- def method_missing(name, *args, **kwargs, &block)
217
+ def method_missing(name, ...)
218
218
  return super unless predicate_matcher_name?(name)
219
219
 
220
- ::Matchi::Predicate.new(name, *args, **kwargs, &block)
220
+ ::Matchi::Predicate.new(name, ...)
221
221
  end
222
222
 
223
223
  # :nocov:
@@ -20,22 +20,7 @@ module Fix
20
20
  #
21
21
  # @api public
22
22
  def MUST(matcher)
23
- ::Spectus::Requirement::Required.new(
24
- isolate: false,
25
- negate: false,
26
- matcher: matcher
27
- )
28
- end
29
-
30
- # @see MUST
31
- #
32
- # @api public
33
- def MUST!(matcher)
34
- ::Spectus::Requirement::Required.new(
35
- isolate: true,
36
- negate: false,
37
- matcher: matcher
38
- )
23
+ ::Spectus::Requirement::Required.new(negate: false, matcher:)
39
24
  end
40
25
 
41
26
  # This method mean that the definition is an absolute prohibition of the specification.
@@ -46,22 +31,7 @@ module Fix
46
31
  #
47
32
  # @api public
48
33
  def MUST_NOT(matcher)
49
- ::Spectus::Requirement::Required.new(
50
- isolate: false,
51
- negate: true,
52
- matcher: matcher
53
- )
54
- end
55
-
56
- # @see MUST_NOT
57
- #
58
- # @api public
59
- def MUST_NOT!(matcher)
60
- ::Spectus::Requirement::Required.new(
61
- isolate: true,
62
- negate: true,
63
- matcher: matcher
64
- )
34
+ ::Spectus::Requirement::Required.new(negate: true, matcher:)
65
35
  end
66
36
 
67
37
  # This method mean that there may exist valid reasons in particular
@@ -74,22 +44,7 @@ module Fix
74
44
  #
75
45
  # @api public
76
46
  def SHOULD(matcher)
77
- ::Spectus::Requirement::Recommended.new(
78
- isolate: false,
79
- negate: false,
80
- matcher: matcher
81
- )
82
- end
83
-
84
- # @see SHOULD
85
- #
86
- # @api public
87
- def SHOULD!(matcher)
88
- ::Spectus::Requirement::Recommended.new(
89
- isolate: true,
90
- negate: false,
91
- matcher: matcher
92
- )
47
+ ::Spectus::Requirement::Recommended.new(negate: false, matcher:)
93
48
  end
94
49
 
95
50
  # This method mean that there may exist valid reasons in particular
@@ -104,22 +59,7 @@ module Fix
104
59
  #
105
60
  # @api public
106
61
  def SHOULD_NOT(matcher)
107
- ::Spectus::Requirement::Recommended.new(
108
- isolate: false,
109
- negate: true,
110
- matcher: matcher
111
- )
112
- end
113
-
114
- # @see SHOULD_NOT
115
- #
116
- # @api public
117
- def SHOULD_NOT!(matcher)
118
- ::Spectus::Requirement::Recommended.new(
119
- isolate: true,
120
- negate: true,
121
- matcher: matcher
122
- )
62
+ ::Spectus::Requirement::Recommended.new(negate: true, matcher:)
123
63
  end
124
64
 
125
65
  # This method mean that an item is truly optional.
@@ -139,22 +79,7 @@ module Fix
139
79
  #
140
80
  # @api public
141
81
  def MAY(matcher)
142
- ::Spectus::Requirement::Optional.new(
143
- isolate: false,
144
- negate: false,
145
- matcher: matcher
146
- )
147
- end
148
-
149
- # @see MAY
150
- #
151
- # @api public
152
- def MAY!(matcher)
153
- ::Spectus::Requirement::Optional.new(
154
- isolate: true,
155
- negate: false,
156
- matcher: matcher
157
- )
82
+ ::Spectus::Requirement::Optional.new(negate: false, matcher:)
158
83
  end
159
84
 
160
85
  # rubocop:enable Naming/MethodName
data/lib/fix/run.rb CHANGED
@@ -13,12 +13,12 @@ module Fix
13
13
  # @return [::Spectus::Requirement::Base] An expectation.
14
14
  attr_reader :requirement
15
15
 
16
- # @return [Array<::Defi::Challenge>] A list of challenges.
16
+ # @return [Array<::Defi::Method>] A list of challenges.
17
17
  attr_reader :challenges
18
18
 
19
19
  # @param environment [::Fix::Dsl] A context instance.
20
20
  # @param requirement [::Spectus::Requirement::Base] An expectation.
21
- # @param challenges [Array<::Defi::Challenge>] A list of challenges.
21
+ # @param challenges [Array<::Defi::Method>] A list of challenges.
22
22
  def initialize(environment, requirement, *challenges)
23
23
  @environment = environment
24
24
  @requirement = requirement
@@ -33,7 +33,7 @@ module Fix
33
33
  # @return [::Expresenter::Pass] A passed spec instance.
34
34
  #
35
35
  # @see https://github.com/fixrb/expresenter
36
- def against(&subject)
36
+ def test(&subject)
37
37
  requirement.call { actual_value(&subject) }
38
38
  rescue ::Expresenter::Fail => e
39
39
  e
data/lib/fix/set.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "English"
4
+
3
5
  require_relative "doc"
4
6
  require_relative "run"
5
7
 
@@ -8,85 +10,58 @@ module Fix
8
10
  #
9
11
  # @api private
10
12
  class Set
11
- # The type of result.
12
- #
13
- # Passed expectations can be classified as:
14
- #
15
- # * `success`
16
- # * `warning`
17
- # * `info`
18
- #
19
- # Failed expectations can be classified as:
20
- #
21
- # * `failure`
22
- # * `error`
23
- LOG_LEVELS = %w[
24
- none
25
- error
26
- failure
27
- warning
28
- info
29
- success
30
- ].freeze
31
-
32
13
  # @return [Array] A list of specifications.
33
14
  attr_reader :specs
34
15
 
16
+ # Load specifications from a constant name.
17
+ #
35
18
  # @param name [String, Symbol] The constant name of the specifications.
19
+ # @return [Set] A new Set instance containing the loaded specifications.
36
20
  #
37
21
  # @api public
38
22
  def self.load(name)
39
23
  new(*Doc.fetch(name))
40
24
  end
41
25
 
26
+ # Initialize a new Set with given contexts.
27
+ #
42
28
  # @param contexts [Array<::Fix::Dsl>] The list of contexts document.
43
29
  def initialize(*contexts)
44
- @specs = Doc.specs(*contexts)
45
- @passed = true
30
+ @specs = Doc.specs(*contexts).shuffle
46
31
  end
47
32
 
48
- # @param subject [Proc] The block of code to be tested.
33
+ # Run the test suite against the provided subject.
49
34
  #
35
+ # @yield The block of code to be tested
36
+ # @yieldreturn [Object] The result of the code being tested
37
+ # @return [Boolean] true if all tests pass, exits with false otherwise
50
38
  # @raise [::SystemExit] The test set failed!
51
39
  #
52
40
  # @api public
53
- def against(log_level: 5, &subject)
54
- randomize!
55
-
56
- specs.each do |environment, location, requirement, challenges|
57
- runner = Run.new(environment, requirement, *challenges)
58
- result = runner.against(&subject)
59
-
60
- failed! if result.failed?
61
- report!(location, result, log_level: log_level)
62
- end
63
-
64
- passed? || ::Kernel.exit(false)
41
+ def test(&)
42
+ suite_passed?(&) || ::Kernel.exit(false)
65
43
  end
66
44
 
67
45
  private
68
46
 
69
- def randomize!
70
- specs.shuffle!
47
+ def suite_passed?(&subject)
48
+ specs.all? { |spec| run_spec(*spec, &subject) }
71
49
  end
72
50
 
73
- def failed!
74
- @passed = false
51
+ def run_spec(env, location, requirement, challenges, &subject)
52
+ ::Process.fork { lab(env, location, requirement, challenges, &subject) }
53
+ ::Process.wait
54
+ $CHILD_STATUS.success?
75
55
  end
76
56
 
77
- # @return [Boolean] The test set passed or failed.
78
- def passed?
79
- @passed
57
+ def lab(env, location, requirement, challenges, &)
58
+ result = Run.new(env, requirement, *challenges).test(&)
59
+ report!(location, result)
60
+ ::Kernel.exit(result.passed?)
80
61
  end
81
62
 
82
- def report!(path, result, log_level:)
83
- return unless report?(result, log_level: log_level)
84
-
63
+ def report!(path, result)
85
64
  puts "#{path} #{result.colored_string}"
86
65
  end
87
-
88
- def report?(result, log_level:)
89
- LOG_LEVELS[1..log_level].any? { |name| result.public_send("#{name}?") }
90
- end
91
66
  end
92
67
  end
data/lib/fix.rb CHANGED
@@ -11,7 +11,7 @@ module Fix
11
11
  # Test a built specification.
12
12
  #
13
13
  # @example Run _Answer_ specification against `42`.
14
- # Fix[:Answer].against(42)
14
+ # Fix[:Answer].test { 42 }
15
15
  #
16
16
  # @param name [String, Symbol] The constant name of the specifications.
17
17
  #
data/lib/kernel.rb CHANGED
@@ -17,20 +17,22 @@ module Kernel
17
17
  # end
18
18
  #
19
19
  # # A test
20
- # Fix[:Answer].against { 42 }
20
+ # Fix[:Answer].test { 42 }
21
21
  #
22
- # @param name [String, Symbol] The constant name of the specifications.
23
- # @param block [Proc] The specifications.
22
+ # @param name [String, Symbol] The constant name of the specifications.
23
+ # @yield The specifications block that defines the test requirements
24
+ # @yieldreturn [void]
24
25
  #
25
- # @return [#against] The collection of specifications.
26
+ # @return [#test] The collection of specifications.
26
27
  #
27
28
  # @api public
28
- def Fix(name = nil, &block)
29
+ def Fix(name = nil, &)
29
30
  klass = ::Class.new(::Fix::Dsl)
30
31
  klass.const_set(:CONTEXTS, [klass])
31
- klass.instance_eval(&block)
32
+ klass.instance_eval(&)
32
33
  ::Fix::Doc.const_set(name, klass) unless name.nil?
33
34
  ::Fix::Set.new(*klass.const_get(:CONTEXTS))
34
35
  end
36
+
35
37
  # rubocop:enable Naming/MethodName
36
38
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fix
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.beta8
4
+ version: 1.0.0.beta10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cyril Kato
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2021-07-30 00:00:00.000000000 Z
10
+ date: 2024-12-24 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: defi
@@ -16,154 +15,42 @@ dependencies:
16
15
  requirements:
17
16
  - - "~>"
18
17
  - !ruby/object:Gem::Version
19
- version: 2.0.5
18
+ version: 3.0.0
20
19
  type: :runtime
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
23
  - - "~>"
25
24
  - !ruby/object:Gem::Version
26
- version: 2.0.5
25
+ version: 3.0.0
27
26
  - !ruby/object:Gem::Dependency
28
27
  name: matchi
29
28
  requirement: !ruby/object:Gem::Requirement
30
29
  requirements:
31
30
  - - "~>"
32
31
  - !ruby/object:Gem::Version
33
- version: 3.3.0
32
+ version: 3.3.2
34
33
  type: :runtime
35
34
  prerelease: false
36
35
  version_requirements: !ruby/object:Gem::Requirement
37
36
  requirements:
38
37
  - - "~>"
39
38
  - !ruby/object:Gem::Version
40
- version: 3.3.0
39
+ version: 3.3.2
41
40
  - !ruby/object:Gem::Dependency
42
41
  name: spectus
43
42
  requirement: !ruby/object:Gem::Requirement
44
43
  requirements:
45
44
  - - "~>"
46
45
  - !ruby/object:Gem::Version
47
- version: 4.0.2
46
+ version: 5.0.0
48
47
  type: :runtime
49
48
  prerelease: false
50
49
  version_requirements: !ruby/object:Gem::Requirement
51
50
  requirements:
52
51
  - - "~>"
53
52
  - !ruby/object:Gem::Version
54
- version: 4.0.2
55
- - !ruby/object:Gem::Dependency
56
- name: bundler
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: rake
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: rubocop-md
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: rubocop-performance
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: rubocop-rake
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: rubocop-thread_safety
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
- - !ruby/object:Gem::Dependency
140
- name: simplecov
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- version: '0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- version: '0'
153
- - !ruby/object:Gem::Dependency
154
- name: yard
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - ">="
158
- - !ruby/object:Gem::Version
159
- version: '0'
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- version: '0'
53
+ version: 5.0.0
167
54
  description: Specing framework.
168
55
  email: contact@cyril.email
169
56
  executables: []
@@ -188,7 +75,7 @@ metadata:
188
75
  documentation_uri: https://rubydoc.info/gems/fix
189
76
  source_code_uri: https://github.com/fixrb/fix
190
77
  wiki_uri: https://github.com/fixrb/fix/wiki
191
- post_install_message:
78
+ rubygems_mfa_required: 'true'
192
79
  rdoc_options: []
193
80
  require_paths:
194
81
  - lib
@@ -196,15 +83,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
196
83
  requirements:
197
84
  - - ">="
198
85
  - !ruby/object:Gem::Version
199
- version: 2.7.0
86
+ version: 3.2.0
200
87
  required_rubygems_version: !ruby/object:Gem::Requirement
201
88
  requirements:
202
- - - ">"
89
+ - - ">="
203
90
  - !ruby/object:Gem::Version
204
- version: 1.3.1
91
+ version: '0'
205
92
  requirements: []
206
- rubygems_version: 3.1.6
207
- signing_key:
93
+ rubygems_version: 3.6.2
208
94
  specification_version: 4
209
95
  summary: Specing framework.
210
96
  test_files: []