sinatra_more 0.3.14 → 0.3.15
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.
- data/README.rdoc +1 -1
- data/ROADMAP +9 -2
- data/TODO +2 -3
- data/VERSION +1 -1
- data/lib/sinatra_more/routing_plugin/named_route.rb +1 -1
- data/lib/sinatra_more/routing_plugin/routing_helpers.rb +4 -3
- data/lib/sinatra_more/routing_plugin.rb +8 -2
- data/sinatra_more.gemspec +1 -1
- data/test/fixtures/routing_app/app.rb +4 -0
- data/test/fixtures/routing_app/views/index.haml +2 -0
- data/test/test_routing_plugin.rb +21 -0
- metadata +1 -1
data/README.rdoc
CHANGED
@@ -580,7 +580,7 @@ or perhaps we want to have a short body without the need for a template file:
|
|
580
580
|
|
581
581
|
See the wiki article for additional information: <http://wiki.github.com/nesquena/sinatra_more/mailerplugin>
|
582
582
|
|
583
|
-
|
583
|
+
=== RoutingPlugin
|
584
584
|
|
585
585
|
This component provides Sinatra with an enhanced url routing system which enables named route aliases to be defined
|
586
586
|
and used throughout your application to refer to urls. The benefits of this is that instead of having to hard-code route urls
|
data/ROADMAP
CHANGED
@@ -14,12 +14,19 @@ Use Bundler for managing dependencies:
|
|
14
14
|
Framework structure:
|
15
15
|
|
16
16
|
* sinatra-core (the existing sinatra framework) <= from Sinatra
|
17
|
+
* sinatra-gen (easy generation of and for sinatra apps) <= from Generator
|
17
18
|
* sinatra-helpers (adds the markup and renderer helpers) <= from MarkupPlugin, RenderPlugin
|
18
19
|
* sinatra-mailer (mail handling for sinatra applications) <= from MailerPlugin
|
19
|
-
* sinatra-gen (easy generation of and for sinatra apps) <= from Generator
|
20
|
-
* sinatra-admin (admin management dashboard for content) <= from Lipsiadmin (ported)
|
21
20
|
* sinatra-routing (sinatra route mapping system) <= from RoutingPlugin
|
22
21
|
* sinatra-cache (page and fragment caching support)
|
22
|
+
* sinatra-admin (admin management dashboard for content) <= from Lipsiadmin (ported)
|
23
|
+
|
24
|
+
Additional wish-list features (integrate existing plugin) (?)
|
25
|
+
|
26
|
+
* Internationalization - http://r18n.rubyforge.org/#sinatra
|
27
|
+
* Asynchronous Commands - http://github.com/deadprogrammer/spork
|
28
|
+
* Capistrano Deployment - http://github.com/nakajima/capinatra (?)
|
29
|
+
* Job Queue - http://github.com/adamcooke/resque (or http://github.com/bmizerany/sinatra-dj)
|
23
30
|
|
24
31
|
'sinatra-cache' Caching concept:
|
25
32
|
|
data/TODO
CHANGED
@@ -1,10 +1,7 @@
|
|
1
1
|
= RESOURCES
|
2
2
|
|
3
3
|
- Check out the following sinatra extensions:
|
4
|
-
* http://github.com/emk/sinatra-url-for/
|
5
4
|
* http://github.com/wbzyl/sinatra-static-assets
|
6
|
-
* http://github.com/hallison/sinatra-mapping/
|
7
|
-
* http://github.com/bcarlso/snap/
|
8
5
|
* http://github.com/giraffesoft/classy_resources
|
9
6
|
* http://github.com/nakajima/capinatra
|
10
7
|
* http://github.com/deadprogrammer/spork
|
@@ -31,6 +28,8 @@
|
|
31
28
|
|
32
29
|
= COMPLETED
|
33
30
|
|
31
|
+
* Add support for multiple applications being mounted into routing system
|
32
|
+
* Add support for RoutingPlugin for easy to use named alias routes for urls
|
34
33
|
* Add support for bundler (http://github.com/wycats/bundler) to make setting up a generated app easy
|
35
34
|
* Add support for button tag method, mail_to helper
|
36
35
|
* Add support for simple fields_for tag helper
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.15
|
@@ -11,7 +11,7 @@ module SinatraMore
|
|
11
11
|
# Used to define the url mapping to the supplied alias
|
12
12
|
# NamedRoute.new(@app, :account).to('/account/path')
|
13
13
|
def to(path)
|
14
|
-
@app.named_paths[@names] = path
|
14
|
+
@app.named_paths[@names.unshift(@app.app_name)] = path
|
15
15
|
end
|
16
16
|
|
17
17
|
# Used to define the url mappings for child aliases within a namespace
|
@@ -5,9 +5,10 @@ module SinatraMore
|
|
5
5
|
# url_for(:accounts) => '/accounts'
|
6
6
|
# url_for(:account, :id => 5) => '/account/5'
|
7
7
|
# url_for(:admin, show, :id => 5, :name => "demo") => '/admin/path/5/demo'
|
8
|
-
def url_for(*
|
9
|
-
values =
|
10
|
-
mapped_url = self.class.named_paths[
|
8
|
+
def url_for(*route_name)
|
9
|
+
values = route_name.extract_options!
|
10
|
+
mapped_url = self.class.named_paths[route_name] || self.class.named_paths[route_name.dup.unshift(self.class.app_name)]
|
11
|
+
raise SinatraMore::RouteNotFound.new("Route alias #{route_name.inspect} is not mapped to a url") unless mapped_url
|
11
12
|
result_url = String.new(mapped_url)
|
12
13
|
result_url.scan(%r{/?(:\S+?)(?:/|$)}).each do |placeholder|
|
13
14
|
value_key = placeholder[0][1..-1].to_sym
|
@@ -2,11 +2,14 @@ require File.dirname(__FILE__) + '/support_lite'
|
|
2
2
|
Dir[File.dirname(__FILE__) + '/routing_plugin/**/*.rb'].each {|file| load file }
|
3
3
|
|
4
4
|
module SinatraMore
|
5
|
+
class RouteNotFound < RuntimeError; end
|
6
|
+
|
5
7
|
module RoutingPlugin
|
6
8
|
def self.registered(app)
|
7
9
|
# Named paths stores the named route aliases mapping to the url
|
8
10
|
# i.e { [:account] => '/account/path', [:admin, :show] => '/admin/show/:id' }
|
9
11
|
app.set :named_paths, {}
|
12
|
+
app.set :app_name, app.name.underscore.to_sym
|
10
13
|
app.helpers SinatraMore::RoutingHelpers
|
11
14
|
|
12
15
|
# map constructs a mapping between a named route and a specified alias
|
@@ -32,8 +35,11 @@ module SinatraMore
|
|
32
35
|
# Supports namespaces by accessing the instance variable and appending this to the route alias name
|
33
36
|
# If the path is not a symbol, nothing is changed and the original route method is invoked
|
34
37
|
def route(verb, path, options={}, &block)
|
35
|
-
|
36
|
-
|
38
|
+
if path.kind_of? Symbol
|
39
|
+
route_name = [self.app_name, @_namespace, path].flatten.compact
|
40
|
+
path = named_paths[route_name]
|
41
|
+
raise RouteNotFound.new("Route alias #{route_name.inspect} is not mapped to a url") unless path
|
42
|
+
end
|
37
43
|
super verb, path, options, &block
|
38
44
|
end
|
39
45
|
end
|
data/sinatra_more.gemspec
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
%p.admin_url= url_for(:admin, :show, :id => 25)
|
2
|
+
%p.app_admin_url= url_for(:routing_demo, :admin, :show, :id => 25)
|
2
3
|
%p.admin_url2= url_for(:admin, :update, :id => 10, :name => "test")
|
3
4
|
%p.admin_url3= url_for(:admin, :destroy, :id => 12)
|
4
5
|
%p.account_url= url_for(:account, :name => 'foobar', :id => 10)
|
5
6
|
%p.accounts_index=url_for(:accounts)
|
7
|
+
%p.app_accounts_index=url_for(:routing_demo, :accounts)
|
data/test/test_routing_plugin.rb
CHANGED
@@ -17,6 +17,27 @@ class TestRoutingPlugin < Test::Unit::TestCase
|
|
17
17
|
assert_have_selector :p, :class => 'admin_url2', :content => '/admin/10/update/test'
|
18
18
|
assert_have_selector :p, :class => 'admin_url3', :content => '/admin/12/destroy'
|
19
19
|
end
|
20
|
+
should "support app namespaces" do
|
21
|
+
assert_have_selector :p, :class => 'app_accounts_index', :content => '/the/accounts/index'
|
22
|
+
assert_have_selector :p, :class => 'app_admin_url', :content => '/admin/25/show'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context 'for failed or missing routes' do
|
27
|
+
should "properly not raise when found" do
|
28
|
+
assert_nothing_raised { app.new.url_for(:accounts) }
|
29
|
+
assert_nothing_raised { app.new.url_for(:routing_demo, :admin, :show, :id => 5) }
|
30
|
+
end
|
31
|
+
should "properly raise not found exception" do
|
32
|
+
assert_raises(SinatraMore::RouteNotFound) { visit '/failed_route' }
|
33
|
+
assert_raises(SinatraMore::RouteNotFound) { app.new.url_for(:admin, :fake) }
|
34
|
+
end
|
35
|
+
should "properly raise about an invalid alias for route definition" do
|
36
|
+
assert_raises(SinatraMore::RouteNotFound) { app.get(:fake) }
|
37
|
+
end
|
38
|
+
should "properly work when alias is used in proper route definition" do
|
39
|
+
assert_nothing_raised { app.get(:accounts) do; end }
|
40
|
+
end
|
20
41
|
end
|
21
42
|
|
22
43
|
context 'for no namespaced account route' do
|