pancake 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/pancake +96 -0
- data/lib/pancake.rb +5 -7
- data/lib/pancake/configuration.rb +2 -23
- data/lib/pancake/core_ext/object.rb +1 -1
- data/lib/pancake/defaults/configuration.rb +21 -1
- data/lib/pancake/generators.rb +0 -3
- data/lib/pancake/hooks/inheritable_inner_classes.rb +15 -2
- data/lib/pancake/master.rb +34 -1
- data/lib/pancake/mixins/render.rb +1 -2
- data/lib/pancake/mixins/stack_helper.rb +1 -1
- data/lib/pancake/router.rb +18 -63
- data/lib/pancake/stack/configuration.rb +3 -5
- data/lib/pancake/stack/router.rb +10 -33
- data/lib/pancake/stack/stack.rb +70 -50
- data/{spec/helpers → lib/pancake/test}/helpers.rb +3 -3
- data/lib/pancake/test/matchers.rb +20 -0
- data/lib/pancake/vendor/hashie/.document +5 -0
- data/lib/pancake/vendor/hashie/.gitignore +7 -0
- data/lib/pancake/vendor/hashie/Gemfile +11 -0
- data/lib/pancake/vendor/hashie/Gemfile.lock +25 -0
- data/lib/pancake/{generators/templates/short/%stack_name%/LICENSE.tt → vendor/hashie/LICENSE} +1 -1
- data/lib/pancake/vendor/hashie/README.rdoc +101 -0
- data/lib/pancake/{generators/templates/micro/%stack_name%/Rakefile.tt → vendor/hashie/Rakefile} +3 -13
- data/lib/pancake/vendor/hashie/VERSION +1 -0
- data/lib/pancake/vendor/hashie/hashie.gemspec +33 -0
- data/lib/pancake/vendor/hashie/lib/hashie.rb +5 -0
- data/lib/pancake/vendor/hashie/lib/hashie/clash.rb +86 -0
- data/lib/pancake/vendor/hashie/lib/hashie/dash.rb +108 -0
- data/lib/pancake/vendor/hashie/lib/hashie/hash.rb +22 -0
- data/lib/pancake/vendor/hashie/lib/hashie/hash_extensions.rb +49 -0
- data/lib/pancake/vendor/hashie/lib/hashie/mash.rb +148 -0
- data/lib/pancake/vendor/hashie/spec/hashie/clash_spec.rb +42 -0
- data/lib/pancake/vendor/hashie/spec/hashie/dash_spec.rb +103 -0
- data/lib/pancake/vendor/hashie/spec/hashie/hash_spec.rb +22 -0
- data/lib/pancake/vendor/hashie/spec/hashie/mash_spec.rb +135 -0
- data/lib/pancake/vendor/hashie/spec/spec.opts +2 -0
- data/lib/pancake/{generators/templates/short/%stack_name%/spec/spec_helper.rb.tt → vendor/hashie/spec/spec_helper.rb} +7 -7
- data/spec/pancake/configuration_spec.rb +1 -1
- data/spec/pancake/constants_spec.rb +1 -1
- data/spec/pancake/defaults/configuration_spec.rb +1 -1
- data/spec/pancake/hooks/on_inherit_spec.rb +13 -13
- data/spec/pancake/inheritance_spec.rb +22 -22
- data/spec/pancake/middleware_spec.rb +6 -5
- data/spec/pancake/middlewares/logger_spec.rb +1 -1
- data/spec/pancake/middlewares/static_spec.rb +1 -1
- data/spec/pancake/mime_types_spec.rb +1 -1
- data/spec/pancake/mixins/publish_spec.rb +24 -24
- data/spec/pancake/mixins/render/template_spec.rb +1 -1
- data/spec/pancake/mixins/render/view_context_spec.rb +1 -1
- data/spec/pancake/mixins/render_spec.rb +1 -1
- data/spec/pancake/mixins/request_helper_spec.rb +1 -1
- data/spec/pancake/mixins/stack_helper_spec.rb +3 -3
- data/spec/pancake/pancake_spec.rb +1 -1
- data/spec/pancake/paths_spec.rb +30 -30
- data/spec/pancake/stack/router_spec.rb +24 -62
- data/spec/pancake/stack/stack_configuration_spec.rb +1 -1
- data/spec/pancake/stack/stack_spec.rb +47 -4
- data/spec/spec_helper.rb +3 -3
- metadata +56 -128
- data/bin/pancake-gen +0 -30
- data/lib/pancake/bootloaders.rb +0 -187
- data/lib/pancake/generators/base.rb +0 -12
- data/lib/pancake/generators/micro_generator.rb +0 -17
- data/lib/pancake/generators/short_generator.rb +0 -18
- data/lib/pancake/generators/templates/common/dotgitignore +0 -22
- data/lib/pancake/generators/templates/common/dothtaccess +0 -17
- data/lib/pancake/generators/templates/micro/%stack_name%/%stack_name%.rb.tt +0 -8
- data/lib/pancake/generators/templates/micro/%stack_name%/config.ru.tt +0 -12
- data/lib/pancake/generators/templates/micro/%stack_name%/pancake_init.rb.tt +0 -1
- data/lib/pancake/generators/templates/micro/%stack_name%/public/.empty_directory +0 -0
- data/lib/pancake/generators/templates/micro/%stack_name%/tmp/.empty_directory +0 -0
- data/lib/pancake/generators/templates/micro/%stack_name%/views/root.html.haml +0 -1
- data/lib/pancake/generators/templates/short/%stack_name%/README.tt +0 -7
- data/lib/pancake/generators/templates/short/%stack_name%/Rakefile.tt +0 -56
- data/lib/pancake/generators/templates/short/%stack_name%/VERSION.tt +0 -1
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%.rb.tt +0 -12
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/%stack_name%.rb.tt +0 -6
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/config.ru.tt +0 -10
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/config/config.rb.tt +0 -23
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/config/environments/development.rb.tt +0 -15
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/config/environments/production.rb.tt +0 -16
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/config/environments/staging.rb.tt +0 -17
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/models/.empty_directory +0 -0
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/mounts/.empty_directory +0 -0
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/public/.empty_directory +0 -0
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/tasks/%stack_name%.rake.tt +0 -4
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/tmp/.empty_directory +0 -0
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/views/root.html.haml +0 -2
- data/lib/pancake/generators/templates/short/%stack_name%/pancake_init.rb.tt +0 -1
- data/lib/pancake/generators/templates/short/%stack_name%/spec/%stack_name%_spec.rb.tt +0 -11
- data/lib/pancake/stack/app.rb +0 -10
- data/lib/pancake/stack/bootloader.rb +0 -114
- data/lib/pancake/stack/middleware.rb +0 -0
- data/lib/pancake/stacks/short.rb +0 -3
- data/lib/pancake/stacks/short/bootloaders.rb +0 -5
- data/lib/pancake/stacks/short/controller.rb +0 -184
- data/lib/pancake/stacks/short/default/views/base.html.haml +0 -5
- data/lib/pancake/stacks/short/default/views/error.html.haml +0 -12
- data/lib/pancake/stacks/short/stack.rb +0 -207
- data/spec/helpers/matchers.rb +0 -25
- data/spec/pancake/bootloaders_spec.rb +0 -119
- data/spec/pancake/stack/app_spec.rb +0 -28
- data/spec/pancake/stack/bootloader_spec.rb +0 -41
- data/spec/pancake/stack/middleware_spec.rb +0 -0
- data/spec/pancake/stacks/short/controller_spec.rb +0 -442
- data/spec/pancake/stacks/short/middlewares_spec.rb +0 -22
- data/spec/pancake/stacks/short/router_spec.rb +0 -150
- data/spec/pancake/stacks/short/stack_spec.rb +0 -117
data/bin/pancake
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'rubygems'
|
3
|
+
require 'thor/runner'
|
4
|
+
require 'pancake'
|
5
|
+
|
6
|
+
Pancake.load_generators!
|
7
|
+
|
8
|
+
class PancakeGeneratorRunner < Thor
|
9
|
+
map "-T" => :list, "-i" => :install, "-u" => :update, "-v" => :version
|
10
|
+
|
11
|
+
desc "list [SEARCH]", "List the available pancake tasks (--substring means .*SEARCH)"
|
12
|
+
method_options :substring => :boolean, :all => :boolean
|
13
|
+
def list(search="")
|
14
|
+
search = ".*#{search}" if options["substring"]
|
15
|
+
search = /^#{search}.*/i
|
16
|
+
group = options[:group] || "standard"
|
17
|
+
|
18
|
+
klasses = Thor::Base.subclasses.select do |k|
|
19
|
+
(options[:all] || k.group == group) && k.namespace =~ search
|
20
|
+
end
|
21
|
+
|
22
|
+
display_klasses(klasses)
|
23
|
+
end
|
24
|
+
|
25
|
+
def method_missing(meth, *args, &blk)
|
26
|
+
klass, task = Thor::Util.find_class_and_task_by_namespace(meth.to_s)
|
27
|
+
unless klass
|
28
|
+
puts "Could not find a generator for #{meth.to_s}"
|
29
|
+
exit(1)
|
30
|
+
end
|
31
|
+
args.unshift(task) if task
|
32
|
+
klass.start(args, :shell => self.shell)
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
def display_klasses(klasses)
|
37
|
+
klasses -= [Thor, Thor::Runner, Thor::Group]
|
38
|
+
|
39
|
+
# Remove subclasses
|
40
|
+
klasses.dup.each do |klass|
|
41
|
+
klasses -= Thor::Util.thor_classes_in(klass)
|
42
|
+
end
|
43
|
+
|
44
|
+
klasses.reject!{|k| k == self.class}
|
45
|
+
|
46
|
+
list = Hash.new { |h,k| h[k] = [] }
|
47
|
+
groups = klasses.select { |k| k.ancestors.include?(Thor::Group) }
|
48
|
+
|
49
|
+
# Get classes which inherit from Thor
|
50
|
+
(klasses - groups).each { |k| list[k.namespace] += k.printable_tasks(false) }
|
51
|
+
|
52
|
+
# Get classes which inherit from Thor::Base
|
53
|
+
groups.map! { |k| k.printable_tasks(false).first }
|
54
|
+
list["root"] = groups
|
55
|
+
|
56
|
+
# Order namespaces with default coming first
|
57
|
+
list = list.sort{ |a,b| a[0].sub(/^default/, '') <=> b[0].sub(/^default/, '') }
|
58
|
+
list.each { |n, tasks| display_tasks(n, tasks) unless tasks.empty? }
|
59
|
+
end
|
60
|
+
|
61
|
+
def display_tasks(namespace, list)
|
62
|
+
list.sort!{ |a,b| a[0] <=> b[0] }
|
63
|
+
|
64
|
+
say shell.set_color(namespace, :blue, true)
|
65
|
+
say "-" * namespace.size
|
66
|
+
|
67
|
+
print_table(list, :truncate => true)
|
68
|
+
say
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
PancakeGeneratorRunner.start
|
73
|
+
|
74
|
+
#case ARGV.shift
|
75
|
+
#when "short"
|
76
|
+
# Pancake::Generators::Short.start
|
77
|
+
#when "micro"
|
78
|
+
# Pancake::Generators::Micro.start
|
79
|
+
#when '-v', '--version'
|
80
|
+
# version_file = File.dirname(__FILE__) + '/../VERSION'
|
81
|
+
# if File.exists?(version_file) and version = File.read(version_file)
|
82
|
+
# puts "Pancake Version: #{version}"
|
83
|
+
# end
|
84
|
+
#else
|
85
|
+
# puts %{
|
86
|
+
# Usage: pancake-gen [type|options] /path/to/your/app
|
87
|
+
#
|
88
|
+
# Type can be:
|
89
|
+
# micro, short
|
90
|
+
#
|
91
|
+
# Options:
|
92
|
+
# -v, --version Show the version number and quit.
|
93
|
+
# -h, --help Show this help message and quit.
|
94
|
+
# }
|
95
|
+
#end
|
96
|
+
|
data/lib/pancake.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
require 'rubygems'
|
2
|
+
#require 'hashie'
|
3
|
+
$:.unshift File.join(File.dirname(__FILE__), "pancake", "vendor", "hashie", "lib")
|
2
4
|
require 'hashie'
|
3
5
|
require 'active_support/core_ext/class'
|
4
6
|
require 'active_support/inflector'
|
5
7
|
require 'active_support/core_ext/string/inflections'
|
6
8
|
require 'active_support/ordered_hash'
|
7
|
-
require '
|
8
|
-
require 'usher/interface/rack'
|
9
|
+
require 'http_router'
|
9
10
|
require 'tilt'
|
10
11
|
|
11
12
|
module Pancake
|
@@ -14,16 +15,12 @@ module Pancake
|
|
14
15
|
autoload :Console, "pancake/console"
|
15
16
|
autoload :Paths, "pancake/paths"
|
16
17
|
autoload :Configuration, "pancake/configuration"
|
17
|
-
autoload :BootLoaderMixin, "pancake/bootloaders"
|
18
18
|
autoload :MimeTypes, "pancake/mime_types"
|
19
19
|
autoload :Middleware, "pancake/middleware"
|
20
20
|
autoload :Router, "pancake/router"
|
21
21
|
autoload :Errors, "pancake/errors"
|
22
22
|
autoload :Stack, "pancake/stack/stack"
|
23
|
-
|
24
|
-
module Stacks
|
25
|
-
autoload :Short, "pancake/stacks/short"
|
26
|
-
end
|
23
|
+
autoload :PancakeConfig, "pancake/defaults/configuration"
|
27
24
|
|
28
25
|
module Hooks
|
29
26
|
autoload :OnInherit, 'pancake/hooks/on_inherit'
|
@@ -45,6 +42,7 @@ module Pancake
|
|
45
42
|
|
46
43
|
module Test
|
47
44
|
autoload :Matchers, "pancake/test/matchers"
|
45
|
+
autoload :Helpers, "pancake/test/helpers"
|
48
46
|
end
|
49
47
|
end
|
50
48
|
|
@@ -71,7 +71,8 @@ module Pancake
|
|
71
71
|
# If the default is a proc, do not cache it
|
72
72
|
case defaults[name][:value]
|
73
73
|
when Proc
|
74
|
-
|
74
|
+
p = defaults[name][:value]
|
75
|
+
instance_eval &p
|
75
76
|
else
|
76
77
|
val = defaults[name][:value]
|
77
78
|
val = val.dup rescue val
|
@@ -111,28 +112,6 @@ module Pancake
|
|
111
112
|
end # self
|
112
113
|
end # Configuration
|
113
114
|
|
114
|
-
class PancakeConfig < Configuration::Base
|
115
|
-
def stacks(label = nil)
|
116
|
-
@stacks ||= {}
|
117
|
-
result = label.nil? ? @stacks : @stacks[label]
|
118
|
-
yield result if block_given?
|
119
|
-
result
|
120
|
-
end
|
121
|
-
|
122
|
-
def configs(label = nil)
|
123
|
-
@configs ||= Hash.new do |h,k|
|
124
|
-
if (k.is_a?(Class) || k.is_a?(Module)) && defined?(k::Configuration)
|
125
|
-
h[k] = k::Configuration.new
|
126
|
-
else
|
127
|
-
nil
|
128
|
-
end
|
129
|
-
end
|
130
|
-
result = label.nil? ? @configs : @configs[label]
|
131
|
-
yield result if block_given?
|
132
|
-
result
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
115
|
def self.configuration
|
137
116
|
@configuration ||= PancakeConfig.new
|
138
117
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class Pancake::PancakeConfig
|
1
|
+
class Pancake::PancakeConfig < Pancake::Configuration::Base
|
2
2
|
default :log_path, Proc.new{ "log/pancake_#{Pancake.env}.log"}
|
3
3
|
default :log_level, :info
|
4
4
|
default :log_delimiter, " ~ "
|
@@ -20,4 +20,24 @@ class Pancake::PancakeConfig
|
|
20
20
|
def reset_log_stream!
|
21
21
|
values.delete(:log_stream)
|
22
22
|
end
|
23
|
+
|
24
|
+
def stacks(label = nil)
|
25
|
+
@stacks ||= {}
|
26
|
+
result = label.nil? ? @stacks : @stacks[label]
|
27
|
+
yield result if block_given?
|
28
|
+
result
|
29
|
+
end
|
30
|
+
|
31
|
+
def configs(label = nil)
|
32
|
+
@configs ||= Hash.new do |h,k|
|
33
|
+
if (k.is_a?(Class) || k.is_a?(Module)) && defined?(k::Configuration)
|
34
|
+
h[k] = k::Configuration.new
|
35
|
+
else
|
36
|
+
nil
|
37
|
+
end
|
38
|
+
end
|
39
|
+
result = label.nil? ? @configs : @configs[label]
|
40
|
+
yield result if block_given?
|
41
|
+
result
|
42
|
+
end
|
23
43
|
end
|
data/lib/pancake/generators.rb
CHANGED
@@ -3,8 +3,9 @@ module Pancake
|
|
3
3
|
module InheritableInnerClasses
|
4
4
|
def self.extended(base)
|
5
5
|
base.class_eval do
|
6
|
-
extlib_inheritable_reader :_inhertiable_inner_classes
|
7
|
-
@_inhertiable_inner_classes
|
6
|
+
extlib_inheritable_reader :_inhertiable_inner_classes, :_before_inner_class_inheritance
|
7
|
+
@_inhertiable_inner_classes = []
|
8
|
+
@_before_inner_class_inheritance = []
|
8
9
|
end
|
9
10
|
end # extended
|
10
11
|
|
@@ -40,6 +41,16 @@ module Pancake
|
|
40
41
|
_inhertiable_inner_classes
|
41
42
|
end
|
42
43
|
|
44
|
+
# Runs any hooks before the inheritance of any inner classes
|
45
|
+
#
|
46
|
+
# @api public
|
47
|
+
# @since 0.3.0
|
48
|
+
# @author Daniel Neighman
|
49
|
+
def before_inner_class_inheritance(&blk)
|
50
|
+
_before_inner_class_inheritance << blk if blk
|
51
|
+
_before_inner_class_inheritance
|
52
|
+
end
|
53
|
+
|
43
54
|
# The inherited hook that sets up inherited inner classes. Remember if you overwrite this method, you should
|
44
55
|
# call super!
|
45
56
|
#
|
@@ -49,11 +60,13 @@ module Pancake
|
|
49
60
|
def inherited(base)
|
50
61
|
super
|
51
62
|
class_defs = inheritable_inner_classes.map do |klass|
|
63
|
+
_before_inner_class_inheritance.each{|blk| blk.call(base.superclass) }
|
52
64
|
"class #{klass} < superclass::#{klass}; end\n"
|
53
65
|
end
|
54
66
|
base.class_eval(class_defs.join)
|
55
67
|
end
|
56
68
|
|
69
|
+
|
57
70
|
end # InheritableInnerClasses
|
58
71
|
end # Hooks
|
59
72
|
end # Pancake
|
data/lib/pancake/master.rb
CHANGED
@@ -7,6 +7,37 @@ module Pancake
|
|
7
7
|
|
8
8
|
class << self
|
9
9
|
attr_accessor :root
|
10
|
+
attr_accessor :_before_build, :_generators
|
11
|
+
|
12
|
+
def before_build(&blk)
|
13
|
+
unless _before_build
|
14
|
+
self._before_build = []
|
15
|
+
end
|
16
|
+
_before_build << blk if blk
|
17
|
+
_before_build
|
18
|
+
end
|
19
|
+
|
20
|
+
def generators(&blk)
|
21
|
+
self._generators = [] unless _generators
|
22
|
+
_generators << blk if blk
|
23
|
+
_generators
|
24
|
+
end
|
25
|
+
|
26
|
+
def load_generators!
|
27
|
+
return if @load_generators
|
28
|
+
@load_generators = true
|
29
|
+
generators.each{|b| b.call}
|
30
|
+
|
31
|
+
# load any global generator files
|
32
|
+
highest = {}
|
33
|
+
Gem.find_files("pancake/generators/global.rb").sort.reverse.each do |f|
|
34
|
+
f =~ /gems\/([^\/]+?)-(\d\.[^\/]+?)\/lib\/pancake/
|
35
|
+
highest[$1] ||= begin
|
36
|
+
require f
|
37
|
+
f
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
10
41
|
|
11
42
|
# Start Pancake. This provides a full pancake stack to use inside a rack application
|
12
43
|
#
|
@@ -18,11 +49,13 @@ module Pancake
|
|
18
49
|
#
|
19
50
|
# @api public
|
20
51
|
# @author Daniel Neighman
|
21
|
-
def start(opts, &block)
|
52
|
+
def start(opts = {}, &block)
|
22
53
|
self.root = opts[:root] || Dir.pwd
|
23
54
|
|
24
55
|
# Build Pancake
|
25
56
|
the_app = instance_eval(&block)
|
57
|
+
before_build.each{|blk| blk.call}
|
58
|
+
|
26
59
|
Pancake::Middleware.build(the_app, middlewares)
|
27
60
|
end
|
28
61
|
|
@@ -70,7 +70,6 @@ module Pancake
|
|
70
70
|
when Template
|
71
71
|
name
|
72
72
|
when String, Symbol
|
73
|
-
|
74
73
|
template_names = case __template = _template_name_for(name, opts)
|
75
74
|
when String, Symbol
|
76
75
|
[__template]
|
@@ -176,7 +175,7 @@ module Pancake
|
|
176
175
|
end
|
177
176
|
|
178
177
|
def _partial_template_name_for(name, opts)
|
179
|
-
"_#{
|
178
|
+
"_#{name}"
|
180
179
|
end
|
181
180
|
end # InstanceMethods
|
182
181
|
end # Render
|
data/lib/pancake/router.rb
CHANGED
@@ -1,8 +1,4 @@
|
|
1
1
|
module Pancake
|
2
|
-
# Get the ability to mark this as a consuming route.
|
3
|
-
class ::Usher::Route
|
4
|
-
attr_accessor :consuming
|
5
|
-
end
|
6
2
|
|
7
3
|
# Generate a url for any pancake configuration that has a router
|
8
4
|
#
|
@@ -28,17 +24,16 @@ module Pancake
|
|
28
24
|
elsif app_name.respond_to?(:router)
|
29
25
|
raise Pancake::Errors::UnknownRouter
|
30
26
|
end
|
31
|
-
the_router.base_url
|
27
|
+
the_router.respond_to?(:base_url) ?
|
28
|
+
the_router.base_url(opts) :
|
29
|
+
"/"
|
32
30
|
end
|
33
31
|
|
34
|
-
# The pancake router
|
35
|
-
#
|
36
|
-
# nested routers, and even generate from nested routers.
|
37
|
-
# @see http://github.com/joshbuddy/usher
|
32
|
+
# The pancake router uses a http_router router
|
33
|
+
# @see http://github.com/joshbuddy/http_router
|
38
34
|
# @since 0.1.2
|
39
35
|
# @author Daniel Neighman
|
40
|
-
class Router <
|
41
|
-
attr_writer :router
|
36
|
+
class Router < HttpRouter
|
42
37
|
attr_accessor :stack
|
43
38
|
|
44
39
|
CONFIGURATION_KEY = "pancake.request.configuration".freeze
|
@@ -56,7 +51,6 @@ module Pancake
|
|
56
51
|
@mounted_app, @mount_path = mounted_app, mount_path
|
57
52
|
@stackup_with = opts.delete(:_stackup) || :stackup
|
58
53
|
@args = opts.delete(:_args) || []
|
59
|
-
@exact_match = opts.delete(:_exact_match) || false
|
60
54
|
@options = opts
|
61
55
|
end
|
62
56
|
|
@@ -71,14 +65,8 @@ module Pancake
|
|
71
65
|
!!@mounted
|
72
66
|
end
|
73
67
|
|
74
|
-
def exact_match?
|
75
|
-
!!@exact_match
|
76
|
-
end
|
77
|
-
|
78
68
|
def mount!(route)
|
79
69
|
app = nil
|
80
|
-
route.consuming = true
|
81
|
-
route.match_partially! unless exact_match?
|
82
70
|
if mounted_app.respond_to?(stackup_with)
|
83
71
|
app = mounted_app.send(stackup_with, *args)
|
84
72
|
else
|
@@ -86,10 +74,15 @@ module Pancake
|
|
86
74
|
end
|
87
75
|
route.to(app)
|
88
76
|
route.name(@name) if @name
|
77
|
+
route.partial
|
89
78
|
route
|
90
79
|
end
|
91
80
|
end
|
92
81
|
|
82
|
+
def dup
|
83
|
+
puts "Called DUP: #{caller.first}"
|
84
|
+
clone
|
85
|
+
end
|
93
86
|
|
94
87
|
# Mounts an application in the router as a sub application in the
|
95
88
|
# url space. This will route directly to the sub application and
|
@@ -114,37 +107,13 @@ module Pancake
|
|
114
107
|
end
|
115
108
|
end
|
116
109
|
|
117
|
-
# Adds a route to the router.
|
118
|
-
# @see Usher::Interface::Rack#add
|
119
|
-
def add(path, opts = {}, &block)
|
120
|
-
opts = cooerce_options_to_usher(opts)
|
121
|
-
route = super(path, opts)
|
122
|
-
if block_given?
|
123
|
-
route.to(block)
|
124
|
-
end
|
125
|
-
route
|
126
|
-
end
|
127
|
-
|
128
|
-
# Generate a url
|
129
|
-
def url(name_or_path, options = {})
|
130
|
-
if Hash === name_or_path
|
131
|
-
name = nil
|
132
|
-
options = name_or_path
|
133
|
-
else
|
134
|
-
name = name_or_path
|
135
|
-
end
|
136
|
-
u = generate(name, options)
|
137
|
-
return u if u.nil?
|
138
|
-
u.empty? ? "/" : u
|
139
|
-
end
|
140
|
-
|
141
110
|
def base_url(opts = {})
|
142
|
-
|
111
|
+
url_mount.nil? ? "/" : url_mount.url(opts)
|
143
112
|
end
|
144
113
|
|
145
114
|
def call(env)
|
146
115
|
apply_layout = env[LAYOUT_KEY]
|
147
|
-
env[LAYOUT_KEY] = true if stack.use_layout?
|
116
|
+
env[LAYOUT_KEY] = true if stack && stack.use_layout?
|
148
117
|
|
149
118
|
orig_config = env[CONFIGURATION_KEY]
|
150
119
|
orig_route = env[ROUTE_KEY]
|
@@ -158,29 +127,15 @@ module Pancake
|
|
158
127
|
end
|
159
128
|
|
160
129
|
private
|
161
|
-
|
162
|
-
|
163
|
-
# the raw usher when we're first declaring the route.
|
164
|
-
# @api private
|
165
|
-
def cooerce_options_to_usher(opts)
|
166
|
-
defaults = opts.delete(:_defaults)
|
167
|
-
opts[:default_values] ||= {}
|
168
|
-
opts[:default_values].merge!(defaults) if defaults
|
169
|
-
opts
|
170
|
-
end
|
171
|
-
|
172
|
-
# Overwrites the method in Rack::Interface::Rack to mash
|
173
|
-
# the usher.params into the rack request.params
|
174
|
-
# @api private
|
175
|
-
def after_match(request, response)
|
130
|
+
def process_params(env, response)
|
131
|
+
request = Rack::Request.new(env)
|
176
132
|
request.env['rack.request.query_hash'] = request.params.dup
|
177
133
|
super
|
178
|
-
consume_path!(request, response) if !response.partial_match? && response.path.route.consuming
|
179
|
-
request.params.merge!(request.env['usher.params']) unless request.env['usher.params'].empty?
|
180
134
|
|
181
|
-
|
135
|
+
env['router.params'] = Hashie::Mash.new(env['router.params']) if env['router.params'] && ! env['router.params'].empty?
|
182
136
|
|
183
|
-
request.env[
|
137
|
+
request.env['rack.request.query_hash'].merge!(env['router.params']) unless env['router.params'].nil?
|
138
|
+
# make the request params a hashie mash
|
184
139
|
request.env['rack.request.query_hash'] = Hashie::Mash.new(request.params) unless request.params.kind_of?(Hashie::Mash)
|
185
140
|
end
|
186
141
|
end
|