merb-slices 0.9.8 → 0.9.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. data/README +2 -2
  2. data/Rakefile +4 -2
  3. data/bin/slice +3 -1
  4. data/lib/generators/base.rb +5 -0
  5. data/lib/generators/full.rb +8 -0
  6. data/lib/generators/templates/common/LICENSE +1 -1
  7. data/lib/generators/templates/common/Rakefile +9 -1
  8. data/lib/generators/templates/full/README +2 -2
  9. data/lib/generators/templates/full/Rakefile +7 -16
  10. data/lib/generators/templates/full/lib/%base_name%.rb +3 -1
  11. data/lib/generators/templates/full/spec/controllers/main_spec.rb +1 -1
  12. data/lib/generators/templates/thin/README +2 -2
  13. data/lib/generators/templates/thin/lib/%base_name%.rb +3 -1
  14. data/lib/generators/templates/very_thin/README +2 -2
  15. data/lib/generators/templates/very_thin/lib/%base_name%.rb +3 -1
  16. data/lib/generators/thin.rb +3 -0
  17. data/lib/generators/very_thin.rb +3 -0
  18. data/lib/merb-slices/controller_mixin.rb +36 -0
  19. data/lib/merb-slices/module.rb +1 -1
  20. data/lib/merb-slices/router_ext.rb +64 -71
  21. data/lib/merb-slices.rb +1 -1
  22. data/spec/full_slice_spec.rb +1 -1
  23. data/spec/merb-slice_spec.rb +10 -6
  24. data/spec/slices/full-test-slice/LICENSE +1 -1
  25. data/spec/slices/full-test-slice/README +2 -2
  26. data/spec/slices/full-test-slice/Rakefile +3 -15
  27. data/spec/slices/full-test-slice/lib/full-test-slice.rb +3 -1
  28. data/spec/slices/thin-test-slice/LICENSE +1 -1
  29. data/spec/slices/thin-test-slice/README +2 -2
  30. data/spec/slices/thin-test-slice/lib/thin-test-slice.rb +3 -1
  31. data/spec/slices/very-thin-test-slice/LICENSE +1 -1
  32. data/spec/slices/very-thin-test-slice/README +2 -2
  33. data/spec/slices/very-thin-test-slice/lib/very-thin-test-slice.rb +3 -1
  34. data/spec/spec_helper.rb +10 -0
  35. data/spec/thin_slice_spec.rb +1 -1
  36. data/spec/very_thin_slice_spec.rb +1 -1
  37. metadata +3 -3
data/README CHANGED
@@ -64,9 +64,9 @@ add_slice(:BlogSlice)
64
64
 
65
65
  add_slice(:BlogSlice, 'foo') # same as :path => 'foo'
66
66
 
67
- # example: /:lang/:controller/:action/:id (with :a param set)
67
+ # example: /:lang/:controller/:action/:id
68
68
 
69
- add_slice(:BlogSlice, :path => ':lang', :params => { :a => 'b' })
69
+ add_slice(:BlogSlice, :path => ':lang')
70
70
 
71
71
  # example: /:controller/:action/:id
72
72
 
data/Rakefile CHANGED
@@ -4,6 +4,8 @@ require "extlib"
4
4
  require 'merb-core/tasks/merb_rake_helper'
5
5
  require "spec/rake/spectask"
6
6
 
7
+ require File.join(File.dirname(__FILE__), "../merb-core/lib/merb-core/version.rb")
8
+
7
9
  ##############################################################################
8
10
  # Package && release
9
11
  ##############################################################################
@@ -17,7 +19,7 @@ GEM_EMAIL = "info@fabien.be"
17
19
 
18
20
  GEM_NAME = "merb-slices"
19
21
  PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
20
- GEM_VERSION = (Merb::MORE_VERSION rescue "0.9.8") + PKG_BUILD
22
+ GEM_VERSION = Merb::VERSION + PKG_BUILD
21
23
 
22
24
  RELEASE_NAME = "REL #{GEM_VERSION}"
23
25
 
@@ -35,7 +37,7 @@ spec = Gem::Specification.new do |s|
35
37
  s.author = GEM_AUTHOR
36
38
  s.email = GEM_EMAIL
37
39
  s.homepage = PROJECT_URL
38
- s.add_dependency('merb-core', '>= 0.9.8')
40
+ s.add_dependency('merb-core', '>= 0.9.9')
39
41
  s.require_path = 'lib'
40
42
  s.files = %w(LICENSE README Rakefile Generators TODO) + Dir.glob("{lib,spec}/**/*")
41
43
  s.bindir = "bin"
data/bin/slice CHANGED
@@ -16,9 +16,11 @@ Merb::Config.use { |c|
16
16
 
17
17
  if File.exists?(slice_file = File.join(__DIR__, 'lib', "#{slice_name}.rb"))
18
18
  Merb::BootLoader.before_app_loads do
19
- # See Merb::Slices::ModuleMixin - $SLICE_MODULE is used as a flag
20
19
  $SLICE_MODULE = Merb::Slices.filename2module(slice_file)
21
20
  require slice_file
21
+ end
22
+ Merb::BootLoader.after_app_loads do
23
+ # See Merb::Slices::ModuleMixin - $SLICE_MODULE is used as a flag
22
24
  Merb::Router.prepare do
23
25
  slice($SLICE_MODULE)
24
26
  slice_id = slice_name.gsub('-', '_').to_sym
@@ -8,6 +8,11 @@ module Merb::Generators
8
8
  desc <<-DESC
9
9
  Generates a merb slice.
10
10
  DESC
11
+
12
+ def initialize(*args)
13
+ Merb.disable(:initfile)
14
+ super
15
+ end
11
16
 
12
17
  first_argument :name, :required => true
13
18
 
@@ -1,6 +1,11 @@
1
1
  module Merb::Generators
2
2
 
3
3
  class FullSliceGenerator < BaseSliceGenerator
4
+
5
+ def initialize(*args)
6
+ Merb.disable(:initfile)
7
+ super
8
+ end
4
9
 
5
10
  def self.source_root
6
11
  File.join(File.dirname(__FILE__), 'templates', 'full')
@@ -19,6 +24,9 @@ module Merb::Generators
19
24
 
20
25
  first_argument :name, :required => true
21
26
 
27
+ option :testing_framework, :default => :rspec,
28
+ :desc => 'Testing framework to use (one of: rspec, test_unit).'
29
+
22
30
  def destination_root
23
31
  File.join(@destination_root, base_name)
24
32
  end
@@ -1,4 +1,4 @@
1
- Copyright (c) <%= Time.now.year %> YOUR NAME
1
+ Copyright (c) <%= Time.now.year %> Engine Yard
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -47,4 +47,12 @@ task :gemspec do
47
47
  File.open("#{GEM_NAME}.gemspec", "w") do |file|
48
48
  file.puts spec.to_ruby
49
49
  end
50
- end
50
+ end
51
+ <% if testing_framework.to_sym == :rspec %>
52
+ require 'spec/rake/spectask'
53
+ require 'merb-core/test/tasks/spectasks'
54
+ desc 'Default: run spec examples'
55
+ task :default => 'spec'
56
+ <% elsif testing_framework.to_sym == :test_unit %>
57
+ require 'rake/testtask'
58
+ <% end %>
@@ -96,9 +96,9 @@ add_slice(:<%= module_name %>)
96
96
 
97
97
  add_slice(:<%= module_name %>, 'foo') # same as :path => 'foo'
98
98
 
99
- # example: /:lang/:controller/:action/:id (with :a param set)
99
+ # example: /:lang/:controller/:action/:id
100
100
 
101
- add_slice(:<%= module_name %>, :path => ':lang', :params => { :a => 'b' })
101
+ add_slice(:<%= module_name %>, :path => ':lang')
102
102
 
103
103
  # example: /:controller/:action/:id
104
104
 
@@ -1,10 +1,8 @@
1
1
  require 'rubygems'
2
2
  require 'rake/gempackagetask'
3
- require 'spec/rake/spectask'
4
3
 
5
4
  require 'merb-core'
6
5
  require 'merb-core/tasks/merb'
7
- require 'merb-core/test/tasks/spectasks'
8
6
 
9
7
  GEM_NAME = "<%= base_name %>"
10
8
  AUTHOR = "Your Name"
@@ -50,18 +48,11 @@ task :gemspec do
50
48
  file.puts spec.to_ruby
51
49
  end
52
50
  end
53
-
54
- desc "Run all examples (or a specific spec with TASK=xxxx)"
55
- Spec::Rake::SpecTask.new('spec') do |t|
56
- t.spec_opts = ["-cfs"]
57
- t.spec_files = begin
58
- if ENV["TASK"]
59
- ENV["TASK"].split(',').map { |task| "spec/**/#{task}_spec.rb" }
60
- else
61
- FileList['spec/**/*_spec.rb']
62
- end
63
- end
64
- end
65
-
51
+ <% if testing_framework.to_sym == :rspec %>
52
+ require 'spec/rake/spectask'
53
+ require 'merb-core/test/tasks/spectasks'
66
54
  desc 'Default: run spec examples'
67
- task :default => 'spec'
55
+ task :default => 'spec'
56
+ <% elsif testing_framework.to_sym == :test_unit %>
57
+ require 'rake/testtask'
58
+ <% end %>
@@ -23,7 +23,7 @@ if defined?(Merb::Plugins)
23
23
  # Slice metadata
24
24
  self.description = "<%= module_name %> is a chunky Merb slice!"
25
25
  self.version = "0.0.1"
26
- self.author = "YOUR NAME"
26
+ self.author = "Engine Yard"
27
27
 
28
28
  # Stub classes loaded hook - runs before LoadClasses BootLoader
29
29
  # right after a slice's classes have been loaded internally.
@@ -56,6 +56,8 @@ if defined?(Merb::Plugins)
56
56
  scope.match('/index(.:format)').to(:controller => 'main', :action => 'index').name(:index)
57
57
  # the slice is mounted at /<%= base_name %> - note that it comes before default_routes
58
58
  scope.match('/').to(:controller => 'main', :action => 'index').name(:home)
59
+ # enable slice-level default routes by default
60
+ scope.default_routes
59
61
  end
60
62
 
61
63
  end
@@ -48,7 +48,7 @@ describe "<%= module_name %>::Main (controller)" do
48
48
  controller.slice_url(:index, :format => 'html').should == url
49
49
 
50
50
  url = controller.url(:<%= symbol_name %>_home)
51
- url.should == "/<%= base_name %>"
51
+ url.should == "/<%= base_name %>/"
52
52
  controller.slice_url(:home).should == url
53
53
  end
54
54
 
@@ -81,9 +81,9 @@ add_slice(:<%= module_name %>)
81
81
 
82
82
  add_slice(:<%= module_name %>, 'foo') # same as :path => 'foo'
83
83
 
84
- # example: /:lang/:controller/:action/:id (with :a param set)
84
+ # example: /:lang/:controller/:action/:id
85
85
 
86
- add_slice(:<%= module_name %>, :path => ':lang', :params => { :a => 'b' })
86
+ add_slice(:<%= module_name %>, :path => ':lang')
87
87
 
88
88
  # example: /:controller/:action/:id
89
89
 
@@ -18,7 +18,7 @@ if defined?(Merb::Plugins)
18
18
  # Slice metadata
19
19
  self.description = "<%= module_name %> is a thin Merb slice!"
20
20
  self.version = "0.0.1"
21
- self.author = "YOUR NAME"
21
+ self.author = "Engine Yard"
22
22
 
23
23
  # Stub classes loaded hook - runs before LoadClasses BootLoader
24
24
  # right after a slice's classes have been loaded internally.
@@ -47,6 +47,8 @@ if defined?(Merb::Plugins)
47
47
  # @note prefix your named routes with :<%= symbol_name %>_
48
48
  # to avoid potential conflicts with global named routes.
49
49
  def self.setup_router(scope)
50
+ # enable slice-level default routes by default
51
+ scope.default_routes
50
52
  end
51
53
 
52
54
  # This sets up a thin slice's structure.
@@ -61,9 +61,9 @@ add_slice(:<%= module_name %>)
61
61
 
62
62
  add_slice(:<%= module_name %>, 'foo') # same as :path => 'foo'
63
63
 
64
- # example: /:lang/:controller/:action/:id (with :a param set)
64
+ # example: /:lang/:controller/:action/:id
65
65
 
66
- add_slice(:<%= module_name %>, :path => ':lang', :params => { :a => 'b' })
66
+ add_slice(:<%= module_name %>, :path => ':lang')
67
67
 
68
68
  # example: /:controller/:action/:id
69
69
 
@@ -17,7 +17,7 @@ if defined?(Merb::Plugins)
17
17
  # Slice metadata
18
18
  self.description = "<%= module_name %> is a very thin Merb slice!"
19
19
  self.version = "0.0.1"
20
- self.author = "YOUR NAME"
20
+ self.author = "Engine Yard"
21
21
 
22
22
  # Stub classes loaded hook - runs before LoadClasses BootLoader
23
23
  # right after a slice's classes have been loaded internally.
@@ -46,6 +46,8 @@ if defined?(Merb::Plugins)
46
46
  # @note prefix your named routes with :<%= symbol_name %>_
47
47
  # to avoid potential conflicts with global named routes.
48
48
  def self.setup_router(scope)
49
+ # enable slice-level default routes by default
50
+ scope.default_routes
49
51
  end
50
52
 
51
53
  # This sets up a very thin slice's structure.
@@ -22,6 +22,9 @@ module Merb::Generators
22
22
 
23
23
  first_argument :name, :required => true
24
24
 
25
+ option :testing_framework, :default => :rspec,
26
+ :desc => 'Testing framework to use (one of: rspec, test_unit).'
27
+
25
28
  def destination_root
26
29
  File.join(@destination_root, base_name)
27
30
  end
@@ -19,6 +19,9 @@ module Merb::Generators
19
19
 
20
20
  first_argument :name, :required => true
21
21
 
22
+ option :testing_framework, :default => :rspec,
23
+ :desc => 'Testing framework to use (one of: rspec, test_unit).'
24
+
22
25
  def destination_root
23
26
  File.join(@destination_root, base_name)
24
27
  end
@@ -1,6 +1,42 @@
1
1
  module Merb
2
2
  module Slices
3
3
 
4
+ module Support
5
+
6
+ # This module should be explicitly included into a controller,
7
+ # for example in Application (the main controller of your app).
8
+ # It contains optional methods for slice/plugin developers.
9
+
10
+ # Generate a slice url - takes the slice's :path_prefix into account.
11
+ #
12
+ # @param slice_name<Symbol>
13
+ # The name of the slice - in identifier_sym format (underscored).
14
+ # @param *args<Array[Symbol,Hash]>
15
+ # There are several possibilities regarding arguments:
16
+ # - when passing a Hash only, the :default route of the current
17
+ # slice will be used
18
+ # - when a Symbol is passed, it's used as the route name
19
+ # - a Hash with additional params can optionally be passed
20
+ #
21
+ # @return <String> A uri based on the requested slice.
22
+ #
23
+ # @example slice_url(:awesome, :format => 'html')
24
+ # @example slice_url(:forum, :posts, :format => 'xml')
25
+ def slice_url(slice_name, *args)
26
+ opts = args.last.is_a?(Hash) ? args.pop : {}
27
+ route_name = args[0].is_a?(Symbol) ? args.shift : :default
28
+
29
+ routes = Merb::Slices.named_routes[slice_name]
30
+ unless routes && route = routes[route_name]
31
+ raise Merb::Router::GenerationError, "Named route not found: #{route_name}"
32
+ end
33
+
34
+ args.push(opts)
35
+ route.generate(args, params)
36
+ end
37
+
38
+ end
39
+
4
40
  module ControllerMixin
5
41
 
6
42
  def self.included(klass)
@@ -39,7 +39,7 @@ module Merb
39
39
  slice_path = File.expand_path(File.dirname(slice_file) + '/..')
40
40
  # check if slice_path exists instead of just the module name - more flexible
41
41
  if !self.paths.include?(slice_path) || force
42
- Merb.logger.info!("Registered slice '#{module_name}' located at #{slice_path}") if force
42
+ Merb.logger.verbose!("Registered slice '#{module_name}' located at #{slice_path}") if force
43
43
  self.files[module_name] = slice_file
44
44
  self.paths[module_name] = slice_path
45
45
  slice_mod = setup_module(module_name)
@@ -1,78 +1,71 @@
1
- module Merb
2
- class Router
3
-
4
- class Behavior
1
+ Merb::Router.extensions do
5
2
 
6
- # Add all known slices to the router
7
- #
8
- # By combining this with Merb::Slices.activate_by_file and Merb::Slices.deactivate
9
- # one can enable/disable slices at runtime, without restarting your app.
10
- #
11
- # @param config<Hash>
12
- # Optional hash, mapping slice module names to their settings;
13
- # set :path (or use a string) if you want to override what appears on the url.
14
- #
15
- # @yield A new Behavior instance is yielded in the block for nested routes.
16
- # @yieldparam ns<Behavior> The namespace behavior object.
17
- #
18
- # @example all_slices('BlogSlice' => 'blog', 'ForumSlice' => { :path => 'forum' })
19
- #
20
- # @note The block is yielded for each slice individually.
21
- def all_slices(config = {}, &block)
22
- Merb::Slices.slice_names.each { |module_name| add_slice(module_name, config[module_name] || {}, &block) }
23
- end
24
- alias :add_slices :all_slices
3
+ # Add all known slices to the router
4
+ #
5
+ # By combining this with Merb::Slices.activate_by_file and Merb::Slices.deactivate
6
+ # one can enable/disable slices at runtime, without restarting your app.
7
+ #
8
+ # @param config<Hash>
9
+ # Optional hash, mapping slice module names to their settings;
10
+ # set :path (or use a string) if you want to override what appears on the url.
11
+ #
12
+ # @yield A new Behavior instance is yielded in the block for nested routes.
13
+ # @yieldparam ns<Behavior> The namespace behavior object.
14
+ #
15
+ # @example all_slices('BlogSlice' => 'blog', 'ForumSlice' => { :path => 'forum' })
16
+ #
17
+ # @note The block is yielded for each slice individually.
18
+ def all_slices(config = {}, &block)
19
+ Merb::Slices.slice_names.each { |module_name| add_slice(module_name, config[module_name] || {}, &block) }
20
+ end
21
+ alias :add_slices :all_slices
22
+
23
+ # Add a Slice in a router namespace
24
+ #
25
+ # @param slice_module<String, Symbol, Module> A Slice module to mount.
26
+ # @param options<Hash, String> Optional hash, set :path if you want to override what appears on the url.
27
+ #
28
+ # @yield A new Behavior instance is yielded in the block for nested routes - runs before the slice routes are setup.
29
+ # @yieldparam ns<Behavior> The namespace behavior object.
30
+ #
31
+ # @return <Behaviour> The current router context.
32
+ #
33
+ # @note If a slice has no routes at all, the activate hook won't be executed.
34
+ #
35
+ # @note Normally you should specify the slice_module using a String or Symbol
36
+ # this ensures that your module can be removed from the router at runtime.
37
+ def add_slice(slice_module, options = {}, &block)
38
+ if Merb::Slices.exists?(slice_module)
39
+ options = { :path => options } if options.is_a?(String)
40
+ slice_module = Object.full_const_get(slice_module.to_s.camel_case) if slice_module.class.in?(String, Symbol)
41
+ namespace = options[:namespace] || slice_module.identifier_sym
42
+ options[:path] ||= options[:path_prefix] || slice_module[:path_prefix] || options[:namespace] || slice_module.identifier
43
+ options[:prepend_routes] = block if block_given?
44
+ slice_module[:path_prefix] = options[:path]
45
+ Merb.logger.verbose!("Mounting slice #{slice_module} at /#{options[:path]}")
25
46
 
26
- # Add a Slice in a router namespace
27
- #
28
- # @param slice_module<String, Symbol, Module> A Slice module to mount.
29
- # @param options<Hash, String> Optional hash, set :path if you want to override what appears on the url.
30
- #
31
- # @yield A new Behavior instance is yielded in the block for nested routes - runs before the slice routes are setup.
32
- # @yieldparam ns<Behavior> The namespace behavior object.
33
- #
34
- # @return <Behaviour> The current router context.
35
- #
36
- # @note If a slice has no routes at all, the activate hook won't be executed.
37
- #
38
- # @note Normally you should specify the slice_module using a String or Symbol
39
- # this ensures that your module can be removed from the router at runtime.
40
- def add_slice(slice_module, options = {}, &block)
41
- if Merb::Slices.exists?(slice_module)
42
- options = { :path => options } if options.is_a?(String)
43
- slice_module = Object.full_const_get(slice_module.to_s.camel_case) if slice_module.class.in?(String, Symbol)
44
- namespace = options[:namespace] || slice_module.identifier_sym
45
- options[:path] ||= options[:path_prefix] || slice_module[:path_prefix] || options[:namespace] || slice_module.identifier
46
- options[:default_routes] = true unless options.key?(:default_routes)
47
- options[:prepend_routes] = block if block_given?
48
- slice_module[:path_prefix] = options[:path]
49
- Merb.logger.info!("Mounting slice #{slice_module} at /#{options[:path]}")
50
-
51
- # reset the inherited controller prefix - especially for 'slice' entries (see below)
52
- @options[:controller_prefix] = nil if options.delete(:reset_controller_prefix)
53
-
54
- # setup routes - capture the slice's routes for easy reference
55
- self.namespace(namespace, options.except(:default_routes, :prepend_routes, :append_routes, :path_prefix)) do |ns|
56
- Merb::Slices.named_routes[slice_module.identifier_sym] = ns.capture do
57
- options[:prepend_routes].call(ns) if options[:prepend_routes].respond_to?(:call)
58
- slice_module.setup_router(ns) # setup the routes from the slice itself
59
- options[:append_routes].call(ns) if options[:append_routes].respond_to?(:call)
60
- ns.default_routes(options[:params] || {}) if options[:default_routes]
61
- end
62
- end
63
- else
64
- Merb.logger.info!("Skipped adding slice #{slice_module} to router...")
65
- end
66
- self
67
- end
47
+ # reset the inherited controller prefix - especially for 'slice' entries (see below)
48
+ @options[:controller_prefix] = nil if options.delete(:reset_controller_prefix)
68
49
 
69
- # Insert a slice directly into the current router context.
70
- #
71
- # This will still setup a namespace, but doesn't set a path prefix. Only for special cases.
72
- def slice(slice_module, options = {}, &block)
73
- add_slice(slice_module, options.merge(:path => '', :reset_controller_prefix => true), &block)
50
+ # setup routes - capture the slice's routes for easy reference
51
+ self.namespace(namespace, options.except(:default_routes, :prepend_routes, :append_routes, :path_prefix)) do |ns|
52
+ Merb::Slices.named_routes[slice_module.identifier_sym] = ns.capture do
53
+ options[:prepend_routes].call(ns) if options[:prepend_routes].respond_to?(:call)
54
+ slice_module.setup_router(ns) # setup the routes from the slice itself
55
+ options[:append_routes].call(ns) if options[:append_routes].respond_to?(:call)
56
+ end
74
57
  end
75
-
58
+ else
59
+ Merb.logger.info!("Skipped adding slice #{slice_module} to router...")
76
60
  end
61
+ self
62
+ end
63
+
64
+ # Insert a slice directly into the current router context.
65
+ #
66
+ # This will still setup a namespace, but doesn't set a path prefix. Only for special cases.
67
+ def slice(slice_module, options = {}, &block)
68
+ add_slice(slice_module, options.merge(:path => '', :reset_controller_prefix => true), &block)
77
69
  end
70
+
78
71
  end
data/lib/merb-slices.rb CHANGED
@@ -96,7 +96,7 @@ if defined?(Merb::Plugins)
96
96
 
97
97
  def self.run
98
98
  Merb::Slices.each_slice do |slice|
99
- Merb.logger.info!("Initializing slice '#{slice}' ...")
99
+ Merb.logger.verbose!("Initializing slice '#{slice}' ...")
100
100
  slice.init if slice.respond_to?(:init)
101
101
  end
102
102
  end
@@ -63,7 +63,7 @@ describe "A slice" do
63
63
  it "should have metadata properties" do
64
64
  FullTestSlice.description.should == "FullTestSlice is a chunky Merb slice!"
65
65
  FullTestSlice.version.should == "0.0.1"
66
- FullTestSlice.author.should == "YOUR NAME"
66
+ FullTestSlice.author.should == "Engine Yard"
67
67
  end
68
68
 
69
69
  it "should have a :named_routes property" do
@@ -54,7 +54,7 @@ describe "The Merb::Router::Behavior methods" do
54
54
  scope.match('/dashboard').to(:controller => 'main', :action => 'index').name(:dashboard)
55
55
  end
56
56
  add_slice(:thin_test_slice, 'thin') # shortcut for :path => 'thin'
57
- slice(:very_thin_test_slice, :name_prefix => 'awesome', :params => { :foo => 'bar' })
57
+ slice(:very_thin_test_slice, :name_prefix => 'awesome')
58
58
  end
59
59
  end
60
60
 
@@ -83,11 +83,7 @@ describe "The Merb::Router::Behavior methods" do
83
83
  Merb::Router.named_routes[:awesome_default].should == VeryThinTestSlice.named_routes[:default]
84
84
  end
85
85
 
86
- it "should allow default params to be set on a route" do
87
- Merb::Router.named_routes[:awesome_default].params[:foo].should == '"bar"'
88
- end
89
-
90
- it "enable url() and slice_url() respectively" do
86
+ it "enables url() and slice_url() respectively" do
91
87
  controller = dispatch_to(FullTestSlice::Main, 'index')
92
88
  controller.url(:full_test_slice_index, :format => 'html').should == '/full/index.html'
93
89
  controller.slice_url(:full_test_slice, :index, :format => 'html').should == '/full/index.html'
@@ -98,4 +94,12 @@ describe "The Merb::Router::Behavior methods" do
98
94
  controller.slice_url(:dashboard).should == '/full/dashboard'
99
95
  end
100
96
 
97
+ it "enables slice_url() for Controllers that include Merb::Slices::Support" do
98
+ controller = dispatch_to(Merb::Test::SampleAppController, 'index')
99
+ controller.slice_url(:full_test_slice, :dashboard).should == '/full/dashboard'
100
+ params = { :controller => 'foo', :action => 'bar', :id => 'baz' }
101
+ controller.slice_url(:thin_test_slice, :default, params).should == '/thin/foo/bar/baz'
102
+ controller.slice_url(:very_thin_test_slice, :default, params).should == '/foo/bar/baz'
103
+ end
104
+
101
105
  end
@@ -1,4 +1,4 @@
1
- Copyright (c) 2008 YOUR NAME
1
+ Copyright (c) 2008 Engine Yard
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -96,9 +96,9 @@ add_slice(:FullTestSlice)
96
96
 
97
97
  add_slice(:FullTestSlice, 'foo') # same as :path => 'foo'
98
98
 
99
- # example: /:lang/:controller/:action/:id (with :a param set)
99
+ # example: /:lang/:controller/:action/:id
100
100
 
101
- add_slice(:FullTestSlice, :path => ':lang', :params => { :a => 'b' })
101
+ add_slice(:FullTestSlice, :path => ':lang')
102
102
 
103
103
  # example: /:controller/:action/:id
104
104
 
@@ -1,10 +1,8 @@
1
1
  require 'rubygems'
2
2
  require 'rake/gempackagetask'
3
- require 'spec/rake/spectask'
4
3
 
5
4
  require 'merb-core'
6
5
  require 'merb-core/tasks/merb'
7
- require 'merb-core/test/tasks/spectasks'
8
6
 
9
7
  GEM_NAME = "full-test-slice"
10
8
  AUTHOR = "Your Name"
@@ -51,17 +49,7 @@ task :gemspec do
51
49
  end
52
50
  end
53
51
 
54
- desc "Run all examples (or a specific spec with TASK=xxxx)"
55
- Spec::Rake::SpecTask.new('spec') do |t|
56
- t.spec_opts = ["-cfs"]
57
- t.spec_files = begin
58
- if ENV["TASK"]
59
- ENV["TASK"].split(',').map { |task| "spec/**/#{task}_spec.rb" }
60
- else
61
- FileList['spec/**/*_spec.rb']
62
- end
63
- end
64
- end
65
-
52
+ require 'spec/rake/spectask'
53
+ require 'merb-core/test/tasks/spectasks'
66
54
  desc 'Default: run spec examples'
67
- task :default => 'spec'
55
+ task :default => 'spec'
@@ -23,7 +23,7 @@ if defined?(Merb::Plugins)
23
23
  # Slice metadata
24
24
  self.description = "FullTestSlice is a chunky Merb slice!"
25
25
  self.version = "0.0.1"
26
- self.author = "YOUR NAME"
26
+ self.author = "Engine Yard"
27
27
 
28
28
  # Stub classes loaded hook - runs before LoadClasses BootLoader
29
29
  # right after a slice's classes have been loaded internally.
@@ -56,6 +56,8 @@ if defined?(Merb::Plugins)
56
56
  scope.match('/index(.:format)').to(:controller => 'main', :action => 'index').name(:index)
57
57
  # the slice is mounted at /full-test-slice - note that it comes before default_routes
58
58
  scope.match('/').to(:controller => 'main', :action => 'index').name(:home)
59
+ # enable slice-level default routes by default
60
+ scope.default_routes
59
61
  end
60
62
 
61
63
  end
@@ -1,4 +1,4 @@
1
- Copyright (c) 2008 YOUR NAME
1
+ Copyright (c) 2008 Engine Yard
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -81,9 +81,9 @@ add_slice(:ThinTestSlice)
81
81
 
82
82
  add_slice(:ThinTestSlice, 'foo') # same as :path => 'foo'
83
83
 
84
- # example: /:lang/:controller/:action/:id (with :a param set)
84
+ # example: /:lang/:controller/:action/:id
85
85
 
86
- add_slice(:ThinTestSlice, :path => ':lang', :params => { :a => 'b' })
86
+ add_slice(:ThinTestSlice, :path => ':lang')
87
87
 
88
88
  # example: /:controller/:action/:id
89
89
 
@@ -18,7 +18,7 @@ if defined?(Merb::Plugins)
18
18
  # Slice metadata
19
19
  self.description = "ThinTestSlice is a thin Merb slice!"
20
20
  self.version = "0.0.1"
21
- self.author = "YOUR NAME"
21
+ self.author = "Engine Yard"
22
22
 
23
23
  # Stub classes loaded hook - runs before LoadClasses BootLoader
24
24
  # right after a slice's classes have been loaded internally.
@@ -47,6 +47,8 @@ if defined?(Merb::Plugins)
47
47
  # @note prefix your named routes with :thin_test_slice_
48
48
  # to avoid potential conflicts with global named routes.
49
49
  def self.setup_router(scope)
50
+ # enable slice-level default routes by default
51
+ scope.default_routes
50
52
  end
51
53
 
52
54
  # This sets up a thin slice's structure.
@@ -1,4 +1,4 @@
1
- Copyright (c) 2008 YOUR NAME
1
+ Copyright (c) 2008 Engine Yard
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -61,9 +61,9 @@ add_slice(:VeryThinTestSlice)
61
61
 
62
62
  add_slice(:VeryThinTestSlice, 'foo') # same as :path => 'foo'
63
63
 
64
- # example: /:lang/:controller/:action/:id (with :a param set)
64
+ # example: /:lang/:controller/:action/:id
65
65
 
66
- add_slice(:VeryThinTestSlice, :path => ':lang', :params => { :a => 'b' })
66
+ add_slice(:VeryThinTestSlice, :path => ':lang')
67
67
 
68
68
  # example: /:controller/:action/:id
69
69
 
@@ -17,7 +17,7 @@ if defined?(Merb::Plugins)
17
17
  # Slice metadata
18
18
  self.description = "VeryThinTestSlice is a very thin Merb slice!"
19
19
  self.version = "0.0.1"
20
- self.author = "YOUR NAME"
20
+ self.author = "Engine Yard"
21
21
 
22
22
  # Stub classes loaded hook - runs before LoadClasses BootLoader
23
23
  # right after a slice's classes have been loaded internally.
@@ -46,6 +46,8 @@ if defined?(Merb::Plugins)
46
46
  # @note prefix your named routes with :very_thin_test_slice_
47
47
  # to avoid potential conflicts with global named routes.
48
48
  def self.setup_router(scope)
49
+ # enable slice-level default routes by default
50
+ scope.default_routes
49
51
  end
50
52
 
51
53
  # This sets up a very thin slice's structure.
data/spec/spec_helper.rb CHANGED
@@ -11,6 +11,16 @@ require 'generators/very_thin'
11
11
 
12
12
  module Merb
13
13
  module Test
14
+
15
+ class SampleAppController < Merb::Controller
16
+
17
+ include Merb::Slices::Support
18
+
19
+ def index
20
+ end
21
+
22
+ end
23
+
14
24
  module SliceHelper
15
25
 
16
26
  def current_slice_root=(path)
@@ -67,7 +67,7 @@ describe "A thin slice" do
67
67
  it "should have metadata properties" do
68
68
  ThinTestSlice.description.should == "ThinTestSlice is a thin Merb slice!"
69
69
  ThinTestSlice.version.should == "0.0.1"
70
- ThinTestSlice.author.should == "YOUR NAME"
70
+ ThinTestSlice.author.should == "Engine Yard"
71
71
  end
72
72
 
73
73
  it "should have a :named_routes property" do
@@ -67,7 +67,7 @@ describe "A very thin slice" do
67
67
  it "should have metadata properties" do
68
68
  VeryThinTestSlice.description.should == "VeryThinTestSlice is a very thin Merb slice!"
69
69
  VeryThinTestSlice.version.should == "0.0.1"
70
- VeryThinTestSlice.author.should == "YOUR NAME"
70
+ VeryThinTestSlice.author.should == "Engine Yard"
71
71
  end
72
72
 
73
73
  it "should have a :named_routes property" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: merb-slices
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.8
4
+ version: 0.9.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fabien Franzen
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-10-06 00:00:00 +03:00
12
+ date: 2008-10-13 00:00:00 +03:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 0.9.8
23
+ version: 0.9.9
24
24
  version:
25
25
  description: Merb-Slices is a Merb plugin for using and creating application 'slices' which help you modularize your application.
26
26
  email: info@fabien.be