unextendable 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
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.3
1
+ 0.1.4
data/lib/unextendable.rb CHANGED
@@ -1,3 +1,4 @@
1
1
  require File.expand_path("../unextendable/module" , __FILE__)
2
+ require File.expand_path("../unextendable/kernel" , __FILE__)
2
3
  require File.expand_path("../unextendable/object" , __FILE__)
3
4
  require File.expand_path("../unextendable/version", __FILE__)
@@ -0,0 +1,11 @@
1
+ module Kernel
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
+ end
@@ -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(name)
69
- return if meta_class.method_procs.key? name
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[name] = respond_to?(name) ? method(name).to_proc : nil
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 #{name}(*args, &block)
75
- call_unextendable_method :#{name}, *args, &block
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
 
@@ -1,7 +1,7 @@
1
1
  module Unextendable
2
2
  MAJOR = 0
3
3
  MINOR = 1
4
- TINY = 3
4
+ TINY = 4
5
5
 
6
6
  VERSION = [MAJOR, MINOR, TINY].join(".")
7
7
  end
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
- segments:
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-02 00:00:00 Z
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.7.2
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