/* * call-seq: * FSDirectory.new(/path/to/index/, create = false) * * Create a new FSDirectory at +/path/to/index/+ which must be a valid path * on your file system. If it doesn't exist it will be created. You can also * specify the +create+ parameter. If +create+ is true the FSDirectory will * be refreshed as new. That is to say, any existing files in the directory * will be deleted. The default value for +create+ is false. * * path:: path to index directory. Must be a valid path on your system * create:: set to true if you want any existing files in the directory to be * deleted */ static VALUE frb_fsdir_new(int argc, VALUE *argv, VALUE klass) { VALUE self, rpath, rcreate; Store *store; bool create; rb_scan_args(argc, argv, "11", &rpath, &rcreate); StringValue(rpath); create = RTEST(rcreate); if (create) { frb_create_dir(rpath); } if (!rb_funcall(rb_cFile, id_is_directory, 1, rpath)) { rb_raise(rb_eIOError, "No directory <%s> found. Use :create => true" " to create one.", rs2s(rpath)); } store = open_fs_store(rs2s(rpath)); if (create) store->clear_all(store); if ((self = object_get(store)) == Qnil) { self = Data_Wrap_Struct(klass, NULL, &frb_dir_free, store); object_add(store, self); rb_ivar_set(self, id_ref_cnt, INT2FIX(0)); } else { int ref_cnt = FIX2INT(rb_ivar_get(self, id_ref_cnt)) + 1; rb_ivar_set(self, id_ref_cnt, INT2FIX(ref_cnt)); DEREF(store); } return self; }