/** * Publishes a previously created draft to the _posts folder. * * @return the newly created post. */ public Observable<Post> publishDraft(final Draft draft) { final String postTitle = postTitleToFilename(draft.getTitle()); return fileManager .getTree() // move draft .flatMap( new Func1<DirNode, Observable<FileNode>>() { @Override public Observable<FileNode> call(DirNode rootDir) { DirNode postsDir = assertDir(rootDir, DIR_POSTS); return fileManager.moveFile(draft.getFileNode(), postsDir, postTitle); } }) // create post object .flatMap( new Func1<FileNode, Observable<Post>>() { @Override public Observable<Post> call(FileNode newNode) { return Observable.just( new Post(postTitle, Calendar.getInstance().getTime(), newNode)); } }); }