• בלוג
  • לפעמים העין רואה רק את מה שהיא רוצה לראות

לפעמים העין רואה רק את מה שהיא רוצה לראות

12/05/2016

לא רבים מכם שמתם לב שבשבועות האחרונות מספרי הפרקים בפוסטים התחילו ב-2 במקום ב-1. מנגנון העלאת הפוסטים באתר הוא אוטומטי: אני כותב קבצי Markdown והמחשב מתרגם אותם לרשומות ב DB ולאחר מכן ל HTML. לכן המקום הראשון ללכת אליו הוא קוד התרגום. נראה אם תצליחו אתם למצוא את הטעות.

1. הקוד השבור להעלאת פוסטים

זו הפונקציה שהיתה שבורה. מדובר בקוד ריילס אבל אני חושב שאפשר להבין את התקלה גם בלי לדעת ריילס:

chapters = text.split(/^##[^#]/)
idx = 0
chapters.each do |c, index|
  (header, text) = c.split(/$/, 2)

  if header.starts_with?("#") && main_header.empty?
    main_header = header[1..-1].strip
    article.description = markdown.render(text)
    article.save!
  else
    html = markdown.render(text)
    next_chapter = ArticleTextChapter.new(
        :article => article, 
        :title   => header, 
        :text    => html, 
        :order   => index, 
        :toc     => true)

    next_chapter.save!
  end
end

2. הסבר התקלה ופתרון

התקלה היא ביצירת פרק חדש: מאפיין order של הפרק החדש הוא אינדקס הלולאה, אבל בלולאה יש if. אם התנאי לא מתקיים האינדקס יתאים למספר הפרק, אבל מספיקה כניסה אחת ל if כדי ליצור דילוג. במקרה שלנו באמת יש כניסה אחת ל if בעת פענוח כותרת הפוסט, ולכן מספרי הפרקים התחילו ב-2.

לקחים? לבדוק יותר טוב את הקוד, לשים לב כשמספרי הפרקים מתקלקלים ולהזהר עם אינדקסים של לולאות כשיש if בלולאה. זו גם הזדמנות טובה להתעצבן על רובי והיעדר אופרטור ה ++ בשפה, כי תמיד כיף להאשים את שפת התכנות בטעויות שלי.