fix 0.18.2 → 0.20

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.md +2 -2
  3. data/README.md +384 -84
  4. data/lib/fix/builder.rb +101 -0
  5. data/lib/fix/doc.rb +59 -0
  6. data/lib/fix/dsl.rb +139 -0
  7. data/lib/fix/error/invalid_specification_name.rb +12 -0
  8. data/lib/fix/error/missing_specification_block.rb +14 -0
  9. data/lib/fix/error/missing_subject_block.rb +15 -0
  10. data/lib/fix/error/specification_not_found.rb +12 -0
  11. data/lib/fix/matcher.rb +76 -0
  12. data/lib/fix/requirement.rb +119 -0
  13. data/lib/fix/run.rb +88 -0
  14. data/lib/fix/set.rb +210 -0
  15. data/lib/fix.rb +85 -20
  16. data/lib/kernel.rb +49 -0
  17. metadata +42 -153
  18. data/.gitignore +0 -11
  19. data/.rubocop.yml +0 -1
  20. data/.rubocop_todo.yml +0 -25
  21. data/.travis.yml +0 -28
  22. data/.yardopts +0 -1
  23. data/CODE_OF_CONDUCT.md +0 -13
  24. data/Gemfile +0 -5
  25. data/Rakefile +0 -23
  26. data/VERSION.semver +0 -1
  27. data/bin/console +0 -8
  28. data/bin/setup +0 -6
  29. data/checksum/fix-0.0.1.pre.gem.sha512 +0 -1
  30. data/checksum/fix-0.1.0.gem.sha512 +0 -1
  31. data/checksum/fix-0.1.0.pre.gem.sha512 +0 -1
  32. data/checksum/fix-0.10.0.gem.sha512 +0 -1
  33. data/checksum/fix-0.11.0.gem.sha512 +0 -1
  34. data/checksum/fix-0.11.1.gem.sha512 +0 -1
  35. data/checksum/fix-0.12.0.gem.sha512 +0 -1
  36. data/checksum/fix-0.12.1.gem.sha512 +0 -1
  37. data/checksum/fix-0.12.2.gem.sha512 +0 -1
  38. data/checksum/fix-0.12.3.gem.sha512 +0 -1
  39. data/checksum/fix-0.13.0.gem.sha512 +0 -1
  40. data/checksum/fix-0.14.0.gem.sha512 +0 -1
  41. data/checksum/fix-0.14.1.gem.sha512 +0 -1
  42. data/checksum/fix-0.15.0.gem.sha512 +0 -1
  43. data/checksum/fix-0.15.2.gem.sha512 +0 -1
  44. data/checksum/fix-0.16.0.gem.sha512 +0 -1
  45. data/checksum/fix-0.17.0.gem.sha512 +0 -1
  46. data/checksum/fix-0.17.1.gem.sha512 +0 -1
  47. data/checksum/fix-0.17.2.gem.sha512 +0 -1
  48. data/checksum/fix-0.18.0.gem.sha512 +0 -1
  49. data/checksum/fix-0.18.1.gem.sha512 +0 -1
  50. data/checksum/fix-0.2.0.gem.sha512 +0 -1
  51. data/checksum/fix-0.3.0.gem.sha512 +0 -1
  52. data/checksum/fix-0.4.0.gem.sha512 +0 -1
  53. data/checksum/fix-0.5.0.gem.sha512 +0 -1
  54. data/checksum/fix-0.6.0.gem.sha512 +0 -1
  55. data/checksum/fix-0.6.1.gem.sha512 +0 -1
  56. data/checksum/fix-0.7.0.gem.sha512 +0 -1
  57. data/checksum/fix-0.8.0.gem.sha512 +0 -1
  58. data/checksum/fix-0.9.0.gem.sha512 +0 -1
  59. data/checksum/fix-0.9.1.gem.sha512 +0 -1
  60. data/fix.gemspec +0 -29
  61. data/lib/fix/it.rb +0 -41
  62. data/lib/fix/on.rb +0 -139
  63. data/lib/fix/report.rb +0 -120
  64. data/lib/fix/test.rb +0 -89
  65. data/pkg_checksum +0 -12
data/lib/fix/set.rb ADDED
@@ -0,0 +1,210 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "doc"
4
+ require_relative "run"
5
+ require_relative "error/missing_subject_block"
6
+
7
+ module Fix
8
+ # Collection of specifications that can be executed as a test suite.
9
+ #
10
+ # The Set class is a central component in Fix's architecture that handles:
11
+ # - Loading and organizing test specifications
12
+ # - Managing test execution and isolation
13
+ # - Reporting test results
14
+ # - Handling process management for test isolation
15
+ #
16
+ # It supports both named specifications (loaded via Fix[name]) and anonymous
17
+ # specifications (created directly via Fix blocks).
18
+ #
19
+ # @example Running a simple named specification
20
+ # Fix[:Calculator].test { Calculator.new }
21
+ #
22
+ # @example Running a complex specification with multiple contexts
23
+ # Fix[:UserSystem] do
24
+ # with(role: "admin") do
25
+ # on :access?, :settings do
26
+ # it MUST be_true
27
+ # end
28
+ # end
29
+ #
30
+ # with(role: "guest") do
31
+ # on :access?, :settings do
32
+ # it MUST be_false
33
+ # end
34
+ # end
35
+ # end.test { UserSystem.new(role:) }
36
+ #
37
+ # @example Using match? for conditional testing
38
+ # if Fix[:EmailValidator].match? { email }
39
+ # puts "Email is valid"
40
+ # end
41
+ #
42
+ # @api private
43
+ class Set
44
+ # List of specifications to be tested.
45
+ # Each specification is an array containing:
46
+ # - The test environment
47
+ # - The source location (file:line)
48
+ # - The requirement (MUST, SHOULD, or MAY)
49
+ # - The challenges to apply
50
+ #
51
+ # @return [Array] List of specifications
52
+ attr_reader :expected
53
+
54
+ class << self
55
+ # Loads specifications from a registered constant name.
56
+ #
57
+ # This method retrieves previously registered specifications and creates
58
+ # a new Set instance ready for testing. It's typically used in conjunction
59
+ # with Fix[name] syntax.
60
+ #
61
+ # @param name [String, Symbol] The constant name of the specifications
62
+ # @return [Set] A new Set instance containing the loaded specifications
63
+ # @raise [Fix::Error::SpecificationNotFound] If specification doesn't exist
64
+ #
65
+ # @example Loading a named specification
66
+ # Fix::Set.load(:Calculator)
67
+ #
68
+ # @example Loading and testing in one go
69
+ # Fix::Set.load(:EmailValidator).test { email }
70
+ #
71
+ # @api public
72
+ def load(name)
73
+ new(*Doc.fetch(name))
74
+ end
75
+ end
76
+
77
+ # Initialize a new Set with the given contexts.
78
+ #
79
+ # @param contexts [Array<Fix::Dsl>] List of specification contexts
80
+ #
81
+ # @example Creating a set with a single context
82
+ # Fix::Set.new(calculator_context)
83
+ #
84
+ # @example Creating a set with multiple contexts
85
+ # Fix::Set.new(base_context, admin_context, guest_context)
86
+ def initialize(*contexts)
87
+ @expected = randomize_specs(Doc.extract_specifications(*contexts))
88
+ end
89
+
90
+ # Checks if the subject matches all specifications without exiting.
91
+ #
92
+ # Unlike #test, this method:
93
+ # - Returns a boolean instead of exiting
94
+ # - Can be used in conditional logic
95
+ #
96
+ # @yield The block of code to be tested
97
+ # @yieldreturn [Object] The result of the code being tested
98
+ # @return [Boolean] true if all tests pass, false otherwise
99
+ #
100
+ # @example Basic usage
101
+ # set.match? { Calculator.new } #=> true
102
+ #
103
+ # @example Conditional usage
104
+ # if set.match? { user_input }
105
+ # save_to_database(user_input)
106
+ # end
107
+ #
108
+ # @api public
109
+ def match?(&subject)
110
+ raise Error::MissingSubjectBlock unless subject
111
+
112
+ expected.all? { |spec| run_spec(*spec, &subject) }
113
+ end
114
+
115
+ # Runs the test suite against the provided subject.
116
+ #
117
+ # This method:
118
+ # - Executes all specifications in random order
119
+ # - Runs each test in isolation using process forking
120
+ # - Reports results for each specification
121
+ # - Exits with failure if any test fails
122
+ #
123
+ # @yield The block of code to be tested
124
+ # @yieldreturn [Object] The result of the code being tested
125
+ # @return [Boolean] true if all tests pass
126
+ # @raise [SystemExit] When any test fails (exit code: 1)
127
+ #
128
+ # @example Basic usage
129
+ # set.test { Calculator.new }
130
+ #
131
+ # @example Testing with parameters
132
+ # set.test { Game.new(south_variant:, north_variant:) }
133
+ #
134
+ # @api public
135
+ def test(&subject)
136
+ match?(&subject) || exit_with_failure
137
+ end
138
+
139
+ # Returns a string representing the matcher.
140
+ #
141
+ # @return [String] a human-readable description of the matcher
142
+ #
143
+ # @api public
144
+ def to_s
145
+ "fix #{expected.inspect}"
146
+ end
147
+
148
+ private
149
+
150
+ # Randomizes the order of specifications for better isolation
151
+ #
152
+ # @param specifications [Array] The specifications to randomize
153
+ # @return [Array] Randomized specifications
154
+ def randomize_specs(specifications)
155
+ specifications.shuffle
156
+ end
157
+
158
+ # Runs a single specification in a forked process
159
+ #
160
+ # @param env [Fix::Dsl] The test environment
161
+ # @param location [String] The source location of the spec
162
+ # @param requirement [Object] The test requirement
163
+ # @param challenges [Array] The test challenges
164
+ # @yield The subject block to test against
165
+ # @return [Boolean] true if spec passed
166
+ def run_spec(env, location, requirement, challenges, &subject)
167
+ child_pid = ::Process.fork { execute_spec(env, location, requirement, challenges, &subject) }
168
+ _pid, process_status = ::Process.wait2(child_pid)
169
+ process_status.success?
170
+ end
171
+
172
+ # Executes a specification in its own process
173
+ #
174
+ # @param env [Fix::Dsl] The test environment
175
+ # @param location [String] The source location of the spec
176
+ # @param requirement [Object] The test requirement
177
+ # @param challenges [Array] The test challenges
178
+ # @yield The subject block to test against
179
+ def execute_spec(env, location, requirement, challenges, &subject)
180
+ result = Run.new(env, requirement, *challenges).test(&subject)
181
+ report_result(location, result)
182
+ exit_with_status(result.passed?)
183
+ end
184
+
185
+ # Reports the result of a specification
186
+ #
187
+ # @param location [String] The source location of the spec
188
+ # @param result [Object] The test result
189
+ def report_result(location, result)
190
+ puts "#{location} #{result.colored_string}"
191
+ end
192
+
193
+ # Exits the process with a failure status
194
+ #
195
+ # @return [void]
196
+ # @raise [SystemExit] Always
197
+ def exit_with_failure
198
+ ::Kernel.exit(false)
199
+ end
200
+
201
+ # Exits the process with the given status
202
+ #
203
+ # @param status [Boolean] The exit status
204
+ # @return [void]
205
+ # @raise [SystemExit] Always
206
+ def exit_with_status(status)
207
+ ::Kernel.exit(status)
208
+ end
209
+ end
210
+ end
data/lib/fix.rb CHANGED
@@ -1,28 +1,93 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative "fix/doc"
4
+ require_relative "fix/error/specification_not_found"
5
+ require_relative "fix/set"
6
+ require_relative "kernel"
7
+
3
8
  # Namespace for the Fix framework.
4
9
  #
5
- # @api public
10
+ # Provides core functionality for managing and running test specifications.
11
+ # Fix supports two modes of operation:
12
+ # 1. Named specifications that can be referenced later
13
+ # 2. Anonymous specifications for immediate testing
14
+ #
15
+ # @example Creating and running a named specification
16
+ # Fix :Answer do
17
+ # it MUST equal 42
18
+ # end
19
+ #
20
+ # Fix[:Answer].test { 42 }
6
21
  #
22
+ # @example Creating and running an anonymous specification
23
+ # Fix do
24
+ # it MUST be_positive
25
+ # end.test { 42 }
26
+ #
27
+ # @see Fix::Set
28
+ # @see Fix::Builder
29
+ #
30
+ # @api public
7
31
  module Fix
8
- # Specs are built with this method.
9
- #
10
- # @example 42 must be equal to 42
11
- # describe(42) do
12
- # it { MUST equal 42 }
13
- # end
14
- #
15
- # @param front_object [BasicObject] The front object.
16
- # @param options [Hash] Some options.
17
- # @param specs [Proc] The set of specs.
18
- #
19
- # @raise [SystemExit] The result of the test.
20
- def self.describe(front_object, verbose: true, **options, &specs)
21
- t = Test.new(front_object, verbose: verbose, **options, &specs)
22
-
23
- print t.report.to_s if verbose
24
- exit t.pass?
32
+ class << self
33
+ # Retrieves and loads a built specification for testing.
34
+ #
35
+ # @example Run a named specification
36
+ # Fix[:Answer].test { 42 }
37
+ #
38
+ # @param name [String, Symbol] The constant name of the specification
39
+ # @return [Fix::Set] The loaded specification set ready for testing
40
+ # @raise [Fix::Error::SpecificationNotFound] If the named specification doesn't exist
41
+ def [](name)
42
+ name = normalize_name(name)
43
+ validate_specification_exists!(name)
44
+ Set.load(name)
45
+ end
46
+
47
+ # Lists all defined specification names.
48
+ #
49
+ # @example Get all specification names
50
+ # Fix.specification_names #=> [:Answer, :Calculator, :UserProfile]
51
+ #
52
+ # @return [Array<Symbol>] Sorted array of specification names
53
+ def specification_names
54
+ Doc.constants.sort
55
+ end
56
+
57
+ # Checks if a specification is defined.
58
+ #
59
+ # @example Check for specification existence
60
+ # Fix.spec_defined?(:Answer) #=> true
61
+ #
62
+ # @param name [String, Symbol] Name of the specification to check
63
+ # @return [Boolean] true if specification exists, false otherwise
64
+ def spec_defined?(name)
65
+ specification_names.include?(normalize_name(name))
66
+ end
67
+
68
+ private
69
+
70
+ # Converts any specification name into a symbol.
71
+ # This allows for consistent name handling regardless of input type.
72
+ #
73
+ # @param name [String, Symbol] The name to normalize
74
+ # @return [Symbol] The normalized name
75
+ # @example
76
+ # normalize_name("Answer") #=> :Answer
77
+ # normalize_name(:Answer) #=> :Answer
78
+ def normalize_name(name)
79
+ String(name).to_sym
80
+ end
81
+
82
+ # Verifies the existence of a specification and raises an error if not found.
83
+ # This ensures early failure when attempting to use undefined specifications.
84
+ #
85
+ # @param name [Symbol] The specification name to validate
86
+ # @raise [Fix::Error::SpecificationNotFound] If specification doesn't exist
87
+ def validate_specification_exists!(name)
88
+ return if spec_defined?(name)
89
+
90
+ raise Error::SpecificationNotFound, name
91
+ end
25
92
  end
26
93
  end
27
-
28
- require_relative File.join('fix', 'test')
data/lib/kernel.rb ADDED
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "fix/builder"
4
+
5
+ # Extension of the global Kernel module to provide the Fix method.
6
+ # This allows Fix to be called from anywhere in the application
7
+ # without explicit namespace qualification.
8
+ #
9
+ # @api public
10
+ module Kernel
11
+ # rubocop:disable Naming/MethodName
12
+
13
+ # This rule is disabled because Fix is intentionally capitalized to act as
14
+ # both a namespace and a method name, following Ruby conventions for DSLs.
15
+
16
+ # Defines a new test specification or creates an anonymous specification set.
17
+ # When a name is provided, the specification is registered globally and can
18
+ # be referenced later using Fix[name]. Anonymous specifications are executed
19
+ # immediately and cannot be referenced later.
20
+ #
21
+ # @example Creating a named specification for later use
22
+ # Fix :Calculator do
23
+ # on(:add, 2, 3) do
24
+ # it MUST equal 5
25
+ # end
26
+ # end
27
+ #
28
+ # # Later in the code:
29
+ # Fix[:Calculator].test { Calculator.new }
30
+ #
31
+ # @example Creating and immediately testing an anonymous specification
32
+ # Fix do
33
+ # it MUST be_positive
34
+ # end.test { 42 }
35
+ #
36
+ # @param name [String, Symbol, nil] The constant name for the specification
37
+ # @yield The specification definition block
38
+ # @yieldreturn [void]
39
+ # @return [Fix::Set] A collection of specifications ready for testing
40
+ #
41
+ # @see Fix::Builder
42
+ # @see Fix::Set
43
+ # @see Fix::Dsl
44
+ def Fix(name = nil, &)
45
+ ::Fix::Builder.build(name, &)
46
+ end
47
+
48
+ # rubocop:enable Naming/MethodName
49
+ end
metadata CHANGED
@@ -1,204 +1,93 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fix
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.18.2
4
+ version: '0.20'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cyril Kato
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-10-08 00:00:00.000000000 Z
11
+ date: 2025-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: aw
14
+ name: defi
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.1.6
19
+ version: 3.0.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.1.6
26
+ version: 3.0.1
27
27
  - !ruby/object:Gem::Dependency
28
- name: defi
28
+ name: matchi
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.1.5
33
+ version: 4.1.1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.1.5
40
+ version: 4.1.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: spectus
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 3.0.9
47
+ version: 5.0.2
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 3.0.9
55
- - !ruby/object:Gem::Dependency
56
- name: bundler
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '2.0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '2.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: '13.0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '13.0'
83
- - !ruby/object:Gem::Dependency
84
- name: rubocop
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - "~>"
88
- - !ruby/object:Gem::Version
89
- version: '0.75'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - "~>"
95
- - !ruby/object:Gem::Version
96
- version: '0.75'
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: '1.5'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '1.5'
111
- - !ruby/object:Gem::Dependency
112
- name: simplecov
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
116
- - !ruby/object:Gem::Version
117
- version: '0.17'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - "~>"
123
- - !ruby/object:Gem::Version
124
- version: '0.17'
125
- - !ruby/object:Gem::Dependency
126
- name: yard
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: '0.9'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
137
- - !ruby/object:Gem::Version
138
- version: '0.9'
139
- description: Specing framework for Ruby.
140
- email:
141
- - contact@cyril.email
54
+ version: 5.0.2
55
+ description: |
56
+ Fix is a modern Ruby testing framework built around a key architectural principle:
57
+ the complete separation between specifications and tests. It allows you to write
58
+ pure specification documents that define expected behaviors, and then independently
59
+ challenge any implementation against these specifications.
60
+ email: contact@cyril.email
142
61
  executables: []
143
62
  extensions: []
144
63
  extra_rdoc_files: []
145
64
  files:
146
- - ".gitignore"
147
- - ".rubocop.yml"
148
- - ".rubocop_todo.yml"
149
- - ".travis.yml"
150
- - ".yardopts"
151
- - CODE_OF_CONDUCT.md
152
- - Gemfile
153
65
  - LICENSE.md
154
66
  - README.md
155
- - Rakefile
156
- - VERSION.semver
157
- - bin/console
158
- - bin/setup
159
- - checksum/fix-0.0.1.pre.gem.sha512
160
- - checksum/fix-0.1.0.gem.sha512
161
- - checksum/fix-0.1.0.pre.gem.sha512
162
- - checksum/fix-0.10.0.gem.sha512
163
- - checksum/fix-0.11.0.gem.sha512
164
- - checksum/fix-0.11.1.gem.sha512
165
- - checksum/fix-0.12.0.gem.sha512
166
- - checksum/fix-0.12.1.gem.sha512
167
- - checksum/fix-0.12.2.gem.sha512
168
- - checksum/fix-0.12.3.gem.sha512
169
- - checksum/fix-0.13.0.gem.sha512
170
- - checksum/fix-0.14.0.gem.sha512
171
- - checksum/fix-0.14.1.gem.sha512
172
- - checksum/fix-0.15.0.gem.sha512
173
- - checksum/fix-0.15.2.gem.sha512
174
- - checksum/fix-0.16.0.gem.sha512
175
- - checksum/fix-0.17.0.gem.sha512
176
- - checksum/fix-0.17.1.gem.sha512
177
- - checksum/fix-0.17.2.gem.sha512
178
- - checksum/fix-0.18.0.gem.sha512
179
- - checksum/fix-0.18.1.gem.sha512
180
- - checksum/fix-0.2.0.gem.sha512
181
- - checksum/fix-0.3.0.gem.sha512
182
- - checksum/fix-0.4.0.gem.sha512
183
- - checksum/fix-0.5.0.gem.sha512
184
- - checksum/fix-0.6.0.gem.sha512
185
- - checksum/fix-0.6.1.gem.sha512
186
- - checksum/fix-0.7.0.gem.sha512
187
- - checksum/fix-0.8.0.gem.sha512
188
- - checksum/fix-0.9.0.gem.sha512
189
- - checksum/fix-0.9.1.gem.sha512
190
- - fix.gemspec
191
67
  - lib/fix.rb
192
- - lib/fix/it.rb
193
- - lib/fix/on.rb
194
- - lib/fix/report.rb
195
- - lib/fix/test.rb
196
- - pkg_checksum
197
- homepage: https://github.com/fixrb/fix
68
+ - lib/fix/builder.rb
69
+ - lib/fix/doc.rb
70
+ - lib/fix/dsl.rb
71
+ - lib/fix/error/invalid_specification_name.rb
72
+ - lib/fix/error/missing_specification_block.rb
73
+ - lib/fix/error/missing_subject_block.rb
74
+ - lib/fix/error/specification_not_found.rb
75
+ - lib/fix/matcher.rb
76
+ - lib/fix/requirement.rb
77
+ - lib/fix/run.rb
78
+ - lib/fix/set.rb
79
+ - lib/kernel.rb
80
+ homepage: https://fixrb.dev/
198
81
  licenses:
199
82
  - MIT
200
- metadata: {}
201
- post_install_message:
83
+ metadata:
84
+ bug_tracker_uri: https://github.com/fixrb/fix/issues
85
+ changelog_uri: https://github.com/fixrb/fix/blob/main/CHANGELOG.md
86
+ documentation_uri: https://rubydoc.info/gems/fix
87
+ homepage_uri: https://fixrb.dev
88
+ source_code_uri: https://github.com/fixrb/fix
89
+ rubygems_mfa_required: 'true'
90
+ post_install_message:
202
91
  rdoc_options: []
203
92
  require_paths:
204
93
  - lib
@@ -206,15 +95,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
206
95
  requirements:
207
96
  - - ">="
208
97
  - !ruby/object:Gem::Version
209
- version: '0'
98
+ version: 3.1.0
210
99
  required_rubygems_version: !ruby/object:Gem::Requirement
211
100
  requirements:
212
101
  - - ">="
213
102
  - !ruby/object:Gem::Version
214
103
  version: '0'
215
104
  requirements: []
216
- rubygems_version: 3.0.3
217
- signing_key:
105
+ rubygems_version: 3.3.27
106
+ signing_key:
218
107
  specification_version: 4
219
- summary: Specing framework.
108
+ summary: Happy Path to Ruby Testing
220
109
  test_files: []
data/.gitignore DELETED
@@ -1,11 +0,0 @@
1
- /.bundle/
2
- /.ruby-version
3
- /.yardoc
4
- /Gemfile.lock
5
- /_yardoc/
6
- /coverage/
7
- /doc/
8
- /pkg/
9
- /spec/reports/
10
- /tmp/
11
- .DS_Store
data/.rubocop.yml DELETED
@@ -1 +0,0 @@
1
- inherit_from: .rubocop_todo.yml
data/.rubocop_todo.yml DELETED
@@ -1,25 +0,0 @@
1
- # This configuration was generated by
2
- # `rubocop --auto-gen-config`
3
- # on 2019-10-09 00:10:57 +0200 using RuboCop version 0.75.0.
4
- # The point is for the user to remove these configuration records
5
- # one by one as the offenses are removed from the code base.
6
- # Note that changes in the inspected code, or installation of new
7
- # versions of RuboCop, may require this file to be generated again.
8
-
9
- # Offense count: 14
10
- Style/MixinUsage:
11
- Exclude:
12
- - 'test/examples/duck/test_app.rb'
13
- - 'test/examples/empty/test_app.rb'
14
- - 'test/examples/isolation/test_app_with_isolation_1.rb'
15
- - 'test/examples/isolation/test_app_with_isolation_2.rb'
16
- - 'test/examples/isolation/test_app_with_isolation_3.rb'
17
- - 'test/examples/isolation/test_app_with_isolation_4.rb'
18
- - 'test/examples/isolation/test_app_with_isolation_5.rb'
19
- - 'test/examples/isolation/test_app_without_isolation_1.rb'
20
- - 'test/examples/isolation/test_app_without_isolation_2.rb'
21
- - 'test/examples/isolation/test_app_without_isolation_3.rb'
22
- - 'test/examples/let/test_let.rb'
23
- - 'test/examples/operation/test_app_1.rb'
24
- - 'test/examples/operation/test_app_2.rb'
25
- - 'test/test_exit_status.rb'