mack 0.4.1 → 0.4.2

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 CHANGED
@@ -1,5 +1,14 @@
1
+ ===0.4.2
2
+ * Added config/initializers directory. All files in this directory will be required at start up time.
3
+ * Gems can now be required simply using the initializers/gems.rb file and the require_gems method.
4
+ * Added gems:list and gems:install rake tasks. The gems:list task will list any gems being required for the application. The gems:install task will install all the gems being required for the application.
5
+ * Filters in controllers can now be inherited from parent controller classes.
6
+ * gem: mack_ruby_core_extensions 0.1.5
7
+ * gem: thing 0.7.1
8
+
1
9
  ===0.4.1
2
10
  * Improved testing support.
11
+ * Added assigns support to testing. This is allows for pulling instance variables that were set in a controller to tests.
3
12
  * Added ability to do 'session' based tests.
4
13
  * Added assert_difference method.
5
14
  * Added ability to set/remove cookies before requests are made.
data/bin/mack CHANGED
@@ -36,6 +36,7 @@ create_dir(File.join(app, "app", "models"))
36
36
  create_dir(File.join(app, "app", "views", "default"))
37
37
  create_dir(File.join(app, "app", "views", "layouts"))
38
38
  create_dir(File.join(app, "config", "app_config"))
39
+ create_dir(File.join(app, "config", "initializers"))
39
40
  create_dir(File.join(app, "lib", "tasks"))
40
41
  create_dir(File.join(app, "log"))
41
42
  create_dir(File.join(app, "public", "images"))
@@ -0,0 +1,12 @@
1
+ # Using this file you can add gems dependencies to your application.
2
+ # gem_name, options
3
+ # gem_name is the name of the gem you want to add.
4
+ # :version, optional, is the version of the gem you want to use.
5
+ # :libs, optional, is an array of files you want to require.
6
+ # :source, options, is the source you want to use to install a particular gem.
7
+ require_gems do |gem|
8
+ # examples:
9
+ # gem.add :redgreen, :version => "1.2.2", :libs => :redgreen
10
+ # gem.add :termios
11
+ # gem.add :rubyzip, :source => "http://gems.rubyforge.org"
12
+ end
@@ -0,0 +1,16 @@
1
+ require 'rubygems'
2
+ require "test/unit"
3
+ require 'fileutils'
4
+
5
+ ENV["MACK_ENV"] = "test"
6
+
7
+ # load the mack framework:
8
+ gem 'mack'
9
+ require 'mack'
10
+
11
+ # place common methods, assertions, and other type things in this file so
12
+ # other tests will have access to them.
13
+
14
+ class Test::Unit::TestCase
15
+
16
+ end
@@ -12,4 +12,9 @@ module Kernel
12
12
  Mack::Utils::Crypt::Keeper.instance.worker(worker).decrypt(value)
13
13
  end
14
14
 
15
+ # Returns Mack::Utils::GemManager
16
+ def require_gems
17
+ yield Mack::Utils::GemManager.instance
18
+ end
19
+
15
20
  end
@@ -57,7 +57,13 @@ unless Object.const_defined?("MACK_INITIALIZED")
57
57
  # set up application stuff:
58
58
 
59
59
  # set up routes:
60
- require File.join(MACK_ROOT, "config", "routes")
60
+ require File.join(MACK_CONFIG, "routes")
61
+
62
+ # set up initializers:
63
+ Dir.glob(File.join(MACK_CONFIG, "initializers", "**/*.rb")) do |d|
64
+ require d
65
+ end
66
+ Mack::Utils::GemManager.instance.do_requires
61
67
 
62
68
  # require 'plugins':
63
69
  require File.join(File.dirname(__FILE__), "initializers", "plugins.rb")
@@ -320,11 +320,23 @@ module Mack
320
320
  end
321
321
 
322
322
  def add_filter(type, meth, options) # :nodoc:
323
- controller_filters[type.to_sym] << Mack::Controller::Filter.new(meth, options)
323
+ controller_filters[type.to_sym] << Mack::Controller::Filter.new(meth, self, options)
324
324
  end
325
325
 
326
326
  def controller_filters # :nodoc:
327
- @controller_filters = {:before => [], :after => [], :after_render => []} unless @controller_filters
327
+ unless @controller_filters
328
+ @controller_filters = {:before => [], :after => [], :after_render => []}
329
+ # inherit filters from the superclass, if any, to this parent
330
+ sc = self.superclass
331
+ if sc.class_is_a?(Mack::Controller::Base)
332
+ ch = sc.controller_filters
333
+ [:before, :after, :after_render].each do |v|
334
+ @controller_filters[v] << ch[v]
335
+ @controller_filters[v].flatten!
336
+ @controller_filters[v].uniq!
337
+ end
338
+ end
339
+ end
328
340
  @controller_filters
329
341
  end
330
342
 
@@ -33,9 +33,10 @@ module Mack
33
33
  attr_reader :filter_method
34
34
  attr_reader :action_list
35
35
 
36
- def initialize(filter_method, action_list = {})
36
+ def initialize(filter_method, klass, action_list = {})
37
37
  @filter_method = filter_method
38
38
  clean_action_list(action_list)
39
+ @klass = klass
39
40
  end
40
41
 
41
42
  def run?(action)
@@ -47,6 +48,22 @@ module Mack
47
48
  end
48
49
  return false
49
50
  end
51
+
52
+ def to_s
53
+ "#{@klass}.#{filter_method}"
54
+ end
55
+
56
+ def ==(other)
57
+ self.to_s == other.to_s
58
+ end
59
+
60
+ def eql?(other)
61
+ self.to_s == other.to_s
62
+ end
63
+
64
+ def hash
65
+ self.to_s.hash
66
+ end
50
67
 
51
68
  private
52
69
  def clean_action_list(action_list)
@@ -0,0 +1,34 @@
1
+ namespace :gems do
2
+
3
+ desc "lists all the gem required for this application."
4
+ task :list => :setup do
5
+ Mack::Utils::GemManager.instance.required_gem_list.each do |g|
6
+ puts g
7
+ end
8
+ end # list
9
+
10
+ desc "installs the gems needed for this application."
11
+ task :install => :setup do
12
+ runner = Gem::GemRunner.new
13
+ Mack::Utils::GemManager.instance.required_gem_list.each do |g|
14
+ params = ["install", g.name.to_s]
15
+ params << "--version=#{g.version}" if g.version?
16
+ params << "--source=#{g.source}" if g.source?
17
+ runner.run(params)
18
+ end
19
+ end # install
20
+
21
+ private
22
+ task :setup do
23
+ gem 'mack'
24
+ require 'core_extensions/kernel'
25
+ require 'utils/gem_manager'
26
+ gem 'mack_ruby_core_extensions'
27
+ require 'mack_ruby_core_extensions'
28
+ require File.join(FileUtils.pwd, "config", "gems")
29
+ require 'rubygems'
30
+ require 'rubygems/gem_runner'
31
+ Gem.manage_gems
32
+ end
33
+
34
+ end # gem
@@ -0,0 +1,79 @@
1
+ module Mack
2
+ module Utils
3
+ # This class is used to add gems to your application in an easy to use way.
4
+ #
5
+ # require_gems do |gem|
6
+ # gem.add :redgreen, :version => "1.2.2", :libs => :redgreen
7
+ # gem.add :termios
8
+ # gem.add "rubyzip", :source => "http:// gems.rubyforge.org"
9
+ # end
10
+ class GemManager
11
+ include Singleton
12
+
13
+ attr_accessor :required_gem_list
14
+
15
+ def initialize # :nodoc:
16
+ @required_gem_list = []
17
+ end
18
+
19
+ # Adds a new gem to the system. This does NOT actually require the gem
20
+ # or any of it's 'libs'. You need to call the do_requires method to actually
21
+ # require any of the 'libs' defined for this gem.
22
+ #
23
+ # Options:
24
+ # * <code>:source => "http:// gems.rubyforge.org"</code>
25
+ # * <code>:version => "1.2.3"</code>
26
+ # * <code>:libs => "file" or :libs => ["file1", "file2"]</code>
27
+ def add(name, options = {})
28
+ @required_gem_list << Mack::Utils::GemManager::GemObject.new(name, options)
29
+ end
30
+
31
+ # Requires the gem and any libs that you've specified.
32
+ def do_requires
33
+ @required_gem_list.each do |g|
34
+ if g.version?
35
+ gem(g.name, g.version)
36
+ else
37
+ gem(g.name)
38
+ end
39
+ g.libs.each {|l| require l.to_s} if g.libs?
40
+ end
41
+ end
42
+
43
+ private
44
+ class GemObject # :nodoc:
45
+ attr_accessor :name
46
+ attr_accessor :version
47
+ attr_accessor :libs
48
+ attr_accessor :source
49
+
50
+ def initialize(name, options = {})
51
+ self.name = name
52
+ self.version = options[:version]
53
+ self.libs = [options[:libs]].flatten.compact
54
+ self.source = options[:source]
55
+ end
56
+
57
+ def to_s
58
+ t = self.name.to_s
59
+ t << "-#{self.version}" if self.version?
60
+ t.downcase
61
+ end
62
+
63
+ def libs?
64
+ !self.libs.empty?
65
+ end
66
+
67
+ def version?
68
+ !self.version.blank?
69
+ end
70
+
71
+ def source?
72
+ !self.source.blank?
73
+ end
74
+
75
+ end
76
+
77
+ end # GemManager
78
+ end # Utils
79
+ end # Mack
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.1
4
+ version: 0.4.2
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-03-27 00:00:00 -04:00
12
+ date: 2008-04-02 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.4
31
+ version: 0.1.5
32
32
  version:
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: application_configuration
@@ -64,7 +64,7 @@ dependencies:
64
64
  requirements:
65
65
  - - "="
66
66
  - !ruby/object:Gem::Version
67
- version: 0.7.0
67
+ version: 0.7.1
68
68
  version:
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: builder
@@ -95,22 +95,6 @@ extra_rdoc_files:
95
95
  - CHANGELOG
96
96
  files:
97
97
  - README
98
- - bin/templates/app/controllers/default_controller.rb.template
99
- - bin/templates/app/helpers/application_helper.rb.template
100
- - bin/templates/app/views/default/index.html.erb.template
101
- - bin/templates/app/views/layouts/application.html.erb.template
102
- - bin/templates/config/app_config/default.yml.template
103
- - bin/templates/config/app_config/development.yml.template
104
- - bin/templates/config/app_config/production.yml.template
105
- - bin/templates/config/app_config/test.yml.template
106
- - bin/templates/config/boot.rb.template
107
- - bin/templates/config/database.yml.template
108
- - bin/templates/config/routes.rb.template
109
- - bin/templates/config/thin.ru.template
110
- - bin/templates/config/thin.yml.template
111
- - bin/templates/public/favicon.ico
112
- - bin/templates/public/stylesheets/scaffold.css.template
113
- - bin/templates/Rakefile.template
114
98
  - lib/core_extensions/kernel.rb
115
99
  - lib/core_extensions/string.rb
116
100
  - lib/distributed/errors/errors.rb
@@ -159,6 +143,7 @@ files:
159
143
  - lib/sea_level/session.rb
160
144
  - lib/sea_level/view_binder.rb
161
145
  - lib/tasks/cachetastic_tasks.rake
146
+ - lib/tasks/gem_tasks.rake
162
147
  - lib/tasks/log_tasks.rake
163
148
  - lib/tasks/mack_dump_tasks.rake
164
149
  - lib/tasks/mack_server_tasks.rake
@@ -170,10 +155,27 @@ files:
170
155
  - lib/test_extensions/test_helpers.rb
171
156
  - lib/utils/crypt/default_worker.rb
172
157
  - lib/utils/crypt/keeper.rb
158
+ - lib/utils/gem_manager.rb
173
159
  - lib/utils/html.rb
174
160
  - lib/utils/server.rb
175
- - tasks/gem_helper.rb
176
- - tasks/gem_tasks.rake
161
+ - bin/templates/app/controllers/default_controller.rb.template
162
+ - bin/templates/app/helpers/application_helper.rb.template
163
+ - bin/templates/app/views/default/index.html.erb.template
164
+ - bin/templates/app/views/layouts/application.html.erb.template
165
+ - bin/templates/config/app_config/default.yml.template
166
+ - bin/templates/config/app_config/development.yml.template
167
+ - bin/templates/config/app_config/production.yml.template
168
+ - bin/templates/config/app_config/test.yml.template
169
+ - bin/templates/config/boot.rb.template
170
+ - bin/templates/config/database.yml.template
171
+ - bin/templates/config/initializers/gems.rb.template
172
+ - bin/templates/config/routes.rb.template
173
+ - bin/templates/config/thin.ru.template
174
+ - bin/templates/config/thin.yml.template
175
+ - bin/templates/public/favicon.ico
176
+ - bin/templates/public/stylesheets/scaffold.css.template
177
+ - bin/templates/Rakefile.template
178
+ - bin/templates/test/test_helper.rb.template
177
179
  - CHANGELOG
178
180
  has_rdoc: true
179
181
  homepage: http://www.mackframework.com
@@ -1,48 +0,0 @@
1
- class GemHelper # :nodoc:
2
- include Singleton
3
-
4
- attr_accessor :project
5
- attr_accessor :package
6
- attr_accessor :gem_name
7
- attr_accessor :version
8
-
9
- def initialize
10
- self.project = "magrathea"
11
- self.package = "mack"
12
- self.gem_name = "mack"
13
- self.version = "0.4.1"
14
- end
15
-
16
- def gem_name_with_version
17
- "#{self.gem_name}-#{self.version}"
18
- end
19
-
20
- def full_gem_name
21
- "#{self.gem_name_with_version}.gem"
22
- end
23
-
24
- def release
25
- begin
26
- rf = RubyForge.new
27
- rf.login
28
- begin
29
- rf.add_release(self.project, self.package, self.version, File.join("pkg", full_gem_name))
30
- rescue Exception => e
31
- if e.message.match("Invalid package_id") || e.message.match("no <package_id> configured for")
32
- puts "You need to create the package!"
33
- rf.create_package(self.project, self.package)
34
- rf.add_release(self.project, self.package, self.version, File.join("pkg", full_gem_name))
35
- else
36
- raise e
37
- end
38
- end
39
- rescue Exception => e
40
- puts e
41
- end
42
- end
43
-
44
- def install
45
- puts `sudo gem install #{File.join("pkg", full_gem_name)}`
46
- end
47
-
48
- end
@@ -1,93 +0,0 @@
1
- require 'rake'
2
- require 'rake/gempackagetask'
3
- require 'rake/clean'
4
- require 'rake/testtask'
5
- require 'find'
6
- require 'fileutils'
7
-
8
- require 'rubyforge'
9
- require 'rubygems'
10
- require 'rubygems/gem_runner'
11
- require 'singleton'
12
-
13
- require 'tasks/gem_helper'
14
-
15
- namespace :gem do
16
-
17
- namespace :package do
18
-
19
- desc "Package up the mack gem."
20
- task :mack do |t|
21
- pwd = FileUtils.pwd
22
- gh = GemHelper.instance
23
- FileUtils.rm_rf("#{pwd}/pkg", :verbose => true)
24
- gem_spec = Gem::Specification.new do |s|
25
- s.name = gh.gem_name
26
- s.version = gh.version
27
- s.summary = "Mack is a powerful, yet simple, web application framework."
28
- s.description = %{
29
- Mack is a powerful, yet simple, web application framework.
30
- It takes some cues from the likes of Rails and Merb, so it's not entirely unfamiliar.
31
- Mack hopes to provide developers a great framework for building, and deploying, portal and
32
- distributed applications.
33
- }
34
- s.author = "markbates"
35
- s.email = "mark@mackframework.com"
36
- s.homepage = "http://www.mackframework.com"
37
- s.has_rdoc = true
38
- s.extra_rdoc_files = ["README", "CHANGELOG"]
39
- s.files = FileList["README", "**/*.*"].exclude("pkg/").exclude("test/").exclude("tasks/private").exclude("doc")
40
- s.require_paths << '.'
41
- s.require_paths << 'bin'
42
- s.require_paths << 'lib'
43
-
44
- s.bindir = "bin"
45
- s.executables << "mack"
46
-
47
- s.rdoc_options << '--title' << 'Mack' << '--main' << 'README' << '--line-numbers' << "--inline-source"
48
-
49
- s.add_dependency("rack", "0.3.0")
50
- s.add_dependency("mack_ruby_core_extensions", "0.1.4")
51
- s.add_dependency("application_configuration", "1.2.1")
52
- s.add_dependency("cachetastic", "1.4.2")
53
- s.add_dependency("log4r", "1.0.5")
54
- s.add_dependency("thin", "0.7.0")
55
- s.add_dependency("builder", "2.1.2")
56
- s.add_dependency("crypt", "1.1.4")
57
-
58
-
59
- s.rubyforge_project = gh.project
60
- end
61
- Rake::GemPackageTask.new(gem_spec) do |pkg|
62
- pkg.package_dir = "#{pwd}/pkg"
63
- pkg.need_zip = false
64
- pkg.need_tar = false
65
- end
66
- Rake::Task["package"].invoke
67
- end
68
-
69
- end
70
-
71
- namespace :install do
72
-
73
- desc "Package up and install the mack gem."
74
- task :mack => "gem:package:mack" do |t|
75
- GemHelper.instance.install
76
- end
77
-
78
- end
79
-
80
- namespace :release do
81
-
82
- desc "Package up, install, and release the mack gem."
83
- task :mack => ["gem:install:mack"] do |t|
84
- GemHelper.instance.release
85
- end
86
-
87
- end
88
-
89
- end
90
-
91
- alias_task :pack, "gem:package:mack"
92
- alias_task :install, "gem:install:mack"
93
- alias_task :release, "gem:release:mack"