dry-behaviour 0.4.0 → 0.4.1

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: 597908ea5e4f168109a48128ea4992cd86652edc
4
- data.tar.gz: 3945b08a31f1f62784dd9873d1f7a6ded0f94072
3
+ metadata.gz: 10b6f0cc420cd9468416de830efd6ad70c97aed3
4
+ data.tar.gz: 42d5361f783f46ca02fae67040fb0369f340396a
5
5
  SHA512:
6
- metadata.gz: 7f205f7f1427902ab7b55713496b4da292c0a31f887db84127ae672347fa0fc23ff9fb113e80b029b366e84bc71adcdf33011ce2cca82bc1118ef4a4da2d88de
7
- data.tar.gz: 820ff1120fd32773cd93a2e1efe879b56205a6e0104b0c53df5a72743d362203fa6367f3000400effc6f81748603bb17634286ec7e92829458ef462469a35d2c
6
+ metadata.gz: d2d655c6c97dd126277d1a37e6eaacb422cd53625cc097a52504a7e03e96882d6861c8812dad3d8959bfbf634f68bb4b9994e2d76f1ca53b4eb6f40e4f8e112a
7
+ data.tar.gz: 2c66cb9a3899a2de3da5e8b8b685701e5e2e7e564902045a9b1323ebe90e5c737919b285ee74991c9287e572e6bf1ddd065ae5c71d0f90dde8b7f5a6a1475f31
data/README.md CHANGED
@@ -64,6 +64,10 @@ expect(Protocols::Adder.add_default(1)).to eq(6)
64
64
 
65
65
  ## Changelog
66
66
 
67
+ ### `0.4.1` :: Protocol-wide methods are allowed to call from implementation
68
+
69
+ **NB** Works for all `defimpl`s.
70
+
67
71
  ### `0.4.0` :: Protocol-wide methods are allowed to call from inside implementation
68
72
 
69
73
  ```ruby
@@ -68,20 +68,27 @@ module Dry
68
68
  end
69
69
  end
70
70
 
71
+ POSTPONE_EXTEND = lambda do |target, protocol|
72
+ TracePoint.new(:end) do |tp|
73
+ if tp.self == protocol
74
+ puts "#{tp.self.inspect} | #{protocol.name}"
75
+ target.extend protocol
76
+ tp.disable
77
+ end
78
+ end.enable
79
+ end
80
+
81
+
71
82
  def defimpl(protocol = nil, target: nil, delegate: [], map: {})
72
83
  raise if target.nil? || !block_given? && delegate.empty? && map.empty?
73
84
 
74
85
  mds = normalize_map_delegates(delegate, map)
86
+
75
87
  Module.new do
76
88
  mds.each(&DELEGATE_METHOD.curry[singleton_class])
77
89
  singleton_class.class_eval(&Proc.new) if block_given? # block takes precedence
78
- if protocol
79
- extend protocol
80
- else # FIXME:
81
- BlackTie.Logger.warn('Cross-calling protocol methods is not yet implemented for inplace declarated implementations.')
82
- end
83
90
  end.tap do |mod|
84
- protocol ||= self
91
+ protocol ? mod.extend(protocol) : POSTPONE_EXTEND.(mod, protocol = self)
85
92
 
86
93
  mod.methods(false).tap do |meths|
87
94
  (BlackTie.protocols[protocol].keys - meths).each_with_object(meths) do |m, acc|
@@ -1,5 +1,5 @@
1
1
  module Dry
2
2
  module Behaviour
3
- VERSION = '0.4.0'.freeze
3
+ VERSION = '0.4.1'.freeze
4
4
  end
5
5
  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.4.0
4
+ version: 0.4.1
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: 2017-01-13 00:00:00.000000000 Z
13
+ date: 2017-01-15 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler