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 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