basic_assumption 0.5.1 → 0.5.2
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.
- checksums.yaml +7 -0
- data/HISTORY.rdoc +3 -0
- data/README.rdoc +2 -3
- data/lib/basic_assumption.rb +33 -18
- data/lib/basic_assumption/default_assumption.rb +1 -1
- data/lib/basic_assumption/default_assumption/action.rb +56 -0
- data/lib/basic_assumption/default_assumption/class_resolver.rb +19 -13
- data/lib/basic_assumption/default_assumption/name.rb +32 -0
- data/lib/basic_assumption/default_assumption/owner_attributes.rb +36 -0
- data/lib/basic_assumption/default_assumption/rails.rb +109 -25
- data/lib/basic_assumption/rails.rb +2 -3
- data/lib/basic_assumption/version.rb +1 -1
- data/spec/basic_assumption/default_assumption/class_resolver_spec.rb +46 -30
- data/spec/basic_assumption/default_assumption/rails_spec.rb +179 -22
- data/spec/basic_assumption_spec.rb +5 -3
- metadata +50 -41
- data/lib/basic_assumption/default_assumption/restful_rails.rb +0 -112
- data/spec/basic_assumption/default_assumption/restful_rails_spec.rb +0 -280
@@ -1,112 +0,0 @@
|
|
1
|
-
require 'basic_assumption/default_assumption/rails'
|
2
|
-
|
3
|
-
module BasicAssumption
|
4
|
-
module DefaultAssumption
|
5
|
-
# Restful default behavior in the context of Rails
|
6
|
-
class RestfulRails < BasicAssumption::DefaultAssumption::Rails
|
7
|
-
attr_reader :action,
|
8
|
-
:page,
|
9
|
-
:per_page,
|
10
|
-
:resource_attributes #:nodoc:
|
11
|
-
|
12
|
-
def initialize(name = nil, context={}, params = {}) #:nodoc:
|
13
|
-
super
|
14
|
-
@action = params['action']
|
15
|
-
@resource_attributes = params[singular_name]
|
16
|
-
|
17
|
-
if @page = params[:page]
|
18
|
-
@per_page = params[:per_page]
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
# Returns a block that will attempt to do the correct thing depending
|
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
|
27
|
-
# value in the parameters. If the action is 'new' or 'create', +assume+
|
28
|
-
# will instantiate a new instance of the model class, passing in the
|
29
|
-
# values it finds in the +params+ hash with for a key of the name passed
|
30
|
-
# to +assume+. For example:
|
31
|
-
#
|
32
|
-
# class WidgetController < ApplicationController
|
33
|
-
# default_assumption :restful_rails
|
34
|
-
# assume :widget
|
35
|
-
#
|
36
|
-
# def create
|
37
|
-
# widget.save! # widget is: Widget.new(params[:widget])
|
38
|
-
# end
|
39
|
-
# end
|
40
|
-
#
|
41
|
-
# Note the object will have been instantiated but not saved, destroyed,
|
42
|
-
# etc.
|
43
|
-
#
|
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. Otherwise, it returns all
|
49
|
-
# # records for the model.
|
50
|
-
#
|
51
|
-
# It is possible to specify an alternative model name:
|
52
|
-
#
|
53
|
-
# class WidgetController < ApplicationController
|
54
|
-
# assume :sprocket, :as => :widget
|
55
|
-
# end
|
56
|
-
#
|
57
|
-
# This will create a +sprocket+ method in your actions and view
|
58
|
-
# that will use the Widget model for its lookup.
|
59
|
-
def block
|
60
|
-
super
|
61
|
-
end
|
62
|
-
|
63
|
-
def result #:nodoc:
|
64
|
-
if list?
|
65
|
-
list
|
66
|
-
elsif make?
|
67
|
-
model_class.new(resource_attributes)
|
68
|
-
elsif lookup?
|
69
|
-
model_class.find(lookup_id)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
protected
|
74
|
-
|
75
|
-
def list #:nodoc:
|
76
|
-
if page?
|
77
|
-
model_class.paginate(:page => page, :per_page => per_page)
|
78
|
-
else
|
79
|
-
model_class.all
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
def list? #:nodoc:
|
84
|
-
plural_name.eql?(name)
|
85
|
-
end
|
86
|
-
|
87
|
-
def lookup_id #:nodoc:
|
88
|
-
params['id']
|
89
|
-
end
|
90
|
-
|
91
|
-
def lookup? #:nodoc:
|
92
|
-
lookup_id.present? && !list?
|
93
|
-
end
|
94
|
-
|
95
|
-
def make? #:nodoc:
|
96
|
-
%w(new create).include?(action) || !(lookup? || list?)
|
97
|
-
end
|
98
|
-
|
99
|
-
def page? #:nodoc:
|
100
|
-
page.present? && model_class.respond_to?(:paginate)
|
101
|
-
end
|
102
|
-
|
103
|
-
def plural_name #:nodoc:
|
104
|
-
name.pluralize
|
105
|
-
end
|
106
|
-
|
107
|
-
def singular_name #:nodoc:
|
108
|
-
name.singularize
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
@@ -1,280 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
require 'active_support'
|
3
|
-
require 'basic_assumption/default_assumption/restful_rails'
|
4
|
-
|
5
|
-
class Model
|
6
|
-
attr_accessor :age, :color
|
7
|
-
def initialize(hash = {})
|
8
|
-
hash.each do |k, v|
|
9
|
-
self.send("#{k}=", v)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
describe BasicAssumption::DefaultAssumption::RestfulRails do
|
15
|
-
|
16
|
-
context "#block" do
|
17
|
-
let(:default) { BasicAssumption::DefaultAssumption::RestfulRails.new(:model, {}, params) }
|
18
|
-
|
19
|
-
before(:each) do
|
20
|
-
Model.stub!(:find)
|
21
|
-
default.stub!(:params).and_return(params)
|
22
|
-
end
|
23
|
-
|
24
|
-
context "when the name given to assume is plural" do
|
25
|
-
let(:name) { :models }
|
26
|
-
|
27
|
-
context "without pagination" do
|
28
|
-
%w(create destroy edit index new show update).each do |action|
|
29
|
-
let(:params) { {'action' => action} }
|
30
|
-
|
31
|
-
context "when there is an id in the params" do
|
32
|
-
before { params['id'] = 123 }
|
33
|
-
context "when action is #{action}" do
|
34
|
-
before { Model.should_receive(:all) }
|
35
|
-
context "when :page exists in the request params" do
|
36
|
-
before { params[:page] = '5' }
|
37
|
-
it "finds all the records of the model class" do
|
38
|
-
default.block.call(name, {})
|
39
|
-
end
|
40
|
-
end
|
41
|
-
context "when :page does not exist in the request params" do
|
42
|
-
it "finds all the records of the model class" do
|
43
|
-
default.block.call(name, {})
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
context "when there is not an id in the params" do
|
50
|
-
context "when action is #{action}" do
|
51
|
-
before { Model.should_receive(:all) }
|
52
|
-
context "when :page exists in the request params" do
|
53
|
-
before { params[:page] = '5' }
|
54
|
-
it "finds all the records of the model class" do
|
55
|
-
default.block.call(name, {})
|
56
|
-
end
|
57
|
-
end
|
58
|
-
context "when :page does not exist in the request params" do
|
59
|
-
it "finds all the records of the model class" do
|
60
|
-
default.block.call(name, {})
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
%w(create destroy edit index new show update).each do |action|
|
69
|
-
let(:params) { {'action' => action} }
|
70
|
-
|
71
|
-
context "with pagination" do
|
72
|
-
context "when there is an id in the params" do
|
73
|
-
before { params['id'] = 123 }
|
74
|
-
context "when action is #{action}" do
|
75
|
-
before { Model.stub! :paginate }
|
76
|
-
context "when :page exists in the request params" do
|
77
|
-
before { params[:page] = '5' }
|
78
|
-
it "paginates the records of the model class" do
|
79
|
-
Model.should_receive(:paginate)
|
80
|
-
default.block.call(name, {})
|
81
|
-
end
|
82
|
-
context "when :per_page exists in the request params" do
|
83
|
-
it "paginates using :page and :per_page from the params" do
|
84
|
-
params[:per_page] = '10'
|
85
|
-
Model.should_receive(:paginate).with(:page => '5', :per_page => '10')
|
86
|
-
default.block.call(name, {})
|
87
|
-
end
|
88
|
-
end
|
89
|
-
context "when :per_page does not exist in the request params" do
|
90
|
-
it "paginates using :page from the params" do
|
91
|
-
Model.should_receive(:paginate).with(:page => '5', :per_page => nil)
|
92
|
-
default.block.call(name, {})
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
context "when :page does not exist in the request params" do
|
97
|
-
it "finds all the records of the model class" do
|
98
|
-
Model.should_receive(:all)
|
99
|
-
default.block.call(name, {})
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
context "when there is not an id in the params" do
|
106
|
-
context "when action is #{action}" do
|
107
|
-
before { Model.stub! :paginate }
|
108
|
-
context "when :page exists in the request params" do
|
109
|
-
before { params[:page] = '5' }
|
110
|
-
it "paginates the records of the model class" do
|
111
|
-
Model.should_receive(:paginate)
|
112
|
-
default.block.call(name, {})
|
113
|
-
end
|
114
|
-
context "when :per_page exists in the request params" do
|
115
|
-
it "paginates using :page and :per_page from the params" do
|
116
|
-
params[:per_page] = '10'
|
117
|
-
Model.should_receive(:paginate).with(:page => '5', :per_page => '10')
|
118
|
-
default.block.call(name, {})
|
119
|
-
end
|
120
|
-
end
|
121
|
-
context "when :per_page does not exist in the request params" do
|
122
|
-
it "paginates using :page from the params" do
|
123
|
-
Model.should_receive(:paginate).with(:page => '5', :per_page => nil)
|
124
|
-
default.block.call(name, {})
|
125
|
-
end
|
126
|
-
end
|
127
|
-
end
|
128
|
-
context "when :page does not exist in the request params" do
|
129
|
-
it "finds all the records of the model class" do
|
130
|
-
Model.should_receive(:all)
|
131
|
-
default.block.call(name, {})
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
context "when the name given to assume is singular" do
|
141
|
-
let(:name) { :model }
|
142
|
-
context "in the index action" do
|
143
|
-
let(:params) { { 'action' => 'index' } }
|
144
|
-
context "and there is an id in params" do
|
145
|
-
before { params['id'] = 1 }
|
146
|
-
it "attempts to find a model instance based off the given name" do
|
147
|
-
Model.should_receive(:find).with(1).and_return(name)
|
148
|
-
default.block.call(name, {}).should eql(name)
|
149
|
-
end
|
150
|
-
end
|
151
|
-
context "and there is no id in params" do
|
152
|
-
before { params['model'] = :initializers }
|
153
|
-
it "creates a new model instance and passes in appropriate params" do
|
154
|
-
Model.should_receive(:new).with(:initializers).and_return(name)
|
155
|
-
default.block.call(name, {}).should eql(name)
|
156
|
-
end
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
context "in the show action" do
|
161
|
-
let(:params) { { 'id' => 42, 'action' => 'show' } }
|
162
|
-
|
163
|
-
it "attempts to find a model instance based off the given name" do
|
164
|
-
Model.should_receive(:find).with(42).and_return(name)
|
165
|
-
default.block.call(name, {}).should eql(:model)
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
context "in the edit action" do
|
170
|
-
let(:params) { { 'id' => 42, 'action' => 'edit' } }
|
171
|
-
|
172
|
-
it "attempts to find a model instance based off the given name" do
|
173
|
-
Model.should_receive(:find).with(42).and_return(name)
|
174
|
-
default.block.call(name, {}).should eql(:model)
|
175
|
-
end
|
176
|
-
end
|
177
|
-
|
178
|
-
context "in the update action" do
|
179
|
-
let(:params) do
|
180
|
-
{ 'id' => 42 }
|
181
|
-
end
|
182
|
-
|
183
|
-
it "attempts to find a model instance based off the given name" do
|
184
|
-
Model.should_receive(:find).with(42).and_return(name)
|
185
|
-
default.block.call(name, {}).should eql(:model)
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
context "in the destroy action" do
|
190
|
-
let(:params) { { 'id' => 42, 'action' => 'destroy' } }
|
191
|
-
|
192
|
-
it "attempts to find a model instance based off the given name" do
|
193
|
-
Model.should_receive(:find).with(42).and_return(name)
|
194
|
-
default.block.call(name, {}).should eql(:model)
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
|
-
context "in the create action" do
|
199
|
-
let(:params) do
|
200
|
-
{
|
201
|
-
'action' => 'create',
|
202
|
-
'model' => { 'age' => 27, 'color' => 'blue' }
|
203
|
-
}
|
204
|
-
end
|
205
|
-
|
206
|
-
context "the model instance" do
|
207
|
-
subject { default.block.call(name, {}) }
|
208
|
-
its(:age) { should be(27) }
|
209
|
-
its(:color) { should eql('blue') }
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
context "in the new action" do
|
214
|
-
let(:params) do
|
215
|
-
{
|
216
|
-
'action' => 'new',
|
217
|
-
'model' => { 'age' => 27, 'color' => 'blue' }
|
218
|
-
}
|
219
|
-
end
|
220
|
-
|
221
|
-
context "the model instance" do
|
222
|
-
subject { default.block.call(name, {}) }
|
223
|
-
its(:age) { should be(27) }
|
224
|
-
its(:color) { should eql('blue') }
|
225
|
-
end
|
226
|
-
end
|
227
|
-
end
|
228
|
-
end
|
229
|
-
|
230
|
-
context "#make?" do
|
231
|
-
let(:rr) { BasicAssumption::DefaultAssumption::RestfulRails.new }
|
232
|
-
subject { rr.send(:make?) }
|
233
|
-
before { rr.stub(:list? => false, :lookup? => false) }
|
234
|
-
context "when the action is not new or create" do
|
235
|
-
context "when #list? is true" do
|
236
|
-
before { rr.stub(:list? => true) }
|
237
|
-
context "when #lookup? is true" do
|
238
|
-
before { rr.stub(:lookup? => true) }
|
239
|
-
it { should be_false }
|
240
|
-
end
|
241
|
-
context "when #lookup? is false" do
|
242
|
-
it { should be_false }
|
243
|
-
end
|
244
|
-
end
|
245
|
-
context "when #list? is false" do
|
246
|
-
context "when #lookup? is true" do
|
247
|
-
before { rr.stub(:lookup? => true) }
|
248
|
-
it { should be_false }
|
249
|
-
end
|
250
|
-
context "when #lookup? is false" do
|
251
|
-
it { should be_true }
|
252
|
-
end
|
253
|
-
end
|
254
|
-
end
|
255
|
-
%w(new create).each do |action|
|
256
|
-
context "when the action is #{action}" do
|
257
|
-
before { rr.stub(:action => action) }
|
258
|
-
context "when #list? is true" do
|
259
|
-
before { rr.stub(:list? => true) }
|
260
|
-
context "when #lookup? is true" do
|
261
|
-
before { rr.stub(:lookup? => true) }
|
262
|
-
it { should be_true }
|
263
|
-
end
|
264
|
-
context "when #lookup? is false" do
|
265
|
-
it { should be_true }
|
266
|
-
end
|
267
|
-
end
|
268
|
-
context "when #list? is false" do
|
269
|
-
context "when #lookup? is true" do
|
270
|
-
before { rr.stub(:lookup? => true) }
|
271
|
-
it { should be_true }
|
272
|
-
end
|
273
|
-
context "when #lookup? is false" do
|
274
|
-
it { should be_true }
|
275
|
-
end
|
276
|
-
end
|
277
|
-
end
|
278
|
-
end
|
279
|
-
end
|
280
|
-
end
|