unextendable 0.1.3 → 0.1.4
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.
- data/CHANGELOG.rdoc +7 -0
- data/VERSION +1 -1
- data/lib/unextendable.rb +1 -0
- data/lib/unextendable/kernel.rb +11 -0
- data/lib/unextendable/object.rb +16 -27
- data/lib/unextendable/version.rb +1 -1
- metadata +6 -20
data/CHANGELOG.rdoc
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
= Unextendable CHANGELOG
|
2
2
|
|
3
|
+
== Version 0.1.4 (May 4, 2011)
|
4
|
+
|
5
|
+
* Made Unextendable Ruby 1.9.2 compatible, booya! (Module.instance_methods within Ruby 1.9.2 returns symbols opposed to Ruby 1.8.7 which returns strings)
|
6
|
+
* Improved respond_to? override implementation (overriding respond_to? only once after extending an unextendable module)
|
7
|
+
* Moved Object.meta_class to Kernel
|
8
|
+
* Removed Object.meta_class?
|
9
|
+
|
3
10
|
== Version 0.1.3 (May 2, 2011)
|
4
11
|
|
5
12
|
* Always returning boolean when calling object.meta_class?
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.4
|
data/lib/unextendable.rb
CHANGED
data/lib/unextendable/object.rb
CHANGED
@@ -1,18 +1,5 @@
|
|
1
1
|
class Object
|
2
2
|
|
3
|
-
def meta_class(&block)
|
4
|
-
class << self
|
5
|
-
yield if block_given?
|
6
|
-
self
|
7
|
-
end
|
8
|
-
end
|
9
|
-
alias :singleton_class :meta_class
|
10
|
-
|
11
|
-
def meta_class?
|
12
|
-
!!(meta_class rescue false)
|
13
|
-
end
|
14
|
-
alias :singleton_class? :meta_class?
|
15
|
-
|
16
3
|
meta_class do
|
17
4
|
def extended_modules
|
18
5
|
@extended_modules ||= []
|
@@ -43,14 +30,6 @@ class Object
|
|
43
30
|
end
|
44
31
|
end
|
45
32
|
|
46
|
-
def respond_to?(symbol, include_private = false)
|
47
|
-
if meta_class? && meta_class.extended_modules.any?{|mod| mod.unextendable?}
|
48
|
-
meta_class.extended_modules.detect{|x| x.instance_methods.include? symbol.to_s} || meta_class.method_procs[symbol.to_s].class == Proc
|
49
|
-
else
|
50
|
-
!(meta_class? && meta_class.method_procs.key?(symbol.to_s) && meta_class.method_procs[symbol.to_s].nil?) && super
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
33
|
private
|
55
34
|
|
56
35
|
def unextend?(mod, &block)
|
@@ -63,16 +42,26 @@ private
|
|
63
42
|
mod.instance_methods.each do |method_name|
|
64
43
|
wrap_unextendable_method method_name
|
65
44
|
end
|
45
|
+
|
46
|
+
return if @wrapped_respond_to
|
47
|
+
|
48
|
+
instance_eval <<-CODE
|
49
|
+
def respond_to?(symbol, include_private = false)
|
50
|
+
meta_class.extended_modules.detect{|x| x.instance_methods.collect(&:to_s).include? symbol.to_s} || meta_class.method_procs[symbol.to_s].class == Proc
|
51
|
+
end
|
52
|
+
CODE
|
53
|
+
|
54
|
+
@wrapped_respond_to = true
|
66
55
|
end
|
67
56
|
|
68
|
-
def wrap_unextendable_method(
|
69
|
-
return if meta_class.method_procs.key?
|
57
|
+
def wrap_unextendable_method(method_name)
|
58
|
+
return if meta_class.method_procs.key? method_name.to_s
|
70
59
|
|
71
|
-
meta_class.method_procs[
|
60
|
+
meta_class.method_procs[method_name.to_s] = respond_to?(method_name) ? method(method_name.to_s).to_proc : nil
|
72
61
|
|
73
62
|
instance_eval <<-CODE
|
74
|
-
def #{
|
75
|
-
call_unextendable_method :#{
|
63
|
+
def #{method_name}(*args, &block)
|
64
|
+
call_unextendable_method :#{method_name}, *args, &block
|
76
65
|
end
|
77
66
|
CODE
|
78
67
|
end
|
@@ -91,7 +80,7 @@ private
|
|
91
80
|
end
|
92
81
|
|
93
82
|
def method_for(method_name)
|
94
|
-
mod = meta_class.extended_modules.detect{|x| x.instance_methods.include? method_name.to_s}
|
83
|
+
mod = meta_class.extended_modules.detect{|x| x.instance_methods.collect(&:to_s).include? method_name.to_s}
|
95
84
|
mod ? mod.instance_method(method_name).bind(self) : proc_for(method_name)
|
96
85
|
end
|
97
86
|
|
data/lib/unextendable/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unextendable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 29
|
5
4
|
prerelease:
|
6
|
-
|
7
|
-
- 0
|
8
|
-
- 1
|
9
|
-
- 3
|
10
|
-
version: 0.1.3
|
5
|
+
version: 0.1.4
|
11
6
|
platform: ruby
|
12
7
|
authors:
|
13
8
|
- Paul Engel
|
@@ -15,7 +10,8 @@ autorequire:
|
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
12
|
|
18
|
-
date: 2011-05-
|
13
|
+
date: 2011-05-04 00:00:00 +02:00
|
14
|
+
default_executable:
|
19
15
|
dependencies:
|
20
16
|
- !ruby/object:Gem::Dependency
|
21
17
|
name: shoulda
|
@@ -25,9 +21,6 @@ dependencies:
|
|
25
21
|
requirements:
|
26
22
|
- - ">="
|
27
23
|
- !ruby/object:Gem::Version
|
28
|
-
hash: 3
|
29
|
-
segments:
|
30
|
-
- 0
|
31
24
|
version: "0"
|
32
25
|
type: :development
|
33
26
|
version_requirements: *id001
|
@@ -39,9 +32,6 @@ dependencies:
|
|
39
32
|
requirements:
|
40
33
|
- - ">="
|
41
34
|
- !ruby/object:Gem::Version
|
42
|
-
hash: 3
|
43
|
-
segments:
|
44
|
-
- 0
|
45
35
|
version: "0"
|
46
36
|
type: :development
|
47
37
|
version_requirements: *id002
|
@@ -63,6 +53,7 @@ files:
|
|
63
53
|
- Rakefile
|
64
54
|
- VERSION
|
65
55
|
- lib/unextendable.rb
|
56
|
+
- lib/unextendable/kernel.rb
|
66
57
|
- lib/unextendable/module.rb
|
67
58
|
- lib/unextendable/object.rb
|
68
59
|
- lib/unextendable/version.rb
|
@@ -72,6 +63,7 @@ files:
|
|
72
63
|
- test/object_instance_test.rb
|
73
64
|
- test/test_helper.rb
|
74
65
|
- unextendable.gemspec
|
66
|
+
has_rdoc: true
|
75
67
|
homepage: https://github.com/archan937/unextendable
|
76
68
|
licenses: []
|
77
69
|
|
@@ -85,23 +77,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
85
77
|
requirements:
|
86
78
|
- - ">="
|
87
79
|
- !ruby/object:Gem::Version
|
88
|
-
hash: 3
|
89
|
-
segments:
|
90
|
-
- 0
|
91
80
|
version: "0"
|
92
81
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
82
|
none: false
|
94
83
|
requirements:
|
95
84
|
- - ">="
|
96
85
|
- !ruby/object:Gem::Version
|
97
|
-
hash: 3
|
98
|
-
segments:
|
99
|
-
- 0
|
100
86
|
version: "0"
|
101
87
|
requirements: []
|
102
88
|
|
103
89
|
rubyforge_project: unextendable
|
104
|
-
rubygems_version: 1.
|
90
|
+
rubygems_version: 1.6.2
|
105
91
|
signing_key:
|
106
92
|
specification_version: 3
|
107
93
|
summary: A small gem making unextending extended module methods within object instances possible
|