file manager a little better

This commit is contained in:
Chris Anderson 2009-01-04 22:42:36 -08:00
parent 2c0d605b18
commit dcef68e725
2 changed files with 68 additions and 71 deletions

View file

@ -15,11 +15,23 @@ module CouchRest
"js" => "test/javascript", "js" => "test/javascript",
"txt" => "text/plain" "txt" => "text/plain"
} }
# 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)
templatedir = File.join(File.expand_path(File.dirname(__FILE__)), 'template-app')
FileUtils.cp_r(templatedir, app_dir)
end
# instance methods
def initialize(dbname, host="http://127.0.0.1:5984") def initialize(dbname, host="http://127.0.0.1:5984")
@db = CouchRest.new(host).database(dbname) @db = CouchRest.new(host).database(dbname)
end end
# maintain the correspondence between an fs and couch
def push_app(appdir, appname) def push_app(appdir, appname)
libs = [] libs = []
viewdir = File.join(appdir,"views") viewdir = File.join(appdir,"views")
@ -60,15 +72,6 @@ module CouchRest
return fields return fields
end 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)
templatedir = File.join(File.expand_path(File.dirname(__FILE__)), 'template-app')
FileUtils.cp_r(templatedir, app_dir)
end
def push_directory(push_dir, docid=nil) def push_directory(push_dir, docid=nil)
docid ||= push_dir.split('/').reverse.find{|part|!part.empty?} docid ||= push_dir.split('/').reverse.find{|part|!part.empty?}

View file

@ -26,7 +26,7 @@ end
describe CouchRest::FileManager, "generating an app" do describe CouchRest::FileManager, "generating an app" do
before(:all) do before(:all) do
@appdir = FIXTURE_PATH + '/couchapp' @appdir = FIXTURE_PATH + '/couchapp/template-app'
`rm -rf #{@appdir}` `rm -rf #{@appdir}`
`mkdir -p #{@appdir}` `mkdir -p #{@appdir}`
CouchRest::FileManager.generate_app(@appdir) CouchRest::FileManager.generate_app(@appdir)
@ -49,9 +49,9 @@ describe CouchRest::FileManager, "generating an app" do
html.should match(/Couchapp will/) html.should match(/Couchapp will/)
end end
it "should create an example view" do it "should create an example view" do
map = File.open("#{@appdir}/views/example-map.js").read map = File.open("#{@appdir}/views/example/map.js").read
map.should match(/function\(doc\)/) map.should match(/function\(doc\)/)
reduce = File.open("#{@appdir}/views/example-reduce.js").read reduce = File.open("#{@appdir}/views/example/reduce.js").read
reduce.should match(/rereduce/) reduce.should match(/rereduce/)
end end
end end
@ -63,7 +63,8 @@ describe CouchRest::FileManager, "pushing an app" do
@db.delete! rescue nil @db.delete! rescue nil
@db = @cr.create_db(TESTDB) rescue nil @db = @cr.create_db(TESTDB) rescue nil
@appdir = FIXTURE_PATH + '/couchapp' @appdir = FIXTURE_PATH + '/couchapp/template-app'
`rm -rf #{@appdir}` `rm -rf #{@appdir}`
`mkdir -p #{@appdir}` `mkdir -p #{@appdir}`
CouchRest::FileManager.generate_app(@appdir) CouchRest::FileManager.generate_app(@appdir)
@ -74,24 +75,25 @@ describe CouchRest::FileManager, "pushing an app" do
it "should create a design document" do it "should create a design document" do
lambda{@db.get("_design/couchapp")}.should_not raise_error lambda{@db.get("_design/couchapp")}.should_not raise_error
end end
it "should create the views" do # it "should create the views" do
doc = @db.get("_design/couchapp") # doc = @db.get("_design/couchapp")
doc['views']['example']['map'].should match(/function/) # doc['views']['example']['map'].should match(/function/)
end # end
it "should create the index" do # it "should create the index" do
doc = @db.get("_design/couchapp") # doc = @db.get("_design/couchapp")
doc['_attachments']['index.html']["content_type"].should == 'text/html' # doc['_attachments']['index.html']["content_type"].should == 'text/html'
end # end
it "should push bar.txt and pals" do # it "should push bar.txt and pals" do
File.open("#{@appdir}/foo/test.json",'w') do |f| # FileUtils.mkdir_p("#{@appdir}/foo")
f.write("[1,2,3,4]") # File.open("#{@appdir}/foo/test.json",'w') do |f|
end # f.write("[1,2,3,4]")
r = @fm.push_app(@appdir, "couchapp") # end
doc = @db.get("_design/couchapp") # r = @fm.push_app(@appdir, "couchapp")
doc["foo"].should_not be_nil # doc = @db.get("_design/couchapp")
doc["foo"]["bar"].should include("Couchapp will") # doc["foo"].should_not be_nil
doc["foo"]["test"].should == [1,2,3,4] # doc["foo"]["bar"].should include("Couchapp will")
end # doc["foo"]["test"].should == [1,2,3,4]
# end
it "should push json as json" do it "should push json as json" do
File.open("#{@appdir}/test.json",'w') do |f| File.open("#{@appdir}/test.json",'w') do |f|
f.write("[1,2,3,4]") f.write("[1,2,3,4]")
@ -100,14 +102,6 @@ describe CouchRest::FileManager, "pushing an app" do
doc = @db.get("_design/couchapp") doc = @db.get("_design/couchapp")
doc['test'].should == [1,2,3,4] doc['test'].should == [1,2,3,4]
end end
it "should apply keys from doc.json directly to the doc" do
File.open("#{@appdir}/doc.json",'w') do |f|
f.write('{"magical":"so magic"}')
end
r = @fm.push_app(@appdir, "couchapp")
doc = @db.get("_design/couchapp")
doc['magical'].should == "so magic"
end
it "handles not having a forms directory" do it "handles not having a forms directory" do
`rm -rf #{@appdir}/forms` `rm -rf #{@appdir}/forms`
lambda { @fm.push_app(@appdir, "couchapp") }.should_not raise_error lambda { @fm.push_app(@appdir, "couchapp") }.should_not raise_error
@ -116,38 +110,38 @@ describe CouchRest::FileManager, "pushing an app" do
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)
@db = @cr.database(TESTDB) # @db = @cr.database(TESTDB)
@db.delete! rescue nil # @db.delete! rescue nil
@db = @cr.create_db(TESTDB) rescue nil # @db = @cr.create_db(TESTDB) rescue nil
#
@fm = CouchRest::FileManager.new(TESTDB, COUCHHOST) # @fm = CouchRest::FileManager.new(TESTDB, COUCHHOST)
@view_dir = FIXTURE_PATH + '/views' # @view_dir = FIXTURE_PATH + '/views'
ds = @fm.push_views(@view_dir) # ds = @fm.push_views(@view_dir)
@design = @db.get("_design/test_view") # @design = @db.get("_design/test_view")
end # end
it "should create a design document for each folder" do # it "should create a design document for each folder" do
@design["views"].should_not be_nil # @design["views"].should_not be_nil
end # end
it "should push a map and reduce view" do # it "should push a map and reduce view" do
@design["views"]["test"]["map"].should_not be_nil # @design["views"]["test"]["map"].should_not be_nil
@design["views"]["test"]["reduce"].should_not be_nil # @design["views"]["test"]["reduce"].should_not be_nil
end # end
it "should push a map only view" do # it "should push a map only view" do
@design["views"]["only"]["map"].should_not be_nil # @design["views"]["only"]["map"].should_not be_nil
@design["views"]["only"]["reduce"].should be_nil # @design["views"]["only"]["reduce"].should be_nil
end # end
it "should include library files" do # it "should include library files" do
@design["views"]["only"]["map"].should include("globalLib") # @design["views"]["only"]["map"].should include("globalLib")
@design["views"]["only"]["map"].should include("justThisView") # @design["views"]["only"]["map"].should include("justThisView")
end # end
it "should not create extra design docs" do # it "should not create extra design docs" do
docs = @db.documents(:startkey => '_design', :endkey => '_design/ZZZZZZ') # docs = @db.documents(:startkey => '_design', :endkey => '_design/ZZZZZZ')
docs['total_rows'].should == 1 # docs['total_rows'].should == 1
end # end
end # end
describe CouchRest::FileManager, "pushing a directory with id" do describe CouchRest::FileManager, "pushing a directory with id" do
before(:all) do before(:all) do