merb-slices 0.9.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. data/Generators +4 -0
  2. data/LICENSE +20 -0
  3. data/README +102 -0
  4. data/Rakefile +65 -0
  5. data/TODO +0 -0
  6. data/lib/generators/base.rb +21 -0
  7. data/lib/generators/full.rb +21 -0
  8. data/lib/generators/templates/full/LICENSE +20 -0
  9. data/lib/generators/templates/full/README +170 -0
  10. data/lib/generators/templates/full/Rakefile +48 -0
  11. data/lib/generators/templates/full/TODO +15 -0
  12. data/lib/generators/templates/full/app/controllers/application.rb +5 -0
  13. data/lib/generators/templates/full/app/controllers/main.rb +7 -0
  14. data/lib/generators/templates/full/app/helpers/application_helper.rb +64 -0
  15. data/lib/generators/templates/full/app/views/layout/%symbol_name%.html.erb +16 -0
  16. data/lib/generators/templates/full/app/views/main/index.html.erb +1 -0
  17. data/lib/generators/templates/full/lib/%base_name%.rb +78 -0
  18. data/lib/generators/templates/full/lib/%base_name%/merbtasks.rb +166 -0
  19. data/lib/generators/templates/full/lib/%base_name%/slicetasks.rb +18 -0
  20. data/lib/generators/templates/full/public/javascripts/master.js +0 -0
  21. data/lib/generators/templates/full/public/stylesheets/master.css +2 -0
  22. data/lib/generators/templates/full/spec/%base_name%_spec.rb +130 -0
  23. data/lib/generators/templates/full/spec/controllers/main_spec.rb +61 -0
  24. data/lib/generators/templates/full/spec/spec_helper.rb +44 -0
  25. data/lib/generators/templates/full/stubs/app/controllers/application.rb +2 -0
  26. data/lib/generators/templates/full/stubs/app/controllers/main.rb +2 -0
  27. data/lib/generators/templates/thin/LICENSE +20 -0
  28. data/lib/generators/templates/thin/README +130 -0
  29. data/lib/generators/templates/thin/Rakefile +46 -0
  30. data/lib/generators/templates/thin/TODO +7 -0
  31. data/lib/generators/templates/thin/application.rb +36 -0
  32. data/lib/generators/templates/thin/lib/%base_name%.rb +93 -0
  33. data/lib/generators/templates/thin/lib/%base_name%/merbtasks.rb +106 -0
  34. data/lib/generators/templates/thin/lib/%base_name%/slicetasks.rb +18 -0
  35. data/lib/generators/templates/thin/public/javascripts/master.js +0 -0
  36. data/lib/generators/templates/thin/public/stylesheets/master.css +2 -0
  37. data/lib/generators/templates/thin/stubs/application.rb +9 -0
  38. data/lib/generators/templates/thin/views/layout/%symbol_name%.html.erb +16 -0
  39. data/lib/generators/templates/thin/views/main/index.html.erb +1 -0
  40. data/lib/generators/templates/very_thin/LICENSE +20 -0
  41. data/lib/generators/templates/very_thin/README +110 -0
  42. data/lib/generators/templates/very_thin/Rakefile +46 -0
  43. data/lib/generators/templates/very_thin/TODO +7 -0
  44. data/lib/generators/templates/very_thin/application.rb +36 -0
  45. data/lib/generators/templates/very_thin/lib/%base_name%.rb +89 -0
  46. data/lib/generators/templates/very_thin/lib/%base_name%/merbtasks.rb +106 -0
  47. data/lib/generators/templates/very_thin/lib/%base_name%/slicetasks.rb +18 -0
  48. data/lib/generators/thin.rb +21 -0
  49. data/lib/generators/very_thin.rb +21 -0
  50. data/lib/merb-slices.rb +126 -0
  51. data/lib/merb-slices/controller_mixin.rb +129 -0
  52. data/lib/merb-slices/merbtasks.rb +19 -0
  53. data/lib/merb-slices/module.rb +338 -0
  54. data/lib/merb-slices/module_mixin.rb +535 -0
  55. data/lib/merb-slices/router_ext.rb +75 -0
  56. data/spec/full_slice_generator_spec.rb +21 -0
  57. data/spec/merb-slice_spec.rb +7 -0
  58. data/spec/slice_generator_spec.rb +22 -0
  59. data/spec/spec_helper.rb +9 -0
  60. data/spec/thin_slice_generator_spec.rb +21 -0
  61. data/spec/very_thin_slice_generator_spec.rb +21 -0
  62. metadata +157 -0
@@ -0,0 +1,75 @@
1
+ module Merb
2
+ class Router
3
+
4
+ class Behavior
5
+
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 r.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
25
+
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) if slice_module.class.in?(String, Symbol)
44
+ namespace = options[:namespace] || slice_module.to_s.snake_case
45
+ options[:path] ||= 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
+ # setup routes - capture the slice's routes for easy reference
52
+ slice_module.routes, slice_module.named_routes = Merb::Router.capture do
53
+ self.namespace(namespace.to_sym, options.except(:default_routes, :prepend_routes, :append_routes)) do |ns|
54
+ options[:prepend_routes].call(ns) if options[:prepend_routes].respond_to?(:call)
55
+ slice_module.setup_router(ns) # setup the routes from the slice itself
56
+ options[:append_routes].call(ns) if options[:append_routes].respond_to?(:call)
57
+ ns.default_routes(options[:params] || {}) if options[:default_routes]
58
+ end
59
+ end
60
+ else
61
+ Merb.logger.info!("Skipped adding slice #{slice_module} to router...")
62
+ end
63
+ self
64
+ end
65
+
66
+ # Insert a slice directly into the current router context.
67
+ #
68
+ # This will still setup a namespace, but doesn't set a path prefix.
69
+ def slice(slice_module, options = {}, &block)
70
+ add_slice(slice_module, options.merge(:path => ''), &block)
71
+ end
72
+
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,21 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe Merb::Generators::FullSliceGenerator do
4
+
5
+ include Merb::Test::GeneratorHelper
6
+
7
+ describe "templates" do
8
+
9
+ before do
10
+ @generator = Merb::Generators::FullSliceGenerator.new('/tmp', {}, 'testing')
11
+ end
12
+
13
+ it "should create a number of templates"
14
+
15
+ it "should render templates successfully" do
16
+ lambda { @generator.render! }.should_not raise_error
17
+ end
18
+
19
+ end
20
+
21
+ end
@@ -0,0 +1,7 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "merb-slices" do
4
+ it "should do nothing" do
5
+ true.should == true
6
+ end
7
+ end
@@ -0,0 +1,22 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe Merb::Generators::SliceGenerator do
4
+
5
+ include Merb::Test::GeneratorHelper
6
+
7
+ it "should invoke the full generator by default" do
8
+ @generator = Merb::Generators::SliceGenerator.new('/tmp', {}, 'testing')
9
+ @generator.should invoke(Merb::Generators::FullSliceGenerator).with('testing')
10
+ end
11
+
12
+ it "should invoke the flat generator if flat is true" do
13
+ @generator = Merb::Generators::SliceGenerator.new('/tmp', { :thin => true }, 'testing')
14
+ @generator.should invoke(Merb::Generators::ThinSliceGenerator).with('testing')
15
+ end
16
+
17
+ it "should invoke the very flat generator if very flat is true" do
18
+ @generator = Merb::Generators::SliceGenerator.new('/tmp', { :very_thin => true }, 'testing')
19
+ @generator.should invoke(Merb::Generators::VeryThinSliceGenerator).with('testing')
20
+ end
21
+
22
+ end
@@ -0,0 +1,9 @@
1
+ $TESTING=true
2
+ $:.push File.join(File.dirname(__FILE__), '..', 'lib')
3
+
4
+ require 'rubygems'
5
+ require 'merb-gen'
6
+ require 'generators/base'
7
+ require 'generators/full'
8
+ require 'generators/thin'
9
+ require 'generators/very_thin'
@@ -0,0 +1,21 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe Merb::Generators::ThinSliceGenerator do
4
+
5
+ include Merb::Test::GeneratorHelper
6
+
7
+ describe "templates" do
8
+
9
+ before do
10
+ @generator = Merb::Generators::ThinSliceGenerator.new('/tmp', {}, 'testing')
11
+ end
12
+
13
+ it "should create a number of templates"
14
+
15
+ it "should render templates successfully" do
16
+ lambda { @generator.render! }.should_not raise_error
17
+ end
18
+
19
+ end
20
+
21
+ end
@@ -0,0 +1,21 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe Merb::Generators::VeryThinSliceGenerator do
4
+
5
+ include Merb::Test::GeneratorHelper
6
+
7
+ describe "templates" do
8
+
9
+ before do
10
+ @generator = Merb::Generators::VeryThinSliceGenerator.new('/tmp', {}, 'testing')
11
+ end
12
+
13
+ it "should create a number of templates"
14
+
15
+ it "should render templates successfully" do
16
+ lambda { @generator.render! }.should_not raise_error
17
+ end
18
+
19
+ end
20
+
21
+ end
metadata ADDED
@@ -0,0 +1,157 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: merb-slices
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.4
5
+ platform: ruby
6
+ authors:
7
+ - Fabien Franzen
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-08-13 00:00:00 +03:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: merb-core
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.9.4
24
+ version:
25
+ description: Merb-Slices is a Merb plugin for using and creating application 'slices' which help you modularize your application.
26
+ email: info@fabien.be
27
+ executables: []
28
+
29
+ extensions: []
30
+
31
+ extra_rdoc_files:
32
+ - README
33
+ - LICENSE
34
+ - TODO
35
+ files:
36
+ - LICENSE
37
+ - README
38
+ - Rakefile
39
+ - Generators
40
+ - TODO
41
+ - lib/generators
42
+ - lib/generators/base.rb
43
+ - lib/generators/full.rb
44
+ - lib/generators/templates
45
+ - lib/generators/templates/full
46
+ - lib/generators/templates/full/app
47
+ - lib/generators/templates/full/app/controllers
48
+ - lib/generators/templates/full/app/controllers/application.rb
49
+ - lib/generators/templates/full/app/controllers/main.rb
50
+ - lib/generators/templates/full/app/helpers
51
+ - lib/generators/templates/full/app/helpers/application_helper.rb
52
+ - lib/generators/templates/full/app/views
53
+ - lib/generators/templates/full/app/views/layout
54
+ - lib/generators/templates/full/app/views/layout/%symbol_name%.html.erb
55
+ - lib/generators/templates/full/app/views/main
56
+ - lib/generators/templates/full/app/views/main/index.html.erb
57
+ - lib/generators/templates/full/lib
58
+ - lib/generators/templates/full/lib/%base_name%
59
+ - lib/generators/templates/full/lib/%base_name%/merbtasks.rb
60
+ - lib/generators/templates/full/lib/%base_name%/slicetasks.rb
61
+ - lib/generators/templates/full/lib/%base_name%.rb
62
+ - lib/generators/templates/full/LICENSE
63
+ - lib/generators/templates/full/public
64
+ - lib/generators/templates/full/public/javascripts
65
+ - lib/generators/templates/full/public/javascripts/master.js
66
+ - lib/generators/templates/full/public/stylesheets
67
+ - lib/generators/templates/full/public/stylesheets/master.css
68
+ - lib/generators/templates/full/Rakefile
69
+ - lib/generators/templates/full/README
70
+ - lib/generators/templates/full/spec
71
+ - lib/generators/templates/full/spec/%base_name%_spec.rb
72
+ - lib/generators/templates/full/spec/controllers
73
+ - lib/generators/templates/full/spec/controllers/main_spec.rb
74
+ - lib/generators/templates/full/spec/spec_helper.rb
75
+ - lib/generators/templates/full/stubs
76
+ - lib/generators/templates/full/stubs/app
77
+ - lib/generators/templates/full/stubs/app/controllers
78
+ - lib/generators/templates/full/stubs/app/controllers/application.rb
79
+ - lib/generators/templates/full/stubs/app/controllers/main.rb
80
+ - lib/generators/templates/full/TODO
81
+ - lib/generators/templates/thin
82
+ - lib/generators/templates/thin/application.rb
83
+ - lib/generators/templates/thin/lib
84
+ - lib/generators/templates/thin/lib/%base_name%
85
+ - lib/generators/templates/thin/lib/%base_name%/merbtasks.rb
86
+ - lib/generators/templates/thin/lib/%base_name%/slicetasks.rb
87
+ - lib/generators/templates/thin/lib/%base_name%.rb
88
+ - lib/generators/templates/thin/LICENSE
89
+ - lib/generators/templates/thin/public
90
+ - lib/generators/templates/thin/public/javascripts
91
+ - lib/generators/templates/thin/public/javascripts/master.js
92
+ - lib/generators/templates/thin/public/stylesheets
93
+ - lib/generators/templates/thin/public/stylesheets/master.css
94
+ - lib/generators/templates/thin/Rakefile
95
+ - lib/generators/templates/thin/README
96
+ - lib/generators/templates/thin/stubs
97
+ - lib/generators/templates/thin/stubs/application.rb
98
+ - lib/generators/templates/thin/TODO
99
+ - lib/generators/templates/thin/views
100
+ - lib/generators/templates/thin/views/layout
101
+ - lib/generators/templates/thin/views/layout/%symbol_name%.html.erb
102
+ - lib/generators/templates/thin/views/main
103
+ - lib/generators/templates/thin/views/main/index.html.erb
104
+ - lib/generators/templates/very_thin
105
+ - lib/generators/templates/very_thin/application.rb
106
+ - lib/generators/templates/very_thin/lib
107
+ - lib/generators/templates/very_thin/lib/%base_name%
108
+ - lib/generators/templates/very_thin/lib/%base_name%/merbtasks.rb
109
+ - lib/generators/templates/very_thin/lib/%base_name%/slicetasks.rb
110
+ - lib/generators/templates/very_thin/lib/%base_name%.rb
111
+ - lib/generators/templates/very_thin/LICENSE
112
+ - lib/generators/templates/very_thin/Rakefile
113
+ - lib/generators/templates/very_thin/README
114
+ - lib/generators/templates/very_thin/TODO
115
+ - lib/generators/thin.rb
116
+ - lib/generators/very_thin.rb
117
+ - lib/merb-slices
118
+ - lib/merb-slices/controller_mixin.rb
119
+ - lib/merb-slices/merbtasks.rb
120
+ - lib/merb-slices/module.rb
121
+ - lib/merb-slices/module_mixin.rb
122
+ - lib/merb-slices/router_ext.rb
123
+ - lib/merb-slices.rb
124
+ - spec/full_slice_generator_spec.rb
125
+ - spec/merb-slice_spec.rb
126
+ - spec/slice_generator_spec.rb
127
+ - spec/spec_helper.rb
128
+ - spec/thin_slice_generator_spec.rb
129
+ - spec/very_thin_slice_generator_spec.rb
130
+ has_rdoc: true
131
+ homepage: http://merbivore.com
132
+ post_install_message:
133
+ rdoc_options: []
134
+
135
+ require_paths:
136
+ - lib
137
+ required_ruby_version: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ version: "0"
142
+ version:
143
+ required_rubygems_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: "0"
148
+ version:
149
+ requirements: []
150
+
151
+ rubyforge_project: merb
152
+ rubygems_version: 1.2.0
153
+ signing_key:
154
+ specification_version: 2
155
+ summary: Merb-Slices is a Merb plugin for using and creating application 'slices' which help you modularize your application.
156
+ test_files: []
157
+