expresenter 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +29 -35
- data/lib/expresenter/common.rb +18 -23
- data/lib/expresenter/fail.rb +20 -4
- data/lib/expresenter/pass.rb +34 -10
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3460d51122770c7fdd769a71726f8ac91f7ee55d2a97008aac27137aaeb09a43
|
4
|
+
data.tar.gz: 2dfe5bac23440dd3a48e75d103da7dd3e12809936f7d3df02a299d7023328286
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d50f24c95d16d6417422c15c060c81b42d9e77f9426c3c7466c066f13f9de76a4e1f1c7dd73c70485e099b20a3e05c94c07c4c640fd796c1d927a217d764acfe
|
7
|
+
data.tar.gz: 7f8c9d1c7e6979766be2600d1db0b630ff9ab377f9223e5d8e8b4e874dfb6bd57ec3326a0c16fbf416034c7307c2b056d18bb8b151bdb32edbdd4763e919d427
|
data/README.md
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
# Expresenter
|
2
2
|
|
3
3
|
[![Build Status](https://api.travis-ci.org/fixrb/expresenter.svg?branch=main)][travis]
|
4
|
-
[![Code Climate](https://codeclimate.com/github/fixrb/expresenter/badges/gpa.svg)][codeclimate]
|
5
4
|
[![Gem Version](https://badge.fury.io/rb/expresenter.svg)][gem]
|
6
5
|
[![Inline docs](https://inch-ci.org/github/fixrb/expresenter.svg?branch=main)][inchpages]
|
7
6
|
[![Documentation](https://img.shields.io/:yard-docs-38c800.svg)][rubydoc]
|
@@ -18,11 +17,15 @@ gem "expresenter"
|
|
18
17
|
|
19
18
|
And then execute:
|
20
19
|
|
21
|
-
|
20
|
+
```sh
|
21
|
+
bundle
|
22
|
+
```
|
22
23
|
|
23
24
|
Or install it yourself as:
|
24
25
|
|
25
|
-
|
26
|
+
```sh
|
27
|
+
gem install expresenter
|
28
|
+
```
|
26
29
|
|
27
30
|
## Usage
|
28
31
|
|
@@ -88,10 +91,9 @@ result.success? # => true
|
|
88
91
|
result.valid? # => true
|
89
92
|
result.inspect # => "Expresenter::Pass(actual: \"FOO\", error: nil, expected: \"foo\", got: true, matcher: :eql, negate: true, level: :MUST, valid: true)"
|
90
93
|
result.definition # => "eql \"foo\""
|
91
|
-
result.maybe_negate # => " not"
|
92
94
|
result.summary # => "expected \"FOO\" not to eql \"foo\""
|
93
95
|
result.colored_char # => "\e[32m.\e[0m"
|
94
|
-
result.colored_string # => "\e[
|
96
|
+
result.colored_string # => "\e[32m\e[1mSuccess\e[22m: expected \"FOO\" not to eql \"foo\".\e[0m"
|
95
97
|
result.message # => "Success: expected \"FOO\" not to eql \"foo\"."
|
96
98
|
result.to_s # => "Success: expected \"FOO\" not to eql \"foo\"."
|
97
99
|
result.titre # => "Success"
|
@@ -102,27 +104,26 @@ A failed expectation:
|
|
102
104
|
```ruby
|
103
105
|
result = Expresenter.call(false).new(actual: "foo", error: Exception.new("BOOM"), expected: 42, got: true, negate: true, valid: true, matcher: :eql, level: :MUST)
|
104
106
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
actual.titre # => "Exception"
|
107
|
+
result.failed? # => true
|
108
|
+
result.failure? # => false
|
109
|
+
result.info? # => false
|
110
|
+
result.warning? # => false
|
111
|
+
result.to_sym # => :error
|
112
|
+
result.char # => "E"
|
113
|
+
result.emoji # => "💥"
|
114
|
+
result.passed? # => false
|
115
|
+
result.negate? # => true
|
116
|
+
result.error? # => true
|
117
|
+
result.success? # => true
|
118
|
+
result.valid? # => true
|
119
|
+
result.inspect # => "Expresenter::Fail(actual: \"foo\", error: #<Exception: BOOM>, expected: 42, got: true, matcher: :eql, negate: true, level: :MUST, valid: true)"
|
120
|
+
result.definition # => "eql 42"
|
121
|
+
result.summary # => "BOOM"
|
122
|
+
result.colored_char # => "\e[31mE\e[0m"
|
123
|
+
result.colored_string # => "\e[31m\e[1mException\e[22m: BOOM.\e[0m"
|
124
|
+
result.message # => "Exception: BOOM."
|
125
|
+
result.to_s # => "Exception: BOOM."
|
126
|
+
result.titre # => "Exception"
|
126
127
|
```
|
127
128
|
|
128
129
|
### Return or Raise
|
@@ -144,7 +145,7 @@ Expresenter.call(false).with(actual: "foo", error: Exception.new("BOOM"), expect
|
|
144
145
|
> Traceback (most recent call last):
|
145
146
|
> 3: from ./bin/console:7:in `<main>'
|
146
147
|
> 2: from (irb):1
|
147
|
-
> 1: from /Users/cyril/github/fixrb/expresenter/lib/expresenter/fail.rb:
|
148
|
+
> 1: from /Users/cyril/github/fixrb/expresenter/lib/expresenter/fail.rb:19:in `with'
|
148
149
|
> Expresenter::Fail (Exception: BOOM.)
|
149
150
|
|
150
151
|
### More Examples
|
@@ -157,19 +158,13 @@ A full list of unit tests can be viewed (and executed) here:
|
|
157
158
|
* Home page: https://github.com/fixrb/expresenter
|
158
159
|
* Bugs/issues: https://github.com/fixrb/expresenter/issues
|
159
160
|
|
160
|
-
## Rubies
|
161
|
-
|
162
|
-
* [MRI](https://www.ruby-lang.org/)
|
163
|
-
* [Rubinius](https://rubinius.com/)
|
164
|
-
* [JRuby](https://www.jruby.org/)
|
165
|
-
|
166
161
|
## Versioning
|
167
162
|
|
168
163
|
__Expresenter__ follows [Semantic Versioning 2.0](https://semver.org/).
|
169
164
|
|
170
165
|
## License
|
171
166
|
|
172
|
-
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
167
|
+
The [gem](https://rubygems.org/gems/expresenter) is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
173
168
|
|
174
169
|
***
|
175
170
|
|
@@ -182,6 +177,5 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
182
177
|
|
183
178
|
[gem]: https://rubygems.org/gems/expresenter
|
184
179
|
[travis]: https://travis-ci.org/fixrb/expresenter
|
185
|
-
[codeclimate]: https://codeclimate.com/github/fixrb/expresenter
|
186
180
|
[inchpages]: https://inch-ci.org/github/fixrb/expresenter
|
187
181
|
[rubydoc]: https://rubydoc.info/gems/expresenter/frames
|
data/lib/expresenter/common.rb
CHANGED
@@ -3,6 +3,8 @@
|
|
3
3
|
module Expresenter
|
4
4
|
# Common collection of methods.
|
5
5
|
module Common
|
6
|
+
SPACE = " "
|
7
|
+
|
6
8
|
# @return [#object_id] Returned value by the challenged subject.
|
7
9
|
attr_reader :actual
|
8
10
|
|
@@ -76,14 +78,7 @@ module Expresenter
|
|
76
78
|
#
|
77
79
|
# @return [String] A readable string of the definition.
|
78
80
|
def definition
|
79
|
-
[matcher, expected&.inspect].compact.join(
|
80
|
-
end
|
81
|
-
|
82
|
-
# The negation, if any.
|
83
|
-
#
|
84
|
-
# @return [String] The negation, or an empty string.
|
85
|
-
def maybe_negate
|
86
|
-
negate? ? " not" : ""
|
81
|
+
[matcher, expected&.inspect].compact.join(SPACE)
|
87
82
|
end
|
88
83
|
|
89
84
|
# The summary of the result.
|
@@ -95,9 +90,9 @@ module Expresenter
|
|
95
90
|
elsif actual.is_a?(::Exception)
|
96
91
|
actual.message
|
97
92
|
elsif actual == expected
|
98
|
-
"expected
|
93
|
+
["expected", negation, "to", definition].compact.join(SPACE)
|
99
94
|
else
|
100
|
-
"expected
|
95
|
+
["expected", actual.inspect, negation, "to", definition].compact.join(SPACE)
|
101
96
|
end
|
102
97
|
end
|
103
98
|
|
@@ -112,7 +107,7 @@ module Expresenter
|
|
112
107
|
#
|
113
108
|
# @return [String] A string representing the result.
|
114
109
|
def colored_string
|
115
|
-
color(
|
110
|
+
color(to_bold_s)
|
116
111
|
end
|
117
112
|
|
118
113
|
# The representation of the result.
|
@@ -135,18 +130,18 @@ module Expresenter
|
|
135
130
|
|
136
131
|
protected
|
137
132
|
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
133
|
+
# The negation, if any.
|
134
|
+
#
|
135
|
+
# @return [String, nil] The negation, or an empty string.
|
136
|
+
def negation
|
137
|
+
"not" if negate?
|
138
|
+
end
|
139
|
+
|
140
|
+
# The representation of the result with the title in bold.
|
141
|
+
#
|
142
|
+
# @return [String] A string representing the result with the title in bold.
|
143
|
+
def to_bold_s
|
144
|
+
"\e[1m#{titre}\e[22m: #{summary}."
|
150
145
|
end
|
151
146
|
end
|
152
147
|
end
|
data/lib/expresenter/fail.rb
CHANGED
@@ -5,6 +5,12 @@ require_relative "common"
|
|
5
5
|
module Expresenter
|
6
6
|
# The class that is responsible for reporting that an expectation is false.
|
7
7
|
class Fail < ::StandardError
|
8
|
+
FAILURE_CHAR = "F"
|
9
|
+
FAILURE_EMOJI = "❌"
|
10
|
+
|
11
|
+
ERROR_CHAR = "E"
|
12
|
+
ERROR_EMOJI = "💥"
|
13
|
+
|
8
14
|
include Common
|
9
15
|
|
10
16
|
# @param (see Fail#initialize)
|
@@ -83,9 +89,9 @@ module Expresenter
|
|
83
89
|
# @return [String] The char that identify the result.
|
84
90
|
def char
|
85
91
|
if failure?
|
86
|
-
|
92
|
+
FAILURE_CHAR
|
87
93
|
else
|
88
|
-
|
94
|
+
ERROR_CHAR
|
89
95
|
end
|
90
96
|
end
|
91
97
|
|
@@ -94,9 +100,19 @@ module Expresenter
|
|
94
100
|
# @return [String] The emoji that identify the result.
|
95
101
|
def emoji
|
96
102
|
if failure?
|
97
|
-
|
103
|
+
FAILURE_EMOJI
|
104
|
+
else
|
105
|
+
ERROR_EMOJI
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
protected
|
110
|
+
|
111
|
+
def color(str)
|
112
|
+
if failure?
|
113
|
+
"\e[35m#{str}\e[0m" # purple
|
98
114
|
else
|
99
|
-
"
|
115
|
+
"\e[31m#{str}\e[0m" # red
|
100
116
|
end
|
101
117
|
end
|
102
118
|
end
|
data/lib/expresenter/pass.rb
CHANGED
@@ -5,6 +5,15 @@ require_relative "common"
|
|
5
5
|
module Expresenter
|
6
6
|
# The class that is responsible for reporting that an expectation is true.
|
7
7
|
class Pass
|
8
|
+
INFO_CHAR = "I"
|
9
|
+
INFO_EMOJI = "💡"
|
10
|
+
|
11
|
+
SUCCESS_CHAR = "."
|
12
|
+
SUCCESS_EMOJI = "✅"
|
13
|
+
|
14
|
+
WARNING_CHAR = "W"
|
15
|
+
WARNING_EMOJI = "⚠️"
|
16
|
+
|
8
17
|
include Common
|
9
18
|
|
10
19
|
# @param (see Pass#initialize)
|
@@ -71,10 +80,13 @@ module Expresenter
|
|
71
80
|
#
|
72
81
|
# @return [Symbol] The identifier of the state.
|
73
82
|
def to_sym
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
83
|
+
if success?
|
84
|
+
:success
|
85
|
+
elsif warning?
|
86
|
+
:warning
|
87
|
+
else
|
88
|
+
:info
|
89
|
+
end
|
78
90
|
end
|
79
91
|
|
80
92
|
# Express the result with one char.
|
@@ -82,11 +94,11 @@ module Expresenter
|
|
82
94
|
# @return [String] The char that identify the result.
|
83
95
|
def char
|
84
96
|
if success?
|
85
|
-
|
97
|
+
SUCCESS_CHAR
|
86
98
|
elsif warning?
|
87
|
-
|
99
|
+
WARNING_CHAR
|
88
100
|
else
|
89
|
-
|
101
|
+
INFO_CHAR
|
90
102
|
end
|
91
103
|
end
|
92
104
|
|
@@ -95,11 +107,23 @@ module Expresenter
|
|
95
107
|
# @return [String] The emoji that identify the result.
|
96
108
|
def emoji
|
97
109
|
if success?
|
98
|
-
|
110
|
+
SUCCESS_EMOJI
|
111
|
+
elsif warning?
|
112
|
+
WARNING_EMOJI
|
113
|
+
else
|
114
|
+
INFO_EMOJI
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
protected
|
119
|
+
|
120
|
+
def color(str)
|
121
|
+
if success?
|
122
|
+
"\e[32m#{str}\e[0m" # green
|
99
123
|
elsif warning?
|
100
|
-
"
|
124
|
+
"\e[33m#{str}\e[0m" # yellow
|
101
125
|
else
|
102
|
-
"
|
126
|
+
"\e[36m#{str}\e[0m" # blue
|
103
127
|
end
|
104
128
|
end
|
105
129
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: expresenter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cyril Kato
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-05-
|
11
|
+
date: 2021-05-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: brutal
|
@@ -167,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
167
167
|
- !ruby/object:Gem::Version
|
168
168
|
version: '0'
|
169
169
|
requirements: []
|
170
|
-
rubygems_version: 3.1.
|
170
|
+
rubygems_version: 3.1.6
|
171
171
|
signing_key:
|
172
172
|
specification_version: 4
|
173
173
|
summary: Expectation result presenter.
|