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