mack 0.6.1.2 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
data/CHANGELOG
CHANGED
@@ -1,6 +1,52 @@
|
|
1
|
-
===0.
|
2
|
-
*
|
3
|
-
*
|
1
|
+
=== 0.7.0
|
2
|
+
* [#114] Javascript link_helper
|
3
|
+
* [#112] Error generating mack application
|
4
|
+
* [#109] DataMapper 0.9.4
|
5
|
+
* [#103] Log colors for the console are now configurable per log level.
|
6
|
+
* [#102] New association method in data_factory
|
7
|
+
* [#101] Update to file upload testing (build_file -> file_for_upload, and multipart support in put)
|
8
|
+
* [#100] Inline routing parameters are being mutated
|
9
|
+
* [#99] Upgraded to facets 2.4.3
|
10
|
+
* [#98] Fixed mack-facets not being loaded before app_config files.
|
11
|
+
* [#97] Fixed sessions only working with 'local_memory' mode
|
12
|
+
* [#96] Distributed Views module now uses file cache
|
13
|
+
* [#92] Removed deprecated app_config.orm code.
|
14
|
+
* [#91] Fixed Mack blowing up if there is no config/initializers/gems.rb file.
|
15
|
+
* [#90] Added deprecation system.
|
16
|
+
* [#89] rake gems:* will now only display warning if any gem required is not installed (and not break)
|
17
|
+
* [#88] Implemented pending SQLite3 tests in mack-activerecord
|
18
|
+
* [#87] Refactored out common ORM code from mack-active_record and mack-data_mapper into mack-orm
|
19
|
+
* [#86] stylesheet link helper
|
20
|
+
* [#85] Refactored out Mack::ViewHelpers::HtmlHelpers into Mack::ViewHelpers::HtmlHelpers, Mack::ViewHelpers::FormHelpers and
|
21
|
+
Mack::ViewHelpers::linkHelpers
|
22
|
+
* [#84] Added Mack::Distributed.lookup(url) to retrieve specific distributed services.
|
23
|
+
* [#83] Added mail_to HTML helper.
|
24
|
+
* [#82] Added ACL support to mack-distributed
|
25
|
+
* [#81] Fixed sessions working with redirects in testing
|
26
|
+
* [#80] Distributed objects present both the DRb::DRbObject inspect and the original object's inspect when asked.
|
27
|
+
* [#79] Renamed app_config.mack.use_distributed_routes to app_config.mack.share_routes
|
28
|
+
* [#76] Move mack_ring_server to mack-distributed
|
29
|
+
* [#75] Left over mack-distributed rake tasks
|
30
|
+
* [#74] Added optional feature to disable initialization logging.
|
31
|
+
* [#73] Tests no longer use the functional/unit directories
|
32
|
+
* [#69] Added ViewHelperGenerator and ControllerHelperGenerator
|
33
|
+
* [#68] Transactional support in mack-AR
|
34
|
+
* [#67] Added test:setup tasks for active_record and data_mapper
|
35
|
+
* [#62] Removed const redefined warnings if mack-l10n is used along with mack-activerecord
|
36
|
+
* [#39] HAML 2.0.2 support
|
37
|
+
* [#28] Refactored out encryption into the mack-encryption gem.
|
38
|
+
* [#25] Added ControllerGenerator
|
39
|
+
* [#19] Added HTML form helpers
|
40
|
+
* [#15] File upload testing support (ability to do multipart form post in testing)
|
41
|
+
* [#11] Distributed Layout/Views
|
42
|
+
* [#10] Added distributed objects to mack-distributed.
|
43
|
+
* [#8] Move distributed code from mack-core to mack-more
|
44
|
+
* [#5] Added tell messaging
|
45
|
+
* gem: genosaurus 1.2.2
|
46
|
+
* gem: haml 2.0.2
|
47
|
+
* gem: addressable 1.0.4
|
48
|
+
* gem: facets 2.4.3
|
49
|
+
* gem: data_mapper 0.9.4
|
4
50
|
|
5
51
|
===0.6.1.1
|
6
52
|
* [#72] Fixed serial data type in DataMapper doesn't work with SQLite3
|
data/README
CHANGED
@@ -12,7 +12,7 @@ First things first, let's generate your application:
|
|
12
12
|
$ mack <app_name>
|
13
13
|
|
14
14
|
To run a Mack application:
|
15
|
-
$ rake
|
15
|
+
$ rake mack:server:start
|
16
16
|
|
17
17
|
It will try and run the app using the following servers in this order:
|
18
18
|
* Thin
|
@@ -20,15 +20,15 @@ It will try and run the app using the following servers in this order:
|
|
20
20
|
* WEBrick
|
21
21
|
|
22
22
|
rake script:server takes the following options:
|
23
|
-
$ rake
|
23
|
+
$ rake server PORT=<port> Mack.env=<environment> HANDLER=<rack_handler>
|
24
24
|
|
25
25
|
The port and rack_handler flags don't apply if you're using Thin[http://code.macournoyer.com/thin] to run the app, which is the default if it is installed. Use the thin.yml file in your application's config directory to configure Thin. The rack_handler one will allow you to switch which server is used to run the app. See Rack for more Rack::Handlers.
|
26
26
|
|
27
27
|
The environment can also be changed like this:
|
28
|
-
$ rake
|
28
|
+
$ rake mack:server:start#<environment>
|
29
29
|
|
30
30
|
You can also run:
|
31
|
-
$ rake console
|
31
|
+
$ rake mack:console
|
32
32
|
This will give you console level access to your application.
|
33
33
|
|
34
34
|
|
data/bin/mack
CHANGED
@@ -15,7 +15,6 @@ options = OpenStruct.new
|
|
15
15
|
options.orm = "data_mapper"
|
16
16
|
options.testing_framework = "rspec"
|
17
17
|
options.js_framework = "jquery"
|
18
|
-
options.version = "0.6.1.2"
|
19
18
|
|
20
19
|
opts = OptionParser.new do |opts|
|
21
20
|
opts.banner = "Usage: mack <application_name> [options]"
|
@@ -36,4 +35,4 @@ end
|
|
36
35
|
|
37
36
|
opts.parse!(ARGV)
|
38
37
|
|
39
|
-
MackApplicationGenerator.run({"
|
38
|
+
MackApplicationGenerator.run({"app" => app, "orm" => options.orm, "testing_framework" => options.testing_framework, "js_framework" => options.js_framework})
|
@@ -82,7 +82,28 @@ module Mack
|
|
82
82
|
|
83
83
|
private
|
84
84
|
def parse_params(ps)
|
85
|
-
|
85
|
+
|
86
|
+
# look for date time selects:
|
87
|
+
dts = ps.select {|k,v| k.to_s.match(/\(.+\)/)}
|
88
|
+
unless dts.empty?
|
89
|
+
dtsh = {}
|
90
|
+
dts.each do |k,v|
|
91
|
+
# convert dilbert[created_at(year)] # => dilbert[created_at]
|
92
|
+
p_name = k.gsub(/\(.+\)/, '')
|
93
|
+
# get 'year'
|
94
|
+
sub_p_name = k.match(/\((.+)\)/).captures.first.to_s
|
95
|
+
# create a new DateTimeParameter if one doesn't exist for this parameter yet
|
96
|
+
dtsh[p_name] = DateTimeParameter.new if dtsh[p_name].nil?
|
97
|
+
# set the accessor for this part of the select
|
98
|
+
dtsh[p_name].add(sub_p_name, v)
|
99
|
+
end
|
100
|
+
# Add the final DateTimeParameter's back onto the request stack.
|
101
|
+
dtsh.each do |k,v|
|
102
|
+
ps[k] = v.to_time
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
ps.reject {|k,v| k.to_s.match(/\(.+\)/)}.each do |k,v|
|
86
107
|
if k.to_s.match(/.+\[.+\]/)
|
87
108
|
nv = k.to_s.match(/.+\[(.+)\]/).captures.first
|
88
109
|
nk = k.to_s.match(/(.+)\[.+\]/).captures.first
|
@@ -96,5 +117,36 @@ module Mack
|
|
96
117
|
end
|
97
118
|
end
|
98
119
|
|
99
|
-
|
100
|
-
|
120
|
+
class DateTimeParameter # :nodoc:
|
121
|
+
attr_accessor :year
|
122
|
+
attr_accessor :month
|
123
|
+
attr_accessor :day
|
124
|
+
attr_accessor :hour
|
125
|
+
attr_accessor :minute
|
126
|
+
attr_accessor :second
|
127
|
+
|
128
|
+
def initialize
|
129
|
+
self.year = Time.now.year
|
130
|
+
self.month = 1
|
131
|
+
self.day = 1
|
132
|
+
self.hour = 0
|
133
|
+
self.minute = 0
|
134
|
+
self.second = 0
|
135
|
+
end
|
136
|
+
|
137
|
+
def add(key, value)
|
138
|
+
self.send("#{key}=", value)
|
139
|
+
end
|
140
|
+
|
141
|
+
def to_s
|
142
|
+
"#{year}-#{month}-#{day} #{hour}:#{minute}:#{second}"
|
143
|
+
end
|
144
|
+
|
145
|
+
def to_time
|
146
|
+
Time.parse(self.to_s)
|
147
|
+
end
|
148
|
+
|
149
|
+
end
|
150
|
+
|
151
|
+
end # Request
|
152
|
+
end # Mack
|
@@ -30,6 +30,15 @@ module Mack
|
|
30
30
|
@sess_hash = {}
|
31
31
|
end
|
32
32
|
|
33
|
+
# Deletes a value from the session
|
34
|
+
def delete(key)
|
35
|
+
@sess_hash.delete(key.to_sym)
|
36
|
+
end
|
37
|
+
|
38
|
+
def inspect
|
39
|
+
"#{self.id}: #{@sess_hash.inspect}"
|
40
|
+
end
|
41
|
+
|
33
42
|
private
|
34
43
|
attr_reader :sess_hash # :nodoc:
|
35
44
|
|
@@ -1,20 +1,48 @@
|
|
1
1
|
module Kernel
|
2
2
|
|
3
|
-
#
|
4
|
-
|
5
|
-
|
6
|
-
Mack::Utils::Crypt::Keeper.instance.worker(worker).encrypt(value)
|
3
|
+
# Returns Mack::Utils::GemManager
|
4
|
+
def require_gems
|
5
|
+
yield Mack::Utils::GemManager.instance
|
7
6
|
end
|
8
7
|
|
9
|
-
#
|
10
|
-
|
11
|
-
|
12
|
-
Mack::Utils::Crypt::Keeper.instance.worker(worker).decrypt(value)
|
8
|
+
# Returns an Array of gems required by the Mack::Utils::GemManager
|
9
|
+
def required_gem_list
|
10
|
+
Mack::Utils::GemManager.instance.required_gem_list
|
13
11
|
end
|
14
12
|
|
15
|
-
#
|
16
|
-
def
|
17
|
-
|
13
|
+
# Aliases the deprecated method to the new method and logs a warning.
|
14
|
+
def alias_deprecated_method(deprecated_method, new_method, version_deprecrated = nil, version_to_be_removed = nil)
|
15
|
+
eval %{
|
16
|
+
def #{deprecated_method}(*args)
|
17
|
+
deprecate_method(:#{deprecated_method}, :#{new_method}, "#{version_deprecrated}", "#{version_to_be_removed}")
|
18
|
+
#{new_method}(*args)
|
19
|
+
end
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
# Logs a warning that a method has been deprecated. Warnings will only get logged once.
|
24
|
+
def deprecate_method(deprecated_method, new_method = nil, version_deprecrated = nil, version_to_be_removed = nil)
|
25
|
+
message = "DEPRECATED: '#{deprecated_method}'."
|
26
|
+
if new_method
|
27
|
+
message << " Please use '#{new_method}' instead."
|
28
|
+
end
|
29
|
+
if version_deprecrated
|
30
|
+
message << " Deprecated in version: '#{version_deprecrated}'."
|
31
|
+
if version_to_be_removed.nil?
|
32
|
+
version_to_be_removed = ">=#{version_deprecrated.succ}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
if version_to_be_removed
|
36
|
+
message << " To be removed in version: '#{version_to_be_removed}'."
|
37
|
+
end
|
38
|
+
unless Kernel::DeprecatedRegistryList.registered_items.include?(message)
|
39
|
+
Mack.logger.warn(message)
|
40
|
+
Kernel::DeprecatedRegistryList.add(message)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
class DeprecatedRegistryList < Mack::Utils::RegistryList # :nodoc:
|
18
46
|
end
|
19
47
|
|
20
48
|
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
class Symbol
|
2
|
+
|
3
|
+
# See Mack::ViewHelpers::FormHelpers date_time_select for more information
|
4
|
+
def date_time_select(*args)
|
5
|
+
Thread.current[:view_template].date_time_select(self, *args)
|
6
|
+
end
|
7
|
+
|
8
|
+
# See Mack::ViewHelpers::FormHelpers date_select for more information
|
9
|
+
def date_select(*args)
|
10
|
+
Thread.current[:view_template].date_select(self, *args)
|
11
|
+
end
|
12
|
+
|
13
|
+
# See Mack::ViewHelpers::FormHelpers check_box for more information
|
14
|
+
#
|
15
|
+
# Examples:
|
16
|
+
# @user = User.new(:accepted_tos => true)
|
17
|
+
# <%= :user.check_box :accepted_tos %> # => <input checked="checked" id="user_accepted_tos" name="user[accepted_tos]" type="checkbox" />
|
18
|
+
# <%= :i_dont_exist.check_box %> # => <input id="i_dont_exist" name="i_dont_exist" type="checkbox" />
|
19
|
+
def check_box(*args)
|
20
|
+
Thread.current[:view_template].check_box(self, *args)
|
21
|
+
end
|
22
|
+
|
23
|
+
# See Mack::ViewHelpers::FormHelpers file_field for more information
|
24
|
+
#
|
25
|
+
# Examples:
|
26
|
+
# @user = User.new(:bio_file => "~/bio.doc")
|
27
|
+
# <%= :user.file_field :bio_file %> # => <input id="user_bio_field" name="user[bio_field]" type="file" value="~/bio.doc" />
|
28
|
+
# <%= :i_dont_exist.file_field %> # => <input id="i_dont_exist" name="i_dont_exist" type="file" value="" />
|
29
|
+
def file_field(*args)
|
30
|
+
Thread.current[:view_template].file_field(self, *args)
|
31
|
+
end
|
32
|
+
|
33
|
+
# See Mack::ViewHelpers::FormHelpers hidden_field for more information
|
34
|
+
#
|
35
|
+
# Examples:
|
36
|
+
# @user = User.new(:email => "mark@mackframework.com")
|
37
|
+
# <%= :user.hidden_field :email %> # => <input id="user_email" name="user[email]" type="hidden" value="mark@mackframework.com" />
|
38
|
+
# <%= :i_dont_exist.hidden_field %> # => <input id="i_dont_exist" name="i_dont_exist" type="hidden" />
|
39
|
+
def hidden_field(*args)
|
40
|
+
Thread.current[:view_template].hidden_field(self, *args)
|
41
|
+
end
|
42
|
+
|
43
|
+
# See Mack::ViewHelpers::FormHelpers label_tag for more information
|
44
|
+
#
|
45
|
+
# Examples:
|
46
|
+
# @user = User.new
|
47
|
+
# <%= :user.label_tag :email %> # => <label for="user_email">Email</label>
|
48
|
+
# <%= :i_dont_exist.label_tag %> # => <label for="i_dont_exist">I don't exist</label>
|
49
|
+
# <%= :i_dont_exist.label_tag :value => "Hello" %> # => <label for="i_dont_exist">Hello</label>
|
50
|
+
def label_tag(*args)
|
51
|
+
Thread.current[:view_template].label_tag(self, *args)
|
52
|
+
end
|
53
|
+
|
54
|
+
# See Mack::ViewHelpers::FormHelpers password_field for more information
|
55
|
+
#
|
56
|
+
# Examples:
|
57
|
+
# @user = User.new(:email => "mark@mackframework.com")
|
58
|
+
# <%= :user.password_field :email %> # => <input id="user_email" name="user[email]" type="password" value="mark@mackframework.com" />
|
59
|
+
# <%= :i_dont_exist.password_field %> # => <input id="i_dont_exist" name="i_dont_exist" type="password" />
|
60
|
+
def password_field(*args)
|
61
|
+
Thread.current[:view_template].password_field(self, *args)
|
62
|
+
end
|
63
|
+
|
64
|
+
# See Mack::ViewHelpers::FormHelpers radio_button for more information
|
65
|
+
#
|
66
|
+
# Examples:
|
67
|
+
# @user = User.new(:level => 1)
|
68
|
+
# <%= :user.radio_button :level %> # => <input checked="checked" id="user_level" name="user[level]" type="radio" value="1" />
|
69
|
+
# <%= :user.radio_button :level, :value => 2 %> # => <input id="user_level" name="user[level]" type="radio" value="2" />
|
70
|
+
# <%= :i_dont_exist.radio_button %> # => <input id="i_dont_exist" name="i_dont_exist" type="radio" value="" />
|
71
|
+
def radio_button(*args)
|
72
|
+
Thread.current[:view_template].radio_button(self, *args)
|
73
|
+
end
|
74
|
+
|
75
|
+
# See Mack::ViewHelpers::FormHelpers select_tag for more information
|
76
|
+
#
|
77
|
+
# Examples:
|
78
|
+
# @user = User.new(:level => 1)
|
79
|
+
# <%= :user.select_tag :level, :options => [["one", 1], ["two", 2]] %> # => <select id="user_level" name="user[level]"><option value="1" selected>one</option><option value="2" >two</option></select>
|
80
|
+
# <%= :user.select_tag :level, :options => {:one => 1, :two => 2} %> # => <select id="user_level" name="user[level]"><option value="1" selected>one</option><option value="2" >two</option></select>
|
81
|
+
# <%= :i_dont_exist.select_tag :options => [["one", 1], ["two", 2]], :selected => 1 %> # => <select id="i_dont_exist" name="i_dont_exist"><option value="1" selected>one</option><option value="2" >two</option></select>
|
82
|
+
def select_tag(*args)
|
83
|
+
Thread.current[:view_template].select_tag(self, *args)
|
84
|
+
end
|
85
|
+
|
86
|
+
# See Mack::ViewHelpers::FormHelpers text_area for more information
|
87
|
+
#
|
88
|
+
# Examples:
|
89
|
+
# @user = User.new(:bio => "my bio here")
|
90
|
+
# <%= :user.text_area :bio %> # => <textarea id="user_bio" name="user[bio]">my bio here</textarea>
|
91
|
+
# <%= :i_dont_exist.text_area %> # => <textarea id="i_dont_exist" name="i_dont_exist"></textarea>
|
92
|
+
# <%= :i_dont_exist.text_area :value => "hi there" %> # => <textarea id="i_dont_exist" name="i_dont_exist">hi there</textarea>
|
93
|
+
def text_area(*args)
|
94
|
+
Thread.current[:view_template].text_area(self, *args)
|
95
|
+
end
|
96
|
+
|
97
|
+
# See Mack::ViewHelpers::FormHelpers text_field for more information
|
98
|
+
#
|
99
|
+
# Examples:
|
100
|
+
# @user = User.new(:email => "mark@mackframework.com")
|
101
|
+
# <%= :user.text_field :email %> # => <input id="user_email" name="user[email]" type="text" value="mark@mackframework.com" />
|
102
|
+
# <%= :i_dont_exist.text_field %> # => <input id="i_dont_exist" name="i_dont_exist" type="text" />
|
103
|
+
def text_field(*args)
|
104
|
+
Thread.current[:view_template].text_field(self, *args)
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# Generates a controller for Mack applications.
|
2
|
+
#
|
3
|
+
# Example:
|
4
|
+
# rake generate:controller name=post
|
5
|
+
class ControllerGenerator < Genosaurus
|
6
|
+
|
7
|
+
require_param :name
|
8
|
+
|
9
|
+
def setup # :nodoc:
|
10
|
+
@name_singular = param(:name).singular.underscore
|
11
|
+
@name_plural = param(:name).plural.underscore
|
12
|
+
@name_singular_camel = @name_singular.camelcase
|
13
|
+
@name_plural_camel = @name_plural.camelcase
|
14
|
+
@actions = []
|
15
|
+
@actions = param(:actions).split(",") unless param(:actions).blank?
|
16
|
+
end
|
17
|
+
|
18
|
+
def after_generate # :nodoc:
|
19
|
+
add_actions
|
20
|
+
update_routes_file
|
21
|
+
ControllerHelperGenerator.run(@options)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
def update_routes_file # :nodoc:
|
26
|
+
unless @actions.empty?
|
27
|
+
routes = File.join(Mack.root, "config", "routes.rb")
|
28
|
+
rf = File.open(routes).read
|
29
|
+
unless rf.match(".resource :#{@name_plural}")
|
30
|
+
puts "Updating routes.rb"
|
31
|
+
nrf = ""
|
32
|
+
rf.each do |line|
|
33
|
+
if line.match("Mack::Routes.build")
|
34
|
+
x = line.match(/\|(.+)\|/).captures
|
35
|
+
line << "\n # Added by rake generate:controller name=#{param(:name)} actions=#{param(:actions)}"
|
36
|
+
line << "\n r.with_options(:controller => :#{@name_plural}) do |map|"
|
37
|
+
@actions.each do |action|
|
38
|
+
line << "\n map.#{@name_plural}_#{action} \"/#{@name_plural}#{action == "index" ? "" : "/#{action}"}\", :action => :#{action}"
|
39
|
+
end
|
40
|
+
line << "\n end # #{@name_plural}\n"
|
41
|
+
end
|
42
|
+
nrf << line
|
43
|
+
end
|
44
|
+
File.open(routes, "w") do |f|
|
45
|
+
f.puts nrf
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def add_actions
|
52
|
+
@actions.each do |action|
|
53
|
+
template(action_template(action), File.join("app", "views", @name_plural, "#{action}.html.erb"))
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def action_template(action) # :nodoc:
|
58
|
+
%{
|
59
|
+
<h1>#{@name_plural_camel}Controller##{action}</h1>
|
60
|
+
<p>You can find me in app/views/#{@name_plural}/#{action}.html.erb</p>
|
61
|
+
}.strip
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|