hassox-pancake 0.1.6
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/LICENSE +20 -0
- data/README.textile +95 -0
- data/Rakefile +56 -0
- data/TODO +18 -0
- data/bin/jeweler +19 -0
- data/bin/pancake-gen +17 -0
- data/bin/rubyforge +19 -0
- data/lib/pancake.rb +48 -0
- data/lib/pancake/bootloaders.rb +180 -0
- data/lib/pancake/configuration.rb +140 -0
- data/lib/pancake/core_ext/class.rb +44 -0
- data/lib/pancake/core_ext/object.rb +22 -0
- data/lib/pancake/core_ext/symbol.rb +15 -0
- data/lib/pancake/errors.rb +61 -0
- data/lib/pancake/generators.rb +8 -0
- data/lib/pancake/generators/base.rb +12 -0
- data/lib/pancake/generators/flat_generator.rb +17 -0
- data/lib/pancake/generators/short_generator.rb +17 -0
- data/lib/pancake/generators/stack_generator.rb +17 -0
- data/lib/pancake/generators/templates/common/dotgitignore +22 -0
- data/lib/pancake/generators/templates/common/dothtaccess +17 -0
- data/lib/pancake/generators/templates/flat/%stack_name%/%stack_name%.rb.tt +8 -0
- data/lib/pancake/generators/templates/flat/%stack_name%/.gitignore +21 -0
- data/lib/pancake/generators/templates/flat/%stack_name%/config.ru.tt +12 -0
- data/lib/pancake/generators/templates/flat/%stack_name%/pancake.init.tt +1 -0
- data/lib/pancake/generators/templates/flat/%stack_name%/public/.empty_directory +0 -0
- data/lib/pancake/generators/templates/flat/%stack_name%/tmp/.empty_directory +0 -0
- data/lib/pancake/generators/templates/short/%stack_name%/.gitignore +21 -0
- data/lib/pancake/generators/templates/short/%stack_name%/LICENSE.tt +20 -0
- data/lib/pancake/generators/templates/short/%stack_name%/README.tt +7 -0
- data/lib/pancake/generators/templates/short/%stack_name%/Rakefile.tt +48 -0
- data/lib/pancake/generators/templates/short/%stack_name%/VERSION.tt +1 -0
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%.rb.tt +5 -0
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/%stack_name%.rb.tt +6 -0
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/config.ru.tt +12 -0
- data/lib/pancake/generators/templates/short/%stack_name%/lib/%stack_name%/gems/cache/.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%/tmp/.empty_directory +0 -0
- data/lib/pancake/generators/templates/short/%stack_name%/pancake.init.tt +1 -0
- data/lib/pancake/generators/templates/short/%stack_name%/spec/%stack_name%_spec.rb.tt +7 -0
- data/lib/pancake/generators/templates/short/%stack_name%/spec/spec_helper.rb.tt +9 -0
- data/lib/pancake/generators/templates/stack/%stack_name%/.gitignore +21 -0
- data/lib/pancake/generators/templates/stack/%stack_name%/LICENSE.tt +20 -0
- data/lib/pancake/generators/templates/stack/%stack_name%/README.tt +7 -0
- data/lib/pancake/generators/templates/stack/%stack_name%/Rakefile.tt +48 -0
- data/lib/pancake/generators/templates/stack/%stack_name%/VERSION.tt +1 -0
- data/lib/pancake/generators/templates/stack/%stack_name%/lib/%stack_name%.rb.tt +3 -0
- data/lib/pancake/generators/templates/stack/%stack_name%/lib/%stack_name%/config.ru.tt +12 -0
- data/lib/pancake/generators/templates/stack/%stack_name%/lib/%stack_name%/config/environments/development.rb.tt +18 -0
- data/lib/pancake/generators/templates/stack/%stack_name%/lib/%stack_name%/config/environments/production.rb.tt +18 -0
- data/lib/pancake/generators/templates/stack/%stack_name%/lib/%stack_name%/config/router.rb.tt +6 -0
- data/lib/pancake/generators/templates/stack/%stack_name%/lib/%stack_name%/gems/cache/.empty_directory +0 -0
- data/lib/pancake/generators/templates/stack/%stack_name%/lib/%stack_name%/mounts/.empty_directory +0 -0
- data/lib/pancake/generators/templates/stack/%stack_name%/lib/%stack_name%/public/.empty_directory +0 -0
- data/lib/pancake/generators/templates/stack/%stack_name%/lib/%stack_name%/tmp/.empty_directory +0 -0
- data/lib/pancake/generators/templates/stack/%stack_name%/pancake.init.tt +1 -0
- data/lib/pancake/generators/templates/stack/%stack_name%/spec/%stack_name%_spec.rb.tt +7 -0
- data/lib/pancake/generators/templates/stack/%stack_name%/spec/spec_helper.rb.tt +9 -0
- data/lib/pancake/hooks/inheritable_inner_classes.rb +60 -0
- data/lib/pancake/hooks/on_inherit.rb +34 -0
- data/lib/pancake/master.rb +87 -0
- data/lib/pancake/middleware.rb +354 -0
- data/lib/pancake/mime_types.rb +265 -0
- data/lib/pancake/mixins/publish.rb +125 -0
- data/lib/pancake/mixins/publish/action_options.rb +104 -0
- data/lib/pancake/mixins/render.rb +61 -0
- data/lib/pancake/mixins/request_helper.rb +92 -0
- data/lib/pancake/mixins/stack_helper.rb +44 -0
- data/lib/pancake/mixins/url.rb +10 -0
- data/lib/pancake/more/controller.rb +4 -0
- data/lib/pancake/more/controller/base.rb +34 -0
- data/lib/pancake/paths.rb +218 -0
- data/lib/pancake/router.rb +99 -0
- data/lib/pancake/stack/app.rb +10 -0
- data/lib/pancake/stack/bootloader.rb +79 -0
- data/lib/pancake/stack/configuration.rb +44 -0
- data/lib/pancake/stack/middleware.rb +0 -0
- data/lib/pancake/stack/router.rb +18 -0
- data/lib/pancake/stack/stack.rb +57 -0
- data/lib/pancake/stacks/short.rb +2 -0
- data/lib/pancake/stacks/short/controller.rb +105 -0
- data/lib/pancake/stacks/short/stack.rb +194 -0
- data/spec/helpers/helpers.rb +20 -0
- data/spec/helpers/matchers.rb +25 -0
- data/spec/pancake/bootloaders_spec.rb +109 -0
- data/spec/pancake/configuration_spec.rb +177 -0
- data/spec/pancake/fixtures/foo_stack/pancake.init +0 -0
- data/spec/pancake/fixtures/paths/controllers/controller1.rb +0 -0
- data/spec/pancake/fixtures/paths/controllers/controller2.rb +0 -0
- data/spec/pancake/fixtures/paths/controllers/controller3.rb +0 -0
- data/spec/pancake/fixtures/paths/models/model1.rb +0 -0
- data/spec/pancake/fixtures/paths/models/model2.rb +0 -0
- data/spec/pancake/fixtures/paths/models/model3.rb +0 -0
- data/spec/pancake/fixtures/paths/stack/controllers/controller1.rb +0 -0
- data/spec/pancake/fixtures/paths/stack/models/model3.rb +0 -0
- data/spec/pancake/fixtures/paths/stack/views/view1.erb +0 -0
- data/spec/pancake/fixtures/paths/stack/views/view1.rb +0 -0
- data/spec/pancake/fixtures/paths/stack/views/view2.erb +0 -0
- data/spec/pancake/fixtures/paths/stack/views/view2.haml +0 -0
- data/spec/pancake/fixtures/render_templates/context_template.html.erb +1 -0
- data/spec/pancake/fixtures/render_templates/erb_template.html.erb +1 -0
- data/spec/pancake/fixtures/render_templates/erb_template.json.erb +1 -0
- data/spec/pancake/fixtures/render_templates/haml_template.html.haml +1 -0
- data/spec/pancake/fixtures/render_templates/haml_template.xml.haml +1 -0
- data/spec/pancake/hooks/on_inherit_spec.rb +65 -0
- data/spec/pancake/inheritance_spec.rb +100 -0
- data/spec/pancake/middleware_spec.rb +401 -0
- data/spec/pancake/mime_types_spec.rb +234 -0
- data/spec/pancake/mixins/publish_spec.rb +94 -0
- data/spec/pancake/mixins/render_spec.rb +55 -0
- data/spec/pancake/mixins/stack_helper_spec.rb +46 -0
- data/spec/pancake/pancake_spec.rb +31 -0
- data/spec/pancake/paths_spec.rb +210 -0
- data/spec/pancake/stack/app_spec.rb +28 -0
- data/spec/pancake/stack/bootloader_spec.rb +41 -0
- data/spec/pancake/stack/middleware_spec.rb +0 -0
- data/spec/pancake/stack/router_spec.rb +266 -0
- data/spec/pancake/stack/stack_configuration_spec.rb +101 -0
- data/spec/pancake/stack/stack_spec.rb +55 -0
- data/spec/pancake/stacks/short/controller_spec.rb +287 -0
- data/spec/pancake/stacks/short/router_spec.rb +132 -0
- data/spec/pancake/stacks/short/stack_spec.rb +40 -0
- data/spec/spec_helper.rb +21 -0
- metadata +238 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
module Pancake
|
|
2
|
+
class Configuration
|
|
3
|
+
|
|
4
|
+
class Base
|
|
5
|
+
class_inheritable_reader :defaults
|
|
6
|
+
@defaults = Hash.new{|h,k| h[k] = {:value => nil, :description => ""}}
|
|
7
|
+
|
|
8
|
+
# Set a default on the the configuartion
|
|
9
|
+
class << self
|
|
10
|
+
|
|
11
|
+
# Set a default for this configuration class
|
|
12
|
+
# Provide a field/method name and a value to set this to.
|
|
13
|
+
# If you don't provide a value, and instead provide a block, then
|
|
14
|
+
# a proc will be called lazily when requested.
|
|
15
|
+
#
|
|
16
|
+
# Example
|
|
17
|
+
# config_klass = Pancake::Configuration.make
|
|
18
|
+
# config_class.default :foo, :bar, "This foo is a bar"
|
|
19
|
+
# config = config_class.new
|
|
20
|
+
#
|
|
21
|
+
# :api: public
|
|
22
|
+
def default(meth, *args, &block)
|
|
23
|
+
value, description = args
|
|
24
|
+
if block
|
|
25
|
+
description = value
|
|
26
|
+
value = block
|
|
27
|
+
end
|
|
28
|
+
defaults[meth][:value] = value
|
|
29
|
+
defaults[meth][:description] = description || ""
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Provides aaccess to the description for a default setting
|
|
33
|
+
#
|
|
34
|
+
# :api: public
|
|
35
|
+
def description_for(field)
|
|
36
|
+
defaults.keys.include?(field) ? defaults[field][:description] : ""
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# access to the singleton class
|
|
41
|
+
# :api: private
|
|
42
|
+
def singleton_class # :nodoc:
|
|
43
|
+
class << self; self; end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Access to the configuration defaults via the instance. Defers to the
|
|
47
|
+
# clas smethod for defaults
|
|
48
|
+
# :api: public
|
|
49
|
+
def defaults
|
|
50
|
+
self.class.defaults
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
# Access to the class descritpion for defaults
|
|
54
|
+
# :api: public
|
|
55
|
+
def description_for(field)
|
|
56
|
+
self.class.description_for(field)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Access to the currently set values for this configuration object
|
|
60
|
+
# :api: public
|
|
61
|
+
def values
|
|
62
|
+
@values ||= {}
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
private
|
|
66
|
+
def method_missing(name, *args)
|
|
67
|
+
if name.to_s =~ /(.*?)=$/
|
|
68
|
+
set_actual_value($1.to_sym, args.first)
|
|
69
|
+
else
|
|
70
|
+
if defaults.keys.include?(name) # We don't want to trigger a default value if we're blindly setting it
|
|
71
|
+
# If the default is a proc, do not cache it
|
|
72
|
+
case defaults[name][:value]
|
|
73
|
+
when Proc
|
|
74
|
+
instance_eval(&defaults[name][:value])
|
|
75
|
+
else
|
|
76
|
+
val = defaults[name][:value]
|
|
77
|
+
val = val.dup rescue val
|
|
78
|
+
set_actual_value(name, val)
|
|
79
|
+
end
|
|
80
|
+
else
|
|
81
|
+
nil
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Caches the values via a method rather than going through method_missing
|
|
87
|
+
# :api: private
|
|
88
|
+
def set_actual_value(name, val) # :nodoc:
|
|
89
|
+
singleton_class.class_eval <<-RUBY
|
|
90
|
+
def #{name}=(val) # def foo=(val)
|
|
91
|
+
values[#{name.inspect}] = val # values[:foo] = val
|
|
92
|
+
end # end
|
|
93
|
+
|
|
94
|
+
def #{name} # def foo
|
|
95
|
+
values[#{name.inspect}] # values[:foo]
|
|
96
|
+
end # end
|
|
97
|
+
RUBY
|
|
98
|
+
values[name] = val
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
end # Base
|
|
102
|
+
|
|
103
|
+
class << self
|
|
104
|
+
|
|
105
|
+
# Make a new configuration class
|
|
106
|
+
# :api: public
|
|
107
|
+
def make(&block)
|
|
108
|
+
Class.new(Pancake::Configuration::Base, &block)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
end # self
|
|
112
|
+
end # Configuration
|
|
113
|
+
|
|
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
|
+
def self.configuration
|
|
137
|
+
@configuration ||= PancakeConfig.new
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
end # Pancake
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
class Class
|
|
2
|
+
# Taken from extlib but uses a full Marshall.dump rather than just a dup.
|
|
3
|
+
# This may not work for some data types. The data must be marshalable to use this method.
|
|
4
|
+
#
|
|
5
|
+
# Defines class-level inheritable attribute reader. Attributes are available to subclasses,
|
|
6
|
+
# each subclass has a copy of parent's attribute.
|
|
7
|
+
#
|
|
8
|
+
# @param *syms<Array[#to_s]> Array of attributes to define inheritable reader for.
|
|
9
|
+
# @return <Array[#to_s]> Array of attributes converted into inheritable_readers.
|
|
10
|
+
#
|
|
11
|
+
# @api public
|
|
12
|
+
#
|
|
13
|
+
# @todo Do we want to block instance_reader via :instance_reader => false
|
|
14
|
+
# @todo It would be preferable that we do something with a Hash passed in
|
|
15
|
+
# (error out or do the same as other methods above) instead of silently
|
|
16
|
+
# moving on). In particular, this makes the return value of this function
|
|
17
|
+
# less useful.
|
|
18
|
+
def deep_copy_class_inheritable_reader(*ivars)
|
|
19
|
+
instance_reader = ivars.pop[:reader] if ivars.last.is_a?(Hash)
|
|
20
|
+
|
|
21
|
+
ivars.each do |ivar|
|
|
22
|
+
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
|
23
|
+
def self.#{ivar}
|
|
24
|
+
return @#{ivar} if self == #{self} || defined?(@#{ivar})
|
|
25
|
+
ivar = superclass.#{ivar}
|
|
26
|
+
return nil if ivar.nil? && !#{self}.instance_variable_defined?("@#{ivar}")
|
|
27
|
+
@#{ivar} = ivar && !ivar.is_a?(Module) && !ivar.is_a?(Numeric) ? Marshal.load(Marshal.dump(ivar)) : ivar
|
|
28
|
+
end
|
|
29
|
+
RUBY
|
|
30
|
+
unless instance_reader == false
|
|
31
|
+
self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
|
32
|
+
def #{ivar}
|
|
33
|
+
self.class.#{ivar}
|
|
34
|
+
end
|
|
35
|
+
RUBY
|
|
36
|
+
end # unless
|
|
37
|
+
end # ivars.each
|
|
38
|
+
end # self.deep_inheritable_reader
|
|
39
|
+
|
|
40
|
+
def deep_copy_class_inheritable_accessor(*ivars)
|
|
41
|
+
deep_copy_class_inheritable_reader(*ivars)
|
|
42
|
+
class_inheritable_writer(*ivars)
|
|
43
|
+
end
|
|
44
|
+
end # Class
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
class Object
|
|
2
|
+
extend ::Pancake::Hooks::InheritableInnerClasses
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
# Vendored from http://eigenclass.org/hiki/instance_exec
|
|
6
|
+
# 2009-06-02
|
|
7
|
+
# Adapted for ruby 1.9 where the method is deinfed on Object
|
|
8
|
+
unless Object.method_defined?(:instance_exec)
|
|
9
|
+
class Object
|
|
10
|
+
# Like instace_eval but allows parameters to be passed.
|
|
11
|
+
def instance_exec(*args, &block)
|
|
12
|
+
mname = "__instance_exec_#{Thread.current.object_id.abs}_#{object_id.abs}"
|
|
13
|
+
Object.class_eval{ define_method(mname, &block) }
|
|
14
|
+
begin
|
|
15
|
+
ret = send(mname, *args)
|
|
16
|
+
ensure
|
|
17
|
+
Object.class_eval{ undef_method(mname) } rescue nil
|
|
18
|
+
end
|
|
19
|
+
ret
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Taken from Rails d6b9f8410c990b3d68d1970f1461a1d385d098d7 20090731
|
|
2
|
+
unless :to_proc.respond_to?(:to_proc)
|
|
3
|
+
class Symbol
|
|
4
|
+
# Turns the symbol into a simple proc, which is especially useful for enumerations. Examples:
|
|
5
|
+
#
|
|
6
|
+
# # The same as people.collect { |p| p.name }
|
|
7
|
+
# people.collect(&:name)
|
|
8
|
+
#
|
|
9
|
+
# # The same as people.select { |p| p.manager? }.collect { |p| p.salary }
|
|
10
|
+
# people.select(&:manager?).collect(&:salary)
|
|
11
|
+
def to_proc
|
|
12
|
+
Proc.new { |*args| args.shift.__send__(self, *args) }
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
module Pancake
|
|
2
|
+
module Errors
|
|
3
|
+
class HttpError < StandardError
|
|
4
|
+
class_inheritable_accessor :name, :code, :description
|
|
5
|
+
|
|
6
|
+
def name; self.class.name; end
|
|
7
|
+
|
|
8
|
+
def code; self.class.code; end
|
|
9
|
+
|
|
10
|
+
def description; self.class.description; end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
class NotFound < HttpError
|
|
14
|
+
self.name = "Not Found"
|
|
15
|
+
self.code = 404
|
|
16
|
+
self.description = "The requested resource could not be found but may be available again in the future."
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
class UnknownRouter < NotFound
|
|
20
|
+
self.description = "The router could not be found"
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
class UnknownConfiguration < NotFound
|
|
24
|
+
self.description = "The configuration could not be found"
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
class Unauthorized < HttpError
|
|
28
|
+
self.name = "Unauthorized"
|
|
29
|
+
self.code = 401
|
|
30
|
+
self.description = "Authentication is required to access this resource."
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class Forbidden < HttpError
|
|
34
|
+
self.name = "Forbidden"
|
|
35
|
+
self.code = 403
|
|
36
|
+
self.description = "Access to this resource is denied."
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
class Server < HttpError
|
|
40
|
+
attr_accessor :exceptions
|
|
41
|
+
|
|
42
|
+
self.name = "Server Error"
|
|
43
|
+
self.code = 500
|
|
44
|
+
self.description = "An internal server error"
|
|
45
|
+
|
|
46
|
+
def initialize(*args)
|
|
47
|
+
super
|
|
48
|
+
@exceptions = []
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
class NotAcceptable < HttpError
|
|
53
|
+
self.name = "Not Acceptable"
|
|
54
|
+
self.code = 406
|
|
55
|
+
self.description = "The requeseted format could not be provided"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Pancake
|
|
2
|
+
module Generators
|
|
3
|
+
class Flat < Base
|
|
4
|
+
argument :stack_name, :banner => "Name of stack"
|
|
5
|
+
|
|
6
|
+
desc "Generates a stack"
|
|
7
|
+
def stack
|
|
8
|
+
say "Creating The Stack For #{stack_name}"
|
|
9
|
+
directory "flat/%stack_name%", stack_name
|
|
10
|
+
template File.join(self.class.source_root, "common/dotgitignore"), "#{stack_name}/.gitignore"
|
|
11
|
+
template File.join(self.class.source_root, "common/dothtaccess"), "#{stack_name}/public/.htaccess"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Pancake
|
|
2
|
+
module Generators
|
|
3
|
+
class Short < Base
|
|
4
|
+
argument :stack_name, :banner => "Name of stack"
|
|
5
|
+
|
|
6
|
+
desc "Generates a short stack"
|
|
7
|
+
def stack
|
|
8
|
+
say "Creating The Short Stack For #{stack_name}"
|
|
9
|
+
directory "short/%stack_name%", stack_name
|
|
10
|
+
template File.join(self.class.source_root, "common/dotgitignore"), "#{stack_name}/.gitignore"
|
|
11
|
+
template File.join(self.class.source_root, "common/dothtaccess"), "#{stack_name}/lib/#{stack_name}/public/.htaccess"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Pancake
|
|
2
|
+
module Generators
|
|
3
|
+
class Stack < Base
|
|
4
|
+
argument :stack_name, :banner => "Name of stack"
|
|
5
|
+
|
|
6
|
+
desc "Generates a stack"
|
|
7
|
+
def stack
|
|
8
|
+
say "Creating The Stack For #{stack_name}"
|
|
9
|
+
directory "stack/%stack_name%", stack_name
|
|
10
|
+
template File.join(self.class.source_root, "common/dotgitignore"), "#{stack_name}/.gitignore"
|
|
11
|
+
template File.join(self.class.source_root, "common/dothtaccess"), "#{stack_name}/lib/#{stack_name}/public/.htaccess"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
.DS_Store
|
|
2
|
+
log/*
|
|
3
|
+
tmp/*
|
|
4
|
+
TAGS
|
|
5
|
+
*~
|
|
6
|
+
.#*
|
|
7
|
+
schema/schema.rb
|
|
8
|
+
schema/*_structure.sql
|
|
9
|
+
schema/*.sqlite3
|
|
10
|
+
schema/*.sqlite
|
|
11
|
+
schema/*.db
|
|
12
|
+
*.sqlite
|
|
13
|
+
*.sqlite3
|
|
14
|
+
*.db
|
|
15
|
+
src/*
|
|
16
|
+
.hgignore
|
|
17
|
+
.hg/*
|
|
18
|
+
.svn/*
|
|
19
|
+
gems/gems/*/
|
|
20
|
+
gems/specifications/*
|
|
21
|
+
!gems/gems/thor*/
|
|
22
|
+
!gems/specifications/thor*
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Sets the default handler for FastCGI scripts
|
|
2
|
+
AddHandler fastcgi-script .fcgi
|
|
3
|
+
|
|
4
|
+
# If Apache2 is used together with mod_fcgid,
|
|
5
|
+
# uncomment the line below and comment in the line
|
|
6
|
+
# above to set the correct script handler
|
|
7
|
+
#AddHandler fcgid-script .fcgi
|
|
8
|
+
|
|
9
|
+
RewriteEngine On
|
|
10
|
+
|
|
11
|
+
RewriteRule ^$ index.html [QSA]
|
|
12
|
+
RewriteRule ^([^.]+)$ $1.html [QSA]
|
|
13
|
+
RewriteCond %{REQUEST_FILENAME} !-f
|
|
14
|
+
RewriteRule ^(.*)$ merb.fcgi [QSA,L]
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
ErrorDocument 500 "<h2>Application Error</h2>Merb could not be reached"
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
.DS_Store
|
|
2
|
+
log/*
|
|
3
|
+
TAGS
|
|
4
|
+
*~
|
|
5
|
+
.#*
|
|
6
|
+
schema/schema.rb
|
|
7
|
+
schema/*_structure.sql
|
|
8
|
+
schema/*.sqlite3
|
|
9
|
+
schema/*.sqlite
|
|
10
|
+
schema/*.db
|
|
11
|
+
*.sqlite
|
|
12
|
+
*.sqlite3
|
|
13
|
+
*.db
|
|
14
|
+
src/*
|
|
15
|
+
.hgignore
|
|
16
|
+
.hg/*
|
|
17
|
+
.svn/*
|
|
18
|
+
gems/gems/*/
|
|
19
|
+
gems/specifications/*
|
|
20
|
+
!gems/gems/thor*/
|
|
21
|
+
!gems/specifications/thor*
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
|
|
3
|
+
require 'pancake'
|
|
4
|
+
require ::File.join(::File.expand_path(::File.dirname(__FILE__)), "<%= stack_name %>")
|
|
5
|
+
|
|
6
|
+
# get the application to run. The applicadtion in the Pancake.start block
|
|
7
|
+
# is the master application. It will have all requests directed to it through the
|
|
8
|
+
# pancake middleware
|
|
9
|
+
# This should be a very minimal file, but should be used when any stand alone code needs to be included
|
|
10
|
+
app = Pancake.start(:root => Pancake.get_root(__FILE__)){ <%= stack_name.camel_case %>.stackup }
|
|
11
|
+
|
|
12
|
+
run app
|