dry-behaviour 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 01a2f3844b89e2b41e719f309945c2c66d7717ff
4
- data.tar.gz: 6497f54746f681a0b0a281a8c0404b7b55bb8fad
3
+ metadata.gz: 68e9909166c5283d9505f7be6f541334aea5d161
4
+ data.tar.gz: 2319fcbbb2da7b56aff3825e44788d44da99a688
5
5
  SHA512:
6
- metadata.gz: 22ebe373dd9ec2b4b30babcd3c8f3130f5ae9f229a8f152ffe9eaaf4291cc0cd7ec2f2d1850ed1c8e89b4a956765244330ad992df8039320abb114049118be75
7
- data.tar.gz: 4ddc32d58f0f52ca11496945df99342d1238b1e78636d5d5668d44ed56a225e37e96fa22cbbd236b25d3d4ec8ca4a71f7a44e7924cdb9af32d2982896cf7b9dd
6
+ metadata.gz: cd3f037341b4f6f2e28d9e4478d763fc6bd554d09e5be20be2ac08c2fad405be3a2ce8e45a273cdd0c6bbbf26efd8ee0abaf4edb6d48e4760c933ebaf54d1397
7
+ data.tar.gz: cea7c3a4b77dbc7cc4215e38b853c92d96670fe8677c771a2d1914b6e60293d163fc00d9bd3a60b97966849e5a7f025cb3b39c0b30afb933c62e25dfdafb4497
data/.travis.yml CHANGED
@@ -3,6 +3,7 @@ rvm:
3
3
  - 2.1.1
4
4
  - 2.1.10
5
5
  - 2.2.2
6
- - 2.3.1
7
- - 2.4.0
6
+ - 2.3.2
7
+ - 2.4.2
8
+ - 2.5.1
8
9
  before_install: gem install bundler -v 1.10.6
@@ -24,7 +24,9 @@ module Dry
24
24
  (instance_methods(false) - ims).each { |m| class_eval { module_function m } }
25
25
 
26
26
  singleton_class.send :define_method, :method_missing do |method, *_args|
27
- raise Dry::Protocol::NotImplemented.new(:method, inspect, method)
27
+ raise Dry::Protocol::NotImplemented.new(
28
+ :method, inspect, method: method, self: self
29
+ )
28
30
  end
29
31
 
30
32
  singleton_class.send :define_method, :implementation_for do |receiver|
@@ -33,16 +35,21 @@ module Dry
33
35
  end.reject(&:nil?).first
34
36
  end
35
37
 
36
- BlackTie.protocols[self].each do |method, *_| # FIXME: CHECK PARAMS CORRESPONDENCE HERE
38
+ BlackTie.protocols[self].each do |method, *_| # FIXME: CHECK ARITY HERE
37
39
  singleton_class.send :define_method, method do |receiver = nil, *args|
38
40
  impl = implementation_for(receiver)
39
- raise Dry::Protocol::NotImplemented.new(:protocol, inspect, receiver.class) unless impl
41
+ raise Dry::Protocol::NotImplemented.new(
42
+ :protocol, inspect,
43
+ method: method, receiver: receiver, args: args, self: self
44
+ ) unless impl
40
45
  begin
41
46
  impl[method].(*args.unshift(receiver))
42
- rescue NoMethodError => e
43
- raise Dry::Protocol::NotImplemented.new(:method, inspect, e.message)
44
- rescue ArgumentError => e
45
- raise Dry::Protocol::NotImplemented.new(:method, inspect, "#{method} (#{e.message})")
47
+ rescue => e
48
+ raise Dry::Protocol::NotImplemented.new(
49
+ :nested, inspect,
50
+ cause: e,
51
+ method: method, receiver: receiver, args: args, impl: impl, self: self
52
+ )
46
53
  end
47
54
  end
48
55
  end
@@ -1,5 +1,5 @@
1
1
  module Dry
2
2
  module Behaviour
3
- VERSION = '0.6.0'.freeze
3
+ VERSION = '0.7.0'.freeze
4
4
  end
5
5
  end
@@ -1,15 +1,39 @@
1
1
  module Dry
2
2
  module Protocol
3
3
  class NotImplemented < StandardError
4
- def initialize(type, proto, impl)
5
- super case type
6
- when :protocol
7
- "Protocol “#{proto}” is not implemented for “#{impl}”."
8
- when :method
9
- "Protocol “#{proto}” does not declare method “#{impl}”."
10
- else
11
- "Protocol “#{proto}” is invalid."
12
- end
4
+ attr_reader :proto, :details
5
+
6
+ def initialize(type, proto, **details)
7
+ @proto, @details = proto, details
8
+
9
+ @details[:message] =
10
+ case type
11
+ when :protocol
12
+ "Protocol “#{@proto}” is not implemented for “#{@details[:receiver].class}”."
13
+ when :method
14
+ "Protocol “#{@proto}” does not declare method “#{@details[:method]}”."
15
+ when :nested
16
+ "Protocol “#{@proto}” failed to invoke the implementation.\n" \
17
+ " ⮩ caused by “#{cause.class}” with a message\n" \
18
+ " ⮩ “#{cause.message}”\n" \
19
+ " ⮩ rescue this exception and inspect `NotImplemented#cause' for details."
20
+ else
21
+ "Protocol “#{proto}” is invalid."
22
+ end
23
+
24
+ super(@details[:message])
25
+
26
+ if @details[:cause]
27
+ set_backtrace(
28
+ @details[:cause].backtrace.reject do |line| # FIXME drop_while ??
29
+ line =~ %r[dry-behaviour/lib/dry/behaviour]
30
+ end
31
+ )
32
+ end
33
+ end
34
+
35
+ def cause
36
+ @details[:cause] ||= super
13
37
  end
14
38
  end
15
39
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dry-behaviour
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aleksei Matiushkin
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2018-02-02 00:00:00.000000000 Z
13
+ date: 2018-10-11 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler