doozer 0.2.6 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/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