lib/taco/taco_profile.rb in taco_it-1.5.2 vs lib/taco/taco_profile.rb in taco_it-1.5.3
- old
+ new
@@ -2,32 +2,42 @@
# a default .taco_profile exists at .taco/.taco_profile
# contrast with .taco/.tacorc
class TacoProfile
attr_reader :sort_order, :filters, :columns
-
+
def initialize(text)
text ||= ''
-
- # FIXME: this is way too coupled to Issue
- #
- @sort_order = [ :created_at, :id ]
- @columns = [ :short_id, :priority, :summary ]
- @filters = []
-
+
+ @sort_order, @columns, @filters = nil, nil, nil
+
text.lines.each_with_index do |line, index|
next if line =~ /^#/ || line =~ /^\s*$/
-
+
key, value = line.split(':', 2).map(&:strip)
case key
when 'sort'
+ raise ArgumentError.new("sort defined more than once on line #{index+1}") if @sort_order
@sort_order = value.split(',').map(&:to_sym)
+ raise ArgumentError.new("Unknown Issue attribute in sort on line #{index+1}") unless @sort_order.all? { |attr| Issue.schema_attributes.include?(attr) }
when 'filters'
+ raise ArgumentError.new("filters defined more than once on line #{index+1}") if @filters
@filters = value.split(/\s/)
+ raise ArgumentError.new("Unknown Issue attribute in filters on line #{index+1}") unless @filters.all? { |token| attr, value = token.split(':'); Issue.schema_attributes.include?(attr.to_sym) }
when 'columns'
+ raise ArgumentError.new("columns defined more than once on line #{index+1}") if @columns
@columns = value.split(',').map(&:to_sym)
+ raise ArgumentError.new("Unknown Issue attribute in columns on line #{index+1}") unless @columns.all? do |attr|
+ # FIXME: really? hard-code :short_id? there's got to be a better way.
+ #
+ attr == :short_id || Issue.schema_attributes.include?(attr)
+ end
else
raise ArgumentError.new("Parse error on line #{index+1}")
end
end
+
+ @sort_order ||= [ :created_at, :id ]
+ @columns ||= [ :short_id, :priority, :summary ]
+ @filters ||= []
end
end
\ No newline at end of file