Sha256: 9681c35f49c70d6cff0c7569938b25b2212af566972323d023c00d85a2b0fdf7

Contents?: true

Size: 1.92 KB

Versions: 4

Compression:

Stored size: 1.92 KB

Contents

module Rwiki::Models
  class Folder < Node

    def initialize(path)
      full_path = File.join(@@working_path, path)
      raise Rwiki::NodeNotFoundError.new("cannot find #{path}") if !File.exist?(full_path) || ! File.directory?(full_path)
      super(path)
    end

    def nodes
      Dir.chdir(working_path) do
        self.class.make_tree(@path)
      end
    end

    def create_sub_folder(name)
      new_folder_path = File.join(@path, name)
      new_folder_full_path = self.class.full_path_for(new_folder_path)
      raise Rwiki::NodeError.new("#{new_folder_path} already exists") if File.exists?(new_folder_full_path)

      FileUtils.mkdir(new_folder_full_path)
      return Folder.new(new_folder_path)
    end

    def create_sub_page(name)
      name = name + '.txt' unless name.end_with?('.txt')
      new_page_path = File.join(@path, name)
      new_page_full_path = self.class.full_path_for(new_page_path)
      raise Rwiki::NodeError.new("#{new_page_path} already exists") if File.exists?(new_page_full_path)

      File.open(new_page_full_path, 'w') { |f| f.write("h1. #{name.gsub(/\.txt$/, '')}\n\n") }
      return Page.new(new_page_path)
    end

    private

    def self.make_tree(root_path)
      tree_nodes = []

      nodes = Dir.entries(root_path).sort
      nodes.each do |base_name|
        next if base_name.match(/^\./) # skip hidden files

        path = File.join(root_path, base_name)
        tree_node = { :baseName => base_name }

        if File.directory?(path)
          children = make_tree(path)
          tree_nodes << tree_node.merge(:text => base_name, :cls => 'folder', :children => children)
        else
          next unless base_name.match(/#{PAGE_FILE_EXTENSION}$/) # skip non *.txt files

          page_name = base_name.gsub(/#{PAGE_FILE_EXTENSION}$/, '')
          tree_nodes << tree_node.merge(:text => page_name, :cls => 'page', :leaf => true)
        end
      end

      return tree_nodes
    end

  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
rwiki-0.2.4 lib/rwiki/models/folder.rb
rwiki-0.2.3 lib/rwiki/models/folder.rb
rwiki-0.2.2 lib/rwiki/models/folder.rb
rwiki-0.2.1 lib/rwiki/models/folder.rb