class Script
  attr_reader :__rules

  def initialize
    reset
  end

  def load(str)
    reset
    instance_eval str
  end

  def load_file(filename)
    file_data = File.read(filename)
    load file_data
  end

  def watch(pattern, type = nil, &block)
    @__rules << Rule.new(pattern, type, block)
  end

  def match_run(rule, pattern)
    md = pattern.match(rule.pattern)
    rule.proc.call(md) if md
  end

  def run(pattern, type = nil)
    @__rules.select { |rule| match_run(rule, pattern) }
  end

  private

  def reset
    @__rules = []
  end
end

# $ sudo sh -c "echo fs.inotify.max_user_watches=524288 >> /etc/sysctl.conf"
# $ sudo sysctl -p