doozer 0.2.6 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.6
1
+ 0.3.0
data/doozer.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{doozer}
8
- s.version = "0.2.6"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["grippy"]
12
- s.date = %q{2009-10-27}
12
+ s.date = %q{2009-10-29}
13
13
  s.default_executable = %q{doozer}
14
14
  s.description = %q{This GEM provides a small, barebones framework for creating MVC Rack applications.}
15
15
  s.email = %q{gmelton@whorde.com}
@@ -57,8 +57,10 @@ Gem::Specification.new do |s|
57
57
  "lib/doozer/scripts/cluster.rb",
58
58
  "lib/doozer/scripts/console.rb",
59
59
  "lib/doozer/scripts/migrate.rb",
60
+ "lib/doozer/scripts/plugin.rb",
60
61
  "lib/doozer/scripts/task.rb",
61
62
  "lib/doozer/scripts/test.rb",
63
+ "lib/doozer/task.rb",
62
64
  "lib/doozer/version.rb",
63
65
  "lib/doozer/view_helpers.rb",
64
66
  "lib/doozer/watcher.rb",
@@ -77,9 +79,11 @@ Gem::Specification.new do |s|
77
79
  "templates/skeleton/config/environment.rb",
78
80
  "templates/skeleton/config/rack.rb",
79
81
  "templates/skeleton/config/routes.rb",
82
+ "templates/skeleton/gems/plugins/init.rb",
80
83
  "templates/skeleton/script/cluster",
81
84
  "templates/skeleton/script/console",
82
85
  "templates/skeleton/script/migrate",
86
+ "templates/skeleton/script/plugin",
83
87
  "templates/skeleton/script/task",
84
88
  "templates/skeleton/script/test",
85
89
  "templates/skeleton/static/404.html",
data/lib/doozer.rb CHANGED
@@ -27,6 +27,7 @@ module Doozer
27
27
  autoload :Route, "doozer/exceptions"
28
28
  end
29
29
 
30
+ autoload :Task, "doozer/task"
30
31
  autoload :ViewHelpers, "doozer/view_helpers"
31
32
  autoload :Version, "doozer/version"
32
33
 
data/lib/doozer/app.rb CHANGED
@@ -15,7 +15,7 @@ module Doozer
15
15
  # attach the file watcher for the mvc/lib/etc in development mode
16
16
  load_watcher if Doozer::Configs.rack_env != :deployment
17
17
 
18
- printf "Doozer racked up...\n"
18
+ puts "=> Doozer racked up"
19
19
  end
20
20
 
21
21
  # This method is called along the rackup chain and maps the request path to the route, controller, and view for the format type.
@@ -121,7 +121,7 @@ module Doozer
121
121
  def load_files
122
122
  # load models
123
123
  load_models
124
- printf "Caching files...\n"
124
+ puts "=> Caching files"
125
125
  @@controllers = {}
126
126
  @@layouts={}
127
127
  @@views={}
@@ -223,7 +223,7 @@ module Doozer
223
223
 
224
224
  # Load all application models in app/models
225
225
  def load_models
226
- printf "Loading models...\n"
226
+ puts "=> Loading models"
227
227
  Dir.glob(File.join(app_path,'app/models/*.rb')).each { | model |
228
228
  require model
229
229
  }
@@ -235,7 +235,7 @@ module Doozer
235
235
  def load_watcher
236
236
  require 'doozer/watcher'
237
237
 
238
- printf "All along the watchtower...\n"
238
+ puts "=> Watching files for changes"
239
239
  watcher = FileSystemWatcher.new()
240
240
 
241
241
  # watcher.addDirectory(File.join(File.dirname(__FILE__),'../doozer/'), "*.rb")
@@ -15,8 +15,8 @@ module Doozer
15
15
 
16
16
  # Load all the config files for the application. Also instantiates a default application Logger.
17
17
  def self.load(rack_env)
18
- printf "Application path: #{app_path}\n"
19
- printf "Loading configs for #{rack_env}\n"
18
+ puts "=> App path #{app_path}"
19
+ puts "=> Loading configs for #{rack_env}"
20
20
 
21
21
  @@config = Config::CONFIG
22
22
  rack_env = (rack_env.kind_of? String) ? rack_env.to_sym : rack_env
@@ -37,18 +37,16 @@ module Doozer
37
37
  end
38
38
 
39
39
  @@config[:rack_env] = rack_env
40
- # p ":rack_env set to #{@@config[:rack_env]}"
41
-
42
40
  begin
43
41
  @@config[:database] = Configs.symbolize_keys( YAML.load(File.read(File.join(app_path,'config/database.yml'))) )
44
42
  rescue
45
- printf "--Failed to load config/database.yml \n"
43
+ puts "ERROR => Failed to load config/database.yml"
46
44
  end
47
45
 
48
46
  begin
49
47
  @@config[:app] = Configs.symbolize_keys( YAML.load(File.read(File.join(app_path,'config/app.yml'))) )
50
48
  rescue
51
- printf "--Failed to load config/app.yml\n"
49
+ puts "ERROR => Failed to load config/app.yml"
52
50
  end
53
51
 
54
52
  end
@@ -133,8 +131,8 @@ module Doozer
133
131
  def self.app_name
134
132
  self.app["name"] || ""
135
133
  end
136
-
137
- # Return the app name
134
+
135
+ # Return the static root
138
136
  def self.static_root
139
137
  self.app["static_root"] || ""
140
138
  end
@@ -5,10 +5,12 @@ module Doozer
5
5
  # Calling boot initializes Doozer in the following order:
6
6
  # 1. Doozer::Configs
7
7
  # 2. require ORM
8
- # 3. require root/config/environment.rb
9
- # 4. call after_orm_init
10
- # 5. require Doozer::App
11
- # 6. call before_rackup_init
8
+ # 3. require app_path/config/environment.rb
9
+ # 4. call Doozer::Initializer.after_orm_init
10
+ # 5. call Doozer.init_after_orm_gems - initialized in app_path/gems/plugins/init.rb
11
+ # 6. call Doozer.init_after_orm_plugins - initialized in app_path/gems/plugins/init.rb
12
+ # 7. require Doozer::App
13
+ # 8. call Doozer::Initializer.before_rackup_init
12
14
  class Initializer
13
15
  @@after_orm = []
14
16
  @@before_rackup = []
@@ -30,6 +32,12 @@ module Doozer
30
32
  #--call the after_orm_init features
31
33
  Doozer::Initializer.after_orm_init
32
34
 
35
+ #--load the after orm gems
36
+ Doozer.init_after_orm_gems
37
+
38
+ #--load the after orm plugins
39
+ Doozer.init_after_orm_plugins
40
+
33
41
  #--load app
34
42
  require 'doozer/app'
35
43
 
@@ -53,7 +61,7 @@ module Doozer
53
61
 
54
62
  # Requires the root/config/environment.rb hooks.
55
63
  #
56
- # This is where you can place your code to initialize additional plugins for models, extend ruby, or whatever else yor app requires.
64
+ # This is where you can place your code to initialize additional plugins for models, extend ruby, or whatever else your app requires.
57
65
  #
58
66
  #=== Example environment.rb
59
67
  # Time::DATE_FORMATS[:month_and_year] = "%B %Y"
@@ -88,7 +96,7 @@ module Doozer
88
96
 
89
97
  # Primary hook for adding/overriding Doozer::ViewHelpers methods. Code block is pushed onto an array which allows for multiple hooks throughtout different files.
90
98
  #
91
- # &block - code to execute after prior to Doozer.App.new being intialized.
99
+ # &block - code to execute prior to Doozer.App.new being intialized.
92
100
  def self.before_rackup(&block)
93
101
  @@before_rackup.push(block) if block_given?
94
102
  end
data/lib/doozer/lib.rb CHANGED
@@ -12,8 +12,9 @@ module Doozer
12
12
  }
13
13
  klass = parts.join('')
14
14
  else
15
- klass.capitalize!
15
+ klass = klass.capitalize
16
16
  end
17
+ return klass
17
18
  end
18
19
 
19
20
  #Returns a one-level deep folder/file structure and preservers underscores for filename.
@@ -15,8 +15,7 @@ module Doozer
15
15
  config[:reconnect] = db_config["reconnect"] if db_config["reconnect"]
16
16
 
17
17
  ActiveRecord::Base.establish_connection(config)
18
- printf "ORM: #{Doozer::Configs.orm()} initialized...\n"
19
- # printf "ORM: logging initialized"
18
+ puts "=> #{Doozer::Configs.orm()} initialized"
20
19
  ActiveRecord::Base.logger = Doozer::Configs.logger
21
20
  end
22
21
 
@@ -12,7 +12,7 @@ module Doozer
12
12
  :password => db_config["password"],
13
13
  :host => db_config["host"]
14
14
  })
15
- printf "ORM: #{Doozer::Configs.orm()} initialized...\n"
15
+ puts "=> #{Doozer::Configs.orm()} initialized"
16
16
  DataMapper::Logger.new(STDOUT, :debug)
17
17
  end
18
18
 
@@ -12,7 +12,7 @@ module Doozer
12
12
  :password => db_config["password"],
13
13
  :host => db_config["host"]
14
14
  })
15
- printf "ORM: #{Doozer::Configs.orm} initialized...\n"
15
+ puts "=> #{Doozer::Configs.orm()} initialized"
16
16
  end
17
17
 
18
18
  def self.after_request; end
@@ -56,7 +56,7 @@ module Doozer
56
56
  partial = Doozer::Partial.new(erb, locals, route)
57
57
  partial.bind()
58
58
  else
59
- printf "--no partial exists for #{file}\n"
59
+ puts "ERROR => no partial exists for #{file}\n"
60
60
  end
61
61
  end
62
62
 
@@ -81,7 +81,7 @@ module Doozer
81
81
  # TODO: throw error if doesn't exist
82
82
  @@partials[name] = ERB.new(results.join(""))
83
83
  rescue
84
- printf "sorry couldn't load partial #{name} (#{file}) \n"
84
+ puts "ERROR => sorry couldn't load partial #{name} (#{file})"
85
85
  end
86
86
  end
87
87
 
data/lib/doozer/route.rb CHANGED
@@ -25,7 +25,7 @@ module Doozer
25
25
  # sort routes here
26
26
  @@parts.sort! do |a, b| a[1].length <=> b[1].length end
27
27
  @@parts.reverse!
28
- printf "Routes drawn and sorted...\n"
28
+ puts "=> Routes drawn and sorted"
29
29
  # @@parts.each { | i | p i[1] }
30
30
  end
31
31
 
@@ -7,6 +7,7 @@
7
7
  # -C command (start || stop || restart || test)
8
8
  # -E environment (default: development || deployment)
9
9
  # -D (daemonize) - This is automatically initialized in deployment mode. There should be no need to pass this unless you want to test it out in development mode.
10
+ # -c config file - This is used to pass a config file for starting up unicorn
10
11
  # -h Hellllpppp!!!
11
12
  require 'optparse'
12
13
 
@@ -32,7 +33,7 @@ end
32
33
  # Automatically starts a test instance of your appserver on http://localhost:5000. (No -E flag is required for this command).
33
34
  def test
34
35
  cmd = "rackup #{@test_config}"
35
- printf "Command: #{cmd} -p 5000 -E test -o 127.0.0.1\n"
36
+ puts "=> #{cmd} -p 5000 -E test -o 127.0.0.1"
36
37
  system(cmd)
37
38
  end
38
39
 
@@ -40,23 +41,23 @@ end
40
41
  #
41
42
  # <b>deployment</b>: Automatically starts a new instance of your appserver for each defined cluster address:port
42
43
  def start
43
- printf "Starting clusters...\n"
44
+ puts "Starting clusters..."
44
45
  for app in @apps
45
46
  if @env == :deployment
46
47
  #need to check if application has a pid file so we don't start
47
48
  pid_file = "#{APP_PATH}/log/doozer.#{app[:port]}.pid"
48
49
  raise "pid file already exists for #{pid_file}" if File.exist?(pid_file)
49
50
  cmd = "rackup #{@config} -p #{app[:port]} -E #{@env.to_s} -s #{@server} -o #{app[:ip]} #{@daemonize} -P #{pid_file}"
50
- printf "Command: #{cmd}\n"
51
+ puts "=> #{cmd}"
51
52
  system(cmd)
52
53
  else
53
54
  cmd = "rackup #{@config} -p #{app[:port]} -E #{@env.to_s} -s #{@server} -o #{app[:ip]}"
54
- printf "Command: #{cmd}\n"
55
+ puts "=> #{cmd}"
55
56
  system(cmd)
56
57
  break
57
58
  end
58
59
  end
59
- printf "Did they start?\n"
60
+ puts "Did they start?"
60
61
  system("ps -aux | grep rackup")
61
62
  end
62
63
 
@@ -72,12 +73,12 @@ end
72
73
  #
73
74
  # See this page for details => http://unicorn.bogomips.org/SIGNALS.html
74
75
  def start_unicorn
75
- printf "Starting unicorn... \n"
76
+ puts "Starting unicorn..."
76
77
  for app in @apps
77
78
  # unicorn
78
79
  @config_file = "-c #{@config_file}" if @config_file != ''
79
80
  cmd = "unicorn -p #{app[:port]} -E #{@env.to_s} -o #{app[:ip]} #{@daemonize} #{@config_file} #{@config}"
80
- printf "Command: #{cmd}\n"
81
+ puts "=> #{cmd}"
81
82
  system(cmd)
82
83
  break
83
84
  end
@@ -94,21 +95,21 @@ end
94
95
  # <b>deployment</b>: Automatically stops all instances of your appserver for each defined cluster address:port
95
96
  def stop
96
97
  system("ps -aux | grep rackup")
97
- printf "Stoping clusters...\n"
98
+ puts "Stoping clusters..."
98
99
  for app in @apps
99
100
  if @env == :deployment
100
101
  pid_file = "#{APP_PATH}/log/doozer.#{app[:port]}.pid"
101
- printf "Reading pid from #{pid_file}\n"
102
+ puts "=> Reading pid from #{pid_file}"
102
103
  if File.exist?(pid_file)
103
104
  File.open(pid_file, 'r'){ | f |
104
105
  pid = f.gets.to_i
105
- printf "Shutting down process #{pid}\n"
106
+ puts "=> Shutting down process #{pid}"
106
107
  system("kill -9 #{pid}")
107
108
 
108
109
  }
109
110
  File.delete(pid_file)
110
111
  else
111
- printf "pid file doesn't exist\n"
112
+ puts "ERROR => pid file doesn't exist"
112
113
  end
113
114
  end
114
115
  end
@@ -86,19 +86,18 @@ Doozer::Initializer.boot(@env)
86
86
  # need to grab all the current migrations. assumes there isn't a migration with 000_*_.rb
87
87
  migrations = [nil].concat( Dir.glob(File.join(APP_PATH,'db/*_*.rb')) )
88
88
 
89
- printf "Loading migration files\n"
90
- printf "Version: #{@version}\n"
91
- printf "Direction: #{@direction}\n"
89
+ puts "Loading migration files..."
90
+ puts "=> Version: #{@version}"
91
+ puts "=> Direction: #{@direction}"
92
92
 
93
93
  if @version > 0
94
94
  file = migrations[@version]
95
95
  raise "Can't find file for this migration" if file.nil?
96
96
  require file
97
- p "Migrating #{file}"
97
+ puts "=> Migrating #{file}"
98
98
  klass = file.split("/").last.gsub(/\.rb/,"").split('_')
99
99
  klass = Doozer::Lib.classify(klass.slice(1, klass.length).join('_'))
100
100
  obj = Object.const_get(klass)
101
-
102
101
  case @direction
103
102
  when :up
104
103
  obj.up
@@ -0,0 +1,115 @@
1
+ #= Plugin
2
+
3
+ require 'optparse'
4
+ @freeze = nil
5
+ @path = nil
6
+ @version = nil
7
+ @force = false
8
+
9
+
10
+ opts = OptionParser.new("", 24, ' ') { |opts|
11
+ opts.banner = "Usage:\n script/plugin -F gem -V version -f\n script/plugin -P path -V version -f"
12
+ opts.separator ""
13
+ opts.separator "Command options:"
14
+
15
+ opts.on("-P", "--path PATH", "Turn the path into a plugin.\n\n Possible options:\n 1. git repos\n2. Local path") { | p |
16
+ @path = p
17
+ }
18
+
19
+ opts.on("-F", "--freeze gem", "Freeze gem to gems/doozer or gems/plugin directory if match is found. Use -V or --version to locate exact version") { | name |
20
+ @freeze = name
21
+ }
22
+
23
+ opts.on("-V", "--version VERSION", "version of the gem/path to freeze") { | v |
24
+ @version = v
25
+ }
26
+
27
+ opts.on("-f", "--force", "Remove current plugin before installing") {
28
+ @force = true
29
+ }
30
+
31
+ opts.on("-h", "--help", "Show help") do
32
+ puts opts
33
+ exit
34
+ end
35
+
36
+ opts.parse! ARGV
37
+ }
38
+
39
+ def git(path, version, force)
40
+ puts "Checking out remote git repo..."
41
+ name = path.split('/').last.gsub(/\.git/,'')
42
+ name += "-#{version}" if version
43
+ plugin_dir = "#{APP_PATH}/gems/plugins"
44
+ plugin = "#{plugin_dir}/#{name}"
45
+ puts "=> #{path} to #{plugin}"
46
+ system("rm -rf #{plugin}") if force
47
+ system("git clone #{path} #{plugin}")
48
+ if version
49
+ system("cd #{plugin}; git checkout #{version}")
50
+ end
51
+ end
52
+
53
+ def freeze(gem_name, version, force)
54
+ # locate the gem to freeze
55
+ puts "Freezing gem..."
56
+ path = `gem which #{gem_name} -a`
57
+ source = gem_name
58
+ if path.downcase.index('can\'t find')
59
+ puts path
60
+ exit
61
+ end
62
+ path.gsub!(/\n/, '')
63
+ gem_path = nil
64
+ if version
65
+ name = "#{gem_name}-#{version}"
66
+ # check if the return from the which statement is actually the correct gem
67
+ if path.index(name)
68
+ gem_path=path.split(name)[0]
69
+ else
70
+ # attempt to locate the gem+version specified
71
+ gem_path = path.split(gem_name)[0]
72
+ if not File.directory?("#{gem_path}#{name}")
73
+ puts "=> Can't find #{gem_path}#{name}"
74
+ system("gem list #{gem_name}")
75
+ exit
76
+ end
77
+ end
78
+ gem_name = name
79
+ end
80
+ if gem_path.nil?
81
+ parts = path.split(gem_name)
82
+ gem_path = parts[0]
83
+ gem_name += parts[1].split('/')[0]
84
+ end
85
+ gem_path += gem_name
86
+ copy(gem_path, force)
87
+ end
88
+
89
+ def copy(path, force)
90
+ if File.directory?("#{path}")
91
+ cp_to_path = "#{APP_PATH}/gems/"
92
+ if path.index('doozer')
93
+ cp_to_path += 'doozer'
94
+ else
95
+ cp_to_path += 'plugins'
96
+ end
97
+ puts "=> Copying: #{path}..."
98
+ puts "=> To: #{cp_to_path}"
99
+ system("cp -R #{'-f' if force} #{path} #{cp_to_path}")
100
+ puts "=> Completed!"
101
+ puts "=> Don't forget to initialize your plugin in gems/plugins/init.rb"
102
+ else
103
+ puts "ERROR => #{path} doesn't appear to be a valid path"
104
+ end
105
+ end
106
+
107
+ if @freeze
108
+ freeze(@freeze, @version, @force)
109
+ elsif @path
110
+ if @path.index('.git')
111
+ git(@path, @version, @force)
112
+ else
113
+ copy(@path, @force)
114
+ end
115
+ end
@@ -1,19 +1,26 @@
1
1
  #= Tasks
2
2
  # This file is required in script/task.
3
3
  # Add files to /tasks where the specified task_name contains a class with TaskName and a 'run' class method.
4
- # Running a task automatically loads Doozer::Config and the specified ORM. You must require all other files your tasks require beyond these.
4
+ # Running a task automatically loads Doozer::Config and the specified ORM.
5
5
  # Navigate to your app root and run it with the following commands.
6
6
  #
7
7
  # script/clusters
8
8
  # -T task_name
9
9
  # -E environment (default: development || deployment)
10
+ # -A args
10
11
  # -h Hellllpppp!!!
11
12
  #
12
13
  #== Example
13
14
  # Suppose you have this file tasks/who_rocks.rb
14
15
  #
15
16
  # class WhoRocks
16
- # def self.run
17
+ # def description
18
+ # """ description """
19
+ # end
20
+ # def help
21
+ # """ help me! """
22
+ # end
23
+ # def run
17
24
  # p "You Do!"
18
25
  # end
19
26
  # end
@@ -22,6 +29,8 @@
22
29
  require 'optparse'
23
30
  @env = :development
24
31
  @task = nil
32
+ @args = nil
33
+ @help = false
25
34
 
26
35
  opts = OptionParser.new("", 24, ' ') { |opts|
27
36
  opts.banner = "Usage: script/task -T task_name -E (default: development || deployment || test)"
@@ -36,25 +45,45 @@ opts = OptionParser.new("", 24, ' ') { |opts|
36
45
  @task = t
37
46
  }
38
47
 
39
- opts.on_tail("-h", "--help", "Show this message") do
40
- puts opts
41
- exit
48
+ opts.on("-A", "--args ARGS", "args") { |a|
49
+ @args = eval(a) if a and a.length
50
+ }
51
+
52
+ opts.on("-h", "--help", "Show this message") do
53
+ @help = true
42
54
  end
43
55
 
44
56
  opts.parse! ARGV
45
57
  }
46
58
 
47
- raise "Missing task_name" if @task.nil?
48
-
49
- #--boot it up
50
- Doozer::Initializer.boot(@env)
59
+ def file_to_task(f, args=nil)
60
+ require f
61
+ file_name = f.split("/").last.gsub(/\.rb/,"")
62
+ klass = Doozer::Lib.classify(file_name)
63
+ return Object.const_get(klass).new(args), file_name
64
+ end
51
65
 
52
66
  if @task
53
67
  file = File.join(APP_PATH, "tasks/#{@task}.rb")
54
68
  raise "Can't find this task file #{@task}" if file.nil?
55
- p "Running #{@task}"
56
- klass = file.split("/").last
57
- require file
58
- klass = Doozer::Lib.classify(klass.gsub(/\.rb/,""))
59
- Object.const_get(klass).run
69
+ task, file_name = file_to_task(file, @args)
70
+ if not @help
71
+ puts "Running #{@task}.."
72
+ Doozer::Initializer.boot(@env)
73
+ task.run
74
+ else
75
+ puts ""
76
+ puts "Task\n #{@task}\n"
77
+ puts "Description\n #{task.description}\n"
78
+ puts "Help\n #{task.help}\n"
79
+ end
80
+ elsif @help
81
+ puts opts;
82
+ puts "Loading all tasks.."
83
+ puts "Task | Description"
84
+ tasks = Dir.glob(File.join(APP_PATH,'tasks/*.rb'))
85
+ tasks.each { | f |
86
+ task, file_name = file_to_task(f, nil)
87
+ puts "=> #{file_name}: #{task.description}"
88
+ }
60
89
  end
@@ -0,0 +1,11 @@
1
+
2
+ module Doozer
3
+ class Task
4
+ def initialize(args=nil)
5
+ @args = args
6
+ end
7
+ def name; return self.class.to_s end
8
+ def help; end
9
+ def run; end
10
+ end
11
+ end
@@ -1,8 +1,8 @@
1
1
  module Doozer
2
2
  module Version
3
3
  MAJOR=0
4
- MINOR=2
5
- PATCH=6
4
+ MINOR=3
5
+ PATCH=0
6
6
  STRING=[MAJOR, MINOR, PATCH].join('.')
7
7
  end
8
8
  end
@@ -126,6 +126,13 @@ module Doozer
126
126
  Doozer::Configs.static_url(path)
127
127
  end
128
128
 
129
+ # Render the page title
130
+ #
131
+ # retuns page title if it was set in a controller
132
+ def title
133
+ return @view[:title] ? @view[:title] : ""
134
+ end
135
+
129
136
  # Creates metatags
130
137
  #
131
138
  # retuns a differnt metatag for each key/value added to @view[:meta] hash. See Doozer::Controller#meta for adding examples.
@@ -68,7 +68,7 @@ module Doozer
68
68
  help_all
69
69
  end
70
70
  elsif ['-v', '--version'].include?(action)
71
- p "Doozer #{Doozer::Version::STRING}"
71
+ puts "Doozer #{Doozer::Version::STRING}"
72
72
  else
73
73
  help_all
74
74
  end
@@ -76,8 +76,8 @@ module Doozer
76
76
  end
77
77
 
78
78
  def self.help_all
79
- printf "Doozer Version: #{Doozer::Version::STRING}\n"
80
- printf "Doozer commands:\n"
79
+ puts "Doozer Version: #{Doozer::Version::STRING}"
80
+ puts "Commands"
81
81
  help(:project)
82
82
  help(:model)
83
83
  help(:view)
@@ -89,10 +89,10 @@ module Doozer
89
89
 
90
90
  def self.controller(name)
91
91
  return if help?(name, :controller)
92
- printf "Generating File(s)..."
92
+ puts "Generating File(s)..."
93
93
  path = "#{APP_PATH}/app/controllers/#{name.downcase}_controller.rb"
94
94
  if not File.exist?(path)
95
- p "-- Generating Controller: #{path}"
95
+ puts "=> Generating controller: #{path}"
96
96
  file = File.new(path, "w+")
97
97
  if file
98
98
  template = "class #{Doozer::Lib.classify(name)}Controller < ApplicationController\nend"
@@ -100,33 +100,33 @@ module Doozer
100
100
  #make the view directory for this controller
101
101
  path = "#{APP_PATH}/app/views/#{name.downcase}"
102
102
  if not File.exist?(path)
103
- p "-- Generating View Folder: #{path}"
103
+ puts "=> Generating view folder: #{path}"
104
104
  FileUtils.mkdir path
105
105
  end
106
106
  else
107
- p "Unable to open file!"
107
+ puts "ERROR => Unable to open file!"
108
108
  end
109
109
  else
110
- p "-- Skipping: #{path} (already exists)"
110
+ puts "Skipping: #{path} (already exists)"
111
111
  end
112
112
  end
113
113
 
114
114
  def self.model(orm, name)
115
115
  return if help?(name, :model)
116
116
  raise "No ORM is defined. Please set this in database.yml" if orm.nil?
117
- p "Loaded ORM: #{orm}"
117
+ puts "=> Loaded ORM: #{orm}"
118
118
  path = "#{APP_PATH}/app/models/#{name}.rb"
119
119
  if not File.exist?(path)
120
- p "-- Generating Model: #{path}"
120
+ puts "=> Generating model: #{path}"
121
121
  file = File.new(path, "w+")
122
122
  if file
123
123
  template = eval("model_#{orm}('#{name}')")
124
124
  file.syswrite(template)
125
125
  else
126
- p "Unable to open file!"
126
+ puts "ERROR => Unable to open file!"
127
127
  end
128
128
  else
129
- p "-- Skipping: #{path} (already exists)"
129
+ puts "Skipping: #{path} (already exists)"
130
130
  end
131
131
  end
132
132
  def self.model_active_record(name)
@@ -156,15 +156,15 @@ end
156
156
 
157
157
  def self.view(view, formats)
158
158
  return if help?(view, :view)
159
- printf "Generating View File(s)..."
159
+ puts "Generating View File(s)..."
160
160
  raise "Not sure which controller to associate this view with. Needs to be controller_name/action_name. Example: index/login" if not view.index('/')
161
161
  formats.each{|f|
162
162
  file="#{APP_PATH}/app/views/#{view}.#{f.strip}.erb"
163
163
  if not File.exist?(file)
164
- p "-- Generating: #{file}"
164
+ puts "=> Generating view: #{file}"
165
165
  FileUtils.touch file
166
166
  else
167
- p "-- Skipping: #{file} (already exists)"
167
+ puts "Skipping: #{file} (already exists)"
168
168
  end
169
169
  }
170
170
  end
@@ -174,19 +174,19 @@ end
174
174
 
175
175
  raise "No ORM is defined. Please set this in database.yml" if orm.nil?
176
176
  version = migrate_next
177
- p "Loaded ORM: #{orm}"
177
+ puts "=> Loaded ORM: #{orm}"
178
178
  path = "#{APP_PATH}/db/#{version}_#{name.downcase}.rb"
179
179
  if not File.exist?(path)
180
- p "-- Generating Migration: #{path}"
180
+ puts "=> Generating migration: #{path}"
181
181
  file = File.new(path, "w+")
182
182
  if file
183
183
  template = eval("migrate_#{orm}('#{name}')")
184
184
  file.syswrite(template)
185
185
  else
186
- p "Unable to open file!"
186
+ puts "ERROR => Unable to open file!"
187
187
  end
188
188
  else
189
- p "-- Skipping: #{path} (already exists)"
189
+ puts "Skipping: #{path} (already exists)"
190
190
  end
191
191
  end
192
192
  def self.migrate_next
@@ -251,36 +251,46 @@ end
251
251
 
252
252
  def self.task(name)
253
253
  return if help?(name, :task)
254
- p "Generating file..."
254
+ puts "Generating file..."
255
255
  path = "#{APP_PATH}/tasks/#{name}.rb"
256
256
  if not File.exist?(path)
257
- p "-- Generating Task: #{path}"
257
+ puts "=> Generating task: #{path}"
258
258
  file = File.new(path, "w+")
259
259
  if file
260
260
  klass = Doozer::Lib.classify(name)
261
261
  template = """
262
262
  #= Task #{klass}
263
- class #{klass}
264
- def self.run
265
- #place your task here
263
+ #
264
+ class #{klass} < Doozer::Task
265
+ def description
266
+ \"\"\"Place your task description here\"\"\"
267
+ end
268
+
269
+ def help
270
+ \"\"\"Place your task help here\"\"\"
271
+ end
272
+
273
+ def run
274
+ # Place your task here
275
+ # @args holds evaluated args string
266
276
  end
267
277
  end
268
278
  """
269
279
  file.syswrite(template)
270
280
  else
271
- p "Unable to open file!"
281
+ puts "ERROR => Unable to open file!"
272
282
  end
273
283
  else
274
- p "-- Skipping: #{path} (already exists)"
284
+ puts "Skipping: #{path} (already exists)"
275
285
  end
276
286
  end
277
287
 
278
288
  def self.helper(name)
279
289
  return if help?(name, :helper)
280
- p "Generating file..."
290
+ puts "Generating file..."
281
291
  path = "#{APP_PATH}/app/helpers/#{name}_helper.rb"
282
292
  if not File.exist?(path)
283
- p "-- Generating Helper: #{path}"
293
+ puts "=> Generating helper: #{path}"
284
294
  file = File.new(path, "w+")
285
295
  if file
286
296
  klass = Doozer::Lib.classify(name)
@@ -291,16 +301,16 @@ end
291
301
  """
292
302
  file.syswrite(template)
293
303
  else
294
- p "Unable to open file!"
304
+ puts "ERROR => Unable to open file!"
295
305
  end
296
306
  else
297
- p "-- Skipping: #{path} (already exists)"
307
+ puts "Skipping: #{path} (already exists)"
298
308
  end
299
309
  end
300
310
 
301
311
  def self.help?(name, action=nil)
302
312
  if name.to_sym == :"-h" or name == :help
303
- printf "doozer commands:\n"
313
+ puts "Commands:"
304
314
  help(action)
305
315
  return true
306
316
  end
@@ -346,7 +356,7 @@ Task - Create a task file in project/tasks with the class name of TaskName.
346
356
  Command: doozer generate (task or -T) task_name
347
357
  Example: doozer generate task task_name\n"""
348
358
  end
349
- printf h
359
+ puts h
350
360
  end
351
361
 
352
362
  # TODO: Dry this up...
@@ -354,84 +364,84 @@ Task - Create a task file in project/tasks with the class name of TaskName.
354
364
 
355
365
  # create application skeleton
356
366
  if not File.exist?(name)
357
- p "Creating #{name}/"
367
+ puts "Creating #{name}/"
358
368
  system("mkdir #{name}")
359
369
  else
360
- p "Skipping application directory (already exists)"
370
+ puts "Skipping application directory (already exists)"
361
371
  end
362
372
 
363
373
  #create app folder
364
374
  if not File.exist?("#{name}/app")
365
- p "Creating app directory"
375
+ puts "=> Creating app directory"
366
376
  system("mkdir #{name}/app")
367
377
  else
368
- p "Skipping #{name}/app directory (already exists)"
378
+ puts "Skipping #{name}/app directory (already exists)"
369
379
  end
370
380
 
371
381
  #copy controllers
372
382
  if not File.exist?("#{name}/app/controllers")
373
- p "Creating #{name}/app/controllers directory and files"
383
+ puts "=> Creating #{name}/app/controllers directory and files"
374
384
  system("mkdir #{name}/app/controllers")
375
385
  system("cp #{skeleton_path 'app/controllers/*.rb'} #{name}/app/controllers")
376
386
  else
377
- p "Skipping #{name}/app/controllers directory (already exists)"
387
+ puts "Skipping #{name}/app/controllers directory (already exists)"
378
388
  end
379
389
 
380
390
  #copy models
381
391
  if not File.exist?("#{name}/app/models")
382
- p "Creating #{name}/app/models directory and files"
392
+ puts "=> Creating #{name}/app/models directory and files"
383
393
  system("mkdir #{name}/app/models")
384
394
  else
385
- p "Skipping #{name}/app/models directory (already exists)"
395
+ puts "Skipping #{name}/app/models directory (already exists)"
386
396
  end
387
397
 
388
398
  #copy views
389
399
  if not File.exist?("#{name}/app/views")
390
- p "Creating #{name}/app/views directory and files"
400
+ puts "=> Creating #{name}/app/views directory and files"
391
401
  system("mkdir #{name}/app/views")
392
402
  else
393
- p "Skipping #{name}/app/views directory (already exists)"
403
+ puts "Skipping #{name}/app/views directory (already exists)"
394
404
  end
395
405
 
396
406
  #copy views/layouts
397
407
  if not File.exist?("#{name}/app/views/layouts")
398
- p "Creating #{name}/app/views/layouts directory and files"
408
+ puts "=> Creating #{name}/app/views/layouts directory and files"
399
409
  system("mkdir #{name}/app/views/layouts")
400
410
  system("cp #{skeleton_path 'app/views/layouts/*.erb'} #{name}/app/views/layouts")
401
411
  else
402
- p "Skipping #{name}/app/views/layouts directory (already exists)"
412
+ puts "Skipping #{name}/app/views/layouts directory (already exists)"
403
413
  end
404
414
 
405
415
  #copy views/index
406
416
  if not File.exist?("#{name}/app/views/index")
407
- p "Creating #{name}/app/views/index directory and files"
417
+ puts "=> Creating #{name}/app/views/index directory and files"
408
418
  system("mkdir #{name}/app/views/index")
409
419
  system("cp #{skeleton_path 'app/views/index/*.erb'} #{name}/app/views/index")
410
420
  else
411
- p "Skipping #{name}/app/views/index directory (already exists)"
421
+ puts "Skipping #{name}/app/views/index directory (already exists)"
412
422
  end
413
423
 
414
424
  #copy views/global
415
425
  if not File.exist?("#{name}/app/views/global")
416
- p "Creating #{name}/app/views/global directory and files"
426
+ puts "=> Creating #{name}/app/views/global directory and files"
417
427
  system("mkdir #{name}/app/views/global")
418
428
  system("cp #{skeleton_path 'app/views/global/*.erb'} #{name}/app/views/global")
419
429
  else
420
- p "Skipping #{name}/app/views/global directory (already exists)"
430
+ puts "Skipping #{name}/app/views/global directory (already exists)"
421
431
  end
422
432
 
423
433
  #copy helpers
424
434
  if not File.exist?("#{name}/app/helpers")
425
- p "Creating #{name}/app/helpers directory and files"
435
+ puts "=> Creating #{name}/app/helpers directory and files"
426
436
  system("mkdir #{name}/app/helpers")
427
437
  system("cp #{skeleton_path 'app/helpers/*.rb'} #{name}/app/helpers")
428
438
  else
429
- p "Skipping #{name}/app/helpers directory (already exists)"
439
+ puts "Skipping #{name}/app/helpers directory (already exists)"
430
440
  end
431
441
 
432
442
  #copy configs
433
443
  if not File.exist?("#{name}/config")
434
- p "Creating #{name}/config directory and files"
444
+ puts "=> Creating #{name}/config directory and files"
435
445
  system("mkdir #{name}/config")
436
446
  system("cp #{skeleton_path 'config/*.yml'} #{name}/config")
437
447
  system("cp #{skeleton_path 'config/*.rb'} #{name}/config")
@@ -444,102 +454,111 @@ Task - Create a task file in project/tasks with the class name of TaskName.
444
454
  boot = ERB.new(results.join(""))
445
455
  File.open("#{name}/config/boot.rb", 'w') {|f| f.write(boot.result(binding)) }
446
456
  else
447
- p "Skipping #{name}/config directory (already exists)"
457
+ puts "Skipping #{name}/config directory (already exists)"
458
+ end
459
+
460
+ # create gems folder
461
+ if not File.exist?("#{name}/gems")
462
+ puts "=> Creating #{name}/gems directory"
463
+ system("cp -R #{skeleton_path 'gems'} #{name}")
464
+ system("mkdir #{name}/gems/doozer")
465
+ else
466
+ puts "Skipping #{name}/gems directory (already exists)"
448
467
  end
449
468
 
450
469
  # create log folder
451
470
  if not File.exist?("#{name}/log")
452
- p "Creating #{name}/log directory"
471
+ puts "=> Creating #{name}/log directory"
453
472
  system("mkdir #{name}/log")
454
473
  else
455
- p "Skipping #{name}/log directory (already exists)"
474
+ puts "Skipping #{name}/log directory (already exists)"
456
475
  end
457
476
 
458
477
  #copy db
459
478
  if not File.exist?("#{name}/db")
460
- p "Creating #{name}/db directory and files"
479
+ puts "=> Creating #{name}/db directory and files"
461
480
  system("mkdir #{name}/db")
462
481
  else
463
- p "Skipping #{name}/db directory (already exists)"
482
+ puts "Skipping #{name}/db directory (already exists)"
464
483
  end
465
484
 
466
485
  #copy lib
467
486
  if not File.exist?("#{name}/lib")
468
- p "Creating #{name}/lib directory and files"
487
+ puts "=> Creating #{name}/lib directory and files"
469
488
  system("mkdir #{name}/lib")
470
489
  else
471
- p "Skipping #{name}/lib directory (already exists)"
490
+ puts "Skipping #{name}/lib directory (already exists)"
472
491
  end
473
492
 
474
493
  #copy script
475
494
  if not File.exist?("#{name}/script")
476
- p "Creating #{name}/script directory and files"
495
+ puts "=> Creating #{name}/script directory and files"
477
496
  system("mkdir #{name}/script")
478
497
  system("cp #{skeleton_path 'script/*'} #{name}/script")
479
498
  else
480
- p "Skipping #{name}/script directory (already exists)"
499
+ puts "Skipping #{name}/script directory (already exists)"
481
500
  end
482
501
 
483
502
  #copy static
484
503
  if not File.exist?("#{name}/static")
485
- p "Creating #{name}/static directory and files"
504
+ puts "=> Creating #{name}/static directory and files"
486
505
  system("mkdir #{name}/static")
487
506
  system("cp #{skeleton_path 'static/*.*'} #{name}/static/")
488
507
  else
489
- p "Skipping #{name}/static directory (already exists)"
508
+ puts "Skipping #{name}/static directory (already exists)"
490
509
  end
491
510
 
492
511
  #copy static/images
493
512
  if not File.exist?("#{name}/static/images")
494
- p "Creating #{name}/script/images directory and files"
513
+ puts "=> Creating #{name}/script/images directory and files"
495
514
  system("mkdir #{name}/static/images")
496
515
  else
497
- p "Skipping #{name}/static/images directory (already exists)"
516
+ puts "Skipping #{name}/static/images directory (already exists)"
498
517
  end
499
518
 
500
519
  #copy static/css
501
520
  if not File.exist?("#{name}/static/css")
502
- p "Creating #{name}/script/css directory and files"
521
+ puts "=> Creating #{name}/script/css directory and files"
503
522
  system("mkdir #{name}/static/css")
504
523
  system("cp #{skeleton_path 'static/css/*.css'} #{name}/static/css")
505
524
  else
506
- p "Skipping #{name}/static/css directory (already exists)"
525
+ puts "Skipping #{name}/static/css directory (already exists)"
507
526
  end
508
527
 
509
528
  #copy static/images
510
529
  if not File.exist?("#{name}/static/html")
511
- p "Creating #{name}/script/html directory and files"
530
+ puts "=> Creating #{name}/script/html directory and files"
512
531
  system("mkdir #{name}/static/html")
513
532
  else
514
- p "Skipping #{name}/static/html directory (already exists)"
533
+ puts "Skipping #{name}/static/html directory (already exists)"
515
534
  end
516
535
 
517
536
  #copy static/images
518
537
  if not File.exist?("#{name}/static/js")
519
- p "Creating #{name}/script/js directory and files"
538
+ puts "=> Creating #{name}/script/js directory and files"
520
539
  system("mkdir #{name}/static/js")
521
540
  system("cp #{skeleton_path 'static/js/*.js'} #{name}/static/js")
522
541
  else
523
- p "Skipping #{name}/static/js directory (already exists)"
542
+ puts "Skipping #{name}/static/js directory (already exists)"
524
543
  end
525
544
 
526
545
  #copy test
527
546
  if not File.exist?("#{name}/test")
528
- p "Creating #{name}/test directory and files"
547
+ puts "=> Creating #{name}/test directory and files"
529
548
  system("mkdir #{name}/test")
530
549
  system("cp #{skeleton_path 'test/*.rb'} #{name}/test")
531
550
  system("mkdir #{name}/test/fixtures")
532
551
  system("cp #{skeleton_path 'test/fixtures/*.rb'} #{name}/test/fixtures")
533
552
  else
534
- p "Skipping test directory (already exists)"
553
+ puts "Skipping test directory (already exists)"
535
554
  end
536
555
 
537
556
  #copy test
538
557
  if not File.exist?("#{name}/tasks")
539
- p "Creating #{name}/tasks directory and files"
558
+ puts "=> Creating #{name}/tasks directory and files"
540
559
  system("mkdir #{name}/tasks")
541
560
  else
542
- p "Skipping #{name}/test directory (already exists)"
561
+ puts "Skipping #{name}/test directory (already exists)"
543
562
  end
544
563
 
545
564
  #copy rakefile
@@ -3,9 +3,58 @@ DOOZER_GEM_VERSION='<%=@version%>'
3
3
  require 'date'
4
4
  require 'rubygems'
5
5
 
6
- begin
7
- gem 'doozer', "= #{DOOZER_GEM_VERSION}"
8
- require 'doozer'
9
- rescue Gem::LoadError
10
- raise "doozer-#{DOOZER_GEM_VERSION} gem not installed"
6
+ module Doozer
7
+ class << self
8
+ @@after_orm_plugins = []
9
+ @@after_orm_gems = []
10
+ def load!
11
+ init_doozer
12
+ init_plugins
13
+ end
14
+ def init_doozer
15
+ path = "#{APP_PATH}/gems/doozer/doozer-#{DOOZER_GEM_VERSION}"
16
+ if File.exist?(path)
17
+ $:.unshift "#{path}/lib"
18
+ require "#{path}/lib/doozer"
19
+ else
20
+ begin
21
+ gem 'doozer', "= #{DOOZER_GEM_VERSION}"
22
+ require 'doozer'
23
+ rescue Gem::LoadError
24
+ raise "doozer-#{DOOZER_GEM_VERSION} gem not installed"
25
+ end
26
+ end
27
+ end
28
+ def init_plugins
29
+ begin
30
+ require 'gems/plugins/init'
31
+ rescue => e
32
+ end
33
+ end
34
+ def init_after_orm_plugins
35
+ @@after_orm_plugins.each { | p |
36
+ plugin(p[:folder], p[:init_file])
37
+ }
38
+ end
39
+ def init_after_orm_gems
40
+ @@after_orm_gems.each { | g |
41
+ require_gem(g[:name], g[:version])
42
+ }
43
+ end
44
+ def require_gem(name, version=nil)
45
+ gem name, version if not version.nil?
46
+ require name
47
+ end
48
+ def require_gem_after_orm(name, version=nil)
49
+ @@after_orm_gems.push({:name=>name, :version=>version})
50
+ end
51
+ def plugin(folder, init_file)
52
+ $:.unshift "#{APP_PATH}/gems/plugins/#{folder}/lib"
53
+ require "#{APP_PATH}/gems/plugins/#{folder}/lib/#{init_file}"
54
+ end
55
+ def plugin_after_orm(folder, init_file)
56
+ @@after_orm_plugins.push({:folder=>folder, :init_file=>init_file})
57
+ end
58
+ end
11
59
  end
60
+ Doozer.load!
@@ -1,6 +1,6 @@
1
1
  # This file is loaded right after orm is initialized and right before app, controllers and models
2
2
  # place code here which is used throughout the application
3
- printf "Loading Environment... \n"
3
+ puts "=> Loading environment"
4
4
 
5
5
  Doozer::Initializer.after_orm do | config |
6
6
  # require 'doozer/plugins/paginate/init'
@@ -0,0 +1,26 @@
1
+ """
2
+ There are a few different methods you can call to load plugins and gems from this file.
3
+
4
+ 1. Doozer.plugin('folder', 'init_file') - Instantly loads the plugin during the boot process.
5
+ 2. Doozer.plugin_after_orm('folder', 'init_file') - Delays loading the plugin until after the ORM is initialized.
6
+ 3. Doozer.require_gem('gem_name', 'version') - Instantly loads the gem during the boot process.
7
+ 4. Doozer.require_gem_after_orm('gem_name', 'version') - Delays loading the gem until after the ORM is initialized.
8
+
9
+ To queue a plugin or gem to be loaded, follow these examples.
10
+
11
+ To load the following plugins:
12
+ gems/plugins
13
+ /plugin1
14
+ /init.rb
15
+ /plugin2
16
+ /init.rb
17
+
18
+ You would place the following method calls in this file:
19
+ Doozer.plugin('plugin1', 'init')
20
+ Doozer.plugin_after_orm('plugin2', 'init')
21
+
22
+ To load the following gems, follow these examples:
23
+ Doozer.require_gem('example', '= 0.1.0')
24
+ Doozer.require_gem_after_orm('example', '>= 0.1.0')
25
+
26
+ """
@@ -7,7 +7,7 @@ require boot
7
7
  @env = (ARGV.length > 0) ? ARGV[0] : 'development'
8
8
  ARGV.delete(@env) if ARGV.include?(@env)
9
9
  @env = @env.to_sym
10
- printf "[Doozer #{Doozer::Version::STRING}]\n"
10
+ puts "[Doozer #{Doozer::Version::STRING}]"
11
11
  # see http://ruby-doc.org/core/ for more options
12
12
  IRB.conf[:LOAD_MODULES] = ["irb/completion", boot, "#{DOOZER_PATH}/doozer/scripts/console"]
13
13
  IRB.conf[:USE_READLINE] = true
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ APP_PATH = Dir.pwd
3
+ require File.join(APP_PATH, 'config/boot')
4
+ require File.join(DOOZER_PATH, 'doozer/scripts/plugin')
@@ -1,6 +1,6 @@
1
1
  # This file is loaded right after orm is initialized and right before app, controllers and models
2
2
  # place code here which is used throughout the application
3
- printf "Loading Environment... \n"
3
+ puts "=> Loading environment"
4
4
 
5
5
  Doozer::Initializer.after_orm do | config |
6
6
  # require 'doozer/plugins/paginate/init'
@@ -6,7 +6,7 @@ require File.join(APP_PATH, 'config/boot')
6
6
  @env = (ARGV.length > 0) ? ARGV[0] : 'development'
7
7
  ARGV.delete(@env) if ARGV.include?(@env)
8
8
  @env = @env.to_sym
9
- printf "[Doozer #{Doozer::Version::STRING}]\n"
9
+ puts "[Doozer #{Doozer::Version::STRING}]"
10
10
  # see http://ruby-doc.org/core/ for more options
11
11
  IRB.conf[:LOAD_MODULES] = ["irb/completion", "#{DOOZER_PATH}/doozer/scripts/console"]
12
12
  IRB.conf[:USE_READLINE] = true
data/test/test_helper.rb CHANGED
@@ -9,7 +9,7 @@ require 'doozer'
9
9
  class RoutingHelper < Test::Unit::TestCase
10
10
 
11
11
  def setup
12
- printf "\n Routing Helper setup... \n"
12
+ puts "=> Routing helper setup"
13
13
  @app_path = File.join(File.dirname(__FILE__), 'project')
14
14
 
15
15
  #--boot
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: doozer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - grippy
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-27 00:00:00 -07:00
12
+ date: 2009-10-29 00:00:00 -07:00
13
13
  default_executable: doozer
14
14
  dependencies: []
15
15
 
@@ -61,8 +61,10 @@ files:
61
61
  - lib/doozer/scripts/cluster.rb
62
62
  - lib/doozer/scripts/console.rb
63
63
  - lib/doozer/scripts/migrate.rb
64
+ - lib/doozer/scripts/plugin.rb
64
65
  - lib/doozer/scripts/task.rb
65
66
  - lib/doozer/scripts/test.rb
67
+ - lib/doozer/task.rb
66
68
  - lib/doozer/version.rb
67
69
  - lib/doozer/view_helpers.rb
68
70
  - lib/doozer/watcher.rb
@@ -81,9 +83,11 @@ files:
81
83
  - templates/skeleton/config/environment.rb
82
84
  - templates/skeleton/config/rack.rb
83
85
  - templates/skeleton/config/routes.rb
86
+ - templates/skeleton/gems/plugins/init.rb
84
87
  - templates/skeleton/script/cluster
85
88
  - templates/skeleton/script/console
86
89
  - templates/skeleton/script/migrate
90
+ - templates/skeleton/script/plugin
87
91
  - templates/skeleton/script/task
88
92
  - templates/skeleton/script/test
89
93
  - templates/skeleton/static/404.html