Sha256: dab7747a621652d0d93181acb2218e82c8295dda91dc86b8dec8308965ed4093

Contents?: true

Size: 1.54 KB

Versions: 2

Compression:

Stored size: 1.54 KB

Contents

require "multi_json"
require "pathname"

module SublimeTextKit
  class ProjectMetadata
    attr_reader :name, :project_dir, :workspace_dir, :project_file

    def self.create projects_dir, workspace_dir
      projects_dir = File.expand_path projects_dir
      workspace_dir = File.expand_path workspace_dir

      return unless valid_dir?(projects_dir, "Projects")
      return unless valid_dir?(workspace_dir, "Workspace")

      project_paths = ::Pathname.new(projects_dir).children.select {|child| child if child.directory? }
      project_paths.each { |project_dir| new(project_dir, workspace_dir).save }
    end

    def self.delete workspace_dir
      workspace_dir = File.expand_path workspace_dir

      return unless valid_dir?(workspace_dir, "Workspace")

      ::Pathname.glob("#{workspace_dir}/*.sublime-*").each(&:delete)
    end

    def initialize project_dir, workspace_dir
      @name = File.basename project_dir
      @project_dir = File.expand_path project_dir
      @workspace_dir = File.expand_path workspace_dir
      @project_file = File.join @workspace_dir, "#{name}.sublime-project"
    end

    def to_h
      {
        folders: [
          {path: "#{project_dir}"}
        ]
      }
    end

    def save
      unless File.exist? project_file
        File.open(project_file, 'w') { |file| file.write MultiJson.dump(to_h, pretty: true) }
      end
    end

    private

    def self.valid_dir? dir, label
      if File.exist?(dir)
        true
      else
        puts "#{label} directory doesn't exist: #{dir}."
        false
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
sublime_text_kit-2.0.0 lib/sublime_text_kit/project_metadata.rb
sublime_text_kit-1.1.1 lib/sublime_text_kit/project_metadata.rb