dry-behaviour 0.6.0 → 0.7.0

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
  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