mack 0.7.0.1 → 0.7.1
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/CHANGELOG +34 -0
- data/README +6 -13
- data/bin/env_handler.rb +10 -0
- data/bin/gem_load_path.rb +25 -0
- data/bin/mack +1 -0
- data/bin/mackery +22 -0
- data/bin/mackery-console +16 -0
- data/bin/mackery-server +41 -0
- data/lib/mack.rb +7 -1
- data/lib/mack/controller/controller.rb +5 -4
- data/lib/mack/controller/request.rb +19 -1
- data/lib/mack/errors/errors.rb +8 -8
- data/lib/mack/generators/controller_generator/controller_generator.rb +1 -1
- data/lib/mack/generators/mack_application_generator/templates/app/views/layouts/application.html.erb.template +1 -2
- data/lib/mack/generators/mack_application_generator/templates/config/app_config/default.yml.template +2 -0
- data/lib/mack/generators/mack_application_generator/templates/config/database.yml.template +6 -6
- data/lib/mack/generators/passenger_generator/passenger_generator.rb +2 -0
- data/lib/mack/generators/passenger_generator/templates/config.ru.template +5 -0
- data/lib/mack/generators/passenger_generator/templates/tmp/README.template +2 -0
- data/lib/mack/initialization/application.rb +39 -36
- data/lib/mack/initialization/boot_loader.rb +174 -0
- data/lib/mack/initialization/configuration.rb +83 -95
- data/lib/mack/initialization/console.rb +11 -0
- data/lib/mack/initialization/environment.rb +16 -0
- data/lib/mack/initialization/helpers.rb +26 -24
- data/lib/mack/initialization/logging.rb +81 -81
- data/lib/mack/initialization/plugins.rb +14 -11
- data/lib/mack/initialization/server/simple_server.rb +3 -3
- data/lib/mack/rendering/type/base.rb +1 -1
- data/lib/mack/rendering/type/layout.rb +1 -1
- data/lib/mack/rendering/type/partial.rb +1 -1
- data/lib/mack/rendering/type/public.rb +1 -1
- data/lib/mack/rendering/type/template.rb +1 -1
- data/lib/mack/runner.rb +2 -2
- data/lib/mack/runner_helpers/session.rb +3 -3
- data/lib/mack/sessions/cookie_session_store.rb +44 -0
- data/lib/mack/{controller → sessions}/session.rb +0 -0
- data/lib/mack/sessions/session_store_base.rb +62 -0
- data/lib/mack/sessions/test_session_store.rb +38 -0
- data/lib/mack/tasks/mack_server_tasks.rake +8 -21
- data/lib/mack/tasks/mack_tasks.rake +33 -6
- data/lib/mack/tasks/rake_rules.rake +8 -0
- data/lib/mack/tasks/test_tasks.rake +39 -15
- data/lib/mack/testing/helpers.rb +6 -39
- data/lib/mack/utils/content_length_handler.rb +45 -0
- data/lib/mack/utils/forgery_detector.rb +152 -0
- data/lib/mack/utils/gem_manager.rb +22 -1
- data/lib/mack/utils/paths.rb +154 -0
- data/lib/mack/utils/server.rb +8 -6
- data/lib/mack/version.rb +1 -1
- data/lib/mack/view_helpers/asset_helpers.rb +50 -0
- data/lib/mack/view_helpers/form_helpers.rb +52 -6
- data/lib/mack/view_helpers/link_helpers.rb +6 -3
- data/lib/mack_app.rb +12 -14
- data/lib/mack_core.rb +35 -14
- data/lib/mack_tasks.rb +35 -20
- metadata +23 -27
- data/lib/mack/tasks/cachetastic_tasks.rake +0 -58
@@ -0,0 +1,174 @@
|
|
1
|
+
module Kernel
|
2
|
+
|
3
|
+
def boot_load(name, *dependencies, &block)
|
4
|
+
Mack::BootLoader.instance.add(name, *dependencies, &block)
|
5
|
+
end
|
6
|
+
|
7
|
+
end
|
8
|
+
|
9
|
+
|
10
|
+
module Mack
|
11
|
+
class BootLoader
|
12
|
+
include Singleton
|
13
|
+
|
14
|
+
attr_accessor :sequences
|
15
|
+
|
16
|
+
def initialize
|
17
|
+
self.sequences = {}
|
18
|
+
end
|
19
|
+
|
20
|
+
def add(name, *dependencies, &block)
|
21
|
+
self.sequences[name.to_sym] = Mack::BootLoader::Loader.new(name.to_sym, *dependencies, &block)
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.run(*args)
|
25
|
+
args.each do |a|
|
26
|
+
begin
|
27
|
+
Mack::BootLoader.instance.sequences[a.to_sym].run
|
28
|
+
rescue Exception => e
|
29
|
+
puts "[#{a}]: #{e.message}"
|
30
|
+
puts e.backtrace
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.run!(*args)
|
36
|
+
args.each do |a|
|
37
|
+
Mack::BootLoader.instance.sequences[a.to_sym].run!
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
class Loader
|
43
|
+
|
44
|
+
attr_accessor :name
|
45
|
+
attr_accessor :dependencies
|
46
|
+
attr_accessor :sequence
|
47
|
+
|
48
|
+
def initialize(name, *dependencies, &block)
|
49
|
+
self.name = name.to_sym
|
50
|
+
self.dependencies = dependencies
|
51
|
+
self.sequence = block
|
52
|
+
@run = false
|
53
|
+
end
|
54
|
+
|
55
|
+
def run
|
56
|
+
return if @run
|
57
|
+
self.dependencies.each do |dep|
|
58
|
+
Mack::BootLoader.run(dep)
|
59
|
+
end
|
60
|
+
self.sequence.call
|
61
|
+
@run = true
|
62
|
+
end
|
63
|
+
|
64
|
+
def run!
|
65
|
+
self.dependencies.each do |dep|
|
66
|
+
Mack::BootLoader.run!(dep)
|
67
|
+
end
|
68
|
+
self.sequence.call
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# module Mack
|
76
|
+
# class BootLoader
|
77
|
+
# include Singleton
|
78
|
+
# include Extlib::Hook
|
79
|
+
#
|
80
|
+
# attr_accessor :steps
|
81
|
+
# attr_accessor :additional_procs
|
82
|
+
#
|
83
|
+
# def initialize
|
84
|
+
# self.steps = [:initializers, :gems, :plugins, :libs, :default_controller, :routes, :app, :additional]
|
85
|
+
# self.additional_procs = []
|
86
|
+
# end
|
87
|
+
#
|
88
|
+
# def start
|
89
|
+
# Mack.logger.debug "Starting boot loader sequence...."
|
90
|
+
# end
|
91
|
+
#
|
92
|
+
# def initializers
|
93
|
+
# # set up initializers:
|
94
|
+
# Mack.logger.debug "Initializing custom initializers..." unless app_config.log.disable_initialization_logging
|
95
|
+
# Dir.glob(Mack::Paths.initializers("**/*.rb")) do |d|
|
96
|
+
# require d
|
97
|
+
# end
|
98
|
+
# end
|
99
|
+
#
|
100
|
+
# def gems
|
101
|
+
# Mack.logger.debug "Initializing custom gems..." unless app_config.log.disable_initialization_logging
|
102
|
+
# Mack::Utils::GemManager.instance.do_requires
|
103
|
+
# end
|
104
|
+
#
|
105
|
+
# def plugins
|
106
|
+
# # require 'plugins':
|
107
|
+
# Mack.logger.debug "Initializing plugins..." unless app_config.log.disable_initialization_logging
|
108
|
+
# require File.join(File.dirname(__FILE__), "plugins.rb")
|
109
|
+
# end
|
110
|
+
#
|
111
|
+
# def libs
|
112
|
+
# # require 'lib' files:
|
113
|
+
# Mack.logger.debug "Initializing lib classes..." unless app_config.log.disable_initialization_logging
|
114
|
+
# Dir.glob(Mack::Paths.lib("**/*.rb")).each do |d|
|
115
|
+
# require d
|
116
|
+
# end
|
117
|
+
# end
|
118
|
+
#
|
119
|
+
# def default_controller
|
120
|
+
# # make sure that default_controller is available to other controllers
|
121
|
+
# path = Mack::Paths.controllers("default_controller.rb")
|
122
|
+
# require path if File.exists?(path)
|
123
|
+
# end
|
124
|
+
#
|
125
|
+
# def routes
|
126
|
+
# # set up routes:
|
127
|
+
# Mack.logger.debug "Initializing routes..." unless app_config.log.disable_initialization_logging
|
128
|
+
# require Mack::Paths.config("routes")
|
129
|
+
# end
|
130
|
+
#
|
131
|
+
# def app
|
132
|
+
# # require 'app' files:
|
133
|
+
# Mack.logger.debug "Initializing 'app' classes..." unless app_config.log.disable_initialization_logging
|
134
|
+
# Dir.glob(Mack::Paths.app("**/*.rb")).each do |d|
|
135
|
+
# # puts "d: #{d}"
|
136
|
+
# begin
|
137
|
+
# require d
|
138
|
+
# rescue NameError => e
|
139
|
+
# if e.message.match("uninitialized constant")
|
140
|
+
# mod = e.message.gsub("uninitialized constant ", "")
|
141
|
+
# x =%{
|
142
|
+
# module ::#{mod}
|
143
|
+
# end
|
144
|
+
# }
|
145
|
+
# eval(x)
|
146
|
+
# require d
|
147
|
+
# else
|
148
|
+
# raise e
|
149
|
+
# end
|
150
|
+
# end
|
151
|
+
# end
|
152
|
+
# end
|
153
|
+
#
|
154
|
+
# def additional
|
155
|
+
# self.additional_procs.each do |p|
|
156
|
+
# puts "p: #{p.inspect}"
|
157
|
+
# p.call
|
158
|
+
# end
|
159
|
+
# end
|
160
|
+
#
|
161
|
+
# def finish
|
162
|
+
# Mack.logger.debug "...Finished boot loader sequence."
|
163
|
+
# end
|
164
|
+
#
|
165
|
+
# def self.run
|
166
|
+
# Mack::BootLoader.instance.start
|
167
|
+
# Mack::BootLoader.instance.steps.each do |step|
|
168
|
+
# Mack::BootLoader.instance.send(step)
|
169
|
+
# end
|
170
|
+
# Mack::BootLoader.instance.finish
|
171
|
+
# end
|
172
|
+
#
|
173
|
+
# end
|
174
|
+
# end
|
@@ -1,110 +1,98 @@
|
|
1
|
-
|
1
|
+
require 'mack-facets'
|
2
|
+
require 'application_configuration'
|
3
|
+
require File.join(File.dirname(__FILE__), 'boot_loader')
|
4
|
+
require File.join(File.dirname(__FILE__), '..', 'utils', 'paths')
|
5
|
+
boot_load(:configuration) do
|
6
|
+
module Mack
|
2
7
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
8
|
+
# Returns the root of the current Mack application
|
9
|
+
def self.root
|
10
|
+
ENV["MACK_ROOT"] ||= FileUtils.pwd
|
11
|
+
end
|
7
12
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
13
|
+
# Returns the environment of the current Mack application
|
14
|
+
def self.env
|
15
|
+
ENV["MACK_ENV"] ||= "development"
|
16
|
+
end
|
12
17
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
18
|
+
# All configuration for the Mack subsystem happens here. Each of the default environments,
|
19
|
+
# production, development, and test have their own default configuration options. These
|
20
|
+
# get merged with overall default options.
|
21
|
+
module Configuration # :nodoc:
|
17
22
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
23
|
+
class << self
|
24
|
+
attr_accessor :initialized_core
|
25
|
+
attr_accessor :initialized_application
|
26
|
+
end
|
22
27
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
"
|
31
|
-
"debug" => false,
|
32
|
-
"adapter" => "file",
|
33
|
-
"store_options" =>
|
34
|
-
{"dir" => File.join(Mack.root, "tmp")},
|
35
|
-
"expiry_time" => 14400,
|
36
|
-
"logging" => {
|
37
|
-
"logger_1" => {
|
38
|
-
"type" => "file",
|
39
|
-
"file" => File.join(Mack.root, "log", "cachetastic_caches_mack_session_cache.log")
|
40
|
-
}
|
41
|
-
}
|
42
|
-
}
|
43
|
-
} unless self.const_defined?("DEFAULTS_PRODUCTION")
|
28
|
+
# use local memory and store stuff for 24 hours:
|
29
|
+
# use file for sessions and store them for 4 hours:
|
30
|
+
DEFAULTS_PRODUCTION = {
|
31
|
+
"mack::use_lint" => false,
|
32
|
+
"mack::show_exceptions" => false,
|
33
|
+
"log_level" => "info",
|
34
|
+
"log::detailed_requests" => false
|
35
|
+
} unless self.const_defined?("DEFAULTS_PRODUCTION")
|
44
36
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
37
|
+
# use local memory and store stuff for 5 minutes:
|
38
|
+
DEFAULTS_DEVELOPMENT = {
|
39
|
+
"mack::cache_classes" => false,
|
40
|
+
"log_level" => "debug"
|
41
|
+
} unless self.const_defined?("DEFAULTS_DEVELOPMENT")
|
50
42
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
43
|
+
# use local memory and store stuff for 1 hour:
|
44
|
+
DEFAULTS_TEST = {
|
45
|
+
"log_level" => "error",
|
46
|
+
"run_remote_tests" => true,
|
47
|
+
"mack::cookie_values" => {},
|
48
|
+
"mack::session_store" => "test",
|
49
|
+
"mack::disable_forgery_detector" => true
|
50
|
+
} unless self.const_defined?("DEFAULTS_TEST")
|
57
51
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
"
|
71
|
-
"
|
72
|
-
"
|
73
|
-
"
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
"
|
83
|
-
|
84
|
-
"log::error_color" => "red",
|
85
|
-
"log::fatal_color" => "red",
|
86
|
-
"log::warn_color" => "yellow",
|
87
|
-
"log::completed_color" => "purple",
|
88
|
-
"log_level" => "info"
|
89
|
-
}#.merge(eval("DEFAULTS_#{Mack.env.upcase}"))
|
90
|
-
end
|
52
|
+
unless self.const_defined?("DEFAULTS")
|
53
|
+
DEFAULTS = {
|
54
|
+
"mack::render_url_timeout" => 5,
|
55
|
+
"mack::cache_classes" => true,
|
56
|
+
"mack::use_lint" => true,
|
57
|
+
"mack::show_exceptions" => true,
|
58
|
+
"mack::use_sessions" => true,
|
59
|
+
"mack::session_id" => "_mack_session_id",
|
60
|
+
"mack::cookie_values" => {
|
61
|
+
"path" => "/"
|
62
|
+
},
|
63
|
+
"mack::site_domain" => "http://localhost:3000",
|
64
|
+
"mack::testing_framework" => "rspec",
|
65
|
+
"mack::rspec_file_pattern" => "test/**/*_spec.rb",
|
66
|
+
"mack::test_case_file_pattern" => "test/**/*_test.rb",
|
67
|
+
"log::detailed_requests" => true,
|
68
|
+
"log::db_color" => "cyan",
|
69
|
+
"log::error_color" => "red",
|
70
|
+
"log::fatal_color" => "red",
|
71
|
+
"log::warn_color" => "yellow",
|
72
|
+
"log::completed_color" => "purple",
|
73
|
+
"log_level" => "info",
|
74
|
+
"mack::session_store" => "cookie",
|
75
|
+
"cookie_session_store::expiry_time" => 4.hours
|
76
|
+
}#.merge(eval("DEFAULTS_#{Mack.env.upcase}"))
|
77
|
+
end
|
91
78
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
79
|
+
app_config.load_hash(DEFAULTS, "mack_defaults")
|
80
|
+
app_config.load_hash(eval("DEFAULTS_#{Mack.env.upcase}"), "mack_defaults_#{Mack.env}")
|
81
|
+
app_config.load_file(Mack::Paths.app_config("default.yml"))
|
82
|
+
app_config.load_file(Mack::Paths.app_config("#{Mack.env}.yml"))
|
83
|
+
# app_config.reload
|
97
84
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
85
|
+
def self.dump
|
86
|
+
fcs = app_config.instance.instance_variable_get("@final_configuration_settings")
|
87
|
+
conf = {}
|
88
|
+
fcs.each_pair do |k, v|
|
89
|
+
unless v.is_a?(Application::Configuration::Namespace)
|
90
|
+
conf[k.to_s] = v unless k.to_s.match("__")
|
91
|
+
end
|
104
92
|
end
|
93
|
+
conf
|
105
94
|
end
|
106
|
-
conf
|
107
|
-
end
|
108
95
|
|
96
|
+
end
|
109
97
|
end
|
110
98
|
end
|
@@ -7,6 +7,8 @@
|
|
7
7
|
|
8
8
|
fl = File.join(File.dirname(__FILE__), "..")
|
9
9
|
|
10
|
+
require File.join(fl, "..", "..", "bin", "gem_load_path")
|
11
|
+
|
10
12
|
require File.join(fl, "..", "mack")
|
11
13
|
|
12
14
|
require File.join(fl, "testing", "helpers")
|
@@ -14,5 +16,14 @@ require File.join(fl, "testing", "helpers")
|
|
14
16
|
# self.send(:include, Mack::TestHelpers)
|
15
17
|
self.send(:include, Mack::Routes::Urls)
|
16
18
|
|
19
|
+
# When using the Mack console if you edit any files
|
20
|
+
# you can reload them in the console using this method
|
21
|
+
# without having to exit the console and start again.
|
22
|
+
def reload!
|
23
|
+
ivar_cache("_rack_reloader") do
|
24
|
+
Rack::Reloader.new(nil, 1)
|
25
|
+
end.reload!
|
26
|
+
end
|
27
|
+
|
17
28
|
# Prevent AutoRunner from getting executed when user exits out of console
|
18
29
|
Test::Unit.run = true
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Mack
|
2
|
+
# Allows hook methods for the loading of the environment.
|
3
|
+
module Environment
|
4
|
+
include Extlib::Hook
|
5
|
+
|
6
|
+
# Requires the Mack application classes only once.
|
7
|
+
# This is the method you want to add 'hooks' on for
|
8
|
+
# application load setup.
|
9
|
+
def self.load
|
10
|
+
ivar_cache do
|
11
|
+
require File.join(File.dirname(__FILE__), "..", "..", "mack_app")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
@@ -1,31 +1,33 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
module Mack
|
10
|
-
module ControllerHelpers # :nodoc:
|
1
|
+
boot_load(:helpers, :logging) do
|
2
|
+
# Include ApplicationHelper into all controllers:
|
3
|
+
Mack.logger.debug "Initializing helpers..." unless app_config.log.disable_initialization_logging
|
4
|
+
# adding application_helper module into all defined controllers
|
5
|
+
if Object.const_defined?("ApplicationHelper")
|
6
|
+
deprecate_method("ApplicationHelper", "Mack::ViewHelpers::ApplicationHelper", "0.7.0")
|
7
|
+
ApplicationHelper.include_safely_into(Mack::Rendering::ViewTemplate)
|
11
8
|
end
|
9
|
+
|
10
|
+
module Mack
|
11
|
+
module ControllerHelpers # :nodoc:
|
12
|
+
end
|
12
13
|
|
13
|
-
|
14
|
+
module ViewHelpers # :nodoc:
|
15
|
+
end
|
14
16
|
end
|
15
|
-
end
|
16
17
|
|
17
|
-
# Find controller level Helpers and include them into their respective controllers
|
18
|
-
Mack::ControllerHelpers.constants.each do |cont|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
18
|
+
# Find controller level Helpers and include them into their respective controllers
|
19
|
+
Mack::ControllerHelpers.constants.each do |cont|
|
20
|
+
h = "Mack::ControllerHelpers::#{cont}"
|
21
|
+
if Object.const_defined?(cont)
|
22
|
+
h.constantize.include_safely_into(cont.constantize)
|
23
|
+
else
|
24
|
+
Mack.logger.warn("Could not find: #{cont} controller for helper: #{h}")
|
25
|
+
end
|
24
26
|
end
|
25
|
-
end
|
26
27
|
|
27
|
-
# Find view level Helpers and include them into the Mack::Rendering::ViewTemplate
|
28
|
-
Mack::ViewHelpers.constants.each do |cont|
|
29
|
-
|
30
|
-
|
28
|
+
# Find view level Helpers and include them into the Mack::Rendering::ViewTemplate
|
29
|
+
Mack::ViewHelpers.constants.each do |cont|
|
30
|
+
h = "Mack::ViewHelpers::#{cont}".constantize
|
31
|
+
Mack::Rendering::ViewTemplate.send(:include, h)
|
32
|
+
end
|
31
33
|
end
|