spectus 1.1.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/.gitignore +0 -5
  5. data/.travis.yml +12 -3
  6. data/CODE_OF_CONDUCT.md +13 -0
  7. data/Gemfile +3 -0
  8. data/LICENSE.md +17 -18
  9. data/README.md +18 -199
  10. data/VERSION.semver +1 -1
  11. data/bin/console +7 -0
  12. data/bin/setup +5 -0
  13. data/lib/spectus.rb +12 -2
  14. data/lib/spectus/expectation_target.rb +86 -12
  15. data/lib/spectus/requirement_level/high.rb +36 -0
  16. data/lib/spectus/requirement_level/low.rb +22 -0
  17. data/lib/spectus/requirement_level/medium.rb +22 -0
  18. data/lib/spectus/sandbox.rb +31 -0
  19. data/{spectus.pem → spectus-gem-public_cert.pem} +0 -0
  20. data/spectus.gemspec +14 -10
  21. metadata +50 -72
  22. metadata.gz.sig +0 -0
  23. data/.coveralls.yml +0 -1
  24. data/example/duck/README.md +0 -6
  25. data/example/duck/app.rb +0 -3
  26. data/example/duck/lib.rb +0 -13
  27. data/example/duck/test.rb +0 -43
  28. data/lib/spectus/dsl.rb +0 -20
  29. data/lib/spectus/matcher.rb +0 -34
  30. data/lib/spectus/matcher/eql.rb +0 -16
  31. data/lib/spectus/matcher/equal.rb +0 -16
  32. data/lib/spectus/matcher/match.rb +0 -16
  33. data/lib/spectus/matcher/raise_exception.rb +0 -22
  34. data/lib/spectus/version.rb +0 -9
  35. data/test/helper_test.rb +0 -4
  36. data/test/spectus/helper_test.rb +0 -1
  37. data/test/spectus/matcher/built_in/helper_test.rb +0 -1
  38. data/test/spectus/matcher/built_in/test_eql.rb +0 -21
  39. data/test/spectus/matcher/built_in/test_equal.rb +0 -21
  40. data/test/spectus/matcher/built_in/test_match.rb +0 -21
  41. data/test/spectus/matcher/built_in/test_raise_exception.rb +0 -21
  42. data/test/spectus/matcher/custom/be_prime/helper_test.rb +0 -13
  43. data/test/spectus/matcher/custom/be_prime/test_be_prime.rb +0 -21
  44. data/test/spectus/matcher/custom/be_the_answer/helper_test.rb +0 -11
  45. data/test/spectus/matcher/custom/be_the_answer/test_be_the_answer.rb +0 -21
  46. data/test/spectus/matcher/custom/helper_test.rb +0 -1
  47. data/test/spectus/matcher/custom/start_with/helper_test.rb +0 -15
  48. data/test/spectus/matcher/custom/start_with/test_start_with.rb +0 -21
  49. data/test/spectus/matcher/helper_test.rb +0 -1
  50. data/test/spectus/test_dsl.rb +0 -9
  51. data/test/spectus/test_matcher.rb +0 -38
  52. data/test/spectus/test_version.rb +0 -11
  53. data/test/support.rb +0 -3
  54. data/test/support/coverage.rb +0 -11
  55. data/test/support/env.rb +0 -1
  56. data/test/support/immutable.rb +0 -12
  57. data/test/support/presenter.rb +0 -13
@@ -0,0 +1,36 @@
1
+ require_relative File.join '..', 'sandbox'
2
+
3
+ module Spectus
4
+ # Contains requirement levels.
5
+ #
6
+ module RequirementLevel
7
+ # _High_ requirement level.
8
+ #
9
+ class High < BasicObject
10
+ # Initialize the requirement level class.
11
+ #
12
+ # @param [Hash] definition
13
+ # @param [Boolean] negate
14
+ def initialize(definition, negate = false)
15
+ @definition = definition
16
+ @negate = negate
17
+ end
18
+
19
+ # Evaluate the expectation with the passed block.
20
+ #
21
+ # @return [Boolean] report if the expectation is true or false.
22
+ def pass?(&actual)
23
+ sandbox(&actual).pass?(@negate)
24
+ end
25
+
26
+ protected
27
+
28
+ # Run the actual block against the definition.
29
+ #
30
+ # @return [Boolean] report if the expectation is true or false.
31
+ def sandbox(&actual)
32
+ Sandbox.new(@definition, &actual)
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,22 @@
1
+ require_relative 'medium'
2
+
3
+ module Spectus
4
+ # Contains requirement levels.
5
+ #
6
+ module RequirementLevel
7
+ # _Low_ requirement level.
8
+ #
9
+ class Low < Medium
10
+ # Evaluate the expectation with the passed block.
11
+ #
12
+ # @return [Boolean] report if the expectation is true or false.
13
+ def pass?(&actual)
14
+ if sandbox(&actual).exception.class.equal?(::NoMethodError)
15
+ true
16
+ else
17
+ super
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ require_relative 'high'
2
+
3
+ module Spectus
4
+ # Contains requirement levels.
5
+ #
6
+ module RequirementLevel
7
+ # _Medium_ requirement level.
8
+ #
9
+ class Medium < High
10
+ # Evaluate the expectation with the passed block.
11
+ #
12
+ # @return [Boolean] report if the expectation is true or false.
13
+ def pass?(&actual)
14
+ if super
15
+ true
16
+ else
17
+ sandbox(&actual).exception.nil?
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,31 @@
1
+ require 'expect'
2
+
3
+ module Spectus
4
+ # This class evaluate the expectation with the passed block.
5
+ #
6
+ class Sandbox < BasicObject
7
+ attr_reader :exception, :got
8
+
9
+ # Execute the untested code from the passed block against the definition.
10
+ #
11
+ # @param [Hash] definition
12
+ def initialize(definition, &actual)
13
+ @got = ::Expect.this(&actual).to(definition)
14
+ rescue => e
15
+ @exception = e
16
+ end
17
+
18
+ # Return the result as a positive or a negative assertion.
19
+ #
20
+ # @param [Boolean] negate
21
+ #
22
+ # @return [Boolean] Report if the test was true or false.
23
+ def pass?(negate)
24
+ if defined?(@exception)
25
+ false
26
+ else
27
+ negate ^ @got
28
+ end
29
+ end
30
+ end
31
+ end
@@ -2,25 +2,29 @@ Gem::Specification.new do |spec|
2
2
  spec.name = 'spectus'
3
3
  spec.version = File.read('VERSION.semver')
4
4
  spec.authors = ['Cyril Wack']
5
- spec.email = ['cyril@sashite.com']
6
- spec.summary = %q{Expectation library.}
7
- spec.description = %q{Expectation library with some matchers for Ruby.}
5
+ spec.email = ['contact@cyril.email']
6
+
7
+ spec.summary = 'Expectation library with requirement levels.'
8
+ spec.description = 'Expectation library with RFC 2119\'s requirement ' \
9
+ 'levels, and some matchers for Ruby.'
8
10
  spec.homepage = 'https://github.com/fixrb/spectus'
9
11
  spec.license = 'MIT'
10
12
 
11
- spec.files = `git ls-files -z`.split("\x0")
12
- spec.test_files = spec.files.grep(%r{^test/})
13
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(/^test\//) }
14
+ spec.executables = spec.files.grep(/^exe\//) { |f| File.basename(f) }
13
15
  spec.require_paths = ['lib']
14
- spec.required_ruby_version = '>= 2.0.0'
15
16
 
16
- spec.add_development_dependency 'bundler', '~> 1.7'
17
+ spec.add_dependency 'expect', '~> 0.0.4'
18
+
19
+ spec.add_development_dependency 'bundler', '~> 1.8'
17
20
  spec.add_development_dependency 'rake', '~> 10.0'
18
21
  spec.add_development_dependency 'yard', '~> 0.8'
19
- spec.add_development_dependency 'coveralls', '~> 0.7'
22
+ spec.add_development_dependency 'simplecov', '~> 0.9.1'
23
+ spec.add_development_dependency 'rubocop', '~> 0.29'
20
24
 
21
- private_key = File.expand_path '~/.gemcert/spectus-gem-private_key.pem'
25
+ private_key = File.expand_path '~/.gem/spectus-gem-private_key.pem'
22
26
  if File.exist? private_key
23
27
  spec.signing_key = private_key
24
- spec.cert_chain = ['spectus.pem']
28
+ spec.cert_chain = ['spectus-gem-public_cert.pem']
25
29
  end
26
30
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spectus
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cyril Wack
@@ -30,22 +30,36 @@ cert_chain:
30
30
  zeYBFLJQAl0AQPaGujsG5tssIabiNy1ryydKAjWkNDxqLgvtwST3L0Qr9UQFQgoA
31
31
  O2Rl8PjSD+2P9XE7T2x1xQ==
32
32
  -----END CERTIFICATE-----
33
- date: 2014-10-19 00:00:00.000000000 Z
33
+ date: 2015-02-14 00:00:00.000000000 Z
34
34
  dependencies:
35
+ - !ruby/object:Gem::Dependency
36
+ name: expect
37
+ requirement: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: 0.0.4
42
+ type: :runtime
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: 0.0.4
35
49
  - !ruby/object:Gem::Dependency
36
50
  name: bundler
37
51
  requirement: !ruby/object:Gem::Requirement
38
52
  requirements:
39
53
  - - "~>"
40
54
  - !ruby/object:Gem::Version
41
- version: '1.7'
55
+ version: '1.8'
42
56
  type: :development
43
57
  prerelease: false
44
58
  version_requirements: !ruby/object:Gem::Requirement
45
59
  requirements:
46
60
  - - "~>"
47
61
  - !ruby/object:Gem::Version
48
- version: '1.7'
62
+ version: '1.8'
49
63
  - !ruby/object:Gem::Dependency
50
64
  name: rake
51
65
  requirement: !ruby/object:Gem::Requirement
@@ -75,73 +89,60 @@ dependencies:
75
89
  - !ruby/object:Gem::Version
76
90
  version: '0.8'
77
91
  - !ruby/object:Gem::Dependency
78
- name: coveralls
92
+ name: simplecov
93
+ requirement: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: 0.9.1
98
+ type: :development
99
+ prerelease: false
100
+ version_requirements: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: 0.9.1
105
+ - !ruby/object:Gem::Dependency
106
+ name: rubocop
79
107
  requirement: !ruby/object:Gem::Requirement
80
108
  requirements:
81
109
  - - "~>"
82
110
  - !ruby/object:Gem::Version
83
- version: '0.7'
111
+ version: '0.29'
84
112
  type: :development
85
113
  prerelease: false
86
114
  version_requirements: !ruby/object:Gem::Requirement
87
115
  requirements:
88
116
  - - "~>"
89
117
  - !ruby/object:Gem::Version
90
- version: '0.7'
91
- description: Expectation library with some matchers for Ruby.
118
+ version: '0.29'
119
+ description: Expectation library with RFC 2119's requirement levels, and some matchers
120
+ for Ruby.
92
121
  email:
93
- - cyril@sashite.com
122
+ - contact@cyril.email
94
123
  executables: []
95
124
  extensions: []
96
125
  extra_rdoc_files: []
97
126
  files:
98
- - ".coveralls.yml"
99
127
  - ".gitignore"
100
128
  - ".travis.yml"
101
129
  - ".yardopts"
130
+ - CODE_OF_CONDUCT.md
102
131
  - Gemfile
103
132
  - LICENSE.md
104
133
  - README.md
105
134
  - Rakefile
106
135
  - VERSION.semver
107
- - example/duck/README.md
108
- - example/duck/app.rb
109
- - example/duck/lib.rb
110
- - example/duck/test.rb
136
+ - bin/console
137
+ - bin/setup
111
138
  - lib/spectus.rb
112
- - lib/spectus/dsl.rb
113
139
  - lib/spectus/expectation_target.rb
114
- - lib/spectus/matcher.rb
115
- - lib/spectus/matcher/eql.rb
116
- - lib/spectus/matcher/equal.rb
117
- - lib/spectus/matcher/match.rb
118
- - lib/spectus/matcher/raise_exception.rb
119
- - lib/spectus/version.rb
140
+ - lib/spectus/requirement_level/high.rb
141
+ - lib/spectus/requirement_level/low.rb
142
+ - lib/spectus/requirement_level/medium.rb
143
+ - lib/spectus/sandbox.rb
144
+ - spectus-gem-public_cert.pem
120
145
  - spectus.gemspec
121
- - spectus.pem
122
- - test/helper_test.rb
123
- - test/spectus/helper_test.rb
124
- - test/spectus/matcher/built_in/helper_test.rb
125
- - test/spectus/matcher/built_in/test_eql.rb
126
- - test/spectus/matcher/built_in/test_equal.rb
127
- - test/spectus/matcher/built_in/test_match.rb
128
- - test/spectus/matcher/built_in/test_raise_exception.rb
129
- - test/spectus/matcher/custom/be_prime/helper_test.rb
130
- - test/spectus/matcher/custom/be_prime/test_be_prime.rb
131
- - test/spectus/matcher/custom/be_the_answer/helper_test.rb
132
- - test/spectus/matcher/custom/be_the_answer/test_be_the_answer.rb
133
- - test/spectus/matcher/custom/helper_test.rb
134
- - test/spectus/matcher/custom/start_with/helper_test.rb
135
- - test/spectus/matcher/custom/start_with/test_start_with.rb
136
- - test/spectus/matcher/helper_test.rb
137
- - test/spectus/test_dsl.rb
138
- - test/spectus/test_matcher.rb
139
- - test/spectus/test_version.rb
140
- - test/support.rb
141
- - test/support/coverage.rb
142
- - test/support/env.rb
143
- - test/support/immutable.rb
144
- - test/support/presenter.rb
145
146
  homepage: https://github.com/fixrb/spectus
146
147
  licenses:
147
148
  - MIT
@@ -154,7 +155,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
154
155
  requirements:
155
156
  - - ">="
156
157
  - !ruby/object:Gem::Version
157
- version: 2.0.0
158
+ version: '0'
158
159
  required_rubygems_version: !ruby/object:Gem::Requirement
159
160
  requirements:
160
161
  - - ">="
@@ -162,32 +163,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
162
163
  version: '0'
163
164
  requirements: []
164
165
  rubyforge_project:
165
- rubygems_version: 2.2.2
166
+ rubygems_version: 2.4.5
166
167
  signing_key:
167
168
  specification_version: 4
168
- summary: Expectation library.
169
- test_files:
170
- - test/helper_test.rb
171
- - test/spectus/helper_test.rb
172
- - test/spectus/matcher/built_in/helper_test.rb
173
- - test/spectus/matcher/built_in/test_eql.rb
174
- - test/spectus/matcher/built_in/test_equal.rb
175
- - test/spectus/matcher/built_in/test_match.rb
176
- - test/spectus/matcher/built_in/test_raise_exception.rb
177
- - test/spectus/matcher/custom/be_prime/helper_test.rb
178
- - test/spectus/matcher/custom/be_prime/test_be_prime.rb
179
- - test/spectus/matcher/custom/be_the_answer/helper_test.rb
180
- - test/spectus/matcher/custom/be_the_answer/test_be_the_answer.rb
181
- - test/spectus/matcher/custom/helper_test.rb
182
- - test/spectus/matcher/custom/start_with/helper_test.rb
183
- - test/spectus/matcher/custom/start_with/test_start_with.rb
184
- - test/spectus/matcher/helper_test.rb
185
- - test/spectus/test_dsl.rb
186
- - test/spectus/test_matcher.rb
187
- - test/spectus/test_version.rb
188
- - test/support.rb
189
- - test/support/coverage.rb
190
- - test/support/env.rb
191
- - test/support/immutable.rb
192
- - test/support/presenter.rb
169
+ summary: Expectation library with requirement levels.
170
+ test_files: []
193
171
  has_rdoc:
metadata.gz.sig CHANGED
Binary file
@@ -1 +0,0 @@
1
- service_name: travis-ci
@@ -1,6 +0,0 @@
1
- # Duck example
2
-
3
- ```bash
4
- $ ./test.rb
5
- I call that #<Duck:0x007f84cc8174c0> a duck.
6
- ```
@@ -1,3 +0,0 @@
1
- require_relative 'lib'
2
-
3
- @bird = Duck.new
@@ -1,13 +0,0 @@
1
- class Duck
2
- def walks
3
- "Klop klop!"
4
- end
5
-
6
- def swims
7
- "Swoosh..."
8
- end
9
-
10
- def quacks
11
- puts "Quaaaaaack!"
12
- end
13
- end
@@ -1,43 +0,0 @@
1
- #!/usr/bin/env ruby -w
2
-
3
- require_relative 'app'
4
-
5
- require_relative '../../lib/spectus'
6
-
7
- extend Spectus::DSL
8
-
9
- # Let's define the custom matcher `capture_stdout`.
10
- require 'stringio'
11
- module Spectus
12
- module Matcher
13
- class CaptureStdout
14
- def initialize expected
15
- @expected = expected
16
- end
17
-
18
- def matches?
19
- begin
20
- orig_std = $stdout
21
- $stdout = StringIO.new
22
- yield
23
- $stdout.string.eql? @expected
24
- ensure
25
- $stdout = orig_std
26
- end
27
- end
28
- end
29
- end
30
- end
31
-
32
- expectation_1 = expect { @bird.walks }.to eql: "Klop klop!"
33
- expectation_2 = expect { @bird.swims }.to eql: "Swoosh..."
34
- expectation_3 = expect { @bird.quacks }.to capture_stdout: "Quaaaaaack!\n"
35
- expectation_4 = expect { @bird.speaks }.to raise_exception: NoMethodError
36
-
37
- case (expectation_1 == true &&
38
- expectation_2 == true &&
39
- expectation_3 == true &&
40
- expectation_4 == true)
41
- when true then puts "I call that #{@bird} a duck."
42
- else abort 'WAT?'
43
- end
@@ -1,20 +0,0 @@
1
- require_relative 'expectation_target'
2
-
3
- module Spectus
4
-
5
- # Expectation's domain-specific language.
6
- module DSL
7
-
8
- # Expectations are built with this method.
9
- #
10
- # @api public
11
- #
12
- # @example Duck example
13
- # expect { 42 }.to equal: 42 # => true
14
- #
15
- # @return [ExpectationTarget] the expectation target.
16
- def expect &input
17
- ExpectationTarget.new(&input)
18
- end
19
- end
20
- end