public
Rubygem
Description: Merb Core: All you need. None you don't.
Homepage: http://www.merbivore.com
Clone URL: git://github.com/wycats/merb-core.git
Search Repo:
Make each subsequent call to use_orm just replace effect of previos.

Merb.generator_scope now uses separate scopes for ORM generators,
test framework generators and Merb special generator under the hood.

Some notes:

 * use_orm can be now used more than once.
 * but only latter takes effect.
 * dependencies of previous ARE NOT REMOVED
 * because you take responsibility if you do crazy things
Michael S. Klishin (author)
Fri May 16 07:15:50 -0700 2008
commit  9d44defce29f7aeb23d8e31745b5fa854a772e76
tree    b63ee4fae7dc5b99d2f89daac93c6eecf652e323
parent  c7c69e8f6a0bce3a1a4ccce13d334fafd6e24685
...
246
247
248
249
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
250
251
252
...
246
247
248
 
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
0
@@ -246,7 +246,34 @@
0
 
0
     # Set up default variables under Merb
0
     attr_accessor :generator_scope, :klass_hashes
0
- Merb.generator_scope = [:merb_default, :merb, :rspec]
0
+
0
+ # Returns registered ORM generators as symbols,
0
+ # for instance, :datamapper.
0
+ #
0
+ # ==== Returns
0
+ # <Array(Symbol>:: registered ORM generators.
0
+ def orm_generator_scope
0
+ @orm_generator_scope ||= [:merb_default]
0
+ end
0
+
0
+ # Returns registered test framework generators.
0
+ #
0
+ # ==== Returns
0
+ # <Array(Symbol>:: registred test framework generators.
0
+ def test_framework_generator_scope
0
+ @test_framework_generator_scope ||= [:rspec]
0
+ end
0
+
0
+ # Returns all registered generators plus Merb generator.
0
+ #
0
+ # ==== Returns
0
+ # <Array(Symbol>::
0
+ # all registered generators, inc. needed by Merb itself.
0
+ def generator_scope
0
+ [:merb] + orm_generator_scope + test_framework_generator_scope
0
+ end
0
+
0
+
0
     Merb.klass_hashes = []
0
 
0
     attr_reader :registered_session_types
...
109
110
111
112
113
114
115
116
 
 
 
 
 
117
118
119
120
121
122
...
136
137
138
139
140
 
141
142
143
144
...
148
149
150
151
152
153
154
155
 
156
157
158
...
179
180
181
182
183
184
185
 
186
187
188
...
109
110
111
 
112
113
114
 
115
116
117
118
119
120
 
 
121
122
123
...
137
138
139
 
 
140
141
142
143
144
...
148
149
150
 
151
152
153
 
154
155
156
157
...
178
179
180
 
 
 
 
181
182
183
184
0
@@ -109,14 +109,15 @@
0
   # orm<~to_s>:: The ORM to use.
0
   #
0
   # ==== Examples
0
- # # This line goes in dependencies.yml
0
   # use_orm :datamapper
0
   #
0
   # # This will use the DataMapper generator for your ORM
0
- # $ ruby script/generate model MyModel
0
+ # $ merb-gen model ActivityEvent
0
+ #
0
+ # ==== Notes
0
+ # If for some reason this is called more than once, latter
0
+ # call takes over other.
0
   def use_orm(orm)
0
- raise "Don't call use_orm more than once" unless Merb.generator_scope.include?(:merb_default)
0
-
0
     begin
0
       register_orm(orm)
0
       orm_plugin = "merb_#{orm}"
0
@@ -136,8 +137,7 @@
0
   #--
0
   # @private
0
   def register_orm(orm)
0
- Merb.generator_scope.delete(:merb_default)
0
- Merb.generator_scope.unshift(orm.to_sym) unless Merb.generator_scope.include?(orm.to_sym)
0
+ Merb.orm_generator_scope.replace([orm])
0
   end
0
 
0
   # Used in Merb.root/config/init.rb to tell Merb which testing framework to
0
0
@@ -148,11 +148,10 @@
0
   # The test framework to use. Currently only supports :rspec and :test_unit.
0
   #
0
   # ==== Examples
0
- # # This line goes in dependencies.yml
0
   # use_test :rspec
0
   #
0
   # # This will now use the RSpec generator for tests
0
- # $ ruby script/generate controller MyController
0
+ # $ merb-gen model ActivityEvent
0
   def use_test(test_framework, *test_dependencies)
0
     raise "use_test only supports :rspec and :test_unit currently" unless supported_test_framework?(test_framework)
0
     register_test_framework(test_framework)
0
@@ -179,10 +178,7 @@
0
   #--
0
   # @private
0
   def register_test_framework(test_framework)
0
- Merb.generator_scope.delete(:rspec)
0
- Merb.generator_scope.delete(:test_unit)
0
-
0
- Merb.generator_scope.push(test_framework.to_sym)
0
+ Merb.test_framework_generator_scope.replace([test_framework])
0
   end
0
 
0
   # ==== Parameters
...
2
3
4
5
6
7
 
 
 
 
 
 
 
 
 
8
9
10
 
11
12
13
14
15
 
 
16
17
18
19
20
21
22
 
 
 
 
 
23
24
25
26
27
 
 
28
 
29
30
31
 
 
 
 
 
 
 
 
 
32
33
34
35
 
36
37
38
39
40
 
 
41
42
 
 
 
 
 
43
44
45
 
46
47
48
49
 
 
 
 
 
50
51
52
53
54
55
56
57
 
 
 
58
59
60
61
 
 
62
 
63
64
 
 
 
 
 
 
 
 
65
66
67
68
69
 
70
71
72
73
74
75
76
 
 
77
78
79
80
 
 
 
81
82
83
84
 
85
86
87
88
 
89
90
91
 
92
93
94
 
95
96
97
...
99
100
101
102
103
 
104
105
106
107
...
126
127
128
129
 
130
 
 
 
 
131
132
...
2
3
4
 
 
 
5
6
7
8
9
10
11
12
13
14
15
 
16
17
18
19
 
 
20
21
22
23
24
 
 
 
 
25
26
27
28
29
30
31
 
 
 
32
33
34
35
36
 
 
37
38
39
40
41
42
43
44
45
46
47
48
 
49
50
51
52
53
 
54
55
56
 
57
58
59
60
61
62
63
 
64
65
66
67
68
69
70
71
72
73
74
75
76
77
 
 
 
 
78
79
80
81
82
 
 
83
84
85
86
87
 
88
89
90
91
92
93
94
95
96
97
98
99
 
100
101
102
103
104
 
 
 
105
106
107
108
 
 
109
110
111
112
113
114
115
116
117
118
 
 
119
120
121
 
122
123
124
 
125
126
127
128
...
130
131
132
 
 
133
134
135
136
137
...
156
157
158
 
159
160
161
162
163
164
165
166
0
@@ -2,96 +2,127 @@
0
 
0
 Merb.environment = 'test'
0
 
0
-describe "Plugins", "default GENERATOR_SCOPE" do
0
- it "should have :merb_default first" do
0
- Merb.generator_scope.first.should == :merb_default
0
+def reset_merb_generator_scope
0
+ Merb.orm_generator_scope.replace [:merb_default]
0
+ Merb.test_framework_generator_scope.replace [:rspec]
0
+ Kernel.stub!(:dependency)
0
+end
0
+
0
+describe "Plugins", "default generator scope" do
0
+ it "has :merb_default" do
0
+ Merb.generator_scope.should include(:merb_default)
0
   end
0
 
0
- it "should have :merb" do
0
+ it "MUST include :merb" do
0
     Merb.generator_scope.should include(:merb)
0
   end
0
 
0
- it "should have :rspec last" do
0
- Merb.generator_scope.last.should == :rspec
0
+ it "has :rspec" do
0
+ Merb.generator_scope.should include(:rspec)
0
   end
0
 end
0
 
0
-describe "Plugins","use_orm" do
0
- before(:each) do
0
- Merb.generator_scope.replace [:merb_default, :merb, :rspec]
0
- Kernel.stub!(:dependency)
0
+
0
+
0
+describe "Plugins", "ORM generator scope" do
0
+ before :each do
0
+ reset_merb_generator_scope
0
   end
0
 
0
- it "should raise an error if use_orm is called twice" do
0
- use_orm(:activerecord)
0
- lambda { use_orm(:datamapper) }.should raise_error("Don't call use_orm more than once")
0
+ it "has merb_default stub by default" do
0
+ Merb.orm_generator_scope.should include(:merb_default)
0
   end
0
+end
0
 
0
- it "should not have :merb_default in GENERATOR_SCOPE with use_orm(:activerecord)" do
0
- use_orm(:activerecord)
0
+
0
+
0
+describe "Plugins","use_orm" do
0
+ before(:each) do
0
+ reset_merb_generator_scope
0
+ end
0
+
0
+ it "removes defaults from generator scope" do
0
+ use_orm(:datamapper)
0
     Merb.generator_scope.should_not include(:merb_default)
0
   end
0
 
0
- it "should have :activerecord in GENERATOR_SCOPE with use_orm(:activerecord)" do
0
+ it "adds orm symbol to generator scope" do
0
     use_orm(:activerecord)
0
     Merb.generator_scope.should include(:activerecord)
0
   end
0
 
0
- it "should have :activerecord first in GENERATOR_SCOPE with use_orm(:activerecord)" do
0
+ it "replaces previously used if use_orm is called more than once" do
0
+ use_orm(:sequel)
0
     use_orm(:activerecord)
0
- Merb.generator_scope.first.should == :activerecord
0
+ use_orm(:datamapper)
0
+
0
+ Merb.generator_scope.should_not include(:sequel)
0
+ Merb.generator_scope.should_not include(:activerecord)
0
+ Merb.generator_scope.should include(:datamapper)
0
   end
0
 
0
- it "should call dependency :merb_activerecord with use_orm(:activerecord)" do
0
+ it "calls dependency :merb_<orm>" do
0
     Kernel.should_receive(:dependency).with("merb_activerecord").once.
0
       and_return(true)
0
     use_orm(:activerecord)
0
   end
0
+
0
+ it "does not affect presence of :merb in generator scope" do
0
+ use_orm(:datamapper)
0
+ Merb.generator_scope.should include(:merb)
0
+ end
0
 end
0
 
0
 
0
 
0
-describe "Plugins","use_test" do
0
- before(:each) do
0
- Merb.generator_scope.replace [:merb_default, :merb, :rspec]
0
- Kernel.stub!(:dependency)
0
+describe "Plugins", "test framework generator scope" do
0
+ before :each do
0
+ reset_merb_generator_scope
0
   end
0
 
0
- it "should have :rspec in GENERATOR_SCOPE by default" do
0
- Merb.generator_scope.should include(:rspec)
0
+ it "has rspec by default" do
0
+ Merb.test_framework_generator_scope.should include(:rspec)
0
   end
0
+end
0
 
0
- it "should not have :rspec in GENERATOR_SCOPE with use_test(:test_unit)" do
0
+
0
+
0
+describe "Plugins","use_test" do
0
+ before(:each) do
0
+ reset_merb_generator_scope
0
+ end
0
+
0
+ it "removes defaults" do
0
     use_test(:test_unit)
0
     Merb.generator_scope.should_not include(:rspec)
0
   end
0
 
0
- it "should have :test_unit in GENERATOR_SCOPE with use_test(:test_unit)" do
0
+ it "adds used test framework to generator scope" do
0
     use_test(:test_unit)
0
     Merb.generator_scope.should include(:test_unit)
0
   end
0
 
0
- it "should have :test_unit last in GENERATOR_SCOPE with use_test(:test_unit)" do
0
- use_test(:test_unit)
0
- Merb.generator_scope.last.should == :test_unit
0
+ it "raises an error when unsupported test framework is used" do
0
+ lambda { use_test(:fiddlefaddle) }.should raise_error
0
   end
0
 
0
- it "should raise an error if called with an unsupported test framework" do
0
- lambda { use_test(:fiddlefaddle) }.should raise_error
0
+ it "does not affect presence of :merb in generator scope" do
0
+ use_test(:test_unit)
0
+ Merb.generator_scope.should include(:merb)
0
   end
0
 end
0
 
0
 
0
+
0
 describe "Plugins", "register_orm" do
0
   before(:each) do
0
- Merb.generator_scope.replace [:merb_default, :merb, :rspec]
0
- Kernel.stub!(:dependency)
0
+ reset_merb_generator_scope
0
   end
0
 
0
- it "registers ORM plugin at generator scope" do
0
+ it "registers ORM plugin at orm generator scope" do
0
     register_orm(:sequel)
0
 
0
- Merb.generator_scope.should include(:sequel)
0
+ Merb.orm_generator_scope.should include(:sequel)
0
   end
0
 end
0
 
0
@@ -99,8 +130,7 @@
0
 
0
 describe "Plugins", "register_test_framework" do
0
   before(:each) do
0
- Merb.generator_scope.replace [:merb_default, :merb, :rspec]
0
- Kernel.stub!(:dependency)
0
+ reset_merb_generator_scope
0
   end
0
 
0
   it "registers test framework at generator scope" do
0
0
@@ -126,8 +156,12 @@
0
     supported_test_framework?(:rspec).should be(true)
0
   end
0
 
0
- it "DOES NOT yet support MSpec (of Rubinius fame)" do
0
+ it "does not (no yet) support MSpec" do
0
     supported_test_framework?(:mspec).should be(false)
0
+ end
0
+
0
+ it "does not (no yet) support Bacon" do
0
+ supported_test_framework?(:bacon).should be(false)
0
   end
0
 end

Comments

    No one has commented yet.