mack 0.4.7 → 0.5.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.
Files changed (58) hide show
  1. data/CHANGELOG +21 -2
  2. data/README +1 -4
  3. data/bin/mack +2 -2
  4. data/lib/errors/errors.rb +1 -10
  5. data/lib/generators/mack_application_generator/manifest.yml +5 -1
  6. data/lib/generators/mack_application_generator/templates/config/database.yml.template +45 -1
  7. data/lib/generators/mack_application_generator/templates/test/test_helper.rb.template +1 -1
  8. data/lib/generators/plugin_generator/templates/vendor/plugins/{<%= @plugin_name %> → %=@plugin_name%}/init.rb.template +0 -0
  9. data/lib/generators/plugin_generator/templates/vendor/plugins/{<%= @plugin_name %>/lib/<%= @plugin_name %>.rb.template → %=@plugin_name%/lib/%=@plugin_name%.rb.template} +0 -0
  10. data/lib/generators/plugin_generator/templates/vendor/plugins/{<%= @plugin_name %>/lib/tasks/<%= @plugin_name %>_tasks.rake.template → %=@plugin_name%/lib/tasks/%=@plugin_name%_tasks.rake.template} +0 -0
  11. data/lib/initialization/configuration.rb +28 -6
  12. data/lib/initialization/console.rb +2 -0
  13. data/lib/initialization/initializer.rb +23 -36
  14. data/lib/initialization/initializers/logging.rb +2 -2
  15. data/lib/initialization/initializers/orm_support.rb +4 -63
  16. data/lib/initialization/initializers/plugins.rb +1 -1
  17. data/lib/initialization/server/simple_server.rb +0 -2
  18. data/lib/mack.rb +2 -2
  19. data/lib/mack_tasks.rb +6 -0
  20. data/lib/rendering/base.rb +1 -1
  21. data/lib/rendering/classes/action.rb +1 -1
  22. data/lib/rendering/classes/public.rb +1 -1
  23. data/lib/rendering/classes/url.rb +1 -0
  24. data/lib/rendering/classes/xml.rb +1 -1
  25. data/lib/sea_level/controller_base.rb +19 -10
  26. data/lib/sea_level/helpers/view_helpers/html_helpers.rb +96 -11
  27. data/lib/sea_level/helpers/view_helpers/string_helpers.rb +22 -0
  28. data/lib/sea_level/uploaded_file.rb +1 -0
  29. data/lib/sea_level/view_binder.rb +14 -11
  30. data/lib/tasks/cachetastic_tasks.rake +11 -11
  31. data/lib/tasks/mack_server_tasks.rake +3 -3
  32. data/lib/tasks/mack_tasks.rake +2 -5
  33. data/lib/tasks/rake_rules.rake +1 -2
  34. data/lib/tasks/test_tasks.rake +22 -1
  35. data/lib/test_extensions/test_case.rb +50 -0
  36. data/lib/test_extensions/test_helpers.rb +22 -5
  37. metadata +30 -30
  38. data/lib/generators/genosaurus_helpers.rb +0 -38
  39. data/lib/generators/migration_generator/migration_generator.rb +0 -67
  40. data/lib/generators/migration_generator/templates/db/migrations/<%=@migration_name%>.rb.template +0 -31
  41. data/lib/generators/model_column.rb +0 -55
  42. data/lib/generators/model_generator/manifest.yml +0 -11
  43. data/lib/generators/model_generator/model_generator.rb +0 -93
  44. data/lib/generators/model_generator/templates/active_record.rb.template +0 -2
  45. data/lib/generators/model_generator/templates/data_mapper.rb.template +0 -11
  46. data/lib/generators/model_generator/templates/test.rb.template +0 -9
  47. data/lib/generators/scaffold_generator/manifest.yml +0 -31
  48. data/lib/generators/scaffold_generator/scaffold_generator.rb +0 -43
  49. data/lib/generators/scaffold_generator/templates/generic/app/controllers/controller.rb.template +0 -50
  50. data/lib/generators/scaffold_generator/templates/generic/app/views/edit.html.erb.template +0 -20
  51. data/lib/generators/scaffold_generator/templates/generic/app/views/index.html.erb.template +0 -41
  52. data/lib/generators/scaffold_generator/templates/generic/app/views/new.html.erb.template +0 -19
  53. data/lib/generators/scaffold_generator/templates/generic/app/views/show.html.erb.template +0 -12
  54. data/lib/generators/scaffold_generator/templates/no_orm/controller.rb.template +0 -38
  55. data/lib/generators/scaffold_generator/templates/test.rb.template +0 -9
  56. data/lib/sea_level/helpers/view_helpers/orm_helpers.rb +0 -87
  57. data/lib/tasks/db_tasks.rake +0 -94
  58. data/lib/utils/html.rb +0 -104
@@ -2,17 +2,14 @@ namespace :mack do
2
2
 
3
3
  desc "Loads the Mack environment. Default is development."
4
4
  task :environment do
5
- MACK_ENV = ENV["MACK_ENV"] ||= "development" unless Object.const_defined?("MACK_ENV")
6
- MACK_ROOT = FileUtils.pwd unless Object.const_defined?("MACK_ROOT")
7
- require 'mack'
8
- # require File.join(MACK_ROOT, "config", "boot.rb")
5
+ require File.join(File.dirname(__FILE__), '..', 'mack')
9
6
  end # environment
10
7
 
11
8
  desc "Loads an irb console allow you full access to the application w/o a browser."
12
9
  task :console do
13
10
  libs = []
14
11
  libs << "-r irb/completion"
15
- libs << "-r #{File.join(File.dirname(__FILE__), '..', 'mack')}"
12
+ # libs << "-r #{File.join(File.dirname(__FILE__), '..', 'mack')}"
16
13
  libs << "-r #{File.join(File.dirname(__FILE__), '..', 'initialization', 'console')}"
17
14
  exec "irb #{libs.join(" ")} --simple-prompt"
18
15
  end # console
@@ -1,7 +1,6 @@
1
1
  rule /\#.*/ do |t|
2
2
  env = t.name.match(/\#.*/).to_s.gsub("#", "")
3
- Object::MACK_ENV = env
4
- ENV["MACK_ENV"] = env
3
+ Mack::Configuration.set(:env, env)
5
4
  name = t.name.gsub("##{env}", "")
6
5
  Rake::Task[name].invoke
7
6
  end
@@ -8,9 +8,28 @@ end
8
8
 
9
9
  namespace :test do
10
10
 
11
+ desc "Report code statistics (KLOCs, etc) from the application. Requires the rcov gem."
12
+ task :stats do |t|
13
+ x = `rcov test/**/*_test.rb -T --no-html -x Rakefile,config\/`
14
+ @print = false
15
+ x.each do |line|
16
+ puts line if @print
17
+ unless @print
18
+ if line.match(/\d+ tests, \d+ assertions, \d+ failures, \d+ errors/)
19
+ @print = true
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ desc "Generates test coverage from the application. Requires the rcov gem."
26
+ task :coverage do |t|
27
+ `rcov test/**/*_test.rb -x Rakefile,config\/`
28
+ `open coverage/index.html`
29
+ end
30
+
11
31
  task :empty do |t|
12
32
  ENV["TEST:EMPTY"] = "true"
13
- puts ENV["TEST:EMPTY"]
14
33
  end
15
34
 
16
35
  task :raise_exception do |t|
@@ -20,3 +39,5 @@ namespace :test do
20
39
  end
21
40
 
22
41
  alias_task :test, :default
42
+ alias_task :stats, "test:stats"
43
+ alias_task :coverage, "test:coverage"
@@ -0,0 +1,50 @@
1
+ module Test
2
+ module Unit # :nodoc:
3
+ class TestCase # :nodoc:
4
+
5
+ def name # :nodoc:
6
+ "#{self.class.name}\t\t#{@method_name}"
7
+ end
8
+
9
+ # Let's alias the run method in the class above us so we can create a new one here
10
+ # but still reference it.
11
+ alias_method :super_run, :run # :nodoc:
12
+
13
+ # We need to wrap the run method so we can do things like
14
+ # run a cleanup method if it exists
15
+ def run(result, &progress_block) # :nodoc:
16
+ super_run(result) do |state, name|
17
+ if state == Test::Unit::TestCase::STARTED
18
+ cleanup if self.respond_to?(:cleanup)
19
+ log_start(name)
20
+ else
21
+ cleanup if self.respond_to?(:cleanup)
22
+ log_end(name)
23
+ end
24
+ end
25
+ end
26
+
27
+ def log_start(name = "")
28
+ @log_start_time = Time.now
29
+ puts "\n#{format_log_time(@log_start_time)}: Starting\t#{name}"
30
+ end
31
+
32
+ def log_end(name = "")
33
+ @log_end_time = Time.now
34
+ puts "#{format_log_time(@log_end_time)}: Ending\t#{name}"
35
+ et = @log_end_time - @log_start_time
36
+ suffix = ""
37
+ et.round.times { suffix += "!" } if et > 1.0
38
+ if et > 0.5
39
+ puts "#{suffix}Elapsed Time: #{et} seconds#{suffix}"
40
+ end
41
+ end
42
+
43
+ private
44
+ def format_log_time(time = Time.now)
45
+ time.strftime("%I:%M:%S %p")
46
+ end
47
+
48
+ end # TestCase
49
+ end # Unit
50
+ end # Test
@@ -125,6 +125,20 @@ module Mack
125
125
  test_cookies.delete(name)
126
126
  end
127
127
 
128
+ def method_missing(sym, *args)
129
+ sym = sym.to_s
130
+ case sym
131
+ when /^clean_(.+)/
132
+ captures = sym.match(/^clean_(.+)/).captures
133
+ thing = eval(captures.first)
134
+ if File.exists?(thing)
135
+ FileUtils.rm_rf(thing)
136
+ end
137
+ else
138
+ raise NoMethodError.new(sym)
139
+ end
140
+ end
141
+
128
142
  private
129
143
  def test_cookies
130
144
  @test_cookies = {} if @test_cookies.nil?
@@ -145,12 +159,15 @@ module Mack
145
159
  def build_response(res)
146
160
  @responses = [res]
147
161
  strip_cookies_from_response(res)
148
- until res.successful?
149
- [res].flatten.each do |r|
150
- strip_cookies_from_response(r)
162
+ # only retry if it's a redirect request
163
+ if res.redirect?
164
+ until res.successful?
165
+ [res].flatten.each do |r|
166
+ strip_cookies_from_response(r)
167
+ end
168
+ res = request.get(res["Location"])
169
+ @responses << res
151
170
  end
152
- res = request.get(res["Location"])
153
- @responses << res
154
171
  end
155
172
  end
156
173
 
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.7
4
+ version: 0.5.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-04-25 00:00:00 -04:00
12
+ date: 2008-05-06 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -28,7 +28,7 @@ dependencies:
28
28
  requirements:
29
29
  - - "="
30
30
  - !ruby/object:Gem::Version
31
- version: 0.1.5
31
+ version: 0.1.23
32
32
  version:
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: application_configuration
@@ -100,7 +100,7 @@ dependencies:
100
100
  requirements:
101
101
  - - "="
102
102
  - !ruby/object:Gem::Version
103
- version: 2.5.0
103
+ version: 2.6.0
104
104
  version:
105
105
  - !ruby/object:Gem::Dependency
106
106
  name: genosaurus
@@ -109,7 +109,25 @@ dependencies:
109
109
  requirements:
110
110
  - - "="
111
111
  - !ruby/object:Gem::Version
112
- version: 1.1.1
112
+ version: 1.1.4
113
+ version:
114
+ - !ruby/object:Gem::Dependency
115
+ name: rcov
116
+ version_requirement:
117
+ version_requirements: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - "="
120
+ - !ruby/object:Gem::Version
121
+ version: 0.8.1.2.0
122
+ version:
123
+ - !ruby/object:Gem::Dependency
124
+ name: mack-data_mapper
125
+ version_requirement:
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "="
129
+ - !ruby/object:Gem::Version
130
+ version: 0.5.0
113
131
  version:
114
132
  description: Mack is a powerful, yet simple, web application framework. It takes some cues from the likes of Rails and Merb, so it's not entirely unfamiliar. Mack hopes to provide developers a great framework for building, and deploying, portal and distributed applications.
115
133
  email: mark@mackframework.com
@@ -129,11 +147,11 @@ files:
129
147
  - lib/distributed/routing/urls.rb
130
148
  - lib/distributed/utils/rinda.rb
131
149
  - lib/errors/errors.rb
132
- - lib/generators/genosaurus_helpers.rb
133
150
  - lib/generators/mack_application_generator/mack_application_generator.rb
134
151
  - lib/generators/mack_application_generator/manifest.yml
135
152
  - lib/generators/mack_application_generator/templates/app/controllers/default_controller.rb.template
136
153
  - lib/generators/mack_application_generator/templates/app/helpers/application_helper.rb.template
154
+ - lib/generators/mack_application_generator/templates/app/models.template
137
155
  - lib/generators/mack_application_generator/templates/app/views/default/index.html.erb.template
138
156
  - lib/generators/mack_application_generator/templates/app/views/layouts/application.html.erb.template
139
157
  - lib/generators/mack_application_generator/templates/config/app_config/default.yml.template
@@ -152,28 +170,11 @@ files:
152
170
  - lib/generators/mack_application_generator/templates/test/test_helper.rb.template
153
171
  - lib/generators/mack_application_generator/templates/test/unit.template
154
172
  - lib/generators/mack_application_generator/templates/vendor/plugins.template
155
- - lib/generators/migration_generator/migration_generator.rb
156
- - lib/generators/migration_generator/templates/db/migrations/<%=@migration_name%>.rb.template
157
- - lib/generators/model_column.rb
158
- - lib/generators/model_generator/manifest.yml
159
- - lib/generators/model_generator/model_generator.rb
160
- - lib/generators/model_generator/templates/active_record.rb.template
161
- - lib/generators/model_generator/templates/data_mapper.rb.template
162
- - lib/generators/model_generator/templates/test.rb.template
163
173
  - lib/generators/plugin_generator/plugin_generator.rb
164
- - lib/generators/plugin_generator/templates/vendor/plugins/<%= @plugin_name %>/init.rb.template
165
- - lib/generators/plugin_generator/templates/vendor/plugins/<%= @plugin_name %>/lib/<%= @plugin_name %>.rb.template
166
- - lib/generators/plugin_generator/templates/vendor/plugins/<%= @plugin_name %>/lib/tasks/<%= @plugin_name %>_tasks.rake.template
167
- - lib/generators/plugin_generator/templates/vendor/plugins/<%= @plugin_name %>/lib/tasks.template
168
- - lib/generators/scaffold_generator/manifest.yml
169
- - lib/generators/scaffold_generator/scaffold_generator.rb
170
- - lib/generators/scaffold_generator/templates/generic/app/controllers/controller.rb.template
171
- - lib/generators/scaffold_generator/templates/generic/app/views/edit.html.erb.template
172
- - lib/generators/scaffold_generator/templates/generic/app/views/index.html.erb.template
173
- - lib/generators/scaffold_generator/templates/generic/app/views/new.html.erb.template
174
- - lib/generators/scaffold_generator/templates/generic/app/views/show.html.erb.template
175
- - lib/generators/scaffold_generator/templates/no_orm/controller.rb.template
176
- - lib/generators/scaffold_generator/templates/test.rb.template
174
+ - lib/generators/plugin_generator/templates/vendor/plugins/%=@plugin_name%/init.rb.template
175
+ - lib/generators/plugin_generator/templates/vendor/plugins/%=@plugin_name%/lib/%=@plugin_name%.rb.template
176
+ - lib/generators/plugin_generator/templates/vendor/plugins/%=@plugin_name%/lib/tasks/%=@plugin_name%_tasks.rake.template
177
+ - lib/generators/plugin_generator/templates/vendor/plugins/%=@plugin_name%/lib/tasks.template
177
178
  - lib/initialization/configuration.rb
178
179
  - lib/initialization/console.rb
179
180
  - lib/initialization/initializer.rb
@@ -196,14 +197,13 @@ files:
196
197
  - lib/sea_level/cookie_jar.rb
197
198
  - lib/sea_level/filter.rb
198
199
  - lib/sea_level/helpers/view_helpers/html_helpers.rb
199
- - lib/sea_level/helpers/view_helpers/orm_helpers.rb
200
+ - lib/sea_level/helpers/view_helpers/string_helpers.rb
200
201
  - lib/sea_level/request.rb
201
202
  - lib/sea_level/response.rb
202
203
  - lib/sea_level/session.rb
203
204
  - lib/sea_level/uploaded_file.rb
204
205
  - lib/sea_level/view_binder.rb
205
206
  - lib/tasks/cachetastic_tasks.rake
206
- - lib/tasks/db_tasks.rake
207
207
  - lib/tasks/gem_tasks.rake
208
208
  - lib/tasks/generator_tasks.rake
209
209
  - lib/tasks/log_tasks.rake
@@ -215,11 +215,11 @@ files:
215
215
  - lib/tasks/rake_rules.rake
216
216
  - lib/tasks/test_tasks.rake
217
217
  - lib/test_extensions/test_assertions.rb
218
+ - lib/test_extensions/test_case.rb
218
219
  - lib/test_extensions/test_helpers.rb
219
220
  - lib/utils/crypt/default_worker.rb
220
221
  - lib/utils/crypt/keeper.rb
221
222
  - lib/utils/gem_manager.rb
222
- - lib/utils/html.rb
223
223
  - lib/utils/server.rb
224
224
  - CHANGELOG
225
225
  has_rdoc: true
@@ -1,38 +0,0 @@
1
- module Mack
2
- module Genosaurus
3
- module Helpers
4
-
5
- def columns(name = param(:name))
6
- ivar_cache("form_columns") do
7
- cs = []
8
- cols = (param(:cols) || param(:columns))
9
- if cols
10
- cols.split(",").each do |x|
11
- cs << Mack::Genosaurus::ModelColumn.new(name, x)
12
- end
13
- end
14
- cs
15
- end
16
- end
17
-
18
- def db_directory
19
- File.join(MACK_ROOT, "db")
20
- end
21
-
22
- def migrations_directory
23
- File.join(db_directory, "migrations")
24
- end
25
-
26
- def next_migration_number
27
- last = Dir.glob(File.join(migrations_directory, "*.rb")).last
28
- if last
29
- return File.basename(last).match(/^\d+/).to_s.succ
30
- end
31
- return "001"
32
- end
33
-
34
- ::Genosaurus.send(:include, self)
35
-
36
- end # Helpers
37
- end # Genosaurus
38
- end # Mack
@@ -1,67 +0,0 @@
1
- # This will generate a migration for your application.
2
- #
3
- # Example without columns:
4
- # rake generate:migration name=create_users
5
- # If using ActiveRecord generates:
6
- # db/migrations/<number>_create_users.rb:
7
- # class CreateUsers < ActiveRecord::Migration
8
- # self.up
9
- # end
10
- #
11
- # self.down
12
- # end
13
- # end
14
- #
15
- # If using DataMapper generates:
16
- # db/migrations/<number>_create_users.rb:
17
- # class CreateUsers < DataMapper::Migration
18
- # self.up
19
- # end
20
- #
21
- # self.down
22
- # end
23
- # end
24
- #
25
- # Example with columns:
26
- # rake generate:migration name=create_users cols=username:string,email_address:string,created_at:datetime,updated_at:datetime
27
- # If using ActiveRecord generates:
28
- # db/migrations/<number>_create_users.rb:
29
- # class CreateUsers < ActiveRecord::Migration
30
- # self.up
31
- # create_table :users do |t|
32
- # t.column :username, :string
33
- # t.column :email_address, :string
34
- # t.column :created_at, :datetime
35
- # t.column :updated_at, :datetime
36
- # end
37
- #
38
- # self.down
39
- # drop_table :users
40
- # end
41
- # end
42
- #
43
- # If using DataMapper generates:
44
- # db/migrations/<number>_create_users.rb:
45
- # class CreateUsers < DataMapper::Migration
46
- # self.up
47
- # create_table :users do |t|
48
- # t.column :username, :string
49
- # t.column :email_address, :string
50
- # t.column :created_at, :datetime
51
- # t.column :updated_at, :datetime
52
- # end
53
- #
54
- # self.down
55
- # drop_table :users
56
- # end
57
- # end
58
- class MigrationGenerator < Genosaurus
59
-
60
- require_param :name
61
-
62
- def setup
63
- @table_name = param(:name).underscore.plural.gsub("create_", "")
64
- @migration_name = "#{next_migration_number}_#{param(:name).underscore}"
65
- end
66
-
67
- end
@@ -1,31 +0,0 @@
1
- class <%= param(:name).camelcase %> < <%= app_config.orm.camelcase %>::Migration
2
-
3
- def self.up
4
- <%
5
- unless columns.empty?
6
- -%>
7
- create_table :<%= @table_name %> do |t|
8
- <%
9
- for column in columns
10
- -%>
11
- t.column :<%= column.column_name %>, :<%= column.column_type %>
12
- <%
13
- end
14
- -%>
15
- end
16
- <%
17
- end
18
- -%>
19
- end
20
-
21
- def self.down
22
- <%
23
- unless columns.empty?
24
- -%>
25
- drop_table :<%= @table_name %>
26
- <%
27
- end
28
- -%>
29
- end
30
-
31
- end
@@ -1,55 +0,0 @@
1
- module Mack
2
- module Genosaurus
3
-
4
- # Used to represent a 'column' from the param cols or columns for generators.
5
- class ModelColumn
6
-
7
- # The name of the column.
8
- attr_accessor :column_name
9
- # The type of the column. Ie. string, integer, datetime, etc...
10
- attr_accessor :column_type
11
- # The name of the model associated with the column. Ie. user, post, etc...
12
- attr_accessor :model_name
13
-
14
- # Takes in the model_name (user, post, etc...) and the column (username:string, body:text, etc...)
15
- def initialize(model_name, column_unsplit)
16
- self.model_name = model_name.singular.underscore
17
- cols = column_unsplit.split(":")
18
- self.column_name = cols.first.singular.underscore
19
- self.column_type = cols.last.singular.underscore
20
- end
21
-
22
- # Examples:
23
- # Mack::Generator::ColumnObject.new("user", "username:string").form_element_name # => "user[username]"
24
- # Mack::Generator::ColumnObject.new("Post", "body:text").form_element_name # => "post[body]"
25
- def form_element_name
26
- "#{self.model_name}[#{self.column_name}]"
27
- end
28
-
29
- # Examples:
30
- # Mack::Generator::ColumnObject.new("user", "username:string").form_element_id # => "user_username"
31
- # Mack::Generator::ColumnObject.new("Post", "body:text").form_element_id # => "post_body"
32
- def form_element_id
33
- "#{self.model_name}_#{self.column_name}"
34
- end
35
-
36
- # Generates the appropriate HTML form field for the type of column represented.
37
- #
38
- # Examples:
39
- # Mack::Generator::ColumnObject.new("user", "username:string").form_field
40
- # => "<input type="text" name="user[username]" id="user_username" size="30" value="<%= user.username %>" />"
41
- # Mack::Generator::ColumnObject.new("Post", "body:text").form_field
42
- # => "<textarea name="post[body]" id="post_id"><%= post.body %></textarea>"
43
- def form_field
44
- case self.column_type
45
- when "text"
46
- %{<textarea name="#{self.form_element_name}" id="#{self.form_element_id}"><%= @#{self.model_name}.#{self.column_name} %></textarea>}
47
- else
48
- %{<input type="text" name="#{self.form_element_name}" id="#{self.form_element_id}" size="30" value="<%= @#{self.model_name}.#{self.column_name} %>" />}
49
- end
50
- end
51
-
52
- end # ModelColumn
53
-
54
- end # Generator
55
- end # Mack