/ Published in: Ruby
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
#!/usr/bin/env ruby require 'pp' module TaskPaper class TaskParser attr_reader :task_string, :tags def initialize(&observer) @observers = [] @tags = [] @task_string = "" if block_given? @observers << observer end end def on_task_parsed(&observer) @observers << observer end def parseTask(taskdata) @tags = [] $task_string = "" matches = /^((-)*(.*?))((@.*)*)*$/.match(taskdata) @task_string = matches[1] tag_string = matches[4] if tag_string @tags = tag_string.split(/[,\s]+/) end @observers.each do |observer| observer.call(self) end end end class Task attr_accessor :tags, :task_string def initialize(task_string_data="", task_tag_array=[]) @task_string = task_string_data @tags = task_tag_array end def to_s tags = "" tags = @tags.join(" ") if @tags.length > 0 "#{@task_string} #{tags}" end def empty? @task_string.strip.empty? end def is_project? @task_string =~ /.*:$/ end def is_task? @task_string =~ /^-.*/ end def is_comment? !empty? && !is_task? && !is_project? end end end # task_list = [] # # t = TaskPaper::TaskParser.new do |task_data| # task = TaskPaper::Task.new(task_data.task_string, task_data.tags) # task_list << task # puts task # puts "Is a Task" if task.is_task? # puts "Is a Comment" if task.is_comment? # puts "Is a Project" if task.is_project? # puts "Is Empty" if task.empty? # puts task.tags.inspect if task.tags.length > 0 # puts # end # # tasks = %{Chores: # - Take out the trash @home # only do this if it's not raining # # # - Buy a new door knob @store @hardware # } # # # tasks.split(/\n/).each do |line| # t.parseTask(line) # end # # pp task_list