nakajima-nakajima 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/lib/nakajima.rb CHANGED
@@ -7,6 +7,7 @@ require 'colored'
7
7
  require 'metaid'
8
8
 
9
9
  # core ruby extensions
10
+ require 'basic_object'
10
11
  require 'array'
11
12
  require 'symbol'
12
13
  require 'proc'
@@ -0,0 +1,5 @@
1
+ module Nakajima
2
+ class BasicObject
3
+ instance_methods.reject { |m| m =~ /^__/ }.each { |m| undef_method m }
4
+ end
5
+ end
@@ -29,8 +29,34 @@ module Nakajima
29
29
  block.bind(self)[*arguments]
30
30
  end
31
31
  end
32
+
33
+ # A proxy that returns its target after invoking the method you
34
+ # invoke. Useful for #me
35
+ class ProxyReturningMe < BasicObject
36
+ def initialize(me)
37
+ super()
38
+ @me = me
39
+ end
40
+ def method_missing(sym, *args, &block)
41
+ @me.__send__(sym, *args, &block)
42
+ @me
43
+ end
44
+ end
45
+
46
+ # plucked from raganwald's andand
47
+ def tap(p = nil)
48
+ if block_given?
49
+ yield(self)
50
+ self
51
+ elsif p
52
+ p.to_proc.call(self)
53
+ self
54
+ else
55
+ ProxyReturningMe.new(self)
56
+ end
57
+ end unless respond_to?(:tap)
32
58
  end
33
59
  end
34
60
  end
35
61
 
36
- Object.send :include, Nakajima::Object::InstanceMethods
62
+ Object.send :include, Nakajima::Object::InstanceMethods
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nakajima-nakajima
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pat Nakajima
@@ -41,6 +41,7 @@ extra_rdoc_files: []
41
41
  files:
42
42
  - lib/nakajima
43
43
  - lib/nakajima/core_ext
44
+ - lib/nakajima/core_ext/basic_object.rb
44
45
  - lib/nakajima/core_ext/array.rb
45
46
  - lib/nakajima/core_ext/proc.rb
46
47
  - lib/nakajima/core_ext/object.rb