mack 0.6.1.2 → 0.7.0
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 +49 -3
- data/README +4 -4
- data/bin/mack +1 -2
- data/lib/mack/controller/controller.rb +1 -1
- data/lib/mack/controller/cookie_jar.rb +4 -0
- data/lib/mack/controller/request.rb +55 -3
- data/lib/mack/controller/session.rb +9 -0
- data/lib/mack/controller/tell.rb +13 -0
- data/lib/mack/core_extensions/kernel.rb +39 -11
- data/lib/mack/core_extensions/symbol.rb +107 -0
- data/lib/mack/generators/controller_generator/controller_generator.rb +64 -0
- data/lib/mack/generators/controller_generator/manifest.yml +18 -0
- data/lib/mack/generators/controller_generator/templates/app/controllers/controller.rb.template +7 -0
- data/lib/mack/generators/controller_generator/templates/test/controllers/rspec.rb.template +15 -0
- data/lib/mack/generators/controller_generator/templates/test/controllers/test_case.rb.template +15 -0
- data/lib/mack/generators/controller_helper_generator/controller_helper_generator.rb +16 -0
- data/lib/mack/generators/controller_helper_generator/manifest.yml +15 -0
- data/lib/mack/generators/controller_helper_generator/templates/app/helpers/controllers/helper.rb.template +7 -0
- data/lib/mack/generators/controller_helper_generator/templates/test/helpers/controllers/rspec.rb.template +6 -0
- data/lib/mack/generators/controller_helper_generator/templates/test/helpers/controllers/test_case.rb.template +10 -0
- data/lib/mack/generators/mack_application_generator/mack_application_generator.rb +1 -0
- data/lib/mack/generators/mack_application_generator/manifest.yml +26 -10
- data/lib/mack/generators/mack_application_generator/templates/Rakefile.template +1 -1
- data/lib/mack/generators/mack_application_generator/templates/app/controllers/default_controller.rb.template +7 -1
- data/lib/mack/generators/mack_application_generator/templates/app/helpers/controllers/default_controller_helper.rb.template +1 -1
- data/lib/mack/generators/mack_application_generator/templates/app/helpers/views/application_helper.rb.template +3 -0
- data/lib/mack/generators/mack_application_generator/templates/app/views/default/index.html.erb.template +60 -2
- data/lib/mack/generators/mack_application_generator/templates/app/views/layouts/application.html.erb.template +10 -2
- data/lib/mack/generators/mack_application_generator/templates/config/app_config/default.yml.template +21 -0
- data/lib/mack/generators/mack_application_generator/templates/config/app_config/development.yml.template +1 -0
- data/lib/mack/generators/mack_application_generator/templates/config/app_config/production.yml.template +1 -0
- data/lib/mack/generators/mack_application_generator/templates/config/app_config/test.yml.template +1 -0
- data/lib/mack/generators/mack_application_generator/templates/config/database.yml.template +24 -0
- data/lib/mack/generators/mack_application_generator/templates/config/initializers/inflections.rb.template +13 -0
- data/lib/mack/generators/mack_application_generator/templates/config/initializers/mime_types.rb.template +1 -0
- data/lib/mack/generators/mack_application_generator/templates/public/stylesheets/scaffold.css.template +125 -29
- data/lib/mack/generators/mack_application_generator/templates/test/{functional → controllers}/default_controller_spec.rb.template +2 -0
- data/lib/mack/generators/mack_application_generator/templates/test/{functional → controllers}/default_controller_test.rb.template +2 -0
- data/lib/mack/generators/mack_application_generator/templates/test/helpers/controllers/default_controller_helper_spec.rb.template +6 -0
- data/lib/mack/generators/mack_application_generator/templates/test/helpers/controllers/default_controller_helper_test.rb.template +10 -0
- data/lib/mack/generators/mack_application_generator/templates/test/helpers/views/application_helper_spec.rb.template +6 -0
- data/lib/mack/generators/mack_application_generator/templates/test/helpers/views/application_helper_test.rb.template +10 -0
- data/lib/mack/generators/view_helper_generator/manifest.yml +15 -0
- data/lib/mack/generators/view_helper_generator/templates/app/helpers/views/helper.rb.template +7 -0
- data/lib/mack/generators/view_helper_generator/templates/test/helpers/views/rspec.rb.template +6 -0
- data/lib/mack/generators/view_helper_generator/templates/test/helpers/views/test_case.rb.template +10 -0
- data/lib/mack/generators/view_helper_generator/view_helper_generator.rb +16 -0
- data/lib/mack/initialization/application.rb +6 -6
- data/lib/mack/initialization/configuration.rb +17 -9
- data/lib/mack/initialization/helpers.rb +3 -3
- data/lib/mack/initialization/logging.rb +30 -20
- data/lib/mack/rendering/view_template.rb +1 -0
- data/lib/mack/routing/route_map.rb +10 -12
- data/lib/mack/routing/urls.rb +0 -40
- data/lib/mack/runner.rb +7 -2
- data/lib/mack/runner_helpers/request_logger.rb +1 -1
- data/lib/mack/runner_helpers/session.rb +13 -6
- data/lib/mack/tasks/mack_dump_tasks.rake +1 -8
- data/lib/mack/tasks/mack_tasks.rake +1 -1
- data/lib/mack/tasks/test_tasks.rake +2 -2
- data/lib/mack/testing/file.rb +28 -0
- data/lib/mack/testing/helpers.rb +59 -4
- data/lib/mack/testing/rspec.rb +19 -7
- data/lib/mack/utils/mime_types.yml +1 -0
- data/lib/mack/utils/server.rb +1 -1
- data/lib/mack/version.rb +3 -0
- data/lib/mack/view_helpers/date_time_helpers.rb +106 -0
- data/lib/mack/view_helpers/form_helpers.rb +282 -0
- data/lib/mack/view_helpers/html_helpers.rb +4 -88
- data/lib/mack/view_helpers/link_helpers.rb +171 -0
- data/lib/mack/view_helpers/object_helpers.rb +14 -0
- data/lib/mack/view_helpers/string_helpers.rb +41 -0
- data/lib/mack_app.rb +1 -0
- data/lib/mack_core.rb +3 -7
- data/lib/mack_tasks.rb +8 -16
- metadata +36 -27
- data/bin/mack_ring_server +0 -33
- data/lib/mack/core_extensions/string.rb +0 -21
- data/lib/mack/distributed/errors/errors.rb +0 -27
- data/lib/mack/distributed/routing/urls.rb +0 -44
- data/lib/mack/distributed/utils/rinda.rb +0 -45
- data/lib/mack/initialization/orm_support.rb +0 -20
- data/lib/mack/tasks/mack_ring_server_tasks.rake +0 -33
- data/lib/mack/utils/crypt/default_worker.rb +0 -28
- data/lib/mack/utils/crypt/keeper.rb +0 -46
|
@@ -2,59 +2,6 @@ module Mack
|
|
|
2
2
|
module ViewHelpers # :nodoc:
|
|
3
3
|
module HtmlHelpers
|
|
4
4
|
|
|
5
|
-
# This is just an alias to
|
|
6
|
-
#
|
|
7
|
-
# Examples:
|
|
8
|
-
# <%= link_to("http://www.mackframework.com") %> # => <a href="http://www.mackframework.com">http://www.mackframework.com</a>
|
|
9
|
-
# <%= link_to("Mack", "http://www.mackframework.com") %> # => <a href="http://www.mackframework.com">Mack</a>
|
|
10
|
-
# <%= link_to("Mack", "http://www.mackframework.com", :target => "_blank") %> # => <a href="http://www.mackframework.com" target="_blank">Mack</a>
|
|
11
|
-
# <%= link_to("Mack", "http://www.mackframework.com", :target => "_blank", :rel => :nofollow) %> # => <a href="http://www.mackframework.com" target="_blank" rel="nofollow">Mack</a>
|
|
12
|
-
# If you pass in :method as an option it will be a JavaScript form that will post to the specified link with the
|
|
13
|
-
# methd specified.
|
|
14
|
-
# <%= link_to("Mack", "http://www.mackframework.com", :method => :delete) %>
|
|
15
|
-
# If you use the :method option you can also pass in a :confirm option. The :confirm option will generate a
|
|
16
|
-
# javascript confirmation window. If 'OK' is selected the the form will submit. If 'cancel' is selected, then
|
|
17
|
-
# nothing will happen. This is extremely useful for 'delete' type of links.
|
|
18
|
-
# <%= link_to("Mack", "http://www.mackframework.com", :method => :delete, :confirm => "Are you sure?") %>
|
|
19
|
-
def link_to(link_text, url = link_text, html_options = {})
|
|
20
|
-
options = {:href => url}.merge(html_options)
|
|
21
|
-
a(link_text, options)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
# Used in views to create href links. It takes link_text, url, and a Hash that gets added
|
|
25
|
-
# to the href as options.
|
|
26
|
-
#
|
|
27
|
-
# Examples:
|
|
28
|
-
# a("http://www.mackframework.com") # => <a href="http://www.mackframework.com">http://www.mackframework.com</a>
|
|
29
|
-
# a("Mack", :href => "http://www.mackframework.com") # => <a href="http://www.mackframework.com">Mack</a>
|
|
30
|
-
# a("Mack", :href => "http://www.mackframework.com", :target => "_blank") # => <a href="http://www.mackframework.com" target="_blank">Mack</a>
|
|
31
|
-
# a("Mack", :href => "http://www.mackframework.com", :target => "_blank", :rel => :nofollow) # => <a href="http://www.mackframework.com" target="_blank" rel="nofollow">Mack</a>
|
|
32
|
-
# If you pass in :method as an option it will be a JavaScript form that will post to the specified link with the
|
|
33
|
-
# methd specified.
|
|
34
|
-
# a("Mack", :href => "http://www.mackframework.com", :method => :delete)
|
|
35
|
-
# If you use the :method option you can also pass in a :confirm option. The :confirm option will generate a
|
|
36
|
-
# javascript confirmation window. If 'OK' is selected the the form will submit. If 'cancel' is selected, then
|
|
37
|
-
# nothing will happen. This is extremely useful for 'delete' type of links.
|
|
38
|
-
# a("Mack", :href => "http://www.mackframework.com", :method => :delete, :confirm => "Are you sure?")
|
|
39
|
-
def a(link_text, options = {})
|
|
40
|
-
options = {:href => link_text}.merge(options)
|
|
41
|
-
if options[:method]
|
|
42
|
-
meth = nil
|
|
43
|
-
confirm = nil
|
|
44
|
-
|
|
45
|
-
meth = %{var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', '_method'); s.setAttribute('value', '#{options[:method]}'); f.appendChild(s);f.submit()}
|
|
46
|
-
options.delete(:method)
|
|
47
|
-
|
|
48
|
-
if options[:confirm]
|
|
49
|
-
confirm = %{if (confirm('#{options[:confirm]}'))}
|
|
50
|
-
options.delete(:confirm)
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
options[:onclick] = (confirm ? (confirm + " { ") : "") << meth << (confirm ? (" } ") : "") << ";return false;"
|
|
54
|
-
end
|
|
55
|
-
content_tag(:a, options, link_text)
|
|
56
|
-
end
|
|
57
|
-
|
|
58
5
|
# Builds an HTML tag.
|
|
59
6
|
#
|
|
60
7
|
# Examples:
|
|
@@ -64,7 +11,7 @@ module Mack
|
|
|
64
11
|
if block_given?
|
|
65
12
|
concat("<#{tag}#{build_options(options)}>\n", block.binding)
|
|
66
13
|
yield
|
|
67
|
-
concat("</#{tag}>", block.binding)
|
|
14
|
+
concat("\n</#{tag}>", block.binding)
|
|
68
15
|
else
|
|
69
16
|
"<#{tag}#{build_options(options)}>#{content}</#{tag}>"
|
|
70
17
|
end
|
|
@@ -84,48 +31,17 @@ module Mack
|
|
|
84
31
|
non_content_tag(:img, {:src => image_src}.merge(options))
|
|
85
32
|
end
|
|
86
33
|
|
|
87
|
-
# Builds an HTML submit tag
|
|
88
|
-
def submit_tag(value = "Submit", options = {})
|
|
89
|
-
non_content_tag(:input, {:type => :submit, :value => value}.merge(options))
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
# Wraps an image tag with a link tag.
|
|
93
|
-
#
|
|
94
|
-
# Examples:
|
|
95
|
-
# <%= link_image_to("/images/foo.jpg", "#" %> # => <a href="#"><img src="/images/foo.jpg"></a>
|
|
96
|
-
def link_image_to(image_url, url, image_options = {}, html_options = {})
|
|
97
|
-
link_to(img(image_url, image_options), url, html_options)
|
|
98
|
-
end
|
|
99
|
-
|
|
100
34
|
# Example:
|
|
101
35
|
# <%= rss_tag(posts_index_url(:format => :xml)) %>
|
|
102
36
|
def rss_tag(url)
|
|
103
37
|
"<link rel=\"alternate\" type=\"application/rss+xml\" title=\"RSS\" href=\"#{url}\">"
|
|
104
38
|
end
|
|
105
39
|
|
|
106
|
-
def form(action, options = {}, &block)
|
|
107
|
-
options = {:method => :post, :action => action}.merge(options)
|
|
108
|
-
if options[:id]
|
|
109
|
-
options = {:class => options[:id]}.merge(options)
|
|
110
|
-
end
|
|
111
|
-
if options[:multipart]
|
|
112
|
-
options = {:enctype => "multipart/form-data"}.merge(options)
|
|
113
|
-
options.delete(:multipart)
|
|
114
|
-
end
|
|
115
|
-
meth = nil
|
|
116
|
-
unless options[:method] == :get || options[:method] == :post
|
|
117
|
-
meth = "<input name=\"_method\" type=\"hidden\" value=\"#{options[:method]}\" />\n"
|
|
118
|
-
options[:method] = :post
|
|
119
|
-
end
|
|
120
|
-
concat("<form#{build_options(options)}>\n", block.binding)
|
|
121
|
-
concat(meth, block.binding) unless meth.blank?
|
|
122
|
-
yield
|
|
123
|
-
concat("</form>", block.binding)
|
|
124
|
-
# content_tag(:form, options, &block)
|
|
125
|
-
end
|
|
126
|
-
|
|
127
40
|
private
|
|
128
41
|
def build_options(options)
|
|
42
|
+
if options[:disabled]
|
|
43
|
+
options[:disabled] = :disabled
|
|
44
|
+
end
|
|
129
45
|
opts = ""
|
|
130
46
|
unless options.empty?
|
|
131
47
|
opts = " " << options.join("%s=\"%s\"", " ")
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
module Mack
|
|
2
|
+
module ViewHelpers # :nodoc:
|
|
3
|
+
module LinkHelpers
|
|
4
|
+
|
|
5
|
+
# Generates a javascript popup window. It will create the javascript needed for the window,
|
|
6
|
+
# as well as the href to call it.
|
|
7
|
+
#
|
|
8
|
+
# Example:
|
|
9
|
+
# popup('click here', 'http://www.example.com', {:toolbar => :yes, :name => :example_window}, {:alt => 'hello'}) # =>
|
|
10
|
+
# <script>
|
|
11
|
+
# function popup_r8b3edqgpbhm3zkthlgp(u) {
|
|
12
|
+
# window.open(u, 'example_window', "height=400,location=no,menubar=no,resizable=yes,scrollbars=yes,status=no,titlebar=no,toolbar=yes,width=500");
|
|
13
|
+
# }
|
|
14
|
+
# </script>
|
|
15
|
+
# <a alt="hello" href="javascript:popup_r8b3edqgpbhm3zkthlgp('http://www.example.com')">click here</a>
|
|
16
|
+
def popup(link_text, url = link_text, popup_options = {}, html_options = {})
|
|
17
|
+
m = String.randomize(20).downcase
|
|
18
|
+
popup_options = {:menubar => :no, :width => 500, :height => 400, :toolbar => :no, :scrollbars => :yes, :resizable => :yes, :titlebar => :no, :status => :no, :location => :no, :name => m}.merge(popup_options)
|
|
19
|
+
window_name = popup_options[:name]
|
|
20
|
+
popup_options.delete(:name)
|
|
21
|
+
%{
|
|
22
|
+
<script>
|
|
23
|
+
function popup_#{m}(u) {
|
|
24
|
+
window.open(u, '#{window_name}', "#{popup_options.join("%s=%s", ",")}");
|
|
25
|
+
}
|
|
26
|
+
</script>
|
|
27
|
+
#{link_to(link_text, "javascript:popup_#{m}('#{url}')", html_options)}
|
|
28
|
+
}.strip
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# This is just an alias to the a method
|
|
32
|
+
#
|
|
33
|
+
# Examples:
|
|
34
|
+
# <%= link_to("http://www.mackframework.com") %> # => <a href="http://www.mackframework.com">http://www.mackframework.com</a>
|
|
35
|
+
# <%= link_to("Mack", "http://www.mackframework.com") %> # => <a href="http://www.mackframework.com">Mack</a>
|
|
36
|
+
# <%= link_to("Mack", "http://www.mackframework.com", :target => "_blank") %> # => <a href="http://www.mackframework.com" target="_blank">Mack</a>
|
|
37
|
+
# <%= link_to("Mack", "http://www.mackframework.com", :target => "_blank", :rel => :nofollow) %> # => <a href="http://www.mackframework.com" target="_blank" rel="nofollow">Mack</a>
|
|
38
|
+
# If you pass in :method as an option it will be a JavaScript form that will post to the specified link with the
|
|
39
|
+
# methd specified.
|
|
40
|
+
# <%= link_to("Mack", "http://www.mackframework.com", :method => :delete) %>
|
|
41
|
+
# If you use the :method option you can also pass in a :confirm option. The :confirm option will generate a
|
|
42
|
+
# javascript confirmation window. If 'OK' is selected the the form will submit. If 'cancel' is selected, then
|
|
43
|
+
# nothing will happen. This is extremely useful for 'delete' type of links.
|
|
44
|
+
# <%= link_to("Mack", "http://www.mackframework.com", :method => :delete, :confirm => "Are you sure?") %>
|
|
45
|
+
def link_to(link_text, url = link_text, html_options = {})
|
|
46
|
+
options = {:href => url}.merge(html_options)
|
|
47
|
+
a(link_text, options)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Used in views to create href links. It takes link_text, url, and a Hash that gets added
|
|
51
|
+
# to the href as options.
|
|
52
|
+
#
|
|
53
|
+
# Examples:
|
|
54
|
+
# a("http://www.mackframework.com") # => <a href="http://www.mackframework.com">http://www.mackframework.com</a>
|
|
55
|
+
# a("Mack", :href => "http://www.mackframework.com") # => <a href="http://www.mackframework.com">Mack</a>
|
|
56
|
+
# a("Mack", :href => "http://www.mackframework.com", :target => "_blank") # => <a href="http://www.mackframework.com" target="_blank">Mack</a>
|
|
57
|
+
# a("Mack", :href => "http://www.mackframework.com", :target => "_blank", :rel => :nofollow) # => <a href="http://www.mackframework.com" target="_blank" rel="nofollow">Mack</a>
|
|
58
|
+
# If you pass in :method as an option it will be a JavaScript form that will post to the specified link with the
|
|
59
|
+
# methd specified.
|
|
60
|
+
# a("Mack", :href => "http://www.mackframework.com", :method => :delete)
|
|
61
|
+
# If you use the :method option you can also pass in a :confirm option. The :confirm option will generate a
|
|
62
|
+
# javascript confirmation window. If 'OK' is selected the the form will submit. If 'cancel' is selected, then
|
|
63
|
+
# nothing will happen. This is extremely useful for 'delete' type of links.
|
|
64
|
+
# a("Mack", :href => "http://www.mackframework.com", :method => :delete, :confirm => "Are you sure?")
|
|
65
|
+
def a(link_text, options = {})
|
|
66
|
+
options = {:href => link_text}.merge(options)
|
|
67
|
+
if options[:method]
|
|
68
|
+
meth = nil
|
|
69
|
+
confirm = nil
|
|
70
|
+
|
|
71
|
+
meth = %{var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;var s = document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', '_method'); s.setAttribute('value', '#{options[:method]}'); f.appendChild(s);f.submit()}
|
|
72
|
+
options.delete(:method)
|
|
73
|
+
|
|
74
|
+
if options[:confirm]
|
|
75
|
+
confirm = %{if (confirm('#{options[:confirm]}'))}
|
|
76
|
+
options.delete(:confirm)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
options[:onclick] = (confirm ? (confirm + " { ") : "") << meth << (confirm ? (" } ") : "") << ";return false;"
|
|
80
|
+
end
|
|
81
|
+
content_tag(:a, options, link_text)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Wraps an image tag with a link tag.
|
|
85
|
+
#
|
|
86
|
+
# Examples:
|
|
87
|
+
# <%= link_image_to("/images/foo.jpg", "#" %> # => <a href="#"><img src="/images/foo.jpg"></a>
|
|
88
|
+
def link_image_to(image_url, url, image_options = {}, html_options = {})
|
|
89
|
+
link_to(img(image_url, image_options), url, html_options)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# Builds a mailto href. By default it will generate
|
|
93
|
+
# JavaScript to help prevent phishing. To turn this off
|
|
94
|
+
# pass in the option :format => :plain
|
|
95
|
+
#
|
|
96
|
+
# mail_to("Saul Frami", "frami.saul@klocko.ca") # =>
|
|
97
|
+
# <script>document.write(String.fromCharCode(60,97,32,104,114,101,
|
|
98
|
+
# 102,61,34,109,97,105,108,116,111,58,102,114,97,109,105,46,115,97,117,
|
|
99
|
+
# 108,64,107,108,111,99,107,111,46,99,97,34,62,83,97,117,108,32,70,114,97,109,105,60,47,97,62));</script>
|
|
100
|
+
def mail_to(text, email_address = nil, options = {})
|
|
101
|
+
email_address = text if email_address.blank?
|
|
102
|
+
options = {:format => :js}.merge(options)
|
|
103
|
+
format = options[:format]
|
|
104
|
+
options - [:format]
|
|
105
|
+
link = link_to(text, "mailto:#{email_address}", options)
|
|
106
|
+
if format == :js
|
|
107
|
+
y = ''
|
|
108
|
+
link.size.times {y << 'a'}
|
|
109
|
+
js_link = "<script>"
|
|
110
|
+
c_code = []
|
|
111
|
+
link.each_byte {|c| c_code << c}
|
|
112
|
+
js_link << "document.write(String.fromCharCode(#{c_code.join(",")}));"
|
|
113
|
+
js_link << "</script>"
|
|
114
|
+
return js_link
|
|
115
|
+
else
|
|
116
|
+
return link
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
#
|
|
121
|
+
# Generate Javascript tag (<javascript src="/javascripts/foo.js?1241225" type="text/javascript" />)
|
|
122
|
+
#
|
|
123
|
+
# If distributed_site_domain is specified, it will be used.
|
|
124
|
+
#
|
|
125
|
+
def javascript(files, options = {})
|
|
126
|
+
files = [files].flatten
|
|
127
|
+
options = {:type => "text/javascript"}.merge(options)
|
|
128
|
+
|
|
129
|
+
link = ""
|
|
130
|
+
files.each do |name|
|
|
131
|
+
file_name = !name.to_s.end_with?(".js") ? "#{name}.js" : "#{name}"
|
|
132
|
+
link += "<javascript src=\"#{get_resource_root}/javascripts/#{file_name}?#{Time.now.to_i}\" type=\"#{options[:type]}\" />\n"
|
|
133
|
+
end
|
|
134
|
+
return link
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
#
|
|
138
|
+
# Generate Stylesheet tag
|
|
139
|
+
# If distributed_site_domain is specified, then it will use it as the host of the css file
|
|
140
|
+
# example:
|
|
141
|
+
# stylesheet("foo") => <link href="/stylesheets/scaffold.css" media="screen" rel="stylesheet" type="text/css" />
|
|
142
|
+
#
|
|
143
|
+
# distributed_site_domain is set to 'http://localhost:3001'
|
|
144
|
+
# then, stylesheet("foo") will generate
|
|
145
|
+
# <link href="http://localhost:3001/stylesheets/scaffold.css" media="screen" rel="stylesheet" type="text/css" />
|
|
146
|
+
#
|
|
147
|
+
# Supported options are: :media, :rel, and :type
|
|
148
|
+
#
|
|
149
|
+
def stylesheet(files, options = {})
|
|
150
|
+
files = [files].flatten
|
|
151
|
+
options = {:media => 'screen', :rel => 'stylesheet', :type => 'text/css'}.merge(options)
|
|
152
|
+
|
|
153
|
+
link = ""
|
|
154
|
+
files.each do |name|
|
|
155
|
+
file_name = !name.to_s.end_with?(".css") ? "#{name}.css" : "#{name}"
|
|
156
|
+
link += "<link href=\"#{get_resource_root}/stylesheets/#{file_name}\" media=\"#{options[:media]}\" rel=\"#{options[:rel]}\" type=\"#{options[:type]}\" />\n"
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
return link
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
private
|
|
163
|
+
def get_resource_root
|
|
164
|
+
path = ""
|
|
165
|
+
path = "#{app_config.mack.distributed_site_domain}" if app_config.mack.distributed_site_domain
|
|
166
|
+
return path
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
end # LinkHelpers
|
|
170
|
+
end # ViewHelpers
|
|
171
|
+
end # Mack
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
module Mack
|
|
2
|
+
module ViewHelpers # :nodoc:
|
|
3
|
+
module ObjectHelpers
|
|
4
|
+
|
|
5
|
+
# Useful for debugging objects in views. Just pass it an object
|
|
6
|
+
# and will grap the pretty print of the inspect and wrap it in
|
|
7
|
+
# HTML pre tags.
|
|
8
|
+
def debug(obj)
|
|
9
|
+
"<pre>#{pp_to_s(obj)}</pre>"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
end # ObjectHelpers
|
|
13
|
+
end # ViewHelpers
|
|
14
|
+
end # Mack
|
|
@@ -17,6 +17,47 @@ module Mack
|
|
|
17
17
|
end
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
+
# Applies a simple HTML formatting scheme to the text. It first wraps the
|
|
21
|
+
# whole string in a p tag. Then it converts any double carriage returns to
|
|
22
|
+
# new p tags, and any single break tags to br tags.
|
|
23
|
+
#
|
|
24
|
+
# Examples:
|
|
25
|
+
# simple_format("hello\n\ngoodbye\nhello, goodbye") # => "<p>hello</p>\n\n<p>goodbye\n<br />\nhello, goodbye</p>"
|
|
26
|
+
def simple_format(text, options = {})
|
|
27
|
+
if options.empty?
|
|
28
|
+
p = "<p>"
|
|
29
|
+
else
|
|
30
|
+
p = "<p #{options.join("%s=\"%s\"", " ")}>"
|
|
31
|
+
end
|
|
32
|
+
x = text.to_s.dup
|
|
33
|
+
x.gsub!(/\r\n?/, "\n") # \r\n and \r -> \n
|
|
34
|
+
x.gsub!(/\n\n+/, "</p>\n\n#{p}") # 2+ newline -> paragraph
|
|
35
|
+
x.gsub!(/([^\n]\n)(?=[^\n])/, "\\1<br />\n") # 1 newline -> br
|
|
36
|
+
"#{p}#{x}</p>"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# By this will convert all '<' tags to <. You can specify specific tags
|
|
40
|
+
# with the :tags => [...] option.
|
|
41
|
+
#
|
|
42
|
+
# Examples:
|
|
43
|
+
# sanitize_html("<script>foo;</script>hello <b>mark</b>") # => "<script>foo;</script>hello <b>mark</b>"
|
|
44
|
+
# sanitize_html("<script>foo;</script>hello <b>mark</b>", :tags => :script) # => "<script>foo;</script>hello <b>mark</b>"
|
|
45
|
+
# sanitize_html("< script>foo;</ script>hello <b>mark</b>", :tags => :script) # => "<script>foo;</script>hello <b>mark</b>"
|
|
46
|
+
def sanitize_html(html, options = {})
|
|
47
|
+
h = html.to_s.dup
|
|
48
|
+
unless options[:tags]
|
|
49
|
+
return h.gsub("<", "<")
|
|
50
|
+
else
|
|
51
|
+
[options[:tags]].flatten.each do |tag|
|
|
52
|
+
h.gsub!(/<\s*#{tag}/i, "<#{tag}")
|
|
53
|
+
h.gsub!(/<\/\s*#{tag}/i, "</#{tag}")
|
|
54
|
+
end
|
|
55
|
+
return h
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
alias_method :s, :sanitize_html
|
|
60
|
+
|
|
20
61
|
end # StringHelpers
|
|
21
62
|
end # ViewHelpers
|
|
22
63
|
end # Mack
|
data/lib/mack_app.rb
CHANGED
|
@@ -8,6 +8,7 @@ unless Mack::Configuration.initialized_application
|
|
|
8
8
|
|
|
9
9
|
Mack.logger.debug "Starting application in #{Mack.env} mode."
|
|
10
10
|
Mack.logger.debug "Mack root: #{Mack.root}"
|
|
11
|
+
Mack.logger.debug "Mack version: #{Mack::VERSION}"
|
|
11
12
|
|
|
12
13
|
require File.join(fl, "initialization", "application.rb")
|
|
13
14
|
|
data/lib/mack_core.rb
CHANGED
|
@@ -6,7 +6,6 @@ require 'application_configuration'
|
|
|
6
6
|
require 'cachetastic'
|
|
7
7
|
require 'fileutils'
|
|
8
8
|
require 'log4r'
|
|
9
|
-
require 'crypt/rijndael'
|
|
10
9
|
require 'singleton'
|
|
11
10
|
require 'uri'
|
|
12
11
|
require 'drb'
|
|
@@ -19,10 +18,9 @@ require 'genosaurus'
|
|
|
19
18
|
require 'net/http'
|
|
20
19
|
require 'pp'
|
|
21
20
|
require 'test/unit'
|
|
22
|
-
require 'redgreen'
|
|
23
21
|
|
|
24
22
|
fl = File.join(File.dirname(__FILE__), "mack")
|
|
25
|
-
|
|
23
|
+
require File.join(fl, "version")
|
|
26
24
|
require File.join(fl, "initialization", "configuration.rb")
|
|
27
25
|
|
|
28
26
|
unless Mack::Configuration.initialized_core
|
|
@@ -31,7 +29,7 @@ unless Mack::Configuration.initialized_core
|
|
|
31
29
|
require File.join(fl, "initialization", "logging.rb")
|
|
32
30
|
|
|
33
31
|
|
|
34
|
-
Mack.logger.debug "Initializing core classes..."
|
|
32
|
+
Mack.logger.debug "Initializing core classes..." unless app_config.log.disable_initialization_logging
|
|
35
33
|
# Require all the necessary files to make Mack actually work!
|
|
36
34
|
lib_dirs = ["errors", "core_extensions", "utils", "runner_helpers", "routing", "view_helpers", "rendering", "controller", "tasks", "initialization/server", "generators", "distributed"]
|
|
37
35
|
lib_dirs << "testing"# if Mack.env == "test"
|
|
@@ -44,9 +42,7 @@ unless Mack::Configuration.initialized_core
|
|
|
44
42
|
|
|
45
43
|
require File.join(fl, "runner")
|
|
46
44
|
|
|
47
|
-
require File.join(fl, "initialization", "orm_support.rb")
|
|
48
|
-
|
|
49
45
|
Mack::Configuration.initialized_core = true if Mack::Configuration.initialized_core.nil?
|
|
50
46
|
|
|
51
|
-
Mack.logger.debug "Initialization of Mack Core finished."
|
|
47
|
+
Mack.logger.debug "Initialization of Mack Core finished." unless app_config.log.disable_initialization_logging
|
|
52
48
|
end
|
data/lib/mack_tasks.rb
CHANGED
|
@@ -2,27 +2,19 @@ require 'rake'
|
|
|
2
2
|
require 'rake/testtask'
|
|
3
3
|
require 'rake/rdoctask'
|
|
4
4
|
require 'rubygems'
|
|
5
|
+
require 'mack-facets'
|
|
5
6
|
require 'application_configuration'
|
|
6
7
|
|
|
7
8
|
require File.join(File.dirname(__FILE__), "mack", "initialization", "configuration.rb")
|
|
8
9
|
|
|
9
10
|
require File.join(File.dirname(__FILE__), 'mack_core')
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
Here's how to update your existing application:
|
|
18
|
-
1. Remove the line:
|
|
19
|
-
orm: data_mapper
|
|
20
|
-
from the app_config/default.yml file
|
|
21
|
-
2. In gem.rb, add the following line in the require_gems block:
|
|
22
|
-
gem.add "mack-data_mapper", :libs => "mack-data_mapper"
|
|
23
|
-
** if you use active record, then change it to mack-active_record instead of mack-data_mapper
|
|
24
|
-
}
|
|
25
|
-
require "mack-#{orm}_tasks"
|
|
11
|
+
gems_rb = File.join(Mack.root, "config", "initializers", "gems.rb")
|
|
12
|
+
if File.exists?(gems_rb)
|
|
13
|
+
begin
|
|
14
|
+
require File.join(Mack.root, "config", "initializers", "gems.rb")
|
|
15
|
+
Mack::Utils::GemManager.instance.do_requires
|
|
16
|
+
rescue Gem::LoadError
|
|
17
|
+
end
|
|
26
18
|
end
|
|
27
19
|
|
|
28
20
|
# Requires all rake tasks that ship with the Mack framework.
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mack
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.7.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- markbates
|
|
@@ -9,7 +9,7 @@ autorequire:
|
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
11
|
|
|
12
|
-
date: 2008-08-
|
|
12
|
+
date: 2008-08-25 00:00:00 -04:00
|
|
13
13
|
default_executable:
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
@@ -30,7 +30,7 @@ dependencies:
|
|
|
30
30
|
requirements:
|
|
31
31
|
- - "="
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: 0.
|
|
33
|
+
version: 0.7.0
|
|
34
34
|
version:
|
|
35
35
|
- !ruby/object:Gem::Dependency
|
|
36
36
|
name: application_configuration
|
|
@@ -40,7 +40,7 @@ dependencies:
|
|
|
40
40
|
requirements:
|
|
41
41
|
- - "="
|
|
42
42
|
- !ruby/object:Gem::Version
|
|
43
|
-
version: 1.5.
|
|
43
|
+
version: 1.5.2
|
|
44
44
|
version:
|
|
45
45
|
- !ruby/object:Gem::Dependency
|
|
46
46
|
name: cachetastic
|
|
@@ -50,7 +50,7 @@ dependencies:
|
|
|
50
50
|
requirements:
|
|
51
51
|
- - "="
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: 1.7.
|
|
53
|
+
version: 1.7.3
|
|
54
54
|
version:
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: log4r
|
|
@@ -82,16 +82,6 @@ dependencies:
|
|
|
82
82
|
- !ruby/object:Gem::Version
|
|
83
83
|
version: 2.1.2
|
|
84
84
|
version:
|
|
85
|
-
- !ruby/object:Gem::Dependency
|
|
86
|
-
name: crypt
|
|
87
|
-
type: :runtime
|
|
88
|
-
version_requirement:
|
|
89
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
90
|
-
requirements:
|
|
91
|
-
- - "="
|
|
92
|
-
- !ruby/object:Gem::Version
|
|
93
|
-
version: 1.1.4
|
|
94
|
-
version:
|
|
95
85
|
- !ruby/object:Gem::Dependency
|
|
96
86
|
name: daemons
|
|
97
87
|
type: :runtime
|
|
@@ -120,7 +110,7 @@ dependencies:
|
|
|
120
110
|
requirements:
|
|
121
111
|
- - "="
|
|
122
112
|
- !ruby/object:Gem::Version
|
|
123
|
-
version: 1.2.
|
|
113
|
+
version: 1.2.2
|
|
124
114
|
version:
|
|
125
115
|
- !ruby/object:Gem::Dependency
|
|
126
116
|
name: rcov
|
|
@@ -156,7 +146,6 @@ description: Mack is a powerful, yet simple, web application framework. It take
|
|
|
156
146
|
email: mark@mackframework.com
|
|
157
147
|
executables:
|
|
158
148
|
- mack
|
|
159
|
-
- mack_ring_server
|
|
160
149
|
extensions: []
|
|
161
150
|
|
|
162
151
|
extra_rdoc_files:
|
|
@@ -171,13 +160,21 @@ files:
|
|
|
171
160
|
- lib/mack/controller/request.rb
|
|
172
161
|
- lib/mack/controller/response.rb
|
|
173
162
|
- lib/mack/controller/session.rb
|
|
163
|
+
- lib/mack/controller/tell.rb
|
|
174
164
|
- lib/mack/controller/uploaded_file.rb
|
|
175
165
|
- lib/mack/core_extensions/kernel.rb
|
|
176
|
-
- lib/mack/core_extensions/
|
|
177
|
-
- lib/mack/distributed/errors/errors.rb
|
|
178
|
-
- lib/mack/distributed/routing/urls.rb
|
|
179
|
-
- lib/mack/distributed/utils/rinda.rb
|
|
166
|
+
- lib/mack/core_extensions/symbol.rb
|
|
180
167
|
- lib/mack/errors/errors.rb
|
|
168
|
+
- lib/mack/generators/controller_generator/controller_generator.rb
|
|
169
|
+
- lib/mack/generators/controller_generator/manifest.yml
|
|
170
|
+
- lib/mack/generators/controller_generator/templates/app/controllers/controller.rb.template
|
|
171
|
+
- lib/mack/generators/controller_generator/templates/test/controllers/rspec.rb.template
|
|
172
|
+
- lib/mack/generators/controller_generator/templates/test/controllers/test_case.rb.template
|
|
173
|
+
- lib/mack/generators/controller_helper_generator/controller_helper_generator.rb
|
|
174
|
+
- lib/mack/generators/controller_helper_generator/manifest.yml
|
|
175
|
+
- lib/mack/generators/controller_helper_generator/templates/app/helpers/controllers/helper.rb.template
|
|
176
|
+
- lib/mack/generators/controller_helper_generator/templates/test/helpers/controllers/rspec.rb.template
|
|
177
|
+
- lib/mack/generators/controller_helper_generator/templates/test/helpers/controllers/test_case.rb.template
|
|
181
178
|
- lib/mack/generators/mack_application_generator/mack_application_generator.rb
|
|
182
179
|
- lib/mack/generators/mack_application_generator/manifest.yml
|
|
183
180
|
- lib/mack/generators/mack_application_generator/templates/app/controllers/default_controller.rb.template
|
|
@@ -191,13 +188,18 @@ files:
|
|
|
191
188
|
- lib/mack/generators/mack_application_generator/templates/config/app_config/test.yml.template
|
|
192
189
|
- lib/mack/generators/mack_application_generator/templates/config/database.yml.template
|
|
193
190
|
- lib/mack/generators/mack_application_generator/templates/config/initializers/gems.rb.template
|
|
191
|
+
- lib/mack/generators/mack_application_generator/templates/config/initializers/inflections.rb.template
|
|
194
192
|
- lib/mack/generators/mack_application_generator/templates/config/initializers/mime_types.rb.template
|
|
195
193
|
- lib/mack/generators/mack_application_generator/templates/config/routes.rb.template
|
|
196
194
|
- lib/mack/generators/mack_application_generator/templates/public/favicon.ico.template
|
|
197
195
|
- lib/mack/generators/mack_application_generator/templates/public/stylesheets/scaffold.css.template
|
|
198
196
|
- lib/mack/generators/mack_application_generator/templates/Rakefile.template
|
|
199
|
-
- lib/mack/generators/mack_application_generator/templates/test/
|
|
200
|
-
- lib/mack/generators/mack_application_generator/templates/test/
|
|
197
|
+
- lib/mack/generators/mack_application_generator/templates/test/controllers/default_controller_spec.rb.template
|
|
198
|
+
- lib/mack/generators/mack_application_generator/templates/test/controllers/default_controller_test.rb.template
|
|
199
|
+
- lib/mack/generators/mack_application_generator/templates/test/helpers/controllers/default_controller_helper_spec.rb.template
|
|
200
|
+
- lib/mack/generators/mack_application_generator/templates/test/helpers/controllers/default_controller_helper_test.rb.template
|
|
201
|
+
- lib/mack/generators/mack_application_generator/templates/test/helpers/views/application_helper_spec.rb.template
|
|
202
|
+
- lib/mack/generators/mack_application_generator/templates/test/helpers/views/application_helper_test.rb.template
|
|
201
203
|
- lib/mack/generators/mack_application_generator/templates/test/spec.opts.template
|
|
202
204
|
- lib/mack/generators/mack_application_generator/templates/test/spec_helper.rb.template
|
|
203
205
|
- lib/mack/generators/mack_application_generator/templates/test/test_helper.rb.template
|
|
@@ -206,12 +208,16 @@ files:
|
|
|
206
208
|
- lib/mack/generators/plugin_generator/templates/vendor/plugins/%=@plugin_name%/init.rb.template
|
|
207
209
|
- lib/mack/generators/plugin_generator/templates/vendor/plugins/%=@plugin_name%/lib/%=@plugin_name%.rb.template
|
|
208
210
|
- lib/mack/generators/plugin_generator/templates/vendor/plugins/%=@plugin_name%/lib/tasks/%=@plugin_name%_tasks.rake.template
|
|
211
|
+
- lib/mack/generators/view_helper_generator/manifest.yml
|
|
212
|
+
- lib/mack/generators/view_helper_generator/templates/app/helpers/views/helper.rb.template
|
|
213
|
+
- lib/mack/generators/view_helper_generator/templates/test/helpers/views/rspec.rb.template
|
|
214
|
+
- lib/mack/generators/view_helper_generator/templates/test/helpers/views/test_case.rb.template
|
|
215
|
+
- lib/mack/generators/view_helper_generator/view_helper_generator.rb
|
|
209
216
|
- lib/mack/initialization/application.rb
|
|
210
217
|
- lib/mack/initialization/configuration.rb
|
|
211
218
|
- lib/mack/initialization/console.rb
|
|
212
219
|
- lib/mack/initialization/helpers.rb
|
|
213
220
|
- lib/mack/initialization/logging.rb
|
|
214
|
-
- lib/mack/initialization/orm_support.rb
|
|
215
221
|
- lib/mack/initialization/plugins.rb
|
|
216
222
|
- lib/mack/initialization/server/simple_server.rb
|
|
217
223
|
- lib/mack/rendering/engine/base.rb
|
|
@@ -242,7 +248,6 @@ files:
|
|
|
242
248
|
- lib/mack/tasks/generator_tasks.rake
|
|
243
249
|
- lib/mack/tasks/log_tasks.rake
|
|
244
250
|
- lib/mack/tasks/mack_dump_tasks.rake
|
|
245
|
-
- lib/mack/tasks/mack_ring_server_tasks.rake
|
|
246
251
|
- lib/mack/tasks/mack_server_tasks.rake
|
|
247
252
|
- lib/mack/tasks/mack_tasks.rake
|
|
248
253
|
- lib/mack/tasks/mack_update_tasks.rake
|
|
@@ -250,20 +255,24 @@ files:
|
|
|
250
255
|
- lib/mack/tasks/rake_rules.rake
|
|
251
256
|
- lib/mack/tasks/test_tasks.rake
|
|
252
257
|
- lib/mack/tasks/tmp_tasks.rake
|
|
258
|
+
- lib/mack/testing/file.rb
|
|
253
259
|
- lib/mack/testing/helpers.rb
|
|
254
260
|
- lib/mack/testing/response.rb
|
|
255
261
|
- lib/mack/testing/rspec.rb
|
|
256
262
|
- lib/mack/testing/test_assertions.rb
|
|
257
263
|
- lib/mack/testing/test_case.rb
|
|
258
264
|
- lib/mack/utils/ansi/ansi_color.rb
|
|
259
|
-
- lib/mack/utils/crypt/default_worker.rb
|
|
260
|
-
- lib/mack/utils/crypt/keeper.rb
|
|
261
265
|
- lib/mack/utils/gem_manager.rb
|
|
262
266
|
- lib/mack/utils/mime_types.rb
|
|
263
267
|
- lib/mack/utils/mime_types.yml
|
|
264
268
|
- lib/mack/utils/server.rb
|
|
269
|
+
- lib/mack/version.rb
|
|
265
270
|
- lib/mack/view_helpers/all_helpers.rb
|
|
271
|
+
- lib/mack/view_helpers/date_time_helpers.rb
|
|
272
|
+
- lib/mack/view_helpers/form_helpers.rb
|
|
266
273
|
- lib/mack/view_helpers/html_helpers.rb
|
|
274
|
+
- lib/mack/view_helpers/link_helpers.rb
|
|
275
|
+
- lib/mack/view_helpers/object_helpers.rb
|
|
267
276
|
- lib/mack/view_helpers/string_helpers.rb
|
|
268
277
|
- lib/mack.rb
|
|
269
278
|
- lib/mack_app.rb
|