grippy-doozer 0.1.2 → 0.1.3
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 +1 -1
- data/bin/doozer +0 -3
- data/doozer.gemspec +4 -2
- data/lib/doozer/app.rb +33 -24
- data/lib/doozer/configs.rb +4 -4
- data/lib/doozer/initializer.rb +6 -0
- data/lib/doozer/orm/active_record.rb +2 -2
- data/lib/doozer/orm/data_mapper.rb +1 -1
- data/lib/doozer/orm/sequel.rb +1 -1
- data/lib/doozer/partial.rb +1 -1
- data/lib/doozer/rackup/server.ru +0 -3
- data/lib/doozer/route.rb +1 -1
- data/lib/doozer/scripts/cluster.rb +0 -2
- data/lib/doozer/scripts/console.rb +2 -0
- data/lib/doozer/version.rb +1 -1
- data/lib/doozer/watcher.rb +105 -111
- data/templates/skeleton/config/environment.rb +1 -3
- data/templates/skeleton/script/console +15 -0
- metadata +4 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.3
|
data/bin/doozer
CHANGED
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.1.
|
8
|
+
s.version = "0.1.3"
|
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-08-
|
12
|
+
s.date = %q{2009-08-11}
|
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}
|
@@ -55,6 +55,7 @@ Gem::Specification.new do |s|
|
|
55
55
|
"lib/doozer/redirect.rb",
|
56
56
|
"lib/doozer/route.rb",
|
57
57
|
"lib/doozer/scripts/cluster.rb",
|
58
|
+
"lib/doozer/scripts/console.rb",
|
58
59
|
"lib/doozer/scripts/migrate.rb",
|
59
60
|
"lib/doozer/scripts/task.rb",
|
60
61
|
"lib/doozer/scripts/test.rb",
|
@@ -76,6 +77,7 @@ Gem::Specification.new do |s|
|
|
76
77
|
"templates/skeleton/config/rack.rb",
|
77
78
|
"templates/skeleton/config/routes.rb",
|
78
79
|
"templates/skeleton/script/cluster",
|
80
|
+
"templates/skeleton/script/console",
|
79
81
|
"templates/skeleton/script/migrate",
|
80
82
|
"templates/skeleton/script/task",
|
81
83
|
"templates/skeleton/script/test",
|
data/lib/doozer/app.rb
CHANGED
@@ -10,16 +10,13 @@ module Doozer
|
|
10
10
|
# load routes
|
11
11
|
load_routes
|
12
12
|
|
13
|
-
# load the application coontrollers, views, and helpers
|
13
|
+
# load the application models, coontrollers, views, and helpers
|
14
14
|
load_files
|
15
|
-
|
16
|
-
# load models
|
17
|
-
load_models
|
18
|
-
|
15
|
+
|
19
16
|
# attach the file watcher for the mvc/lib/etc in development mode
|
20
|
-
|
17
|
+
load_watcher if Doozer::Configs.rack_env != :deployment
|
21
18
|
|
22
|
-
|
19
|
+
printf "Doozer racked up...\n"
|
23
20
|
end
|
24
21
|
|
25
22
|
# This method is called along the rackup chain and maps the request path to the route, controller, and view for the format type.
|
@@ -112,14 +109,16 @@ module Doozer
|
|
112
109
|
end
|
113
110
|
|
114
111
|
def load_files
|
115
|
-
|
112
|
+
# load models
|
113
|
+
load_models
|
114
|
+
printf "Caching files...\n"
|
116
115
|
@@controllers = {}
|
117
116
|
@@layouts={}
|
118
117
|
@@views={}
|
119
118
|
@@errors={}
|
120
119
|
|
121
120
|
# require helper files and include into Doozer::Partial
|
122
|
-
helper_files = Dir.glob(File.join(APP_PATH,'
|
121
|
+
helper_files = Dir.glob(File.join(APP_PATH,'app/helpers/*_helper.rb'))
|
123
122
|
helper_files.each {|f|
|
124
123
|
require f
|
125
124
|
key = f.split("helpers/")[1].gsub(/.rb/,'')
|
@@ -127,7 +126,7 @@ module Doozer
|
|
127
126
|
}
|
128
127
|
|
129
128
|
# cache contoller classes
|
130
|
-
controller_files = Dir.glob(File.join(APP_PATH,'
|
129
|
+
controller_files = Dir.glob(File.join(APP_PATH,'app/controllers/*_controller.rb'))
|
131
130
|
# we need to load the application_controller first since this might not be the first in the list...
|
132
131
|
if controller_files.length > 0
|
133
132
|
i=0
|
@@ -161,7 +160,7 @@ module Doozer
|
|
161
160
|
}
|
162
161
|
|
163
162
|
# cache layout erb's
|
164
|
-
layout_files = Dir.glob(File.join(APP_PATH,'
|
163
|
+
layout_files = Dir.glob(File.join(APP_PATH,'app/views/layouts/*.erb'))
|
165
164
|
layout_files.each {|f|
|
166
165
|
key = f.split("layouts/")[1].split(".html.erb")[0].gsub(/.xml.erb/, '_xml').gsub(/.json.erb/, '_json')
|
167
166
|
results = []
|
@@ -172,7 +171,7 @@ module Doozer
|
|
172
171
|
#lood 404 and 500 pages if they exist
|
173
172
|
pnf = Doozer::Configs.page_not_found_url
|
174
173
|
if pnf
|
175
|
-
file = File.join(APP_PATH,"
|
174
|
+
file = File.join(APP_PATH,"#{pnf}")
|
176
175
|
results = []
|
177
176
|
File.new(file, "r").each { |line| results << line }
|
178
177
|
@@errors[404] = results.join("")
|
@@ -181,7 +180,7 @@ module Doozer
|
|
181
180
|
end
|
182
181
|
ise = Doozer::Configs.internal_server_error_url
|
183
182
|
if ise
|
184
|
-
file = File.join(APP_PATH,"
|
183
|
+
file = File.join(APP_PATH,"#{ise}")
|
185
184
|
results = []
|
186
185
|
File.new(file, "r").each { |line| results << line }
|
187
186
|
@@errors[500] = results.join("")
|
@@ -191,7 +190,7 @@ module Doozer
|
|
191
190
|
|
192
191
|
@@controllers.each_key { | key |
|
193
192
|
# p key.inspect
|
194
|
-
files = Dir.glob(File.join(APP_PATH,"
|
193
|
+
files = Dir.glob(File.join(APP_PATH,"app/views/#{key.to_s}/*.erb"))
|
195
194
|
files.each { | f |
|
196
195
|
#!!!don't cache partials here!!!
|
197
196
|
view = f.split("#{key.to_s}/")[1].split(".erb")[0].gsub(/\./,'_')
|
@@ -212,22 +211,29 @@ module Doozer
|
|
212
211
|
end
|
213
212
|
|
214
213
|
def load_models
|
215
|
-
|
214
|
+
printf "Loading models...\n"
|
215
|
+
Dir.glob(File.join(APP_PATH,'app/models/*.rb')).each { | model |
|
216
|
+
require model
|
217
|
+
}
|
216
218
|
end
|
217
219
|
|
218
220
|
def load_watcher
|
219
|
-
|
221
|
+
require 'doozer/watcher'
|
222
|
+
|
223
|
+
printf "All along the watchtower...\n"
|
220
224
|
watcher = FileSystemWatcher.new()
|
225
|
+
|
221
226
|
# watcher.addDirectory(File.join(File.dirname(__FILE__),'../doozer/'), "*.rb")
|
222
|
-
watcher.addDirectory(
|
223
|
-
watcher.addDirectory(
|
224
|
-
watcher.addDirectory(
|
225
|
-
watcher.addDirectory(
|
226
|
-
watcher.addDirectory(
|
227
|
-
watcher.addDirectory(
|
227
|
+
watcher.addDirectory( APP_PATH + '/app/', "**/*")
|
228
|
+
watcher.addDirectory( APP_PATH + '/app', "**/**/*")
|
229
|
+
watcher.addDirectory( APP_PATH + '/config/', "*.*")
|
230
|
+
watcher.addDirectory( APP_PATH + '/lib/', "*.*")
|
231
|
+
watcher.addDirectory( APP_PATH + '/static/', "*.*")
|
232
|
+
watcher.addDirectory( APP_PATH + '/static/', "**/**/*")
|
233
|
+
|
228
234
|
|
229
235
|
watcher.sleepTime = 1
|
230
|
-
watcher.start { |status,file|
|
236
|
+
watcher.start { |status, file|
|
231
237
|
if(status == FileSystemWatcher::CREATED) then
|
232
238
|
puts "created: #{file}"
|
233
239
|
load_files
|
@@ -242,7 +248,10 @@ module Doozer
|
|
242
248
|
Doozer::Partial.clear_loaded_partials
|
243
249
|
end
|
244
250
|
}
|
245
|
-
#don't join the thread it messes up rackup threading watcher.join()
|
251
|
+
#don't join the thread it messes up rackup threading watcher.join()
|
252
|
+
# p watcher.isStarted?
|
253
|
+
# p watcher.isStopped?
|
254
|
+
# p watcher.foundFiles.inspect
|
246
255
|
end
|
247
256
|
|
248
257
|
def handler(key)
|
data/lib/doozer/configs.rb
CHANGED
@@ -13,8 +13,8 @@ module Doozer
|
|
13
13
|
|
14
14
|
# Rack refers to production as deployment.
|
15
15
|
def self.load(rack_env)
|
16
|
-
|
17
|
-
|
16
|
+
printf "APP_ROOT: #{APP_PATH}\n"
|
17
|
+
printf "Loading configs for #{rack_env}\n"
|
18
18
|
|
19
19
|
# TODO: remove this and replace with APP_PATH
|
20
20
|
@@env_path = Dir.pwd
|
@@ -42,13 +42,13 @@ module Doozer
|
|
42
42
|
begin
|
43
43
|
@@config[:database] = Configs.symbolize_keys( YAML.load(File.read(File.join(APP_PATH,'config/database.yml'))) )
|
44
44
|
rescue
|
45
|
-
|
45
|
+
printf "--Failed to load config/database.yml \n"
|
46
46
|
end
|
47
47
|
|
48
48
|
begin
|
49
49
|
@@config[:app] = Configs.symbolize_keys( YAML.load(File.read(File.join(APP_PATH,'config/app.yml'))) )
|
50
50
|
rescue
|
51
|
-
|
51
|
+
printf "--Failed to load config/app.yml\n"
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
data/lib/doozer/initializer.rb
CHANGED
@@ -70,6 +70,12 @@ module Doozer
|
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
73
|
+
|
74
|
+
def self.console(env)
|
75
|
+
self.boot(env)
|
76
|
+
app = Doozer::App.new(env)
|
77
|
+
end
|
78
|
+
|
73
79
|
# Primary hook for extending/overriding ORM. Code block is pushed onto an array which allows for multiple hooks throughtout different files.
|
74
80
|
#
|
75
81
|
# &block - code to execute after ORM is intialized
|
@@ -11,8 +11,8 @@ module Doozer
|
|
11
11
|
:password => db_config["password"],
|
12
12
|
:database => db_config["database"]
|
13
13
|
)
|
14
|
-
|
15
|
-
|
14
|
+
printf "ORM: #{Doozer::Configs.orm()} initialized...\n"
|
15
|
+
# printf "ORM: logging initialized"
|
16
16
|
ActiveRecord::Base.logger = Doozer::Configs.logger
|
17
17
|
end
|
18
18
|
end
|
data/lib/doozer/orm/sequel.rb
CHANGED
data/lib/doozer/partial.rb
CHANGED
data/lib/doozer/rackup/server.ru
CHANGED
data/lib/doozer/route.rb
CHANGED
@@ -19,7 +19,7 @@ module Doozer
|
|
19
19
|
# sort routes here
|
20
20
|
@@parts.sort! do |a, b| a[1].length <=> b[1].length end
|
21
21
|
@@parts.reverse!
|
22
|
-
|
22
|
+
printf "Routes drawn and sorted...\n"
|
23
23
|
# @@parts.each { | i | p i[1] }
|
24
24
|
end
|
25
25
|
def self.add(name=nil, path=nil, args=nil)
|
@@ -8,8 +8,6 @@
|
|
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
10
|
# -h Hellllpppp!!!
|
11
|
-
|
12
|
-
require 'date' # needs to be included before rubygems. otherwise
|
13
11
|
require 'optparse'
|
14
12
|
|
15
13
|
APP_PATH = Dir.pwd if APP_PATH.nil?
|
data/lib/doozer/version.rb
CHANGED
data/lib/doozer/watcher.rb
CHANGED
@@ -36,17 +36,16 @@ module ServiceState
|
|
36
36
|
def setState(newState)
|
37
37
|
@stateMutex.synchronize {
|
38
38
|
if newState == CONFIGURED then
|
39
|
-
|
39
|
+
@configured = true
|
40
40
|
else
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
41
|
+
@state = newState
|
42
|
+
if isStarted? then
|
43
|
+
@startTime = Time.now()
|
44
|
+
elsif isStopped?
|
45
|
+
@stopTime = Time.now()
|
46
|
+
end
|
47
47
|
end
|
48
48
|
}
|
49
|
-
|
50
49
|
if defined?(@stateCallback) then
|
51
50
|
@stateCallback.call(newState)
|
52
51
|
end
|
@@ -94,6 +93,8 @@ class FileSystemWatcher
|
|
94
93
|
# you can optionally use the file contents md5 to detect if a file has changed
|
95
94
|
attr_accessor :useMD5
|
96
95
|
|
96
|
+
attr_accessor :foundFiles, :files, :directories
|
97
|
+
|
97
98
|
def initialize(dir=nil, expression="**/*")
|
98
99
|
@sleepTime = 5
|
99
100
|
@useMD5 = false
|
@@ -158,46 +159,46 @@ class FileSystemWatcher
|
|
158
159
|
@watchThread = Thread.new {
|
159
160
|
# we will be stopped if someone calls stop or if someone set a stopWhen that becomes true
|
160
161
|
while !isStopped? do
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
162
|
+
if (!@directories.empty?) or (!@files.empty?) then
|
163
|
+
# this will hold the list of the files we looked at this iteration
|
164
|
+
# allows us to not look at the same file again and also to compare
|
165
|
+
# with the foundFile list to see if something was deleted
|
166
|
+
alreadyExamined = Hash.new()
|
166
167
|
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
168
|
+
# check the files in each watched directory
|
169
|
+
if not @directories.empty? then
|
170
|
+
@directories.each { | dirObj |
|
171
|
+
examineFileList(dirObj.getFiles(), alreadyExamined, &block)
|
172
|
+
}
|
173
|
+
end
|
173
174
|
|
174
|
-
|
175
|
-
|
175
|
+
# now examine any files the user wants to specifically watch
|
176
|
+
examineFileList(@files, alreadyExamined, &block) if not @files.empty?
|
176
177
|
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
178
|
+
# see if we have to delete files from our found list
|
179
|
+
if not @firstLoad then
|
180
|
+
if not @foundFiles.empty? then
|
181
|
+
# now diff the found files and the examined files to see if
|
182
|
+
# something has been deleted
|
183
|
+
allFoundFiles = @foundFiles.keys()
|
184
|
+
allExaminedFiles = alreadyExamined.keys()
|
185
|
+
intersection = allFoundFiles - allExaminedFiles
|
186
|
+
intersection.each { |fileName|
|
187
|
+
# callback
|
188
|
+
block.call(DELETED, fileName)
|
189
|
+
# remove deleted file from the foundFiles list
|
190
|
+
@foundFiles.delete(fileName)
|
191
|
+
}
|
192
|
+
end
|
193
|
+
else
|
194
|
+
@firstLoad = false
|
195
|
+
end
|
191
196
|
end
|
192
|
-
else
|
193
|
-
@firstLoad = false
|
194
|
-
end
|
195
|
-
end
|
196
197
|
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
198
|
+
# go to sleep
|
199
|
+
sleep(@sleepTime)
|
200
|
+
end
|
201
|
+
}
|
201
202
|
|
202
203
|
# set the watch thread priority
|
203
204
|
@watchThread.priority = @priority
|
@@ -226,79 +227,72 @@ class FileSystemWatcher
|
|
226
227
|
|
227
228
|
# dont examine the same file 2 times
|
228
229
|
if not alreadyExamined.has_key?(fullFileName) then
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
230
|
+
# we cant do much if the file isnt readable anyway
|
231
|
+
if File.readable?(fullFileName) then
|
232
|
+
# set that we have seen this file
|
233
|
+
alreadyExamined[fullFileName] = true
|
233
234
|
|
234
|
-
|
235
|
-
|
235
|
+
# get the file info
|
236
|
+
modTime, size = File.mtime(fullFileName), File.size(fullFileName)
|
236
237
|
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
# callback
|
255
|
-
block.call(CREATED, fullFileName)
|
238
|
+
# on the first iteration just load all of the files into the foundList
|
239
|
+
if @firstLoad then
|
240
|
+
@foundFiles[fullFileName] = FSWatcher::FoundFile.new(fullFileName, modTime, size, false, @useMD5)
|
241
|
+
else
|
242
|
+
# see if we have found this file already
|
243
|
+
foundFile = @foundFiles[fullFileName]
|
244
|
+
|
245
|
+
if foundFile then
|
246
|
+
# if a file is marked as new, we still need to make sure it isnt still
|
247
|
+
# being written to. we do this by checking the file sizes.
|
248
|
+
|
249
|
+
if foundFile.isNew? then
|
250
|
+
# if the file size is the same then it is probably done being written to
|
251
|
+
# unless the writer is really slow
|
252
|
+
if size == foundFile.size then
|
253
|
+
# callback
|
254
|
+
block.call(CREATED, fullFileName)
|
256
255
|
|
257
|
-
|
258
|
-
|
256
|
+
# mark this file as a changed file now
|
257
|
+
foundFile.updateModTime(modTime)
|
259
258
|
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
foundFile.updateSize(size)
|
268
|
-
|
269
|
-
end
|
259
|
+
# generate the md5 for the file since we know it is done
|
260
|
+
# being written to
|
261
|
+
foundFile.genMD5() if @useMD5
|
262
|
+
else
|
263
|
+
# just update the size so we can check again at the next iteration
|
264
|
+
foundFile.updateSize(size)
|
265
|
+
end
|
270
266
|
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
end
|
301
|
-
end
|
267
|
+
elsif modTime > foundFile.modTime then
|
268
|
+
|
269
|
+
# if the mod times are different on files we already have
|
270
|
+
# found this is an update
|
271
|
+
willYield = true
|
272
|
+
|
273
|
+
# if we are using md5's then compare them
|
274
|
+
if @useMD5 then
|
275
|
+
filesMD5 = FSWatcher.genFileMD5(fullFileName)
|
276
|
+
if filesMD5 && foundFile.md5 then
|
277
|
+
if filesMD5.to_s == foundFile.md5.to_s then
|
278
|
+
willYield = false
|
279
|
+
end
|
280
|
+
end
|
281
|
+
# if we are yielding then the md5s are dif so
|
282
|
+
# update the cached md5 value
|
283
|
+
foundFile.setMD5(filesMD5) if willYield
|
284
|
+
end
|
285
|
+
block.call(MODIFIED, fullFileName) if willYield
|
286
|
+
foundFile.updateModTime(modTime)
|
287
|
+
end
|
288
|
+
|
289
|
+
else
|
290
|
+
# this is a new file for our list. dont update the md5 here since
|
291
|
+
# the file might not yet be done being written to
|
292
|
+
@foundFiles[fullFileName] = FSWatcher::FoundFile.new(fullFileName, modTime, size)
|
293
|
+
end
|
294
|
+
end
|
295
|
+
end
|
302
296
|
end
|
303
297
|
}
|
304
298
|
end
|
@@ -1,8 +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
|
-
|
4
|
-
|
5
|
-
|
3
|
+
printf "Loading Environment..."
|
6
4
|
|
7
5
|
Doozer::Initializer.after_orm do | config |
|
8
6
|
# require 'doozer/plugins/paginate/init'
|
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'date'
|
3
|
+
require 'irb'
|
4
|
+
require 'rubygems'
|
5
|
+
require 'doozer'
|
6
|
+
@env = (ARGV.length > 0) ? ARGV[0] : 'development'
|
7
|
+
ARGV.delete(@env) if ARGV.include?(@env)
|
8
|
+
@env = @env.to_sym
|
9
|
+
printf "[Doozer #{Doozer::Version::STRING}]\n"
|
10
|
+
# see http://ruby-doc.org/core/ for more options
|
11
|
+
IRB.conf[:LOAD_MODULES] = ["irb/completion", "#{DOOZER_PATH}/doozer/scripts/console"]
|
12
|
+
IRB.conf[:USE_READLINE] = true
|
13
|
+
IRB.load_modules()
|
14
|
+
IRB.parse_opts()
|
15
|
+
IRB.start()
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grippy-doozer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
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-08-
|
12
|
+
date: 2009-08-11 00:00:00 -07:00
|
13
13
|
default_executable: doozer
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -59,6 +59,7 @@ files:
|
|
59
59
|
- lib/doozer/redirect.rb
|
60
60
|
- lib/doozer/route.rb
|
61
61
|
- lib/doozer/scripts/cluster.rb
|
62
|
+
- lib/doozer/scripts/console.rb
|
62
63
|
- lib/doozer/scripts/migrate.rb
|
63
64
|
- lib/doozer/scripts/task.rb
|
64
65
|
- lib/doozer/scripts/test.rb
|
@@ -80,6 +81,7 @@ files:
|
|
80
81
|
- templates/skeleton/config/rack.rb
|
81
82
|
- templates/skeleton/config/routes.rb
|
82
83
|
- templates/skeleton/script/cluster
|
84
|
+
- templates/skeleton/script/console
|
83
85
|
- templates/skeleton/script/migrate
|
84
86
|
- templates/skeleton/script/task
|
85
87
|
- templates/skeleton/script/test
|