rory 0.3.6 → 0.3.7

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.
@@ -52,12 +52,10 @@ module Rory
52
52
  def controller_class
53
53
  if route
54
54
  controller_name = Rory::Support.camelize("#{route[:controller]}_controller")
55
- const_scope = if route[:module]
56
- Object.const_get(Rory::Support.camelize("#{route[:module]}"))
57
- else
58
- Object
55
+ if route[:module]
56
+ controller_name.prepend "#{Rory::Support.camelize("#{route[:module]}")}/"
59
57
  end
60
- const_scope.const_get(controller_name)
58
+ Rory::Support.constantize(controller_name)
61
59
  end
62
60
  end
63
61
 
data/lib/rory/support.rb CHANGED
@@ -9,6 +9,13 @@ module Rory
9
9
  string = string.gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" }.gsub('/', '::')
10
10
  end
11
11
 
12
+ def constantize(string)
13
+ camelized = camelize(string)
14
+ camelized.split('::').inject(Object) { |scope, const|
15
+ scope.const_get(const)
16
+ }
17
+ end
18
+
12
19
  def require_all_files_in_directory(path)
13
20
  Dir[Pathname.new(path).join('**', '*.rb')].each do |file|
14
21
  require file
data/lib/rory/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Rory
2
- VERSION = '0.3.6'
2
+ VERSION = '0.3.7'
3
3
  end
@@ -77,6 +77,7 @@ describe Rory::Application do
77
77
  { :controller => 'monkeys', :action => nil, :regex => /^foo$/, :methods => [:put] },
78
78
  { :controller => 'awesome', :action => 'rad', :regex => /^this\/(?<path>[^\/]+)\/is\/(?<very_awesome>[^\/]+)$/},
79
79
  { :controller => 'lumpies', :action => 'show', :regex => /^lumpies\/(?<lump>[^\/]+)$/, :module => 'goose', :methods => [:get] },
80
+ { :controller => 'rabbits', :action => 'chew', :regex => /^rabbits\/(?<chew>[^\/]+)$/, :module => 'goose/wombat', :methods => [:get] },
80
81
  { :controller => 'root', :action => 'vegetable', :regex => /^$/, :methods => [:get] }
81
82
  ].inspect
82
83
  end
@@ -53,6 +53,16 @@ describe Rory::Dispatcher do
53
53
  :in_scoped_controller => true # see Goose::LumpiesController in /spec/fixture_app
54
54
  }
55
55
  end
56
+
57
+ it "dispatches properly to a nested scoped controller" do
58
+ request[:route] = { :controller => 'rabbits', :module => 'goose/wombat' }
59
+ dispatcher.dispatch.should == {
60
+ :whatever => :yay,
61
+ :route => request[:route],
62
+ :dispatcher => dispatcher,
63
+ :in_scoped_controller => true # see Goose::Wombat::RabbitsController in /spec/fixture_app
64
+ }
65
+ end
56
66
  end
57
67
 
58
68
  describe "#route" do
@@ -5,5 +5,8 @@ Fixture::Application.set_routes do
5
5
  scope :module => 'goose' do
6
6
  match 'lumpies/:lump', :to => 'lumpies#show', :methods => [:get]
7
7
  end
8
+ scope :module => 'goose/wombat' do
9
+ match 'rabbits/:chew', :to => 'rabbits#chew', :methods => [:get]
10
+ end
8
11
  match '/', :to => 'root#vegetable', :methods => [:get]
9
12
  end
@@ -0,0 +1,14 @@
1
+ module Goose
2
+ module Wombat
3
+ class RabbitsController
4
+ def initialize(args, context)
5
+ @args = args
6
+ end
7
+
8
+ def present
9
+ @args[:in_scoped_controller] = true
10
+ @args
11
+ end
12
+ end
13
+ end
14
+ end
data/spec/support_spec.rb CHANGED
@@ -5,6 +5,10 @@ describe Rory::Support do
5
5
  it "camelizes given snake-case string" do
6
6
  Rory::Support.camelize('water_under_bridge').should == 'WaterUnderBridge'
7
7
  end
8
+
9
+ it "leaves already camel-cased string alone" do
10
+ Rory::Support.camelize('OliverDrankGasoline').should == 'OliverDrankGasoline'
11
+ end
8
12
  end
9
13
 
10
14
  describe '.require_all_files_in_directory' do
@@ -16,4 +20,32 @@ describe Rory::Support do
16
20
  Rory::Support.require_all_files_in_directory('spinach')
17
21
  end
18
22
  end
23
+
24
+ describe '.constantize' do
25
+ before(:all) do
26
+ Object.const_set('OrigamiDeliveryMan', Module.new)
27
+ OrigamiDeliveryMan.const_set('UnderWhere', Module.new)
28
+ OrigamiDeliveryMan::UnderWhere.const_set('Skippy', Module.new)
29
+ end
30
+
31
+ after(:all) do
32
+ Object.send(:remove_const, :OrigamiDeliveryMan)
33
+ end
34
+
35
+ it 'returns constant from camelized name' do
36
+ Rory::Support.constantize('OrigamiDeliveryMan').
37
+ should == OrigamiDeliveryMan
38
+ end
39
+
40
+ it 'returns constant from snake-case string' do
41
+ Rory::Support.constantize('origami_delivery_man').
42
+ should == OrigamiDeliveryMan
43
+ end
44
+
45
+ it 'returns namespaced constant' do
46
+ Rory::Support.constantize(
47
+ 'origami_delivery_man/under_where/skippy'
48
+ ).should == OrigamiDeliveryMan::UnderWhere::Skippy
49
+ end
50
+ end
19
51
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rory
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.6
4
+ version: 0.3.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -189,6 +189,7 @@ files:
189
189
  - spec/fixture_app/config/application.rb
190
190
  - spec/fixture_app/config/routes.rb
191
191
  - spec/fixture_app/controllers/goose/lumpies_controller.rb
192
+ - spec/fixture_app/controllers/goose/wombat/rabbits_controller.rb
192
193
  - spec/fixture_app/controllers/stub_controller.rb
193
194
  - spec/fixture_app/views/layouts/surround.html.erb
194
195
  - spec/fixture_app/views/test/dynamic.html.erb