def enumerate_attrs_by_node(node)
      raise 'bad node' unless node

      begin
        klass = node.is_a?(String) ? @m.module_eval(node) : node
      rescue NameError
        # FIXME: a little hacky.  Should raise an exception.
        return []
      end

      raise "bad node class #{klass}" unless klass.is_a?(Class)

      klass.methods.map(&:to_s).select do |x|
        x.end_with?(POST)
      end.map do |x|
        x.sub(/#{POST}$/, '')
      end
    end
def enumerate_attrs_by_node(node)
      raise 'bad node' unless node

      begin
        klass = node.is_a?(String) ? @m.module_eval(node) : node
      rescue NameError
        # FIXME: a little hacky.  Should raise an exception.
        return []
      end

      raise "bad node class #{klass}" unless klass.is_a?(Class)

      klass.methods.map(&:to_s).select do |x|
        x.end_with?(POST)
      end.map do |x|
        x.sub(/#{POST}$/, '')
      end
    end
enumerate qualified list of attrs by node