basic_assumption 0.3.8 → 0.3.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -20,13 +20,14 @@ module BasicAssumption
20
20
  end
21
21
 
22
22
  # Returns a block that will attempt to do the correct thing depending
23
- # on which action the request is triggering. If the action is 'show',
24
- # 'edit', 'update', or 'destroy', then +assume+ will find an instance of
25
- # an ActiveRecord model based on the +name+ that it recieved and an id
23
+ # on the plurality of the name passed to +assume+ and the action for the
24
+ # current request. If the name is singular and the action is not 'new'
25
+ # or 'create', then +assume+ will find an instance of
26
+ # an ActiveRecord model of the name that it received and an id
26
27
  # value in the parameters. If the action is 'new' or 'create', +assume+
27
28
  # will instantiate a new instance of the model class, passing in the
28
- # values it finds in the +params+ hash with a key of the singularized
29
- # form of the +name+ passed to +assume+. For example:
29
+ # values it finds in the +params+ hash with for a key of the name passed
30
+ # to +assume+. For example:
30
31
  #
31
32
  # class WidgetController < ApplicationController
32
33
  # default_assumption :restful_rails
@@ -38,16 +39,15 @@ module BasicAssumption
38
39
  # end
39
40
  #
40
41
  # Note the object will have been instantiated but not saved, destroyed,
41
- # etc. If the action is 'index', there are two possibilities for the
42
- # behavior of +assume+. If the +name+ passed is of singular form, then
43
- # a find will be performed, just as for a show or edit action. If the
44
- # +name+ is a plural word, then +assume+ will find all instances of
45
- # the model class.
42
+ # etc.
46
43
  #
47
- # However, if the model responds to +paginate+ and there is a +page+
48
- # key in the +params+ hash, +assume+ will attempt to paginate the
49
- # results, also observing a +per_page+ value in the +params+ hash or
50
- # defaulting to 15 if one is not found.
44
+ # If the name passed to assume is plural, there are two possibilities
45
+ # for the # behavior of +assume+. If the model responds to +paginate+ and
46
+ # there is a +page+ key in the +params+ hash, +assume+ will attempt to
47
+ # find all records of the model type paginated based on the +page+
48
+ # value in params and also a +per_page+ value. 15 will be the default
49
+ # if +per_page+ is not present. Otherwise, it returns all # records for
50
+ # the model.
51
51
  def block
52
52
  super
53
53
  end
@@ -57,17 +57,13 @@ module BasicAssumption
57
57
  list
58
58
  elsif make?
59
59
  model_class.new(resource_attributes)
60
- else
60
+ elsif lookup?
61
61
  model_class.find(lookup_id)
62
62
  end
63
63
  end
64
64
 
65
65
  protected
66
66
 
67
- def find? #:nodoc:
68
- %w(show edit update destroy).include? action
69
- end
70
-
71
67
  def list #:nodoc:
72
68
  if page?
73
69
  model_class.paginate('page' => page, 'per_page' => per_page)
@@ -77,7 +73,7 @@ module BasicAssumption
77
73
  end
78
74
 
79
75
  def list? #:nodoc:
80
- action.eql?('index') && plural_name.eql?(name)
76
+ plural_name.eql?(name)
81
77
  end
82
78
 
83
79
  def lookup_id #:nodoc:
@@ -85,11 +81,11 @@ module BasicAssumption
85
81
  end
86
82
 
87
83
  def lookup? #:nodoc:
88
- lookup_id.present?
84
+ lookup_id.present? && !list?
89
85
  end
90
86
 
91
87
  def make? #:nodoc:
92
- %w(new create).include?(action) || !lookup?
88
+ %w(new create).include?(action) || !(lookup? || list?)
93
89
  end
94
90
 
95
91
  def page? #:nodoc:
@@ -1,3 +1,3 @@
1
1
  module BasicAssumption
2
- VERSION = '0.3.8'
2
+ VERSION = '0.3.9'
3
3
  end
@@ -22,136 +22,257 @@ describe BasicAssumption::DefaultAssumption::RestfulRails do
22
22
  default.stub!(:params).and_return(params)
23
23
  end
24
24
 
25
- context "in the show action" do
26
- let(:params) { { 'id' => 42, 'action' => 'show' } }
25
+ context "when the name given to assume is plural" do
26
+ let(:name) { :models }
27
27
 
28
- it "attempts to find a model instance based off the given name" do
29
- Model.should_receive(:find).with(42).and_return(:model)
30
- default.block.call(:model).should eql(:model)
28
+ context "without pagination" do
29
+ %w(create destroy edit index new show update).each do |action|
30
+ let(:params) { {'action' => action} }
31
+
32
+ context "when there is an id in the params" do
33
+ before { params['id'] = 123 }
34
+ context "when action is #{action}" do
35
+ before { Model.should_receive(:all) }
36
+ context "when 'page' exists in the request params" do
37
+ before { params['page'] = '5' }
38
+ it "finds all the records of the model class" do
39
+ default.block.call(name)
40
+ end
41
+ end
42
+ context "when 'page' does not exist in the request params" do
43
+ it "finds all the records of the model class" do
44
+ default.block.call(name)
45
+ end
46
+ end
47
+ end
48
+ end
49
+
50
+ context "when there is not an id in the params" do
51
+ context "when action is #{action}" do
52
+ before { Model.should_receive(:all) }
53
+ context "when 'page' exists in the request params" do
54
+ before { params['page'] = '5' }
55
+ it "finds all the records of the model class" do
56
+ default.block.call(name)
57
+ end
58
+ end
59
+ context "when 'page' does not exist in the request params" do
60
+ it "finds all the records of the model class" do
61
+ default.block.call(name)
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
31
67
  end
32
- end
33
68
 
34
- context "in the edit action" do
35
- let(:params) { { 'id' => 42, 'action' => 'edit' } }
69
+ %w(create destroy edit index new show update).each do |action|
70
+ let(:params) { {'action' => action} }
36
71
 
37
- it "attempts to find a model instance based off the given name" do
38
- Model.should_receive(:find).with(42).and_return(:model)
39
- default.block.call(:model).should eql(:model)
72
+ context "with pagination" do
73
+ context "when there is an id in the params" do
74
+ before { params['id'] = 123 }
75
+ context "when action is #{action}" do
76
+ before { Model.stub! :paginate }
77
+ context "when 'page' exists in the request params" do
78
+ before { params['page'] = '5' }
79
+ it "paginates the records of the model class" do
80
+ Model.should_receive(:paginate)
81
+ default.block.call(name)
82
+ end
83
+ context "when 'per_page' exists in the request params" do
84
+ it "paginates using 'page' and 'per_page' from the params" do
85
+ params['per_page'] = '10'
86
+ Model.should_receive(:paginate).with('page' => '5', 'per_page' => '10')
87
+ default.block.call(name)
88
+ end
89
+ end
90
+ context "when 'per_page' does not exist in the request params" do
91
+ it "paginates using 'page' from the params and a default 'per_page' of 15" do
92
+ Model.should_receive(:paginate).with('page' => '5', 'per_page' => '15')
93
+ default.block.call(name)
94
+ end
95
+ end
96
+ end
97
+ context "when 'page' does not exist in the request params" do
98
+ it "finds all the records of the model class" do
99
+ Model.should_receive(:all)
100
+ default.block.call(name)
101
+ end
102
+ end
103
+ end
104
+ end
105
+
106
+ context "when there is not an id in the params" do
107
+ context "when action is #{action}" do
108
+ before { Model.stub! :paginate }
109
+ context "when 'page' exists in the request params" do
110
+ before { params['page'] = '5' }
111
+ it "paginates the records of the model class" do
112
+ Model.should_receive(:paginate)
113
+ default.block.call(name)
114
+ end
115
+ context "when 'per_page' exists in the request params" do
116
+ it "paginates using 'page' and 'per_page' from the params" do
117
+ params['per_page'] = '10'
118
+ Model.should_receive(:paginate).with('page' => '5', 'per_page' => '10')
119
+ default.block.call(name)
120
+ end
121
+ end
122
+ context "when 'per_page' does not exist in the request params" do
123
+ it "paginates using 'page' from the params and a default 'per_page' of 15" do
124
+ Model.should_receive(:paginate).with('page' => '5', 'per_page' => '15')
125
+ default.block.call(name)
126
+ end
127
+ end
128
+ end
129
+ context "when 'page' does not exist in the request params" do
130
+ it "finds all the records of the model class" do
131
+ Model.should_receive(:all)
132
+ default.block.call(name)
133
+ end
134
+ end
135
+ end
136
+ end
137
+ end
40
138
  end
41
139
  end
42
140
 
43
- context "in the update action" do
44
- let(:params) do
45
- { 'id' => 42 }
141
+ context "when the name given to assume is singular" do
142
+ let(:name) { :model }
143
+ context "in the index action" do
144
+ let(:params) { { 'action' => 'index' } }
145
+ context "and there is an id in params" do
146
+ before { params['id'] = 1 }
147
+ it "attempts to find a model instance based off the given name" do
148
+ Model.should_receive(:find).with(1).and_return(name)
149
+ default.block.call(name).should eql(name)
150
+ end
151
+ end
152
+ context "and there is no id in params" do
153
+ before { params['model'] = :initializers }
154
+ it "creates a new model instance and passes in appropriate params" do
155
+ Model.should_receive(:new).with(:initializers).and_return(name)
156
+ default.block.call(name).should eql(name)
157
+ end
158
+ end
46
159
  end
47
160
 
48
- it "attempts to find a model instance based off the given name" do
49
- Model.should_receive(:find).with(42).and_return(:model)
50
- default.block.call(:model).should eql(:model)
161
+ context "in the show action" do
162
+ let(:params) { { 'id' => 42, 'action' => 'show' } }
163
+
164
+ it "attempts to find a model instance based off the given name" do
165
+ Model.should_receive(:find).with(42).and_return(name)
166
+ default.block.call(name).should eql(:model)
167
+ end
51
168
  end
52
- end
53
169
 
54
- context "in the destroy action" do
55
- let(:params) { { 'id' => 42, 'action' => 'destroy' } }
170
+ context "in the edit action" do
171
+ let(:params) { { 'id' => 42, 'action' => 'edit' } }
56
172
 
57
- it "attempts to find a model instance based off the given name" do
58
- Model.should_receive(:find).with(42).and_return(:model)
59
- default.block.call(:model).should eql(:model)
173
+ it "attempts to find a model instance based off the given name" do
174
+ Model.should_receive(:find).with(42).and_return(name)
175
+ default.block.call(name).should eql(:model)
176
+ end
60
177
  end
61
- end
62
178
 
63
- context "in the create action" do
64
- let(:params) do
65
- {
66
- 'action' => 'create',
67
- 'model' => { 'age' => 27, 'color' => 'blue' }
68
- }
179
+ context "in the update action" do
180
+ let(:params) do
181
+ { 'id' => 42 }
182
+ end
183
+
184
+ it "attempts to find a model instance based off the given name" do
185
+ Model.should_receive(:find).with(42).and_return(name)
186
+ default.block.call(name).should eql(:model)
187
+ end
69
188
  end
70
189
 
71
- context "the model instance" do
72
- subject { default.block.call(:model) }
73
- its(:age) { should be(27) }
74
- its(:color) { should eql('blue') }
190
+ context "in the destroy action" do
191
+ let(:params) { { 'id' => 42, 'action' => 'destroy' } }
192
+
193
+ it "attempts to find a model instance based off the given name" do
194
+ Model.should_receive(:find).with(42).and_return(name)
195
+ default.block.call(name).should eql(:model)
196
+ end
75
197
  end
76
- end
77
198
 
78
- context "in the new action" do
79
- let(:params) do
80
- {
81
- 'action' => 'new',
82
- 'model' => { 'age' => 27, 'color' => 'blue' }
83
- }
199
+ context "in the create action" do
200
+ let(:params) do
201
+ {
202
+ 'action' => 'create',
203
+ 'model' => { 'age' => 27, 'color' => 'blue' }
204
+ }
205
+ end
206
+
207
+ context "the model instance" do
208
+ subject { default.block.call(name) }
209
+ its(:age) { should be(27) }
210
+ its(:color) { should eql('blue') }
211
+ end
84
212
  end
85
213
 
86
- context "the model instance" do
87
- subject { default.block.call(:model) }
88
- its(:age) { should be(27) }
89
- its(:color) { should eql('blue') }
214
+ context "in the new action" do
215
+ let(:params) do
216
+ {
217
+ 'action' => 'new',
218
+ 'model' => { 'age' => 27, 'color' => 'blue' }
219
+ }
220
+ end
221
+
222
+ context "the model instance" do
223
+ subject { default.block.call(name) }
224
+ its(:age) { should be(27) }
225
+ its(:color) { should eql('blue') }
226
+ end
90
227
  end
91
228
  end
229
+ end
92
230
 
93
- context "in the index action" do
94
- let(:params) { { 'action' => 'index' } }
95
- context "when the name given to assume is plural" do
96
- let(:name) { :models }
97
- context "without pagination" do
98
- before { Model.should_receive(:all) }
99
- context "when 'page' exists in the request params" do
100
- before { params['page'] = '5' }
101
- it "finds all the records of the model class" do
102
- default.block.call(name)
103
- end
104
- end
105
- context "when 'page' does not exist in the request params" do
106
- it "finds all the records of the model class" do
107
- default.block.call(name)
108
- end
109
- end
231
+ context "#make?" do
232
+ let(:rr) { BasicAssumption::DefaultAssumption::RestfulRails.new }
233
+ subject { rr.send(:make?) }
234
+ before { rr.stub(:list? => false, :lookup? => false) }
235
+ context "when the action is not new or create" do
236
+ context "when #list? is true" do
237
+ before { rr.stub(:list? => true) }
238
+ context "when #lookup? is true" do
239
+ before { rr.stub(:lookup? => true) }
240
+ it { should be_false }
110
241
  end
111
- context "with pagination" do
112
- before { Model.stub! :paginate }
113
- context "when 'page' exists in the request params" do
114
- before { params['page'] = '5' }
115
- it "paginates the records of the model class" do
116
- Model.should_receive(:paginate)
117
- default.block.call(name)
118
- end
119
- context "when 'per_page' exists in the request params" do
120
- it "paginates using 'page' and 'per_page' from the params" do
121
- params['per_page'] = '10'
122
- Model.should_receive(:paginate).with('page' => '5', 'per_page' => '10')
123
- default.block.call(name)
124
- end
125
- end
126
- context "when 'per_page' does not exist in the request params" do
127
- it "paginates using 'page' from the params and a default 'per_page' of 15" do
128
- Model.should_receive(:paginate).with('page' => '5', 'per_page' => '15')
129
- default.block.call(name)
130
- end
131
- end
132
- end
133
- context "when 'page' does not exist in the request params" do
134
- it "finds all the records of the model class" do
135
- Model.should_receive(:all)
136
- default.block.call(name)
137
- end
138
- end
242
+ context "when #lookup? is false" do
243
+ it { should be_false }
139
244
  end
140
245
  end
141
- context "when the name given to assume is singular" do
142
- let(:name) { :model }
143
- context "and there is an id in params" do
144
- before { params['id'] = 1 }
145
- it "attempts to find a model instance based off the given name" do
146
- Model.should_receive(:find).with(1).and_return(:model)
147
- default.block.call(name).should eql(:model)
246
+ context "when #list? is false" do
247
+ context "when #lookup? is true" do
248
+ before { rr.stub(:lookup? => true) }
249
+ it { should be_false }
250
+ end
251
+ context "when #lookup? is false" do
252
+ it { should be_true }
253
+ end
254
+ end
255
+ end
256
+ %w(new create).each do |action|
257
+ context "when the action is #{action}" do
258
+ before { rr.stub(:action => action) }
259
+ context "when #list? is true" do
260
+ before { rr.stub(:list? => true) }
261
+ context "when #lookup? is true" do
262
+ before { rr.stub(:lookup? => true) }
263
+ it { should be_true }
264
+ end
265
+ context "when #lookup? is false" do
266
+ it { should be_true }
148
267
  end
149
268
  end
150
- context "and there is no id in params" do
151
- before { params['model'] = :initializers }
152
- it "creates a new model instance and passes in appropriate params" do
153
- Model.should_receive(:new).with(:initializers).and_return(:model)
154
- default.block.call(name).should eql(:model)
269
+ context "when #list? is false" do
270
+ context "when #lookup? is true" do
271
+ before { rr.stub(:lookup? => true) }
272
+ it { should be_true }
273
+ end
274
+ context "when #lookup? is false" do
275
+ it { should be_true }
155
276
  end
156
277
  end
157
278
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 3
8
- - 8
9
- version: 0.3.8
8
+ - 9
9
+ version: 0.3.9
10
10
  platform: ruby
11
11
  authors:
12
12
  - Matt Yoho
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-06-04 00:00:00 -05:00
17
+ date: 2010-06-05 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -59,7 +59,7 @@ dependencies:
59
59
  version: 2.3.5
60
60
  type: :development
61
61
  version_requirements: *id003
62
- description: "\n Allows a simple declarative idiom for accessing resources in controllers and views\n "
62
+ description: "\n Allows a simple declarative idiom for accessing resources in controllers and views\n via a well-defined interface that increases testability and reduces shared state.\n "
63
63
  email: mby@mattyoho.com
64
64
  executables: []
65
65