lib/scide/project.rb in scide-0.0.6 vs lib/scide/project.rb in scide-0.0.7

- old
+ new

@@ -10,10 +10,13 @@ attr_reader :path # Project-specific options. Can be used by commands. See #initialize. attr_reader :options + # The GNU Screen windows of this project. + attr_reader :windows + # Returns a project configuration. # # If not given in the project hash, #path is built by joining # the global path and <tt>key</tt>. # @@ -31,23 +34,32 @@ # The following default options are added if not given: # * <tt>name</tt> - Defaults to the project key. # * <tt>path</tt> - The path where the project is located. def initialize global, key, contents raise ArgumentError, "project '#{key}' must be a hash" unless contents.kind_of? Hash - raise ArgumentError, "windows of project '#{key}' must be an array" unless contents[:windows].nil? or contents[:windows].kind_of?(Array) + raise ArgumentError, "windows of project '#{key}' must be an array" unless contents[:windows].kind_of?(Array) raise ArgumentError, "options of project '#{key}' must be a hash" unless contents[:options].nil? or contents[:options].kind_of?(Hash) - @global, @key = global, key + @key = key # path defaults to project key @path = contents[:path].try(:to_s) || key.to_s - # expand from home directory if not absolute - @path = File.join global.path, @path unless @path.match /^\// + unless path.match /^\// + # if not absolute + if global.path + # expand from global directory + @path = File.join global.path, @path + else + # or from home directory + @path = File.join File.expand_path('~'), @path + end + end - @options = global.options.dup.merge(contents[:options] || {}) - @options[:name] ||= key - @options[:path] ||= @path + @options = global.options.dup + @options[:name] = key + @options[:path] = @path + @options.merge!(contents[:options] || {}) @windows = contents[:windows].collect{ |w| Scide::Window.new self, w } end # Returns a representation of this project as a GNU Screen @@ -56,10 +68,10 @@ def to_screen return nil if @windows.blank? String.new.tap do |s| @windows.each_with_index do |w,i| s << w.to_screen(i) - s << "\n" if i != @windows.length - 1 + s << "\n" if i != (@windows.length - 1) end end end end end