dry-behaviour 0.2.1 → 0.2.2

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: 3f66c6a8b5a592cdb60a8a95cc706441e9207b4d
4
- data.tar.gz: c39d8dde7c915f4d8fe91da105dcb6bd0c42216b
3
+ metadata.gz: 45f2aaaadec62efcc2ab74af6422cae3b49cff4d
4
+ data.tar.gz: cf9a16b0019b6b332cdac2114e1714d670f94af5
5
5
  SHA512:
6
- metadata.gz: 697e0ee4478d5b4aceef4509edc2f0e3733f000b52871d18d9eb9193be876a80e5e15b6aac7724f52534ae69e238ed1b7e99429b25ed8adb3589bd69e19ef548
7
- data.tar.gz: 02845aea1c9d5f3fd66e13ad9c1860b863a984758a309fadea6ab7b8275965c416ff1410d58df8047d257bb9e013b1edb29bda2e25a137b4fb5f1ff1fa090426
6
+ metadata.gz: c1a687fcb6a2aaeb7e545776e5abd71a195642f7fdfe17fb110fa94dd30e0db0a3530f1898817dc79a11cb786d8a4330e839c3af4871633a0e3c141fe45cff92
7
+ data.tar.gz: 4c5e2a3e2930acdb3fd02200ddd641e9f8f15bab423e9dfeea799951fb2163fb36c38cab24acc0212d434eefd26a61820b962894b4bce7a1830a32cd2bce00d3
data/README.md CHANGED
@@ -64,6 +64,17 @@ expect(Protocols::Adder.add_default(1)).to eq(6)
64
64
 
65
65
  ## Changelog
66
66
 
67
+ ### `0.2.2` :: meaningful errors
68
+
69
+ #### Throws an exception on wrong usage:
70
+
71
+ ```ruby
72
+ Protocols::Adder.add({}, 42)
73
+ #⇒ Protocols::NotImplemented: Protocol “Protocols::Adder” is not implemented for “Hash”
74
+ Protocols::Adder.hello({}, 42)
75
+ #⇒ Protocols::NotImplemented: Protocol “Protocols::Adder” does not declare method “hello”
76
+ ```
77
+
67
78
  ### `0.2.1` :: multiple targets
68
79
 
69
80
  #### Multiple targets:
@@ -24,12 +24,18 @@ module Dry
24
24
  class_eval(&Proc.new)
25
25
  (instance_methods(false) - ims).each { |m| class_eval { module_function m } }
26
26
 
27
+ singleton_class.send :define_method, :method_missing do |method, *args|
28
+ raise Dry::Protocol::NotImplemented.new(:method, self.inspect, method)
29
+ end
30
+
27
31
  BlackTie.protocols[self].each do |method, *_| # FIXME: CHECK PARAMS CORRESPONDENCE HERE
28
- # receiver, *args = *args
29
- singleton_class.send :define_method, method do |receiver, *args|
30
- receiver.class.ancestors.lazy.map do |c|
32
+ singleton_class.send :define_method, method do |receiver = nil, *args|
33
+ impl = receiver.class.ancestors.lazy.map do |c|
31
34
  BlackTie.implementations[self].fetch(c, nil)
32
- end.reject(&:nil?).first[method].(*args.unshift(receiver))
35
+ end.reject(&:nil?).first
36
+
37
+ raise Dry::Protocol::NotImplemented.new(:protocol, self.inspect, receiver.class) unless impl
38
+ impl[method].(*args.unshift(receiver))
33
39
  end
34
40
  end
35
41
  end
@@ -1,5 +1,5 @@
1
1
  module Dry
2
2
  module Behaviour
3
- VERSION = '0.2.1'.freeze
3
+ VERSION = '0.2.2'.freeze
4
4
  end
5
5
  end
data/lib/dry/behaviour.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'dry/behaviour/version'
2
+ require 'dry/errors/not_implemented'
2
3
  require 'dry/behaviour/black_tie'
3
4
 
4
5
  module Dry
@@ -0,0 +1,16 @@
1
+ module Dry
2
+ module Protocol
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
13
+ end
14
+ end
15
+ end
16
+ 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.2.1
4
+ version: 0.2.2
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: 2016-10-26 00:00:00.000000000 Z
13
+ date: 2016-11-03 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -93,6 +93,7 @@ files:
93
93
  - lib/dry/behaviour.rb
94
94
  - lib/dry/behaviour/black_tie.rb
95
95
  - lib/dry/behaviour/version.rb
96
+ - lib/dry/errors/not_implemented.rb
96
97
  homepage: https://kantox.com/
97
98
  licenses:
98
99
  - MIT
@@ -113,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
114
  version: '0'
114
115
  requirements: []
115
116
  rubyforge_project:
116
- rubygems_version: 2.4.8
117
+ rubygems_version: 2.4.6
117
118
  signing_key:
118
119
  specification_version: 4
119
120
  summary: Tiny library inspired by Elixir protocol pattern.