r_spec 0.3.0 → 1.0.0.beta2

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
- SHA1:
3
- metadata.gz: 45b5ca99a0fbcdb467a6c66c937ca2bcb838c7c6
4
- data.tar.gz: 629d230e4e63a11621f4208b34800f7226c46b14
2
+ SHA256:
3
+ metadata.gz: d95780dc86d2b0c2295f22fe18ed889298716d8a817ba4a74fbd1c9c1ec71c03
4
+ data.tar.gz: a954787c7ad5a50c1d3a49d5b1be21515dc0cad0ecd5f7fa618ee736014add2f
5
5
  SHA512:
6
- metadata.gz: 9ad1c0473d1aafddbb18fe431ebeff9c704a3bbacb9ea5c1f39abf5cab97f77b5d852927436de4c8d0a41617905c161422239ce03db59dc32f7c0b2dbf644326
7
- data.tar.gz: d80956df1393fbfe3c088cb5745cbdba90256725d50081e98f8e0424303a2303b3894ebb79a1057fc2e7ed9e1c18ceb6390d34c43f55cc9a92046caf22bc8f87
6
+ metadata.gz: 338b22198f2f09e9ae3a36184027f23f728ebdc7b691e0ef3f05d111bf3d753c829d21388dba52fdc8be0e8ba452deea5cc08d38c848e932d67fb1e448769600
7
+ data.tar.gz: 6601841bac1ed4603c327539fc5b123b9990cfa483b42504ed18dc8680d9c304636dbff10a05ebdc6f76de6d11ac3190b9ad77453aaeb978f853360f9330e04e
data/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2015 Cyril Wack
3
+ Copyright (c) 2015-2021 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,132 +1,115 @@
1
- # R Spec
1
+ # RSpec clone
2
2
 
3
- [![Build Status](https://travis-ci.org/cyril/r_spec.svg?branch=master)][travis]
4
- [![Gem Version](https://badge.fury.io/rb/r_spec.svg)][gem]
5
- [![Inline docs](http://inch-ci.org/github/cyril/r_spec.svg?branch=master)][inchpages]
6
- [![Documentation](http://img.shields.io/:yard-docs-38c800.svg)][rubydoc]
3
+ A minimalist [RSpec](https://github.com/rspec/rspec) clone with an emphasis on correctness and simplicity.
7
4
 
8
- > A small [Rspec](https://github.com/rspec/rspec) clone based on [Fix specing framework](https://github.com/fixrb/fix).
5
+ ![What did you expect?](https://github.com/cyril/r_spec.rb/raw/main/img/what-did-you-expect.jpg)
9
6
 
10
- ***
7
+ ## Status
11
8
 
12
- :warning: Important:
9
+ [![Gem Version](https://badge.fury.io/rb/r_spec.svg)](https://badge.fury.io/rb/r_spec)
10
+ [![Build Status](https://travis-ci.org/cyril/r_spec.rb.svg?branch=main)](https://travis-ci.org/cyril/r_spec.rb)
11
+ [![Inline Docs](https://inch-ci.org/github/cyril/r_spec.rb.svg)](https://inch-ci.org/github/cyril/r_spec.rb)
13
12
 
14
- To avoid confusion in the community, please note that the gem of this project is **not [rspec](https://rubygems.org/gems/rspec)**, it is **[r_spec](https://rubygems.org/gems/r_spec)** (meaning _Ruby Spec_).
13
+ ## Goal
15
14
 
16
- This project is totally independent of [rspec.info](http://rspec.info/).
15
+ This clone attempts to provide most of RSpec's DSL without magic power, so that its code could reasonably become less complex than the code of your application.
17
16
 
18
- Also, while both gems define an `RSpec` module, **r_spec** (which follows [the gem naming convention](http://guides.rubygems.org/name-your-gem/#use-underscores-for-multiple-words)) is still quite different than **rspec** due to its [Ruby Fix](http://fixrb.org/) dependency.
17
+ ## Some differences
19
18
 
20
- ***
19
+ * Less features and an implementation with much less code complexity.
20
+ * Spec files can also be executed directly with the `ruby` executable.
21
+ * There is no option to activate monkey-patching.
22
+ * Does not rely on hacks such as `at_exit` hook to trigger the tests.
23
+ * Built-in matchers do not trust _actual_ and do not send it any message.
24
+ * The subject must be explicitly defined, otherwise it is not implemented.
21
25
 
22
- ## Contact
23
-
24
- * Home page: https://github.com/cyril/r_spec
25
- * Bugs/issues: https://github.com/cyril/r_spec/issues
26
-
27
- ## Rubies
28
-
29
- * [MRI](https://www.ruby-lang.org/)
30
- * [Rubinius](http://rubini.us/)
31
- * [JRuby](http://jruby.org/)
32
-
33
- ## Terminal sessions
34
-
35
- A comparison between the behavior of a small fix-based script (which became the `r_spec` gem) and `rspec`.
26
+ ## Important ⚠️
36
27
 
37
- As a result, with `r_spec` the build is passing, while with rspec it is failing. Despite two separate contexts, `rspec` was not able to evaluate some code in isolation to prevent side effects.
28
+ To avoid confusion in the community, please note that:
38
29
 
39
- [![What did you RSpec?](https://asciinema.org/a/29070.png)](https://asciinema.org/a/29070)
30
+ - the gem of this project is **not [`rspec`](https://rubygems.org/gems/rspec)**,
31
+ it is **[`r_spec`](https://rubygems.org/gems/r_spec)**;
32
+ - this project is totally independent of [rspec.info](https://rspec.info/).
40
33
 
41
- ***
34
+ ### Note
42
35
 
43
- Unbelievable but true, sometimes "💩" is equal to 42.
44
-
45
- Although fun, this _feature_ can be fixed pretty easily...
46
-
47
- [![Fix RSpec!](https://asciinema.org/a/29172.png)](https://asciinema.org/a/29172)
36
+ Following [RubyGems naming conventions](https://guides.rubygems.org/name-your-gem/#use-underscores-for-multiple-words), the module name for this project is `RSpec`.
48
37
 
49
38
  ## Installation
50
39
 
51
- __R Spec__ is cryptographically signed.
52
-
53
- To be sure the gem you install hasn't been tampered with, add my public key (if you haven't already) as a trusted certificate:
54
-
55
- $ gem cert --add <(curl -Ls https://raw.github.com/cyril/r_spec/master/certs/gem-cyril-public_cert.pem)
56
- $ gem install r_spec -P HighSecurity
57
-
58
- The `HighSecurity` trust profile will verify all gems. All of __R Spec__'s dependencies are signed.
59
-
60
- Or add this line to your application's Gemfile:
40
+ Add this line to your application's Gemfile:
61
41
 
62
42
  ```ruby
63
- gem 'r_spec'
43
+ gem "r_spec", ">= 1.0.0.beta2"
64
44
  ```
65
45
 
66
46
  And then execute:
67
47
 
68
- $ bundle
48
+ ```sh
49
+ bundle
50
+ ```
51
+
52
+ Or install it yourself as:
53
+
54
+ ```sh
55
+ gem install r_spec --pre
56
+ ```
69
57
 
70
58
  ## Usage
71
59
 
72
- Given this `greeting_spec.rb` spec:
60
+ Let's test an array:
73
61
 
74
62
  ```ruby
75
- require 'r_spec'
63
+ # array_spec.rb
76
64
 
77
- greeting = 'Hello, world!'
65
+ require "r_spec"
78
66
 
79
- RSpec.describe 'Test' do
80
- context 'Alice' do
81
- before { greeting.gsub!('world', 'Alice') }
82
- it { expect(greeting).to eql 'Hello, Alice!' }
67
+ RSpec.describe Array do
68
+ before do
69
+ @elements = described_class.new
83
70
  end
84
71
 
85
- context 'Bob' do
86
- before { greeting.gsub!('world', 'Bob') }
87
- it { expect(greeting).to eql 'Hello, Bob!' }
72
+ describe "#count" do
73
+ subject do
74
+ @elements.count
75
+ end
76
+
77
+ it { is_expected.to be 0 }
78
+
79
+ context "when a new element is added" do
80
+ before do
81
+ @elements << 1
82
+ end
83
+
84
+ it { is_expected.to be 1 }
85
+ end
88
86
  end
89
87
  end
90
88
  ```
91
89
 
92
90
  It can be tested in the console with the command:
93
91
 
94
- $ ruby greeting_spec.rb
95
- ..
92
+ ```sh
93
+ ruby array_spec.rb
94
+ ```
96
95
 
97
- Ran 2 tests in 0.010994 seconds
98
- 100% compliant - 0 infos, 0 failures, 0 errors
96
+ array_spec.rb:15 Success: expected to be 0.
97
+ array_spec.rb:22 Success: expected to be 1.
99
98
 
100
- ## Security
99
+ ## Test suite
101
100
 
102
- As a basic form of security __R Spec__ provides a set of SHA512 checksums for
103
- every Gem release. These checksums can be found in the `checksum/` directory.
104
- Although these checksums do not prevent malicious users from tampering with a
105
- built Gem they can be used for basic integrity verification purposes.
101
+ __RSpec clone__'s specifications are self-described here: [spec/](https://github.com/cyril/r_spec.rb/blob/main/spec/)
106
102
 
107
- The checksum of a file can be checked using the `sha512sum` command. For
108
- example:
103
+ ## Contact
109
104
 
110
- $ sha512sum pkg/r_spec-0.1.0.gem
111
- e9e35e1953104e2d428b0f217e418db3c1baecd9e011b2545f9fcba4ff7e3bba674c6b928b3d8db842a139cd7cc9806d77ebdc7f710ece4f2aecb343703e2451 pkg/r_spec-0.1.0.gem
105
+ * Home page: https://r-spec.dev
106
+ * Source code: https://github.com/cyril/r_spec.rb
107
+ * Twitter: https://twitter.com/cyri_
112
108
 
113
109
  ## Versioning
114
110
 
115
- __R Spec__ follows [Semantic Versioning 2.0](http://semver.org/).
116
-
117
- ## Contributing
118
-
119
- 1. [Fork it](https://github.com/cyril/r_spec/fork)
120
- 2. Create your feature branch (`git checkout -b my-new-feature`)
121
- 3. Commit your changes (`git commit -am 'Add some feature'`)
122
- 4. Push to the branch (`git push origin my-new-feature`)
123
- 5. Create a new Pull Request
111
+ __RSpec clone__ follows [Semantic Versioning 2.0](https://semver.org/).
124
112
 
125
113
  ## License
126
114
 
127
- See `LICENSE.md` file.
128
-
129
- [gem]: https://rubygems.org/gems/r_spec
130
- [travis]: https://travis-ci.org/cyril/r_spec
131
- [inchpages]: http://inch-ci.org/github/cyril/r_spec/
132
- [rubydoc]: http://rubydoc.info/gems/r_spec/frames
115
+ The [gem](https://rubygems.org/gems/r_spec) is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/lib/r_spec.rb CHANGED
@@ -1,32 +1,27 @@
1
- require 'matchi/rspec'
2
- require 'fix/expect'
3
- require 'fix/its'
4
- require 'fix/let'
1
+ # frozen_string_literal: true
5
2
 
6
- # Namespace for the R Spec framework.
3
+ # Top level namespace for the RSpec clone.
7
4
  #
8
- # @api public
5
+ # @example
6
+ # require "r_spec"
7
+ #
8
+ # RSpec.describe Integer do
9
+ # it { expect(41.next).to be 42 }
10
+ # end
9
11
  #
12
+ # @api public
10
13
  module RSpec
11
14
  # Specs are built with this method.
12
15
  #
13
- # @example The answer must be equal to 42.
14
- # describe('the answer') do
15
- # it { expect(42).to be 42 }
16
- # end
17
- #
18
- # @param front_object [#object_id] The front object.
19
- # @param options [Hash] Some options.
20
- # @param specs [Proc] The set of specs.
16
+ # @param const [Module] A module to include in block context.
17
+ # @param block [Proc] The block to define the specs.
21
18
  #
22
- # @raise [SystemExit] The result of the test.
23
- def self.describe(front_object, options = {}, &specs)
24
- t = ::Fix::Test.new(front_object, options, &specs)
19
+ # @api public
20
+ def self.describe(const, &block)
21
+ raise ::TypeError, const.class.inspect unless const.is_a?(::Module)
25
22
 
26
- print "#{t.report}" if options.fetch(:verbose, true)
27
- exit t.pass?
23
+ DSL.describe(const, &block)
28
24
  end
29
25
  end
30
26
 
31
- require_relative File.join 'fix', 'it'
32
- require_relative File.join 'fix', 'on'
27
+ require_relative File.join("r_spec", "dsl")
data/lib/r_spec/dsl.rb ADDED
@@ -0,0 +1,114 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "matchi/rspec"
4
+ require "securerandom"
5
+
6
+ module RSpec
7
+ # Abstract class for handling the domain-specific language.
8
+ class DSL
9
+ # @param block [Proc] The content to execute at the class initialization.
10
+ def self.before(&block)
11
+ define_method(:initialize) do |*args, **kwargs|
12
+ super()
13
+ instance_exec(*args, **kwargs, &block)
14
+ end
15
+ end
16
+
17
+ # @param block [Proc] The content of the method to define.
18
+ # @return [Symbol] A protected method that define the block content.
19
+ def self.let(name, &block)
20
+ protected define_method(name.to_sym, &block)
21
+ end
22
+
23
+ # @param block [Proc] The subject to set.
24
+ # @return [Symbol] A `subject` method that define the block content.
25
+ def self.subject(&block)
26
+ let(__method__, &block)
27
+ end
28
+
29
+ # Describe a set of expectations.
30
+ #
31
+ # @param const [Module, #object_id] A module to include in block context.
32
+ # @param block [Proc] The block to define the specs.
33
+ def self.describe(const, &block)
34
+ desc = Test.const_set("Test#{random_str}", ::Class.new(self))
35
+
36
+ if const.is_a?(::Module)
37
+ desc.define_method(:described_class) { const }
38
+ desc.send(:protected, :described_class)
39
+ end
40
+
41
+ desc.instance_eval(&block)
42
+ desc
43
+ end
44
+
45
+ singleton_class.send(:alias_method, :context, :describe)
46
+
47
+ # Evaluate an expectation.
48
+ #
49
+ # @param block [Proc] An expectation to evaluate.
50
+ #
51
+ # @raise (see ExpectationTarget#result)
52
+ # @return (see ExpectationTarget#result)
53
+ def self.it(_name = nil, &block)
54
+ raise ::ArgumentError, "Missing block" unless block
55
+
56
+ puts "\e[37m#{block.source_location.join(':')}\e[0m"
57
+
58
+ i = example.new
59
+ i.instance_eval(&block)
60
+ end
61
+
62
+ # @private
63
+ #
64
+ # @return [Class<DSL>] The class of the example to be tested.
65
+ private_class_method def self.example
66
+ ::Class.new(self) do
67
+ include ::Matchi::Helper
68
+
69
+ private
70
+
71
+ # Wraps the target of an expectation with the actual value.
72
+ #
73
+ # @param actual [#object_id] The actual value.
74
+ #
75
+ # @return [ExpectationTarget] The target of the expectation.
76
+ def expect(actual)
77
+ ExpectationTarget.new(actual)
78
+ end
79
+
80
+ # Wraps the target of an expectation with the subject as actual value.
81
+ #
82
+ # @return [ExpectationTarget] (see #expect)
83
+ def is_expected
84
+ expect(subject)
85
+ end
86
+
87
+ def log(message)
88
+ Log.result(message)
89
+ end
90
+
91
+ # Indicate that an example is disabled pending some action.
92
+ #
93
+ # @param description [String] The reason why the example is pending.
94
+ #
95
+ # @return [nil] Write a message to STDOUT.
96
+ def pending(description)
97
+ Pending.result(description)
98
+ end
99
+ end
100
+ end
101
+
102
+ # @private
103
+ #
104
+ # @return [String] A random string.
105
+ private_class_method def self.random_str
106
+ ::SecureRandom.alphanumeric(5)
107
+ end
108
+ end
109
+ end
110
+
111
+ require_relative "expectation_target"
112
+ require_relative "log"
113
+ require_relative "pending"
114
+ require_relative "test"
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "expresenter"
4
+
5
+ module RSpec
6
+ # Wraps the target of an expectation.
7
+ #
8
+ # @example
9
+ # expect(something) # => ExpectationTarget wrapping something
10
+ #
11
+ # # used with `to`
12
+ # expect(actual).to be(42)
13
+ #
14
+ # # with `not_to`
15
+ # expect(actual).not_to be(4)
16
+ #
17
+ # @note `ExpectationTarget` is not intended to be instantiated directly by
18
+ # users. Use `expect` instead.
19
+ class ExpectationTarget
20
+ # Instantiate a new expectation target.
21
+ #
22
+ # @param actual [#object_id] The actual value.
23
+ #
24
+ # @api private
25
+ def initialize(actual)
26
+ @actual = actual
27
+ end
28
+
29
+ # Runs the given expectation, passing if `matcher` returns true.
30
+ #
31
+ # @example _Absolute requirement_ definition
32
+ # expect("foo".upcase).to eq("foo")
33
+ #
34
+ # @param matcher [#matches?] The matcher.
35
+ #
36
+ # @raise (see #result)
37
+ # @return (see #result)
38
+ def to(matcher)
39
+ absolute_requirement(matcher: matcher, negate: false)
40
+ end
41
+
42
+ # Runs the given expectation, passing if `matcher` returns false.
43
+ #
44
+ # @example _Absolute prohibition_ definition
45
+ # expect("foo".size).not_to be(4)
46
+ #
47
+ # @param (see #to)
48
+ #
49
+ # @raise (see #result)
50
+ # @return (see #result)
51
+ def not_to(matcher)
52
+ absolute_requirement(matcher: matcher, negate: true)
53
+ end
54
+
55
+ protected
56
+
57
+ # @param matcher [#matches?] The matcher.
58
+ # @param negate [Boolean] Positive or negative assertion?
59
+ #
60
+ # @raise (see #result)
61
+ # @return (see #result)
62
+ def absolute_requirement(matcher:, negate:)
63
+ result(
64
+ matcher: matcher,
65
+ negate: negate,
66
+ passed: negate ^ matcher.matches? { @actual }
67
+ )
68
+ end
69
+
70
+ # @param matcher [#matches?] The matcher.
71
+ # @param negate [Boolean] Positive or negative assertion?
72
+ # @param passed [Boolean] The result of an expectation.
73
+ #
74
+ # @return [nil] Write a message to STDOUT.
75
+ #
76
+ # @raise [SystemExit] Terminate execution immediately by calling
77
+ # `Kernel.exit(false)` with a failure message written to STDERR.
78
+ def result(matcher:, negate:, passed:)
79
+ puts " " + ::Expresenter.call(passed).with(
80
+ actual: @actual,
81
+ error: nil,
82
+ expected: matcher.expected,
83
+ got: passed,
84
+ negate: negate,
85
+ valid: passed,
86
+ matcher: matcher.class.to_sym,
87
+ level: :MUST
88
+ ).colored_string
89
+ rescue ::Expresenter::Fail => e
90
+ abort " #{e.colored_string}"
91
+ end
92
+ end
93
+ end
data/lib/r_spec/log.rb ADDED
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "expresenter"
4
+
5
+ module RSpec
6
+ # Exception for debugging purpose.
7
+ class Log < ::NoMethodError
8
+ # @param message [String] A message to log to the console.
9
+ #
10
+ # @return [nil] Write a log message to STDOUT.
11
+ def self.result(message)
12
+ puts " " + ::Expresenter.call(true).with(
13
+ actual: nil,
14
+ error: new(message),
15
+ expected: 42,
16
+ got: nil,
17
+ matcher: :be,
18
+ negate: false,
19
+ level: :MAY,
20
+ valid: false
21
+ ).colored_string
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "expresenter"
4
+
5
+ module RSpec
6
+ # Exception for pending expectations.
7
+ class Pending < ::NotImplementedError
8
+ # @param message [String] The not implemented expectation description.
9
+ #
10
+ # @return [nil] Write a pending expectation to STDOUT.
11
+ def self.result(message)
12
+ warn " " + ::Expresenter.call(true).with(
13
+ actual: new(message),
14
+ error: nil,
15
+ expected: self,
16
+ got: false,
17
+ matcher: :raise_exception,
18
+ negate: true,
19
+ level: :SHOULD,
20
+ valid: false
21
+ ).colored_string
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RSpec
4
+ # Namespace to collect test classes.
5
+ module Test
6
+ end
7
+ end
metadata CHANGED
@@ -1,208 +1,190 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: r_spec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 1.0.0.beta2
5
5
  platform: ruby
6
6
  authors:
7
- - Cyril Wack
7
+ - Cyril Kato
8
8
  autorequire:
9
9
  bindir: bin
10
- cert_chain:
11
- - |
12
- -----BEGIN CERTIFICATE-----
13
- MIIDdDCCAlygAwIBAgIBATANBgkqhkiG9w0BAQUFADBAMRAwDgYDVQQDDAdjb250
14
- YWN0MRUwEwYKCZImiZPyLGQBGRYFY3lyaWwxFTATBgoJkiaJk/IsZAEZFgVlbWFp
15
- bDAeFw0xNTA3MzExMjExMDZaFw0xNjA3MzAxMjExMDZaMEAxEDAOBgNVBAMMB2Nv
16
- bnRhY3QxFTATBgoJkiaJk/IsZAEZFgVjeXJpbDEVMBMGCgmSJomT8ixkARkWBWVt
17
- YWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6hUEYoxnn1mtoaiK
18
- NiwjzVPqPgQCR9ZeYdWjLJ3UUG2h5Q6awJCnbaGr8LGGcKtveCDbOJRjtdKNuOTH
19
- O2FLTkf46nrMGiF+6/j//qh8o0EQHBRKIVMYkxZxZe4Fcqtdf1bWNMZuXeyoDjdt
20
- 4yiGfizbbTOu0gBf7Yrsv5DsL0a5CU/We7zxMfgGXCVb9PYkD+OWUMcTARYDKfYa
21
- nN9ECI7CFm/yXcsof/eIQA5EmJNmQnhx8B+8L6jDqQeSUAUrBZnC9CdloKOoqmEL
22
- weqM2g6LM932Ba74rEl4QlFRYDcs8kjr71UcvseHRCUkFr36j26OU8+gKelsTNdO
23
- 7OZNKQIDAQABo3kwdzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU
24
- LSJTN9h29D6bqOhp+vyvhyM0AF4wHgYDVR0RBBcwFYETY29udGFjdEBjeXJpbC5l
25
- bWFpbDAeBgNVHRIEFzAVgRNjb250YWN0QGN5cmlsLmVtYWlsMA0GCSqGSIb3DQEB
26
- BQUAA4IBAQArqCC1rUyGJlF0DF9ZhUOgggyROvO0/WroSI5zWgzdB8EU7RJpsDIV
27
- caGnpji7h0rQIGWQuJ6TL2fTFLfeGRFdIzRZwWC7TeXhcXngJHZxSjDBt2OpfM8A
28
- P5eElSQS9iJCetBGGMyt354PfgZkg3URaC+JA6mdEisdtEdo64ElnMsLg9shCqye
29
- JSR3BbejbyPVva0/MHKD+dR6RswlcM9KMiYOXQml7a/kH6huOHvVq9gj5xC2ih8W
30
- dzJvWzQ1+dJU6WQv75E9ddSkaQrK3nhdgQVu+/wgvGSrsMvOGNz+LXaSDxQqZuwX
31
- 0KNQFuIukfrdk8URwRnHoAnvx4U93iUw
32
- -----END CERTIFICATE-----
33
- date: 2015-11-29 00:00:00.000000000 Z
10
+ cert_chain: []
11
+ date: 2021-06-04 00:00:00.000000000 Z
34
12
  dependencies:
35
13
  - !ruby/object:Gem::Dependency
36
- name: fix-expect
14
+ name: expresenter
37
15
  requirement: !ruby/object:Gem::Requirement
38
16
  requirements:
39
17
  - - "~>"
40
18
  - !ruby/object:Gem::Version
41
- version: 0.3.1
19
+ version: 1.2.0
42
20
  type: :runtime
43
21
  prerelease: false
44
22
  version_requirements: !ruby/object:Gem::Requirement
45
23
  requirements:
46
24
  - - "~>"
47
25
  - !ruby/object:Gem::Version
48
- version: 0.3.1
26
+ version: 1.2.0
49
27
  - !ruby/object:Gem::Dependency
50
- name: fix-its
28
+ name: matchi-rspec
51
29
  requirement: !ruby/object:Gem::Requirement
52
30
  requirements:
53
31
  - - "~>"
54
32
  - !ruby/object:Gem::Version
55
- version: 0.5.0
33
+ version: 1.1.0
56
34
  type: :runtime
57
35
  prerelease: false
58
36
  version_requirements: !ruby/object:Gem::Requirement
59
37
  requirements:
60
38
  - - "~>"
61
39
  - !ruby/object:Gem::Version
62
- version: 0.5.0
40
+ version: 1.1.0
63
41
  - !ruby/object:Gem::Dependency
64
- name: fix-let
42
+ name: bundler
65
43
  requirement: !ruby/object:Gem::Requirement
66
44
  requirements:
67
- - - "~>"
45
+ - - ">="
68
46
  - !ruby/object:Gem::Version
69
- version: 0.1.0
70
- type: :runtime
47
+ version: '0'
48
+ type: :development
71
49
  prerelease: false
72
50
  version_requirements: !ruby/object:Gem::Requirement
73
51
  requirements:
74
- - - "~>"
52
+ - - ">="
75
53
  - !ruby/object:Gem::Version
76
- version: 0.1.0
54
+ version: '0'
77
55
  - !ruby/object:Gem::Dependency
78
- name: matchi-rspec
56
+ name: rake
79
57
  requirement: !ruby/object:Gem::Requirement
80
58
  requirements:
81
- - - "~>"
59
+ - - ">="
82
60
  - !ruby/object:Gem::Version
83
- version: 0.1.0
84
- type: :runtime
61
+ version: '0'
62
+ type: :development
85
63
  prerelease: false
86
64
  version_requirements: !ruby/object:Gem::Requirement
87
65
  requirements:
88
- - - "~>"
66
+ - - ">="
89
67
  - !ruby/object:Gem::Version
90
- version: 0.1.0
68
+ version: '0'
91
69
  - !ruby/object:Gem::Dependency
92
- name: bundler
70
+ name: rubocop-md
93
71
  requirement: !ruby/object:Gem::Requirement
94
72
  requirements:
95
- - - "~>"
73
+ - - ">="
96
74
  - !ruby/object:Gem::Version
97
- version: '1.10'
75
+ version: '0'
98
76
  type: :development
99
77
  prerelease: false
100
78
  version_requirements: !ruby/object:Gem::Requirement
101
79
  requirements:
102
- - - "~>"
80
+ - - ">="
103
81
  - !ruby/object:Gem::Version
104
- version: '1.10'
82
+ version: '0'
105
83
  - !ruby/object:Gem::Dependency
106
- name: rake
84
+ name: rubocop-performance
107
85
  requirement: !ruby/object:Gem::Requirement
108
86
  requirements:
109
- - - "~>"
87
+ - - ">="
110
88
  - !ruby/object:Gem::Version
111
- version: '10.4'
89
+ version: '0'
112
90
  type: :development
113
91
  prerelease: false
114
92
  version_requirements: !ruby/object:Gem::Requirement
115
93
  requirements:
116
- - - "~>"
94
+ - - ">="
117
95
  - !ruby/object:Gem::Version
118
- version: '10.4'
96
+ version: '0'
119
97
  - !ruby/object:Gem::Dependency
120
- name: yard
98
+ name: rubocop-rake
121
99
  requirement: !ruby/object:Gem::Requirement
122
100
  requirements:
123
- - - "~>"
101
+ - - ">="
124
102
  - !ruby/object:Gem::Version
125
- version: '0.8'
103
+ version: '0'
126
104
  type: :development
127
105
  prerelease: false
128
106
  version_requirements: !ruby/object:Gem::Requirement
129
107
  requirements:
130
- - - "~>"
108
+ - - ">="
131
109
  - !ruby/object:Gem::Version
132
- version: '0.8'
110
+ version: '0'
133
111
  - !ruby/object:Gem::Dependency
134
- name: simplecov
112
+ name: rubocop-rspec
135
113
  requirement: !ruby/object:Gem::Requirement
136
114
  requirements:
137
- - - "~>"
115
+ - - ">="
138
116
  - !ruby/object:Gem::Version
139
- version: '0.10'
117
+ version: '0'
140
118
  type: :development
141
119
  prerelease: false
142
120
  version_requirements: !ruby/object:Gem::Requirement
143
121
  requirements:
144
- - - "~>"
122
+ - - ">="
145
123
  - !ruby/object:Gem::Version
146
- version: '0.10'
124
+ version: '0'
147
125
  - !ruby/object:Gem::Dependency
148
- name: rubocop
126
+ name: rubocop-thread_safety
149
127
  requirement: !ruby/object:Gem::Requirement
150
128
  requirements:
151
- - - "~>"
129
+ - - ">="
152
130
  - !ruby/object:Gem::Version
153
- version: '0.35'
131
+ version: '0'
154
132
  type: :development
155
133
  prerelease: false
156
134
  version_requirements: !ruby/object:Gem::Requirement
157
135
  requirements:
158
- - - "~>"
136
+ - - ">="
159
137
  - !ruby/object:Gem::Version
160
- version: '0.35'
138
+ version: '0'
161
139
  - !ruby/object:Gem::Dependency
162
- name: spectus
140
+ name: simplecov
163
141
  requirement: !ruby/object:Gem::Requirement
164
142
  requirements:
165
- - - "~>"
143
+ - - ">="
166
144
  - !ruby/object:Gem::Version
167
- version: '3.0'
145
+ version: '0'
168
146
  type: :development
169
147
  prerelease: false
170
148
  version_requirements: !ruby/object:Gem::Requirement
171
149
  requirements:
172
- - - "~>"
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
+ - - ">="
173
165
  - !ruby/object:Gem::Version
174
- version: '3.0'
175
- description: A small Rspec clone based on Fix specing framework.
176
- email:
177
- - contact@cyril.email
166
+ version: '0'
167
+ description: A minimalist RSpec clone with an emphasis on correctness and simplicity.
168
+ email: contact@cyril.email
178
169
  executables: []
179
170
  extensions: []
180
171
  extra_rdoc_files: []
181
172
  files:
182
- - ".gitignore"
183
- - ".travis.yml"
184
- - ".yardopts"
185
- - CODE_OF_CONDUCT.md
186
- - Gemfile
187
173
  - LICENSE.md
188
174
  - README.md
189
- - Rakefile
190
- - VERSION.semver
191
- - bin/console
192
- - bin/setup
193
- - certs/gem-cyril-public_cert.pem
194
- - checksum/r_spec-0.1.0.gem.sha512
195
- - checksum/r_spec-0.1.1.gem.sha512
196
- - checksum/r_spec-0.2.0.gem.sha512
197
- - lib/fix/it.rb
198
- - lib/fix/on.rb
199
175
  - lib/r_spec.rb
200
- - pkg_checksum
201
- - r_spec.gemspec
202
- homepage: https://github.com/cyril/r_spec
176
+ - lib/r_spec/dsl.rb
177
+ - lib/r_spec/expectation_target.rb
178
+ - lib/r_spec/log.rb
179
+ - lib/r_spec/pending.rb
180
+ - lib/r_spec/test.rb
181
+ homepage: https://r-spec.dev/
203
182
  licenses:
204
183
  - MIT
205
- metadata: {}
184
+ metadata:
185
+ bug_tracker_uri: https://github.com/cyril/r_spec.rb/issues
186
+ documentation_uri: https://rubydoc.info/gems/r_spec
187
+ source_code_uri: https://github.com/cyril/r_spec.rb
206
188
  post_install_message:
207
189
  rdoc_options: []
208
190
  require_paths:
@@ -211,17 +193,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
211
193
  requirements:
212
194
  - - ">="
213
195
  - !ruby/object:Gem::Version
214
- version: '0'
196
+ version: 2.7.0
215
197
  required_rubygems_version: !ruby/object:Gem::Requirement
216
198
  requirements:
217
- - - ">="
199
+ - - ">"
218
200
  - !ruby/object:Gem::Version
219
- version: '0'
201
+ version: 1.3.1
220
202
  requirements: []
221
- rubyforge_project:
222
- rubygems_version: 2.4.5.1
203
+ rubygems_version: 3.1.6
223
204
  signing_key:
224
205
  specification_version: 4
225
- summary: Rspec clone with Fix.
206
+ summary: A minimalist RSpec clone
226
207
  test_files: []
227
- has_rdoc:
checksums.yaml.gz.sig DELETED
@@ -1 +0,0 @@
1
- ��׃�{}����6t�B������%I����̺��~�'�:I�Շb��zq�� �G�Z�e�H�>)�W�����@/E�Y�"��1�ym�a?�����9]�evu �w� ٹ���Υ��~t^�.qv����E�9�:�%=��'z�~�:IT�=ֺ;9>a[�����epsvIC��Lxvt?�=e�dq1��&$%�4ձX4����c�H���ظ����C<' ]���qCB�4�!�����)�
data.tar.gz.sig DELETED
@@ -1,2 +0,0 @@
1
- ��g�����-�e$��D#���͸&]���"(v��D�!���\�U��A�}#��&�5r��jѐ9��i&��愷��~���K=BѪ[����ki|�EΞ���]Zt;B_���P�E ����ٻ�+STT�^�R9b��G"��d/���p�u����"��������!&�F��w�o�>��_�o�L�h��:��Nj*�hN�!�mI��
2
- +���}x/r���k��5�`7�&�G:?�t�uvseQ*��v�I�'
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
- *.gem
data/.travis.yml DELETED
@@ -1,27 +0,0 @@
1
- language: ruby
2
- sudo: false
3
- cache: bundler
4
- script: 'bundle exec rake test:coverage --trace'
5
- before_install:
6
- - gem install bundler
7
- rvm:
8
- - 1.9.3
9
- - 2.0
10
- - 2.1
11
- - 2.2
12
- - ruby-head
13
- - jruby
14
- - jruby-head
15
- - rbx-2
16
- matrix:
17
- allow_failures:
18
- - rvm: rbx-2
19
- - rvm: jruby-head
20
- - rvm: ruby-head
21
- notifications:
22
- webhooks:
23
- urls:
24
- - https://webhooks.gitter.im/e/a44b19cc5cf6db25fa87
25
- on_success: change
26
- on_failure: always
27
- on_start: never
data/.yardopts DELETED
@@ -1 +0,0 @@
1
- - README.md
data/CODE_OF_CONDUCT.md DELETED
@@ -1,13 +0,0 @@
1
- # Contributor Code of Conduct
2
-
3
- As contributors and maintainers of this project, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
4
-
5
- We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, or religion.
6
-
7
- Examples of unacceptable behavior by participants include the use of sexual language or imagery, derogatory comments or personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct.
8
-
9
- Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed from the project team.
10
-
11
- Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers.
12
-
13
- This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.0.0, available at [http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/)
data/Gemfile DELETED
@@ -1,3 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gemspec
data/Rakefile DELETED
@@ -1,20 +0,0 @@
1
- require 'bundler/gem_tasks'
2
- require 'rake/testtask'
3
- require 'rubocop/rake_task'
4
-
5
- RuboCop::RakeTask.new
6
-
7
- Rake::TestTask.new do |t|
8
- t.verbose = true
9
- t.warning = true
10
- end
11
-
12
- namespace :test do
13
- task :coverage do
14
- ENV['COVERAGE'] = 'true'
15
- Rake::Task['test'].invoke
16
- end
17
- end
18
-
19
- task(:doc_stats) { ruby '-S yard stats' }
20
- task default: [:test, :doc_stats, :rubocop]
data/VERSION.semver DELETED
@@ -1 +0,0 @@
1
- 0.3.0
data/bin/console DELETED
@@ -1,7 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'bundler/setup'
4
- require 'r_spec'
5
-
6
- require 'irb'
7
- IRB.start
data/bin/setup DELETED
@@ -1,5 +0,0 @@
1
- #!/bin/bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
-
5
- bundle install
@@ -1,21 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIDdDCCAlygAwIBAgIBATANBgkqhkiG9w0BAQUFADBAMRAwDgYDVQQDDAdjb250
3
- YWN0MRUwEwYKCZImiZPyLGQBGRYFY3lyaWwxFTATBgoJkiaJk/IsZAEZFgVlbWFp
4
- bDAeFw0xNTA3MzExMjExMDZaFw0xNjA3MzAxMjExMDZaMEAxEDAOBgNVBAMMB2Nv
5
- bnRhY3QxFTATBgoJkiaJk/IsZAEZFgVjeXJpbDEVMBMGCgmSJomT8ixkARkWBWVt
6
- YWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6hUEYoxnn1mtoaiK
7
- NiwjzVPqPgQCR9ZeYdWjLJ3UUG2h5Q6awJCnbaGr8LGGcKtveCDbOJRjtdKNuOTH
8
- O2FLTkf46nrMGiF+6/j//qh8o0EQHBRKIVMYkxZxZe4Fcqtdf1bWNMZuXeyoDjdt
9
- 4yiGfizbbTOu0gBf7Yrsv5DsL0a5CU/We7zxMfgGXCVb9PYkD+OWUMcTARYDKfYa
10
- nN9ECI7CFm/yXcsof/eIQA5EmJNmQnhx8B+8L6jDqQeSUAUrBZnC9CdloKOoqmEL
11
- weqM2g6LM932Ba74rEl4QlFRYDcs8kjr71UcvseHRCUkFr36j26OU8+gKelsTNdO
12
- 7OZNKQIDAQABo3kwdzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU
13
- LSJTN9h29D6bqOhp+vyvhyM0AF4wHgYDVR0RBBcwFYETY29udGFjdEBjeXJpbC5l
14
- bWFpbDAeBgNVHRIEFzAVgRNjb250YWN0QGN5cmlsLmVtYWlsMA0GCSqGSIb3DQEB
15
- BQUAA4IBAQArqCC1rUyGJlF0DF9ZhUOgggyROvO0/WroSI5zWgzdB8EU7RJpsDIV
16
- caGnpji7h0rQIGWQuJ6TL2fTFLfeGRFdIzRZwWC7TeXhcXngJHZxSjDBt2OpfM8A
17
- P5eElSQS9iJCetBGGMyt354PfgZkg3URaC+JA6mdEisdtEdo64ElnMsLg9shCqye
18
- JSR3BbejbyPVva0/MHKD+dR6RswlcM9KMiYOXQml7a/kH6huOHvVq9gj5xC2ih8W
19
- dzJvWzQ1+dJU6WQv75E9ddSkaQrK3nhdgQVu+/wgvGSrsMvOGNz+LXaSDxQqZuwX
20
- 0KNQFuIukfrdk8URwRnHoAnvx4U93iUw
21
- -----END CERTIFICATE-----
@@ -1 +0,0 @@
1
- 2988d048456c0dcc53bd2c8c45d8fd0f7de49e1f2bb0a3aca0749671b4baa4376e44e25d05f9ee457fe024872155ce93c8fe5c5e03fdcd494962d69805c5fce3
@@ -1 +0,0 @@
1
- 541eb96ff91798d807dc5b0bd71dab3e5c17358bc0e5bca8784607b8de0c8e9532011e958e152fb4a22bc653d9af13bd5edaf0989ff77c7941004f03ad0f29be
@@ -1 +0,0 @@
1
- 9c58b303e8a3c03de72abb0ee0083cf4a83e71d3c3d783fc2d70c51e6e3a49cc281881da78a9ff326cf5462eace11bdb5acb5826228896e6b91abd437d859b17
data/lib/fix/it.rb DELETED
@@ -1,10 +0,0 @@
1
- # Namespace for the Fix framework.
2
- module Fix
3
- # Override Fix's It class.
4
- class It
5
- # @return [Class] The class of the described object.
6
- def described_class
7
- subject.is_a?(::Class) ? subject : subject.class
8
- end
9
- end
10
- end
data/lib/fix/on.rb DELETED
@@ -1,43 +0,0 @@
1
- # Namespace for the Fix framework.
2
- module Fix
3
- # Override Fix's On class.
4
- class On
5
- # Useful to perform side-effects, e.g., add something in to a database.
6
- #
7
- # @note To declare an instance variable, use the `let` helper instead.
8
- #
9
- # @param block [Proc] The block to call.
10
- #
11
- # @return [#object_id] The given block.
12
- def before(*, &block)
13
- block.call
14
- end
15
-
16
- # @param another_front_object [#object_id] Override the front object.
17
- # @param specs [Proc] A set of specs.
18
- #
19
- # @return [Array] List of results.
20
- def describe(another_front_object, *, &specs)
21
- o = On.new(another_front_object,
22
- results,
23
- challenges,
24
- helpers.dup,
25
- configuration)
26
-
27
- o.instance_eval(&specs)
28
- end
29
-
30
- # Override the implicit subject.
31
- #
32
- # @param block [Proc, nil] Another subject inside a block.
33
- #
34
- # @return [#object_id] The subject.
35
- def subject(&block)
36
- if block_given?
37
- @described = block.call
38
- else
39
- super
40
- end
41
- end
42
- end
43
- end
data/pkg_checksum DELETED
@@ -1,11 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'digest/sha2'
4
-
5
- gemname = 'r_spec'.to_sym
6
- ARGV[0] = File.read('VERSION.semver').chomp if ARGV[0].nil?
7
- built_gem_path = "pkg/#{gemname}-#{ARGV[0]}.gem"
8
- checksum = Digest::SHA512.new.hexdigest(File.read(built_gem_path))
9
- checksum_path = "checksum/#{gemname}-#{ARGV[0]}.gem.sha512"
10
-
11
- File.open(checksum_path, 'w') { |f| f.write("#{checksum}\n") }
data/r_spec.gemspec DELETED
@@ -1,32 +0,0 @@
1
- Gem::Specification.new do |spec|
2
- spec.name = 'r_spec'
3
- spec.version = File.read('VERSION.semver').chomp
4
- spec.authors = ['Cyril Wack']
5
- spec.email = ['contact@cyril.email']
6
-
7
- spec.summary = 'Rspec clone with Fix.'
8
- spec.description = 'A small Rspec clone based on Fix specing framework.'
9
- spec.homepage = 'https://github.com/cyril/r_spec'
10
- spec.license = 'MIT'
11
-
12
- spec.files =
13
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^test/}) }
14
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
15
- spec.require_paths = ['lib']
16
-
17
- spec.add_dependency 'fix-expect', '~> 0.3.1'
18
- spec.add_dependency 'fix-its', '~> 0.5.0'
19
- spec.add_dependency 'fix-let', '~> 0.1.0'
20
- spec.add_dependency 'matchi-rspec', '~> 0.1.0'
21
-
22
- spec.add_development_dependency 'bundler', '~> 1.10'
23
- spec.add_development_dependency 'rake', '~> 10.4'
24
- spec.add_development_dependency 'yard', '~> 0.8'
25
- spec.add_development_dependency 'simplecov', '~> 0.10'
26
- spec.add_development_dependency 'rubocop', '~> 0.35'
27
- spec.add_development_dependency 'spectus', '~> 3.0'
28
-
29
- spec.cert_chain = ['certs/gem-cyril-public_cert.pem']
30
- private_key = File.expand_path('~/.ssh/gem-cyril-private_key.pem')
31
- spec.signing_key = private_key if File.exist?(private_key)
32
- end
metadata.gz.sig DELETED
@@ -1 +0,0 @@
1
- �r?DX<_x�s���a >E`GB:�*+�{u�t���