unmixer 0.1.0 → 0.2.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: 5a952ec2f6409147008426c46f4a15c75786d0a1
4
- data.tar.gz: de27755a1162205f2f87be49d2ec6ca6bd4ba970
3
+ metadata.gz: 744abd9d02195ad0c1cbfb95da0ec26474417dba
4
+ data.tar.gz: 8c9bafa0140645769984aaae48014b6df80cae53
5
5
  SHA512:
6
- metadata.gz: 7fbcb863a733baa48689292bb286add91d43065dd4a4dd453c0b660b6ebf95d66c432e3ede24d80fc63de2df640df53fa960452603f288c764bc2d364beff010
7
- data.tar.gz: 815580c887f8a318abcc5168b1314e7404f06ef5326db0ac274b1b92a1b3264a3df8feb62cf433c255279d1f6d4d67461d8fa9e263c8dfc40f2c40633c4d15db
6
+ metadata.gz: ea97559d1ef82901e5641475da7ca286f401b38936576071145d195142e2b58d7df0f82f0020a83635d6a10c2316e2420ed36f73b59bde1b5af77aebfd1c7f92
7
+ data.tar.gz: e15667eb6ffe2e410232aa6d5b921ac4aa1d3234bebd25ad376a2f1f7f31cf16f2f085c5a1e76be73ee33b61e86fabe2c2bc86da1fce52e9587c67fce3eb795a
data/README.md CHANGED
@@ -87,3 +87,13 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
87
87
 
88
88
  Bug reports and pull requests are welcome on GitHub at https://github.com/osyo-manga/gem-unmixer.
89
89
 
90
+
91
+ ## Release Note
92
+
93
+ #### 0.2.0
94
+
95
+ * Fix `#extend`/`#unextend` result
96
+
97
+ #### 0.1.0
98
+ * Release
99
+
data/example/simple.rb ADDED
@@ -0,0 +1,53 @@
1
+ require "unmixer"
2
+
3
+ # unmixer is using refinements.
4
+ using Unmixer
5
+
6
+ module M1; end
7
+ module M2; end
8
+ module M3; end
9
+
10
+ class X
11
+ include M1
12
+ prepend M2
13
+ end
14
+
15
+ p X.ancestors
16
+ # => [M2, X, M1, Object, Kernel, BasicObject]
17
+
18
+ # Remove include module.
19
+ X.instance_eval { uninclude M1 }
20
+ p X.ancestors
21
+ # => [M2, X, Object, Kernel, BasicObject]
22
+
23
+ # Not remove prepend module. #uninclude is only include modules.
24
+ X.instance_eval { uninclude M2 }
25
+ p X.ancestors
26
+ # => [M2, X, Object, Kernel, BasicObject]
27
+
28
+
29
+ # Remove prepend module.
30
+ X.instance_eval { unprepend M2 }
31
+ p X.ancestors
32
+ # => [X, Object, Kernel, BasicObject]
33
+
34
+
35
+ X.extend M3
36
+ p X.singleton_class.ancestors
37
+ # => [#<Class:X>, M3, #<Class:Object>, #<Class:BasicObject>, Class, Module, Object, Kernel, BasicObject]
38
+
39
+ # Remove extend module.
40
+ X.unextend M3
41
+ p X.singleton_class.ancestors
42
+ # => [#<Class:X>, #<Class:Object>, #<Class:BasicObject>, Class, Module, Object, Kernel, BasicObject]
43
+
44
+
45
+ # #extend with block
46
+ X.extend M1 do
47
+ # mixin only in block.
48
+ p X.singleton_class.ancestors
49
+ # => [#<Class:X>, M1, #<Class:Object>, #<Class:BasicObject>, Class, Module, Object, Kernel, BasicObject]
50
+ end
51
+ p X.singleton_class.ancestors
52
+ # => [#<Class:X>, #<Class:Object>, #<Class:BasicObject>, Class, Module, Object, Kernel, BasicObject]
53
+
@@ -21,24 +21,32 @@ module Unmixer
21
21
  refine Object do
22
22
  alias_method :unmixer_original_extend, :extend
23
23
  def unmixer_extend mod
24
- unmixer_original_extend mod
24
+ result = unmixer_original_extend mod
25
25
 
26
26
  if block_given?
27
- yield(self)
28
- unmixer_unextend mod
27
+ begin
28
+ yield(self)
29
+ ensure
30
+ unmixer_unextend mod
31
+ end
29
32
  end
33
+ result
30
34
  end
31
35
  alias_method :extend, :unmixer_extend
32
36
 
33
37
  def unmixer_unextend mod
34
- return unless singleton_class.ancestors.include? mod
38
+ return self unless singleton_class.ancestors.include? mod
35
39
 
36
40
  singleton_class.__send__ :unmixer_unmixin, mod
37
41
 
38
42
  if block_given?
39
- yield(self)
40
- unmixer_original_extend mod
43
+ begin
44
+ yield(self)
45
+ ensure
46
+ unmixer_original_extend mod
47
+ end
41
48
  end
49
+ self
42
50
  end
43
51
  alias_method :unextend, :unmixer_unextend
44
52
  end
@@ -1,3 +1,3 @@
1
1
  module Unmixer
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unmixer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - manga_osyo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-02-06 00:00:00.000000000 Z
11
+ date: 2017-02-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -82,6 +82,7 @@ files:
82
82
  - Rakefile
83
83
  - bin/console
84
84
  - bin/setup
85
+ - example/simple.rb
85
86
  - ext/unmixer/2.1.0/internal.h
86
87
  - ext/unmixer/2.2.0/internal.h
87
88
  - ext/unmixer/2.3.0/internal.h