Sha256: f60e4fde3640133514bc757078baccd3bd200c7fc5b0623c2ae7fea21794a3b8

Contents?: true

Size: 1.37 KB

Versions: 2

Compression:

Stored size: 1.37 KB

Contents

require "jekyll/timeago/version"
require "active_support/inflector"

module Jekyll
  module Timeago

    DAYS_IN = {
      :days => 1,
      :weeks => 7,
      :months => 31,
      :years => 365,
    }

    def timeago(input)
      time_ago_to_now(input)
    end

    private

    def time_ago_to_now(date)
      unless date.is_a?(Date) || date.is_a?(Time)
        raise "Invalid input: #{date.inspect}"
      end

      days_passed = (Date.today - Date.parse(date.to_s)).to_i

      case days_passed.abs
      when 0 .. 7
        time_ago_to_s(days_passed, :days)
      when 8 .. 31
        time_ago_to_s(days_passed, :weeks)
      when 32 .. 365
        time_ago_to_s(days_passed, :months)
      else
        time_ago_to_s(days_passed, :years)
      end
    end

    def time_ago_to_s(days_passed, grouped_by)
      return "today" if days_passed == 0
      return "yesterday" if days_passed == 1
      return "tomorrow" if days_passed == -1

      future = days_passed < 0
      computed_range = days_passed.abs / Jekyll::Timeago::DAYS_IN[grouped_by]
      grouped_by = if computed_range == 1
        ActiveSupport::Inflector.singularize(grouped_by.to_s)
      else
        grouped_by.to_s
      end

      if future
        "in #{computed_range} #{grouped_by}"
      else
        "#{computed_range} #{grouped_by} ago"
      end
    end
  end
end

Liquid::Template.register_filter(Jekyll::Timeago)

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
jekyll-timeago-0.3.1 lib/jekyll/timeago.rb
jekyll-timeago-0.3.0 lib/jekyll/timeago.rb