file manager pushes apps
This commit is contained in:
parent
bb8371a718
commit
2356df978e
|
@ -185,9 +185,68 @@ module CouchRest
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def push_app(appdir, appname)
|
||||||
|
libs = []
|
||||||
|
viewdir = File.join(appdir,"views")
|
||||||
|
attachdir = File.join(appdir,"attachments")
|
||||||
|
views, lang = read_design_views(viewdir)
|
||||||
|
docid = "_design/#{appname}"
|
||||||
|
design = @db.get(docid) rescue {}
|
||||||
|
design['_id'] = docid
|
||||||
|
design['views'] = views
|
||||||
|
design['language'] = lang
|
||||||
|
@db.save(design)
|
||||||
|
# puts views.inspect
|
||||||
|
end
|
||||||
|
|
||||||
|
# Generate an application in the given directory.
|
||||||
|
# This is a class method because it doesn't depend on
|
||||||
|
# specifying a database.
|
||||||
|
def self.generate_app(app_dir)
|
||||||
|
FileUtils.mkdir_p(app_dir)
|
||||||
|
FileUtils.mkdir_p(File.join(app_dir,"attachments"))
|
||||||
|
FileUtils.mkdir_p(File.join(app_dir,"views"))
|
||||||
|
|
||||||
|
index_template = File.join(File.expand_path(File.dirname(__FILE__)), 'templates','index.html')
|
||||||
|
index_dest = File.join(app_dir,"attachments","index.html")
|
||||||
|
FileUtils.cp(index_template, index_dest)
|
||||||
|
|
||||||
|
map_template = File.join(File.expand_path(File.dirname(__FILE__)), 'templates','example-map.js')
|
||||||
|
map_dest = File.join(app_dir,"views","example-map.js")
|
||||||
|
FileUtils.cp(map_template, map_dest)
|
||||||
|
|
||||||
|
rereduce_template = File.join(File.expand_path(File.dirname(__FILE__)), 'templates','example-reduce.js')
|
||||||
|
rereduce_dest = File.join(app_dir,"views","example-reduce.js")
|
||||||
|
FileUtils.cp(rereduce_template, rereduce_dest)
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def read_design_views(viewdir)
|
||||||
|
libs = []
|
||||||
|
language = nil
|
||||||
|
views = {}
|
||||||
|
Dir["#{viewdir}/*.*"].each do |viewfile|
|
||||||
|
view_parts = viewfile.split('/')
|
||||||
|
viewfile_name = view_parts.last
|
||||||
|
# example-map.js
|
||||||
|
viewfile_name_parts = viewfile_name.split('.')
|
||||||
|
viewfile_ext = viewfile_name_parts.last
|
||||||
|
view_name_parts = viewfile_name_parts.first.split('-')
|
||||||
|
func_type = view_name_parts.pop
|
||||||
|
view_name = view_name_parts.join('-')
|
||||||
|
contents = File.open(viewfile).read
|
||||||
|
if /^lib\..*$/.match viewfile_name
|
||||||
|
libs.push(contents)
|
||||||
|
else
|
||||||
|
views[view_name] ||= {}
|
||||||
|
language = LANGS[viewfile_ext]
|
||||||
|
views[view_name][func_type] = contents.sub(/(\/\/|#)include-lib/,libs.join("\n"))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
[views, language]
|
||||||
|
end
|
||||||
|
|
||||||
def say words
|
def say words
|
||||||
puts words if @loud
|
puts words if @loud
|
||||||
end
|
end
|
||||||
|
|
|
@ -24,6 +24,52 @@ describe CouchRest::FileManager do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe CouchRest::FileManager, "generating an app" do
|
||||||
|
before(:all) do
|
||||||
|
@appdir = File.expand_path(File.dirname(__FILE__)) + '/fixtures/couchapp'
|
||||||
|
`rm -rf #{@appdir}`
|
||||||
|
`mkdir -p #{@appdir}`
|
||||||
|
CouchRest::FileManager.generate_app(@appdir)
|
||||||
|
end
|
||||||
|
it "should create an attachments directory" do
|
||||||
|
Dir["#{@appdir}/*"].select{|x|x =~ /attachments/}.length.should == 1
|
||||||
|
end
|
||||||
|
it "should create a views directory" do
|
||||||
|
Dir["#{@appdir}/*"].select{|x|x =~ /views/}.length.should == 1
|
||||||
|
end
|
||||||
|
it "should create index.html" do
|
||||||
|
html = File.open("#{@appdir}/attachments/index.html").read
|
||||||
|
html.should match(/DOCTYPE/)
|
||||||
|
end
|
||||||
|
it "should create an example view" do
|
||||||
|
map = File.open("#{@appdir}/views/example-map.js").read
|
||||||
|
map.should match(/function\(doc\)/)
|
||||||
|
reduce = File.open("#{@appdir}/views/example-reduce.js").read
|
||||||
|
reduce.should match(/rereduce/)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe CouchRest::FileManager, "pushing an app" do
|
||||||
|
before(:all) do
|
||||||
|
@cr = CouchRest.new(COUCHHOST)
|
||||||
|
@db = @cr.database(TESTDB)
|
||||||
|
@db.delete! rescue nil
|
||||||
|
@db = @cr.create_db(TESTDB) rescue nil
|
||||||
|
|
||||||
|
@appdir = File.expand_path(File.dirname(__FILE__)) + '/fixtures/couchapp'
|
||||||
|
`rm -rf #{@appdir}`
|
||||||
|
`mkdir -p #{@appdir}`
|
||||||
|
CouchRest::FileManager.generate_app(@appdir)
|
||||||
|
|
||||||
|
@fm = CouchRest::FileManager.new(TESTDB, COUCHHOST)
|
||||||
|
r = @fm.push_app(@appdir, "couchapp")
|
||||||
|
end
|
||||||
|
it "should create a design document" do
|
||||||
|
lambda{@db.get("_design/couchapp")}.should_not raise_error
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
describe CouchRest::FileManager, "pushing views" do
|
describe CouchRest::FileManager, "pushing views" do
|
||||||
before(:all) do
|
before(:all) do
|
||||||
@cr = CouchRest.new(COUCHHOST)
|
@cr = CouchRest.new(COUCHHOST)
|
||||||
|
|
Loading…
Reference in a new issue