inheritance_module_eval 1.0.0 → 1.0.1

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/.travis.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  rvm:
2
- - 1.8.7 # (current default)
2
+ - 1.8.7
3
3
  - 1.9.2
4
4
  - 1.9.3
5
5
  - jruby
data/HISTORY.md CHANGED
@@ -1,3 +1,11 @@
1
+ 1.0.1
2
+ -----
3
+ Refactor code, extract intergation code to "inheritance_module_eval/integration"
4
+
5
+ 1.0.0
6
+ -----
7
+ Implement inheritance module eval. Add Specs
8
+
1
9
  0.0.1
2
- =====
10
+ -----
3
11
  Initial release. Add README, LICENSE, .gitignore, etc
data/README.md CHANGED
@@ -9,30 +9,38 @@ Installation
9
9
 
10
10
  Usage
11
11
  -----
12
- There are 2 methods:
12
+ Inheritance module_eval provides 2 methods for eval instance and class methods:
13
13
 
14
- * instance_module_eval
15
- * class_module_eval
14
+ * instance_eval_on
15
+ * class_eval_on
16
16
 
17
- instance_module_eval method used to eval instance methods (ie: methods of an object)
18
17
 
19
- class_module_eval method used to eval class methods (ie: methods of an class)
18
+ InheritanceModuleEval.instance_eval_on(instance_object, code = nil, &block) #method used to eval instance methods (ie: methods of an object)
19
+ InheritanceModuleEval.class_eval_on(class_object, code = nil, &block) #method used to eval class methods (ie: methods of an class)
20
20
 
21
+ Note: you may include
22
+
23
+ require "inheritance_module_eval/integration"
24
+ to intergate inheritance_module_eval in ruby core. That will give 2 methods:
25
+
26
+ * instance_module_eval(code = nil, &block)
27
+ * class_module_eval(code = nil, &block)
21
28
 
22
29
  Below is some simple example of inheritance_module_eval usage:
23
30
 
24
31
  require 'inheritance_module_eval'
32
+ require "inheritance_module_eval/integration"
25
33
 
26
34
  # Some dummy class that uses #instance_module_eval
27
35
  class Content
28
36
  self.field(name)
29
37
  instance_module_eval %{
30
38
  def #{name}
31
- instance_valiable_get(@#{name})
39
+ @#{name}
32
40
  end
33
41
 
34
42
  def #{name}=(new_value)
35
- instance_valiable_set(@#{name}, new_value)
43
+ @#{name}= new_value
36
44
  end
37
45
  }
38
46
  end
@@ -63,7 +71,7 @@ Compatibility
63
71
  -------------
64
72
  tested with Ruby
65
73
 
66
- * 1.8.7 # (current default)
74
+ * 1.8.7
67
75
  * 1.9.2
68
76
  * 1.9.3
69
77
  * jruby
@@ -0,0 +1,16 @@
1
+ require "integration_module_eval"
2
+ class Module
3
+ # acts same as module_eval, but saves method hierarchy
4
+ # should be called only for instance methods evaluation
5
+ # @params (see Module#module_eval)
6
+ def instance_module_eval(code = nil, &block)
7
+ InheritanceModuleEval.instance_eval_on self, code, &block
8
+ end
9
+
10
+ # acts same as module_eval, but saves method hierarchy
11
+ # should be called only for class methods evaluation
12
+ # @params (see Module#module_eval)
13
+ def class_module_eval(code = nil, &block)
14
+ InheritanceModuleEval.class_eval_on self, code, &block
15
+ end
16
+ end
@@ -1,3 +1,3 @@
1
1
  module InheritanceModuleEval
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
@@ -1,27 +1,11 @@
1
1
  require "inheritance_module_eval/version"
2
2
 
3
- class Module
4
- # acts same as module_eval, but saves method hierarchy
5
- # should be called only for instance methods evaluation
6
- # @params (see Module#module_eval)
7
- def instance_module_eval(code = nil, &block)
8
- InheritanceModuleEval.instance_eval_on self, code, &block
9
- end
10
-
11
- # acts same as module_eval, but saves method hierarchy
12
- # should be called only for class methods evaluation
13
- # @params (see Module#module_eval)
14
- def class_module_eval(code = nil, &block)
15
- InheritanceModuleEval.class_eval_on self, code, &block
16
- end
17
- end
18
-
19
3
  module InheritanceModuleEval
20
- def self.instance_eval_on(sender, code, &block)
4
+ def self.instance_eval_on(sender, code = nil, &block)
21
5
  sender.send :include, (get_module_for code, &block)
22
6
  end
23
7
 
24
- def self.class_eval_on(sender, code, &block)
8
+ def self.class_eval_on(sender, code = nil, &block)
25
9
  sender.send :extend, (get_module_for code, &block)
26
10
  end
27
11
 
@@ -8,55 +8,46 @@ class Child < Parent
8
8
 
9
9
  end
10
10
  describe InheritanceModuleEval do
11
- describe "integration" do
12
- specify "class should respond to instance_module_eval" do
13
- Class.new.should respond_to(:instance_module_eval)
14
- end
15
-
16
- specify "module should respond to instance_module_eval" do
17
- Module.new.should respond_to(:instance_module_eval)
18
- end
19
-
20
- specify "class should respond to class_module_eval" do
21
- Class.new.should respond_to(:class_module_eval)
22
- end
23
-
24
- specify "module should respond to class_module_eval" do
25
- Module.new.should respond_to(:class_module_eval)
26
- end
27
- end
28
-
29
11
  describe "add dynamic methods" do
30
12
  before(:each) do
31
13
  @test_object = Class.new
32
14
  end
33
15
 
34
- pending "should delegate to module_eval" do
35
- Module.should_receive(:module_eval).twice
36
- @test_object.instance_module_eval %{
16
+ it "should delegate to module_eval" do
17
+ mock_module = mock(:mock_module)
18
+ @test_object.stub(:include)
19
+ @test_object.stub(:extend)
20
+ Module.stub(:new).and_return(mock_module)
21
+
22
+ mock_module.should_receive(:module_eval).once
23
+
24
+ InheritanceModuleEval.instance_eval_on @test_object do
37
25
  def say_hi
38
26
  puts hi
39
27
  end
40
- }
41
- @test_object.class_module_eval %{
28
+ end
29
+
30
+ mock_module.should_receive(:module_eval).once
31
+
32
+ InheritanceModuleEval.class_eval_on @test_object do
42
33
  def say_hi
43
34
  puts hi
44
35
  end
45
- }
36
+ end
46
37
  end
47
38
 
48
39
  describe "instance methods" do
49
40
  it "should eval a string" do
50
- @test_object.instance_module_eval %{
51
- def say_hi
52
- puts 'hi'
53
- end
54
- }
41
+ InheritanceModuleEval.instance_eval_on @test_object, %{
42
+ def say_hi
43
+ puts 'hi'
44
+ end
45
+ }
55
46
  @test_object.new.should respond_to :say_hi
56
47
 
57
48
  end
58
49
  it "should eval a block" do
59
- @test_object.instance_module_eval do
50
+ InheritanceModuleEval.instance_eval_on @test_object do
60
51
  def say_hi
61
52
  puts 'hi'
62
53
  end
@@ -67,20 +58,21 @@ describe InheritanceModuleEval do
67
58
 
68
59
  describe "class_methods" do
69
60
  it "should eval a string" do
70
- @test_object.class_module_eval %{
61
+ InheritanceModuleEval.class_eval_on @test_object do
71
62
  def say_hi
72
63
  puts 'hi'
73
64
  end
74
- }
75
- @test_object.should respond_to :say_hi
65
+ end
76
66
 
67
+ @test_object.should respond_to :say_hi
77
68
  end
78
69
  it "should eval a block" do
79
- @test_object.class_module_eval do
70
+ InheritanceModuleEval.class_eval_on @test_object do
80
71
  def say_hi
81
72
  puts 'hi'
82
73
  end
83
74
  end
75
+
84
76
  @test_object.should respond_to :say_hi
85
77
  end
86
78
  end
@@ -88,32 +80,35 @@ describe InheritanceModuleEval do
88
80
 
89
81
  describe "collisions" do
90
82
  describe "define already defined method in a class" do
91
- describe "redefine it after class declaration" do
83
+ context "redefine it after class declaration" do
92
84
  it "should has lower priority then method, declared in a class" do
93
85
  klass = Class.new
94
86
  klass.class_eval do
95
87
  def say_hi
96
88
  "hi from method" << " " << super
97
89
  end
98
- instance_module_eval %{
99
- def say_hi
100
- "hi from eval"
101
- end
102
- }
103
90
  end
91
+
92
+ InheritanceModuleEval.instance_eval_on klass do
93
+ def say_hi
94
+ "hi from eval"
95
+ end
96
+ end
97
+
104
98
  klass.new.say_hi.should == "hi from method hi from eval"
105
99
  end
106
100
  end
107
101
 
108
- describe "redefine it before class declaration" do
109
- it "should push dynamic method up in the inheritance tree" do
102
+ context "redefine it before class declaration" do
103
+ it "should has lower priority then method, declared in a class" do
110
104
  klass = Class.new
111
105
  klass.class_eval do
112
- instance_module_eval %{
106
+ InheritanceModuleEval.instance_eval_on self do
113
107
  def say_hi
114
108
  "tiny hi"
115
109
  end
116
- }
110
+ end
111
+
117
112
  def say_hi
118
113
  super.upcase
119
114
  end
@@ -126,26 +121,30 @@ describe InheritanceModuleEval do
126
121
  it "should push dynamic method up in the inheritance tree" do
127
122
  klass = Class.new
128
123
  klass.class_eval do
129
- instance_module_eval %{
124
+ InheritanceModuleEval.instance_eval_on self do
130
125
  def say_hi
131
126
  [5]
132
127
  end
133
- }
134
- instance_module_eval %{
128
+ end
129
+
130
+ InheritanceModuleEval.instance_eval_on self do
135
131
  def say_hi
136
132
  [4] + super
137
133
  end
138
- }
139
- instance_module_eval %{
134
+ end
135
+
136
+ InheritanceModuleEval.instance_eval_on self do
140
137
  def say_hi
141
138
  [3] + super
142
139
  end
143
- }
144
- instance_module_eval %{
140
+ end
141
+
142
+ InheritanceModuleEval.instance_eval_on self do
145
143
  def say_hi
146
144
  [2] + super
147
145
  end
148
- }
146
+ end
147
+
149
148
  def say_hi
150
149
  [1] + super
151
150
  end
@@ -166,7 +165,7 @@ describe InheritanceModuleEval do
166
165
  klass = Class.new
167
166
  klass.class_eval do
168
167
  include test_module
169
- instance_module_eval do
168
+ InheritanceModuleEval.instance_eval_on self do
170
169
  def say_hi
171
170
  ["hi from eval"] + super
172
171
  end
@@ -185,7 +184,7 @@ describe InheritanceModuleEval do
185
184
 
186
185
  describe "#get_module_for" do
187
186
  it "should return Module" do
188
- InheritanceModuleEval.send :get_module_for, "puts('hi')"
187
+ InheritanceModuleEval.send :get_module_for, "'hi'"
189
188
  end
190
189
 
191
190
  it "should raise ArgumentError if no code given" do
@@ -0,0 +1,18 @@
1
+ require "inheritance_module_eval/integration"
2
+ describe "integration" do
3
+ specify "class should respond to instance_module_eval" do
4
+ Class.new.should respond_to(:instance_module_eval)
5
+ end
6
+
7
+ specify "module should respond to instance_module_eval" do
8
+ Module.new.should respond_to(:instance_module_eval)
9
+ end
10
+
11
+ specify "class should respond to class_module_eval" do
12
+ Class.new.should respond_to(:class_module_eval)
13
+ end
14
+
15
+ specify "module should respond to class_module_eval" do
16
+ Module.new.should respond_to(:class_module_eval)
17
+ end
18
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inheritance_module_eval
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-12 00:00:00.000000000Z
12
+ date: 2011-11-13 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &10342840 !ruby/object:Gem::Requirement
16
+ requirement: &19224720 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '2.6'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *10342840
24
+ version_requirements: *19224720
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rake
27
- requirement: &10342420 !ruby/object:Gem::Requirement
27
+ requirement: &19224100 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *10342420
35
+ version_requirements: *19224100
36
36
  description: ! 'saves inheritance structure of dynamically created methods.
37
37
 
38
38
  Allows to redefine dynamic method in the same class or in any child class, and call
@@ -53,8 +53,10 @@ files:
53
53
  - Rakefile
54
54
  - inheritance_module_eval.gemspec
55
55
  - lib/inheritance_module_eval.rb
56
+ - lib/inheritance_module_eval/integration.rb
56
57
  - lib/inheritance_module_eval/version.rb
57
58
  - spec/inheritance_spec.rb
59
+ - spec/intergation_spec.rb
58
60
  homepage: http://github.com/AlexParamonov/inheritance_module_eval
59
61
  licenses: []
60
62
  post_install_message:
@@ -80,4 +82,3 @@ signing_key:
80
82
  specification_version: 3
81
83
  summary: inheritance safe module_eval.
82
84
  test_files: []
83
- has_rdoc: