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,100 +0,0 @@
|
|
1
|
-
describe Rory::RequestParameterLogger do
|
2
|
-
|
3
|
-
let(:logger) { double(:write) }
|
4
|
-
let(:app) { double(:call) }
|
5
|
-
subject { described_class.new(app, logger, :filters => :filters) }
|
6
|
-
|
7
|
-
describe '#initialize' do
|
8
|
-
it 'returns a new RequestParameterLogger' do
|
9
|
-
expect(subject).to be_an_instance_of(Rory::RequestParameterLogger)
|
10
|
-
end
|
11
|
-
|
12
|
-
it 'returns a new RequestParameterLogger with parameters' do
|
13
|
-
expect(subject.instance_variable_get(:@app)).to eq(app)
|
14
|
-
expect(subject.instance_variable_get(:@logger)).to eq(logger)
|
15
|
-
expect(subject.instance_variable_get(:@filters)).to eq(:filters)
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'defaults filters to empty array' do
|
19
|
-
no_filter_logger = described_class.new(app, logger)
|
20
|
-
expect(no_filter_logger.instance_variable_get(:@filters)).to eq([])
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
describe '#log_request' do
|
25
|
-
|
26
|
-
context 'when logger responds to write' do
|
27
|
-
it 'writes the request to the logger' do
|
28
|
-
allow(subject).to receive(:request_signature).and_return('request_signature')
|
29
|
-
allow(subject).to receive(:filtered_params).and_return('filtered_params')
|
30
|
-
expect(logger).to receive(:write).exactly(2).times
|
31
|
-
subject.send(:log_request)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context 'when logger does not respond to write' do
|
36
|
-
let(:logger) { double(:info) }
|
37
|
-
it 'writes the request to the logger' do
|
38
|
-
allow(subject).to receive(:request_signature).and_return('request_signature')
|
39
|
-
allow(subject).to receive(:filtered_params).and_return('filtered_params')
|
40
|
-
expect(logger).to receive(:info).exactly(2).times
|
41
|
-
subject.send(:log_request)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
describe '#logger' do
|
47
|
-
it 'returns @logger' do
|
48
|
-
expect(subject.send(:logger)).to eq(logger)
|
49
|
-
end
|
50
|
-
|
51
|
-
it 'returns rack.errors ' do
|
52
|
-
subject = described_class.new(:app)
|
53
|
-
subject.instance_variable_set(:@env, {'rack.errors' => 'cocoa'})
|
54
|
-
expect(subject.send(:logger)).to eq('cocoa')
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
describe '#filtered_params' do
|
59
|
-
it 'filters the params' do
|
60
|
-
expect(Rory::ParameterFilter).to receive(:new).and_return(double(:filter => nil))
|
61
|
-
expect(subject).to receive(:unfiltered_params)
|
62
|
-
subject.send(:filtered_params)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
describe '#unfiltered_params' do
|
67
|
-
it 'returns unfiltered params' do
|
68
|
-
expect(Rack::Request).to receive(:new).and_return(double(:params => nil))
|
69
|
-
subject.send(:unfiltered_params)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
describe '#request_signature' do
|
74
|
-
it 'returns a request signature formatted string' do
|
75
|
-
env = {
|
76
|
-
'REQUEST_METHOD' => "POST",
|
77
|
-
'PATH_INFO' => "/mushy_mushy",
|
78
|
-
'REMOTE_ADDR' => "127.0.0.1"
|
79
|
-
}
|
80
|
-
|
81
|
-
allow(Time).to receive(:now).and_return("2015-06-08 15:16:42 -0700")
|
82
|
-
subject.instance_variable_set(:@env, env)
|
83
|
-
expect(subject.send(:request_signature)).to eq('Started POST "/mushy_mushy" for 127.0.0.1 at 2015-06-08 15:16:42 -0700')
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
|
88
|
-
describe '#call' do
|
89
|
-
it 'writes the request and parameters to the log file' do
|
90
|
-
env = {
|
91
|
-
'rack.input' => double(:rewind => nil)
|
92
|
-
}
|
93
|
-
expect(app).to receive(:call).with(env)
|
94
|
-
expect(subject).to receive(:log_request)
|
95
|
-
|
96
|
-
subject.call(env)
|
97
|
-
expect(subject.instance_variable_get(:@env)).to eq(env)
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
RSpec.describe Rory::Request do
|
2
|
-
describe "#uuid" do
|
3
|
-
it "returns the value set by env['rory.request_id']" do
|
4
|
-
env = { "rory.request_id" => "uuid-from_rory_request" }
|
5
|
-
expect(described_class.new(env).uuid).to eq "uuid-from_rory_request"
|
6
|
-
end
|
7
|
-
|
8
|
-
context "when no key exists" do
|
9
|
-
it "returns nil" do
|
10
|
-
expect(described_class.new({}).uuid).to eq nil
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
data/spec/lib/rory/route_spec.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
describe Rory::Route do
|
2
|
-
describe '#name' do
|
3
|
-
it 'returns concatenated controller and action' do
|
4
|
-
route = described_class.new('/whatever', :to => 'pigeons#index')
|
5
|
-
expect(route.name).to eq 'pigeons_index'
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
describe "#path_params" do
|
10
|
-
it "extracts params from path into hash" do
|
11
|
-
route = described_class.new('/spoons/:spoon_id/forks/:fork_id', :to => 'cutlery#index')
|
12
|
-
expect(route.path_params('spoons/4/forks/yay')).to eq({ :spoon_id => "4", :fork_id => "yay" })
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,119 +0,0 @@
|
|
1
|
-
describe Rory::Support do
|
2
|
-
describe ".camelize" do
|
3
|
-
it "camelizes given snake-case string" do
|
4
|
-
expect(Rory::Support.camelize('water_under_bridge')).to eq('WaterUnderBridge')
|
5
|
-
end
|
6
|
-
|
7
|
-
it "leaves already camel-cased string alone" do
|
8
|
-
expect(Rory::Support.camelize('OliverDrankGasoline')).to eq('OliverDrankGasoline')
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
describe '.require_all_files_in_directory' do
|
13
|
-
it 'requires all files from given path' do
|
14
|
-
allow(Dir).to receive(:[]).with(Pathname.new('spinach').join('**', '*.rb')).
|
15
|
-
and_return(["pumpkins", "some_guy_dressed_as_liberace"])
|
16
|
-
expect(Rory::Support).to receive(:require).with("pumpkins")
|
17
|
-
expect(Rory::Support).to receive(:require).with("some_guy_dressed_as_liberace")
|
18
|
-
Rory::Support.require_all_files_in_directory('spinach')
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe '.constantize' do
|
23
|
-
before(:all) do
|
24
|
-
Object.const_set('OrigamiDeliveryMan', Module.new)
|
25
|
-
OrigamiDeliveryMan.const_set('UnderWhere', Module.new)
|
26
|
-
OrigamiDeliveryMan::UnderWhere.const_set('Skippy', Module.new)
|
27
|
-
end
|
28
|
-
|
29
|
-
after(:all) do
|
30
|
-
Object.send(:remove_const, :OrigamiDeliveryMan)
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'returns constant from camelized name' do
|
34
|
-
expect(Rory::Support.constantize('OrigamiDeliveryMan')).
|
35
|
-
to eq(OrigamiDeliveryMan)
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'returns constant from snake-case string' do
|
39
|
-
expect(Rory::Support.constantize('origami_delivery_man')).
|
40
|
-
to eq(OrigamiDeliveryMan)
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'returns namespaced constant' do
|
44
|
-
expect(Rory::Support.constantize(
|
45
|
-
'origami_delivery_man/under_where/skippy'
|
46
|
-
)).to eq(OrigamiDeliveryMan::UnderWhere::Skippy)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
describe '.tokenize' do
|
51
|
-
it 'creates snake_case version of string' do
|
52
|
-
expect(described_class.tokenize('Albus Dumbledore & his_friend')).to eq('albus_dumbledore_and_his_friend')
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'uncamelizes' do
|
56
|
-
expect(described_class.tokenize('thisStrangeJavalikeWord')).to eq('this_strange_javalike_word')
|
57
|
-
end
|
58
|
-
|
59
|
-
it 'returns nil if given nil' do
|
60
|
-
expect(described_class.tokenize(nil)).to be_nil
|
61
|
-
end
|
62
|
-
|
63
|
-
it 'also handles symbols' do
|
64
|
-
expect(described_class.tokenize(:yourFaceIsNice)).to eq('your_face_is_nice')
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
describe ".try_to_hash" do
|
69
|
-
it "returns given object if it does not respond to #to_hash" do
|
70
|
-
object = double
|
71
|
-
expect(described_class.try_to_hash(object)).to eq(object)
|
72
|
-
end
|
73
|
-
|
74
|
-
it "calls to_hash first if object responds to it" do
|
75
|
-
object = double(:to_hash => { 'april' => 'friday' })
|
76
|
-
expect(described_class.try_to_hash(object)).to eq({ 'april' => 'friday' })
|
77
|
-
end
|
78
|
-
|
79
|
-
it "converts each member of an array" do
|
80
|
-
object = [
|
81
|
-
double(:to_hash => :smurf),
|
82
|
-
double(:to_hash => :nerf)
|
83
|
-
]
|
84
|
-
expect(described_class.try_to_hash(object)).to eq([:smurf, :nerf])
|
85
|
-
end
|
86
|
-
|
87
|
-
it "converts deeply" do
|
88
|
-
object = [
|
89
|
-
{
|
90
|
-
:perf => double(:to_hash => :smurf),
|
91
|
-
:kerf => [
|
92
|
-
double(:to_hash => :plurf),
|
93
|
-
'yurf'
|
94
|
-
],
|
95
|
-
:erf => { :burf => double(:to_hash => :wurf) }
|
96
|
-
},
|
97
|
-
double(:to_hash => :nerf)
|
98
|
-
]
|
99
|
-
expect(described_class.try_to_hash(object)).to eq(
|
100
|
-
[
|
101
|
-
{
|
102
|
-
:perf => :smurf,
|
103
|
-
:kerf => [ :plurf, 'yurf' ],
|
104
|
-
:erf => { :burf => :wurf }
|
105
|
-
},
|
106
|
-
:nerf
|
107
|
-
]
|
108
|
-
)
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
describe ".encode_as_json" do
|
113
|
-
it "calls #try_to_hash on object then jsonifies" do
|
114
|
-
foo_hashed = double(:to_json => :jsonified)
|
115
|
-
allow(described_class).to receive(:try_to_hash).with(:foo).and_return(foo_hashed)
|
116
|
-
expect(described_class.encode_as_json(:foo)).to eq(:jsonified)
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
data/spec/lib/rory_spec.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
describe Rory do
|
2
|
-
let!(:new_app) { Class.new(Rory::Application) }
|
3
|
-
|
4
|
-
describe '.application' do
|
5
|
-
it 'is by default set to the Rory::Application instance' do
|
6
|
-
expect(Rory.application).to eq(new_app.instance)
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
describe '.root' do
|
11
|
-
it 'returns root of application' do
|
12
|
-
expect(Rory.root).to eq(new_app.root)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
describe "Controller" do
|
2
|
-
describe "presentation", :type => :feature do
|
3
|
-
it 'renders default action template' do
|
4
|
-
visit '/for_reals/pickles'
|
5
|
-
|
6
|
-
expect(page).to have_text("You've done it again, pickles!")
|
7
|
-
expect(page.status_code).to eq 200
|
8
|
-
expect(page.response_headers['Content-Type']).to eq('text/html')
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'renders json' do
|
12
|
-
visit '/for_reals/switching.json'
|
13
|
-
|
14
|
-
expect(page).to have_text({ :a => 1 }.to_json)
|
15
|
-
expect(page.status_code).to eq 200
|
16
|
-
expect(page.response_headers['Content-Type']).to eq('application/json')
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'renders custom template' do
|
20
|
-
visit '/for_reals/switching'
|
21
|
-
|
22
|
-
expect(page).to have_text("Oh, a secret!")
|
23
|
-
expect(page.status_code).to eq 404
|
24
|
-
expect(page.response_headers['Content-Type']).to eq('text/html')
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'simplecov'
|
2
|
-
SimpleCov.start
|
3
|
-
|
4
|
-
ENV['RORY_ENV'] = 'test'
|
5
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
6
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
7
|
-
require 'rspec'
|
8
|
-
require 'capybara/rspec'
|
9
|
-
require 'rory'
|
10
|
-
require 'rack'
|
11
|
-
|
12
|
-
# Requires supporting files with custom matchers and macros, etc,
|
13
|
-
# in ./support/ and its subdirectories.
|
14
|
-
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
15
|
-
|
16
|
-
require_relative 'fixture_app/config/application'
|
17
|
-
Fixture::Application.root = File.join(File.dirname(__FILE__), 'fixture_app')
|
18
|
-
Fixture::Application.require_all_files
|
19
|
-
|
20
|
-
Capybara.app = Fixture::Application
|
21
|
-
|
22
|
-
RSpec.configure do |config|
|
23
|
-
config.order = "random"
|
24
|
-
config.include GenerationHelpers
|
25
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module GenerationHelpers
|
2
|
-
def sandbox_directory
|
3
|
-
Pathname.new(
|
4
|
-
File.join(File.dirname(__FILE__), "..", "sandbox")
|
5
|
-
)
|
6
|
-
end
|
7
|
-
|
8
|
-
def capture_output
|
9
|
-
begin
|
10
|
-
$stdout = StringIO.new
|
11
|
-
yield
|
12
|
-
result = $stdout.string
|
13
|
-
ensure
|
14
|
-
$stdout = STDOUT
|
15
|
-
end
|
16
|
-
|
17
|
-
result
|
18
|
-
end
|
19
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
RSpec.configure do |c|
|
2
|
-
c.alias_it_should_behave_like_to :it_has_behavior, 'has behavior:'
|
3
|
-
end
|
4
|
-
|
5
|
-
shared_examples 'path_generation' do
|
6
|
-
describe '#path_to' do
|
7
|
-
it 'returns mask from route with given name prepended with root slash' do
|
8
|
-
allow(path_generator).to receive(:base_path).and_return(nil)
|
9
|
-
expect(path_generator.path_to('awesome_rad')).
|
10
|
-
to eq '/this/:path/is/:very_awesome'
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'prepends base_path to returned mask' do
|
14
|
-
allow(path_generator).to receive(:base_path).and_return('/strawminos')
|
15
|
-
expect(path_generator.path_to('awesome_rad')).
|
16
|
-
to eq '/strawminos/this/:path/is/:very_awesome'
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'substitutes tokens with given fields' do
|
20
|
-
allow(path_generator).to receive(:base_path).and_return('/strawminos')
|
21
|
-
expect(path_generator.path_to('awesome_rad', :path => 'house', :very_awesome => 352)).
|
22
|
-
to eq '/strawminos/this/house/is/352'
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
|