interfaceable 0.1.1 → 0.1.2

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: 54f19bb6bdcdc83dcf60a80e84e4dcbda3cf8a45cc3873213f1e57b40bbe4096
4
- data.tar.gz: d2a192cddb7d1b166005d333eec6c88e7e605b41c788de1c123a50467c3122c8
3
+ metadata.gz: fd1c5e3e374f3cf828348678b04342a04e332598682e16e95cbb69bf60a84da2
4
+ data.tar.gz: 2dfc160484c025e9ec543849ec4b5c9d3e681493caa290b7bab5ae9d47754ef3
5
5
  SHA512:
6
- metadata.gz: 75cacdc1919e4ef26a2b51ec875dc21a5b4ebe1ad982ff755fc3a60152cc1627eac2a0d720e2c7e8422aff42d384d0f7d7b21d40c526ad6d73f65dca90ef86b2
7
- data.tar.gz: 246b9251c3943540a64308c56e1921d7bab4eea044a3ca185659e96f223144dc3c099837f00d14c9a3833e1a65d634ec5badde3c5b1e20157598c255820db0e5
6
+ metadata.gz: 8987daa2e42f955ae1099b67e6787556f1c49e6d2b563f7571db6734d34fee5c1d6636f0bd5c9fc735d7400d4972fdbb3cc70b4ad3f51be04ce3799b7f4fa48a
7
+ data.tar.gz: 2ffcdadc6dfb51bb9cd1a0dc04cd316f2686ef53dcc98b0918fa4b48cf37a100a7161efd16b0751a5b75a50f5221766e9226ea60ab22058410a775985dd58e82
data/README.md CHANGED
@@ -46,7 +46,7 @@ Correctly! E.g.:
46
46
  class Giffgaff
47
47
  def call(number); end
48
48
 
49
- def text(number); end
49
+ def text(number, text = ''); end
50
50
  end
51
51
  ```
52
52
 
@@ -55,7 +55,7 @@ Will fail because of method signature mismatch:
55
55
  Giffgaff must implement correctly: (Interfaceable::Error)
56
56
  - Carrier#text:
57
57
  - expected arguments: (req, req)
58
- - actual arguments: (req)
58
+ - actual arguments: (req, opt=)
59
59
 
60
60
  ### Rails
61
61
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Interfaceable
4
- VERSION = '0.1.1'
4
+ VERSION = '0.1.2'
5
5
  end
data/lib/interfaceable.rb CHANGED
@@ -13,18 +13,23 @@ module Interfaceable
13
13
  def implements(*interfaces)
14
14
  (@interfaces ||= []).push(*interfaces)
15
15
 
16
+ @exceptions_trace ||= TracePoint.trace(:raise) do |t|
17
+ @exception_raised_during_class_definition = true if self == t.self
18
+ end
19
+
16
20
  # rubocop:disable Naming/MemoizedInstanceVariableName
17
21
  @interfaceable_trace ||= TracePoint.trace(:end) do |t|
18
22
  # simplecov does not see inside this block
19
23
  # :nocov:
20
24
  # rubocop:enable Naming/MemoizedInstanceVariableName
21
25
  if self == t.self
22
- unless (errors = ImplementationCheck.new(self).perform(@interfaces)).empty?
26
+ if !@exception_raised_during_class_definition && !(errors = ImplementationCheck.new(self).perform(@interfaces)).empty?
23
27
  error_message = ErrorFormatter.new(self).format_errors(errors)
24
28
  raise(Error, error_message)
25
29
  end
26
30
 
27
31
  t.disable
32
+ @exceptions_trace.disable
28
33
  end
29
34
  # :nocov:
30
35
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: interfaceable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - artemave
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-10-13 00:00:00.000000000 Z
11
+ date: 2022-03-30 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -53,7 +53,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  requirements: []
56
- rubygems_version: 3.0.3
56
+ rubygems_version: 3.1.6
57
57
  signing_key:
58
58
  specification_version: 4
59
59
  summary: Strict interfaces in Ruby