class Milkode::PackageList

Constants

ADD_NUM
EXCLUDE_UPDATE_SEC
FAVORITE_LIST_NUM
FAV_NUM
NEWS_ITEM_NUM
UPDATE_NUM
VIEW_NUM

Public Class Methods

new(grndb, suburl) click to toggle source
# File lib/milkode/cdweb/lib/package_list.rb, line 21
def initialize(grndb, suburl)
  @grndb  = grndb
  @suburl = suburl
end

Public Instance Methods

favorite_list(params) click to toggle source
# File lib/milkode/cdweb/lib/package_list.rb, line 53
    def favorite_list(params)
      names = @grndb.packages.favs.map{|r| r.name}[0..FAVORITE_LIST_NUM-1]

      list = names.map_with_index {|v, index|
        "<strong><a id='favorite_list_#{index}' href='#{Mkurl.new(@suburl + '/home/' + v, params).inherit_query_shead}' onclick='topic_path(\"favorite_list_#{index}\");'>#{v}</a></strong>"
      }.join("&nbsp;&nbsp;\n")

      <<EOF
#{list}&nbsp;&nbsp;
<a href="#{@suburl}/home?sort=favtime">...</a>
EOF
    end
favorite_list_size() click to toggle source
# File lib/milkode/cdweb/lib/package_list.rb, line 49
def favorite_list_size
  @grndb.packages.favs.size
end
news_items(locale) click to toggle source
# File lib/milkode/cdweb/lib/package_list.rb, line 66
def news_items(locale)
  updates = @grndb.packages.sort('updatetime')[0...NEWS_ITEM_NUM].map do |v|
    {
      kind: :update_news,
      package: v,
      timestamp: v.updatetime,
    }
  end

  adds = @grndb.packages.sort('addtime')[0...NEWS_ITEM_NUM].map do |v|
    {
      kind: :add_news,
      package: v,
      timestamp: v.addtime,
    }
  end

  items = (updates + adds).sort_by {|item|
    item[:timestamp]
  }.reverse
  .find_all {|v|
    if v[:kind] == :update_news &&
        v[:timestamp] - v[:package].addtime < EXCLUDE_UPDATE_SEC
      false
    else
      true
    end
  }[0...NEWS_ITEM_NUM]

  items.map {|item|
    v = item[:package]
    message = I18n.t(item[:kind], {package_name: "<a href=\"#{@suburl}/home/#{v.name}\">#{v.name}</a>", locale: locale})
    "<div class='news-item'>#{message} <span class='time'>#{news_time(item[:timestamp])}</span></div>"
  }.join("\n")
end
top_add() click to toggle source
# File lib/milkode/cdweb/lib/package_list.rb, line 36
def top_add
  grndb_list("addtime", ADD_NUM)
end
top_fav() click to toggle source
# File lib/milkode/cdweb/lib/package_list.rb, line 44
def top_fav
  a = @grndb.packages.favs.map{|r| r.name}
  top_list(a[0...FAV_NUM], 'favtime')
end
top_update() click to toggle source
# File lib/milkode/cdweb/lib/package_list.rb, line 40
def top_update
  grndb_list("updatetime", UPDATE_NUM)
end
top_view() click to toggle source

topページへの表示数の調整は結構大切

view   .. 7
add    .. 5
update .. 5
fav    .. 5
# File lib/milkode/cdweb/lib/package_list.rb, line 32
def top_view
  grndb_list("viewtime", VIEW_NUM)
end

Private Instance Methods

grndb_list(column_name, num) click to toggle source

# File lib/milkode/cdweb/lib/package_list.rb, line 105
def grndb_list(column_name, num)
  a = @grndb.packages.sort(column_name).map {|r| r.name}
  top_list(a[0...num], column_name)
end
news_time(timestamp) click to toggle source
# File lib/milkode/cdweb/lib/package_list.rb, line 122
def news_time(timestamp)
  timestamp.strftime("%Y-%m-%d %R")
end
top_list(list, column_name) click to toggle source
# File lib/milkode/cdweb/lib/package_list.rb, line 110
    def top_list(list, column_name)
      list = list.map {|v|
        "  <li><a href=\"#{@suburl}/home/#{v}\">#{v}</a></li>"
      }.join("\n")
      <<EOF
<ul class="unstyled_margin">
#{list}
<li><a href=\"#{@suburl}/home?sort=#{column_name}">next >></a></li>
</ul>
EOF
    end