rory 0.9.1 → 0.9.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 +4 -4
- data/lib/rory/cli/generators/templates/app/.rspec +1 -0
- data/{spec/fixture_app/log/test.log → lib/rory/cli/generators/templates/app/config/initializers/.empty_directory} +0 -0
- data/lib/rory/cli/generators/templates/app/models/.empty_directory +0 -0
- data/lib/rory/version.rb +1 -1
- data/rory.gemspec +1 -1
- metadata +4 -44
- data/spec/fixture_app/config/application.rb +0 -6
- data/spec/fixture_app/config/routes.rb +0 -16
- data/spec/fixture_app/controllers/base_filtered_controller.rb +0 -9
- data/spec/fixture_app/controllers/filtered_controller.rb +0 -10
- data/spec/fixture_app/controllers/for_reals_controller.rb +0 -14
- data/spec/fixture_app/controllers/goose/lumpies_controller.rb +0 -12
- data/spec/fixture_app/controllers/goose/wombat/rabbits_controller.rb +0 -14
- data/spec/fixture_app/controllers/stub_controller.rb +0 -10
- data/spec/fixture_app/lib/dummy_middleware.rb +0 -13
- data/spec/fixture_app/views/for_reals/but_wait.html.erb +0 -1
- data/spec/fixture_app/views/for_reals/custom.html.erb +0 -1
- data/spec/fixture_app/views/for_reals/srsly.html.erb +0 -1
- data/spec/fixture_app/views/layouts/surround.html.erb +0 -1
- data/spec/fixture_app/views/test/a_link.html.erb +0 -1
- data/spec/fixture_app/views/test/double_nested.html.erb +0 -1
- data/spec/fixture_app/views/test/dynamic.html.erb +0 -1
- data/spec/fixture_app/views/test/letsgo.html.erb +0 -1
- data/spec/fixture_app/views/test/nested.html.erb +0 -1
- data/spec/fixture_app/views/test/static.html.erb +0 -1
- data/spec/lib/rory/application_spec.rb +0 -353
- data/spec/lib/rory/cli/generate_spec.rb +0 -16
- data/spec/lib/rory/cli/generators/application_spec.rb +0 -35
- data/spec/lib/rory/cli/root_spec.rb +0 -30
- data/spec/lib/rory/cli_spec.rb +0 -10
- data/spec/lib/rory/controller_spec.rb +0 -261
- data/spec/lib/rory/dispatcher_spec.rb +0 -187
- data/spec/lib/rory/initializers_spec.rb +0 -77
- data/spec/lib/rory/logger_spec.rb +0 -90
- data/spec/lib/rory/middleware_stack_spec.rb +0 -86
- data/spec/lib/rory/parameter_filter_spec.rb +0 -50
- data/spec/lib/rory/renderer/context_spec.rb +0 -41
- data/spec/lib/rory/renderer_spec.rb +0 -50
- data/spec/lib/rory/request_id_spec.rb +0 -56
- data/spec/lib/rory/request_parameter_logger_spec.rb +0 -100
- data/spec/lib/rory/request_spec.rb +0 -14
- data/spec/lib/rory/route_spec.rb +0 -15
- data/spec/lib/rory/support_spec.rb +0 -119
- data/spec/lib/rory_spec.rb +0 -15
- data/spec/requests/controller_spec.rb +0 -27
- data/spec/spec_helper.rb +0 -25
- data/spec/support/generation_helpers.rb +0 -19
- data/spec/support/shared_examples/path_generation.rb +0 -27
@@ -1,16 +0,0 @@
|
|
1
|
-
require "rory/cli"
|
2
|
-
|
3
|
-
RSpec.describe Rory::CLI::Generate do
|
4
|
-
describe "#app" do
|
5
|
-
it "starts Generators::Application" do
|
6
|
-
proxy = instance_double(Rory::CLI::Generators::Application)
|
7
|
-
allow(proxy).to receive(:parent_options=).with({})
|
8
|
-
allow(Rory::CLI::Generators::Application).to receive(:new).
|
9
|
-
with(["frog"], any_args).
|
10
|
-
and_return(proxy)
|
11
|
-
|
12
|
-
expect(proxy).to receive(:invoke_all)
|
13
|
-
subject.app("frog")
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
require "rory/cli"
|
2
|
-
|
3
|
-
describe Rory::CLI::Generators::Application do
|
4
|
-
let(:options) { {} }
|
5
|
-
let(:args) { ["an app"] }
|
6
|
-
subject { described_class.new(args, options, :destination_root => sandbox_directory) }
|
7
|
-
|
8
|
-
after(:each) do
|
9
|
-
FileUtils.rm_rf sandbox_directory
|
10
|
-
end
|
11
|
-
|
12
|
-
context "with default options" do
|
13
|
-
it "generates a new application directory with no optional files" do
|
14
|
-
capture_output { subject.invoke_all }
|
15
|
-
expect(sandbox_directory.join("an_app")).to be_a_directory
|
16
|
-
expect(sandbox_directory.join("an_app", "config.ru")).to be_a_file
|
17
|
-
expect(sandbox_directory.join("an_app", ".rspec")).not_to be_a_file
|
18
|
-
end
|
19
|
-
|
20
|
-
it "logs the output" do
|
21
|
-
result = capture_output { subject.invoke_all }
|
22
|
-
expect(result).to include("create an_app")
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
context "with default options" do
|
27
|
-
let(:options) { { rspec: true } }
|
28
|
-
|
29
|
-
it "adds rspec files" do
|
30
|
-
capture_output { subject.invoke_all }
|
31
|
-
expect(sandbox_directory.join("an_app", ".rspec")).to be_a_file
|
32
|
-
expect(sandbox_directory.join("an_app", "spec", "spec_helper.rb")).to be_a_file
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
require "rory/cli"
|
2
|
-
|
3
|
-
RSpec.describe Rory::CLI::Root do
|
4
|
-
describe "#version" do
|
5
|
-
it "says the current Rory VERSION constant" do
|
6
|
-
expect(subject).to receive(:say).with("rory #{Rory::VERSION}")
|
7
|
-
subject.version
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
describe "#generate" do
|
12
|
-
it "delegates to generate" do
|
13
|
-
expect(Rory::CLI::Root.subcommand_classes["generate"]).
|
14
|
-
to eq(Rory::CLI::Generate)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe "#new" do
|
19
|
-
it "starts Generators::Application" do
|
20
|
-
proxy = instance_double(Rory::CLI::Generators::Application)
|
21
|
-
allow(proxy).to receive(:parent_options=).with({})
|
22
|
-
allow(Rory::CLI::Generators::Application).to receive(:new).
|
23
|
-
with(["frog"], any_args).
|
24
|
-
and_return(proxy)
|
25
|
-
|
26
|
-
expect(proxy).to receive(:invoke_all)
|
27
|
-
subject.new("frog")
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
data/spec/lib/rory/cli_spec.rb
DELETED
@@ -1,261 +0,0 @@
|
|
1
|
-
describe Rory::Controller do
|
2
|
-
subject { Rory::Controller.new(@request, @routing) }
|
3
|
-
|
4
|
-
before :each do
|
5
|
-
@routing = {
|
6
|
-
:route => Rory::Route.new('', :to => 'test#letsgo')
|
7
|
-
}
|
8
|
-
|
9
|
-
@request = double('Rack::Request', {
|
10
|
-
:params => { 'violet' => 'invisibility', :dash => 'superspeed' },
|
11
|
-
:script_name => 'script_root'
|
12
|
-
})
|
13
|
-
end
|
14
|
-
|
15
|
-
it_has_behavior 'path_generation' do
|
16
|
-
let(:path_generator) {
|
17
|
-
Rory::Controller.new(@request, @routing, Fixture::Application)
|
18
|
-
}
|
19
|
-
end
|
20
|
-
|
21
|
-
describe '#layout' do
|
22
|
-
it 'defaults to nil' do
|
23
|
-
expect(subject.layout).to be_nil
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe '#params' do
|
28
|
-
it 'returns params from request, converted for indifferent key access' do
|
29
|
-
expect(subject.params).to eq({
|
30
|
-
'violet' => 'invisibility',
|
31
|
-
'dash' => 'superspeed',
|
32
|
-
:violet => 'invisibility',
|
33
|
-
:dash => 'superspeed'
|
34
|
-
})
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
describe "#redirect" do
|
39
|
-
it "delegates to dispatcher from request" do
|
40
|
-
@routing[:dispatcher] = dispatcher = double
|
41
|
-
expect(dispatcher).to receive(:redirect).with(:whatever)
|
42
|
-
subject.redirect(:whatever)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
describe "#render_not_found" do
|
47
|
-
it "delegates to dispatcher from request" do
|
48
|
-
@routing[:dispatcher] = dispatcher = double
|
49
|
-
expect(dispatcher).to receive(:render_not_found)
|
50
|
-
subject.render_not_found
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe "#base_path" do
|
55
|
-
it "returns script_name from request" do
|
56
|
-
expect(subject.base_path).to eq 'script_root'
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
describe "#present" do
|
61
|
-
context "with filters" do
|
62
|
-
subject { FilteredController.new(@request, @routing) }
|
63
|
-
|
64
|
-
it "calls filters and action from route if exists on controller" do
|
65
|
-
[:pickle_something, :make_it_tasty, :letsgo, :rub_tummy, :sleep, :render].each do |m|
|
66
|
-
expect(subject).to receive(m).ordered
|
67
|
-
end
|
68
|
-
subject.present
|
69
|
-
end
|
70
|
-
|
71
|
-
context "on sub-subclass" do
|
72
|
-
let(:grandchild) { Class.new(FilteredController) }
|
73
|
-
let(:greatgrandchild) { Class.new(grandchild) }
|
74
|
-
subject { greatgrandchild.new(@request, @routing) }
|
75
|
-
|
76
|
-
it "assembles list of all filter actions from ancestry" do
|
77
|
-
grandchild.before_action :do_a_jig
|
78
|
-
greatgrandchild.before_action :take_a_deep_breath
|
79
|
-
|
80
|
-
[:pickle_something, :make_it_tasty, :do_a_jig, :take_a_deep_breath, :letsgo, :rub_tummy, :sleep, :render].each do |m|
|
81
|
-
expect(subject).to receive(m).ordered
|
82
|
-
end
|
83
|
-
subject.present
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
it "short circuits if a before_action generates a response" do
|
88
|
-
def subject.pickle_something
|
89
|
-
@response = 'stuff'
|
90
|
-
end
|
91
|
-
[:make_it_tasty, :letsgo, :rub_tummy, :sleep, :render].each do |m|
|
92
|
-
expect(subject).to receive(m).never
|
93
|
-
end
|
94
|
-
subject.present
|
95
|
-
end
|
96
|
-
|
97
|
-
it "does not short circuit after_actions if action generates response" do
|
98
|
-
def subject.letsgo
|
99
|
-
@response = 'stuff'
|
100
|
-
end
|
101
|
-
expect(subject).to receive(:pickle_something).ordered
|
102
|
-
expect(subject).to receive(:make_it_tasty).ordered
|
103
|
-
expect(subject).to receive(:letsgo).ordered.and_call_original
|
104
|
-
expect(subject).to receive(:rub_tummy).ordered
|
105
|
-
expect(subject).to receive(:sleep).ordered
|
106
|
-
expect(subject).to receive(:render).never
|
107
|
-
subject.present
|
108
|
-
end
|
109
|
-
|
110
|
-
it "doesn't try to call action from route if nonexistent on controller" do
|
111
|
-
allow(@routing[:route]).to receive(:action).and_return('no worries')
|
112
|
-
[:pickle_something, :make_it_tasty, :rub_tummy, :sleep, :render].each do |m|
|
113
|
-
expect(subject).to receive(m).ordered
|
114
|
-
end
|
115
|
-
expect { subject.present }.not_to raise_error
|
116
|
-
end
|
117
|
-
|
118
|
-
it "filters before and after actions on :only and :except" do
|
119
|
-
@routing[:route] = Rory::Route.new('', :to => 'test#eat')
|
120
|
-
expect(subject).to receive(:make_it_tasty).ordered
|
121
|
-
expect(subject).to receive(:make_it_nutritious).ordered
|
122
|
-
expect(subject).to receive(:eat).ordered
|
123
|
-
expect(subject).to receive(:rub_tummy).ordered
|
124
|
-
expect(subject).to receive(:smile).ordered
|
125
|
-
expect(subject).to receive(:sleep).never
|
126
|
-
expect(subject).to receive(:render).ordered
|
127
|
-
subject.present
|
128
|
-
end
|
129
|
-
|
130
|
-
it "filters before and after actions on :if and :unless" do
|
131
|
-
@routing[:route] = Rory::Route.new('', :to => 'test#eat')
|
132
|
-
@request = double('Rack::Request', {
|
133
|
-
:params => { 'horses' => 'missing' },
|
134
|
-
:script_name => 'script_root'
|
135
|
-
})
|
136
|
-
expect(subject).to receive(:make_it_tasty).never
|
137
|
-
expect(subject).to receive(:make_it_nutritious).ordered
|
138
|
-
expect(subject).to receive(:eat).ordered
|
139
|
-
expect(subject).to receive(:rub_tummy).never
|
140
|
-
expect(subject).to receive(:smile).ordered
|
141
|
-
expect(subject).to receive(:sleep).never
|
142
|
-
expect(subject).to receive(:render).ordered
|
143
|
-
subject.present
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
it "just returns a response if @response exists" do
|
148
|
-
subject.instance_variable_set(:@response, 'Forced response')
|
149
|
-
expect(subject.present).to eq('Forced response')
|
150
|
-
end
|
151
|
-
|
152
|
-
it "sends a previously set @body to render" do
|
153
|
-
subject.instance_variable_set(:@body, 'Forced body')
|
154
|
-
allow(subject).to receive(:render).with(:body => 'Forced body').and_return("Forced response")
|
155
|
-
expect(subject.present).to eq('Forced response')
|
156
|
-
end
|
157
|
-
|
158
|
-
it "returns the result of render" do
|
159
|
-
allow(subject).to receive(:render).with(:body => nil).and_return("The response")
|
160
|
-
expect(subject.present).to eq('The response')
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
describe "#render" do
|
165
|
-
it "returns the result of #generate_body_for_render as a rack response" do
|
166
|
-
allow(subject).to receive(:default_content_type).and_return("a prison")
|
167
|
-
allow(subject).to receive(:generate_for_render).and_return("Valoop!")
|
168
|
-
expect(subject.render).to eq([
|
169
|
-
200,
|
170
|
-
{'Content-type' => 'a prison', 'charset' => 'UTF-8'},
|
171
|
-
["Valoop!"]
|
172
|
-
])
|
173
|
-
end
|
174
|
-
|
175
|
-
it "returns given body as a rack response" do
|
176
|
-
allow(subject).to receive(:default_content_type).and_return("snooj/woz")
|
177
|
-
expect(subject.render(:body => 'Forced body')).to eq([
|
178
|
-
200,
|
179
|
-
{'Content-type' => 'snooj/woz', 'charset' => 'UTF-8'},
|
180
|
-
["Forced body"]
|
181
|
-
])
|
182
|
-
end
|
183
|
-
end
|
184
|
-
|
185
|
-
describe "#json_requested?" do
|
186
|
-
it "delegates to dispatcher" do
|
187
|
-
allow(subject).to receive(:dispatcher).and_return(double(:json_requested? => :snakes))
|
188
|
-
expect(subject.json_requested?).to eq(:snakes)
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
describe "#generate_for_render" do
|
193
|
-
it "renders and returns the default template if not json" do
|
194
|
-
allow(subject).to receive(:generate_body_from_template).with("test/letsgo", {}).and_return("Whee")
|
195
|
-
expect(subject.generate_for_render).to eq("Whee")
|
196
|
-
end
|
197
|
-
|
198
|
-
it "renders and returns the given template if not json" do
|
199
|
-
allow(subject).to receive(:generate_body_from_template).with("engines", {}).and_return("Oh dear")
|
200
|
-
expect(subject.generate_for_render(:template => 'engines')).to eq("Oh dear")
|
201
|
-
end
|
202
|
-
|
203
|
-
it "returns json version of given json object if json" do
|
204
|
-
allow(subject).to receive(:generate_json_from_object).with(:an_object, {}).and_return("Oh dear")
|
205
|
-
expect(subject.generate_for_render(:json => :an_object)).to eq("Oh dear")
|
206
|
-
end
|
207
|
-
end
|
208
|
-
|
209
|
-
describe "#generate_json_from_object" do
|
210
|
-
it "encodes given object as json" do
|
211
|
-
allow(Rory::Support).to receive(:encode_as_json).with(:foo).and_return(:encoded_foo)
|
212
|
-
expect(subject.generate_json_from_object(:foo)).to eq(:encoded_foo)
|
213
|
-
end
|
214
|
-
end
|
215
|
-
|
216
|
-
describe "#generate_body_from_template" do
|
217
|
-
it "returns rendered template with given name" do
|
218
|
-
expect(subject.generate_body_from_template('test/letsgo', :app => Fixture::Application)).to eq("Let's go content")
|
219
|
-
end
|
220
|
-
|
221
|
-
it "returns renderer output" do
|
222
|
-
allow(Rory::Renderer).to receive(:new).
|
223
|
-
with('not/real', subject.default_renderer_options).
|
224
|
-
and_return(double('Renderer', :render => 'Here ya go'))
|
225
|
-
expect(subject.generate_body_from_template('not/real')).to eq('Here ya go')
|
226
|
-
end
|
227
|
-
|
228
|
-
it "passes layout, exposed locals, and app to renderer" do
|
229
|
-
subject = Rory::Controller.new(@request, @routing, :scooby)
|
230
|
-
subject.expose(:a => 1)
|
231
|
-
allow(subject).to receive(:layout).and_return('pretend')
|
232
|
-
renderer_options = {
|
233
|
-
:layout => 'pretend',
|
234
|
-
:locals => { :a => 1 },
|
235
|
-
:app => :scooby,
|
236
|
-
:base_path => 'script_root'
|
237
|
-
}
|
238
|
-
allow(Rory::Renderer).to receive(:new).
|
239
|
-
with('also/fake', renderer_options).
|
240
|
-
and_return(double('Renderer', :render => 'Scamazing!'))
|
241
|
-
expect(subject.generate_body_from_template('also/fake')).to eq('Scamazing!')
|
242
|
-
end
|
243
|
-
end
|
244
|
-
|
245
|
-
describe "#default_content_type" do
|
246
|
-
it "returns 'text/html' if not json" do
|
247
|
-
allow(subject).to receive(:json_requested?).and_return(false)
|
248
|
-
expect(subject.default_content_type).to eq('text/html')
|
249
|
-
end
|
250
|
-
|
251
|
-
it "returns 'application/json' if json requested" do
|
252
|
-
allow(subject).to receive(:json_requested?).and_return(true)
|
253
|
-
expect(subject.default_content_type).to eq('application/json')
|
254
|
-
end
|
255
|
-
|
256
|
-
it "returns 'application/json' if options has :json key" do
|
257
|
-
allow(subject).to receive(:json_requested?).and_return(false)
|
258
|
-
expect(subject.default_content_type(:json => 'woo')).to eq('application/json')
|
259
|
-
end
|
260
|
-
end
|
261
|
-
end
|
@@ -1,187 +0,0 @@
|
|
1
|
-
describe Rory::Dispatcher do
|
2
|
-
subject { Rory::Dispatcher.new(request, Fixture::Application) }
|
3
|
-
let(:request) { {} }
|
4
|
-
|
5
|
-
describe "#extension" do
|
6
|
-
it "returns the extension of the path requested" do
|
7
|
-
allow(subject).to receive(:full_path).and_return("whatever/nerds.pickles")
|
8
|
-
expect(subject.extension).to eq("pickles")
|
9
|
-
end
|
10
|
-
|
11
|
-
it "returns nil if no extension" do
|
12
|
-
allow(subject).to receive(:full_path).and_return("whatever/nerds")
|
13
|
-
expect(subject.extension).to be_nil
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
describe "#path_without_extension" do
|
18
|
-
it "returns path with extension removed" do
|
19
|
-
allow(subject).to receive(:full_path).and_return("whatever/nerds.pickles")
|
20
|
-
expect(subject.path_without_extension).to eq("whatever/nerds")
|
21
|
-
end
|
22
|
-
|
23
|
-
it "returns path unchanged if no extension" do
|
24
|
-
allow(subject).to receive(:full_path).and_return("whatever/nerds")
|
25
|
-
expect(subject.path_without_extension).to eq("whatever/nerds")
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe "#json_requested?" do
|
30
|
-
it "returns true if extension is 'json'" do
|
31
|
-
allow(subject).to receive(:extension).and_return("json")
|
32
|
-
expect(subject.json_requested?).to be_truthy
|
33
|
-
end
|
34
|
-
|
35
|
-
it "returns false if extension is not 'json'" do
|
36
|
-
allow(subject).to receive(:extension).and_return("pachyderms")
|
37
|
-
expect(subject.json_requested?).to be_falsey
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe "#redirect" do
|
42
|
-
it "redirects to given path if path has scheme" do
|
43
|
-
redirection = subject.redirect('http://example.example')
|
44
|
-
expect(redirection[0..1]).to eq([
|
45
|
-
302, {'Content-type' => 'text/html', 'Location'=> 'http://example.example' }
|
46
|
-
])
|
47
|
-
end
|
48
|
-
|
49
|
-
it "adds request host and scheme and redirects if path has no scheme" do
|
50
|
-
allow(request).to receive_messages('scheme' => 'happy', 'host_with_port' => 'somewhere.yay')
|
51
|
-
redirection = subject.redirect('/example')
|
52
|
-
expect(redirection[0..1]).to eq([
|
53
|
-
302, {'Content-type' => 'text/html', 'Location'=> 'happy://somewhere.yay/example' }
|
54
|
-
])
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
describe ".rack_app" do
|
59
|
-
it "returns a callable object that dispatches to a new dispatcher" do
|
60
|
-
allow(Rack::Request).to receive(:new).with(:env).and_return(:a_request)
|
61
|
-
allow(described_class).to receive(:new).with(:a_request, :the_app).and_return(subject)
|
62
|
-
allow(subject).to receive(:dispatch).and_return(:the_dispatch)
|
63
|
-
expect(described_class.rack_app(:the_app).call(:env)).to eq(:the_dispatch)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
describe "#dispatch" do
|
68
|
-
let(:request) { { :whatever => :yay } }
|
69
|
-
before(:each) do
|
70
|
-
allow(request).to receive_messages(:path_info => '/', :request_method => 'GET', :params => {})
|
71
|
-
end
|
72
|
-
|
73
|
-
it "renders a 404 if the requested path is invalid" do
|
74
|
-
allow(subject).to receive(:get_route).and_return(nil)
|
75
|
-
expect(subject.dispatch[0..1]).to eq([404, {"Content-type"=>"text/html"}])
|
76
|
-
end
|
77
|
-
|
78
|
-
it "instantiates a controller with the parsed request and calls present" do
|
79
|
-
route = Rory::Route.new('', :to => 'stub#index')
|
80
|
-
allow(subject).to receive(:get_route).and_return(route)
|
81
|
-
expect(subject.dispatch).to eq({
|
82
|
-
:whatever => :yay,
|
83
|
-
:present_called => true # see StubController in /spec/fixture_app
|
84
|
-
})
|
85
|
-
end
|
86
|
-
|
87
|
-
it "dispatches properly to a scoped controller" do
|
88
|
-
route = Rory::Route.new('', :to => 'lumpies#index', :module => 'goose')
|
89
|
-
allow(subject).to receive(:get_route).and_return(route)
|
90
|
-
expect(subject.dispatch).to eq({
|
91
|
-
:whatever => :yay,
|
92
|
-
:in_scoped_controller => true # see Goose::LumpiesController in /spec/fixture_app
|
93
|
-
})
|
94
|
-
end
|
95
|
-
|
96
|
-
it "dispatches properly to a nested scoped controller" do
|
97
|
-
route = Rory::Route.new('', :to => 'rabbits#index', :module => 'goose/wombat')
|
98
|
-
allow(subject).to receive(:get_route).and_return(route)
|
99
|
-
expect(subject.dispatch).to eq({
|
100
|
-
:whatever => :yay,
|
101
|
-
:in_scoped_controller => true # see Goose::Wombat::RabbitsController in /spec/fixture_app
|
102
|
-
})
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
describe "#route" do
|
107
|
-
before(:each) do
|
108
|
-
allow(request).to receive_messages(:params => {})
|
109
|
-
end
|
110
|
-
|
111
|
-
it "returns route from request if already set" do
|
112
|
-
subject.instance_variable_set(:@routing, { :route => 'snaky pigeons' })
|
113
|
-
expect(subject.route).to eq('snaky pigeons')
|
114
|
-
end
|
115
|
-
|
116
|
-
it "matches the path from the request to the routes table" do
|
117
|
-
allow(request).to receive_messages(:path_info => '/foo/3/bar', :request_method => 'GET')
|
118
|
-
expect(subject.route).to eq Rory::Route.new('/foo/:id/bar', {
|
119
|
-
:to => 'foo#bar',
|
120
|
-
:methods => [:get, :post]
|
121
|
-
})
|
122
|
-
end
|
123
|
-
|
124
|
-
it "ignores extensions when matching path to routes table" do
|
125
|
-
allow(request).to receive_messages(:path_info => '/foo/3/bar.csv', :request_method => 'GET')
|
126
|
-
expect(subject.extension).to eq('csv')
|
127
|
-
expect(subject.route).to eq Rory::Route.new('/foo/:id/bar', {
|
128
|
-
:to => 'foo#bar',
|
129
|
-
:methods => [:get, :post]
|
130
|
-
})
|
131
|
-
end
|
132
|
-
|
133
|
-
it "uses override method from params if exists" do
|
134
|
-
allow(request).to receive_messages(:path_info => '/', :params => { '_method' => 'delete' }, :request_method => 'PUT')
|
135
|
-
expect(subject.route).to eq Rory::Route.new('/', {
|
136
|
-
:to => 'root#no_vegetable',
|
137
|
-
:methods => [:delete]
|
138
|
-
})
|
139
|
-
end
|
140
|
-
|
141
|
-
it "deletes override method from params" do
|
142
|
-
allow(request).to receive_messages(:path_info => '/', :params => { '_method' => 'delete', 'goats' => 'not_sheep' }, :request_method => 'PUT')
|
143
|
-
subject.route
|
144
|
-
expect(request.params).to eq('goats' => 'not_sheep')
|
145
|
-
end
|
146
|
-
|
147
|
-
it "works with empty path" do
|
148
|
-
allow(request).to receive_messages(:path_info => '', :request_method => 'GET')
|
149
|
-
expect(subject.route).to eq Rory::Route.new('/', {
|
150
|
-
:to => 'root#vegetable',
|
151
|
-
:methods => [:get]
|
152
|
-
})
|
153
|
-
end
|
154
|
-
|
155
|
-
it "works with root url represented by slash" do
|
156
|
-
allow(request).to receive_messages(:path_info => '/', :request_method => 'GET')
|
157
|
-
expect(subject.route).to eq Rory::Route.new('/', {
|
158
|
-
:to => 'root#vegetable',
|
159
|
-
:methods => [:get]
|
160
|
-
})
|
161
|
-
end
|
162
|
-
|
163
|
-
it "returns nil if no route found" do
|
164
|
-
allow(request).to receive_messages(:path_info => '/umbrellas', :request_method => 'GET')
|
165
|
-
expect(subject.route).to be_nil
|
166
|
-
end
|
167
|
-
|
168
|
-
it "returns nil if no context" do
|
169
|
-
subject = Rory::Dispatcher.new(request)
|
170
|
-
expect(subject.route).to be_nil
|
171
|
-
end
|
172
|
-
|
173
|
-
it "returns nil if route found but method is not allowed" do
|
174
|
-
allow(request).to receive_messages(:path_info => '/foo', :request_method => 'GET')
|
175
|
-
expect(subject.route).to be_nil
|
176
|
-
end
|
177
|
-
|
178
|
-
it "assigns named matches to params hash" do
|
179
|
-
allow(request).to receive_messages(:path_info => '/this/some-thing_or-other/is/wicked', :request_method => 'GET')
|
180
|
-
expect(subject.route).to eq Rory::Route.new('/this/:path/is/:very_awesome', {
|
181
|
-
:to => 'awesome#rad'
|
182
|
-
})
|
183
|
-
|
184
|
-
expect(request.params).to eq({:path=>"some-thing_or-other", :very_awesome=>"wicked"})
|
185
|
-
end
|
186
|
-
end
|
187
|
-
end
|