From ca58bc03f18b77182db5c68f78672ed2ed56841c Mon Sep 17 00:00:00 2001 From: Andrew Tomaka Date: Sat, 25 Apr 2015 13:17:47 -0400 Subject: [PATCH] Limit leaderboard rebuild --- app.rb | 83 +++------------------ db/migrate/20150425172329_create_leaders.rb | 8 ++ db/schema.rb | 8 +- helpers/raids_helper.rb | 45 +++++++++++ jobs/leaders.rb | 20 +++++ models/leader.rb | 3 + models/raid.rb | 11 +++ 7 files changed, 105 insertions(+), 73 deletions(-) create mode 100644 db/migrate/20150425172329_create_leaders.rb create mode 100644 helpers/raids_helper.rb create mode 100644 jobs/leaders.rb create mode 100644 models/leader.rb create mode 100644 models/raid.rb diff --git a/app.rb b/app.rb index 7b8dc94..804c655 100644 --- a/app.rb +++ b/app.rb @@ -5,22 +5,24 @@ require 'mechanize' require 'nokogiri' require './environments' +require './models/raid' +require './models/leader' +require './helpers/raids_helper' +require './jobs/leaders' + set :public_folder, 'public' # CONTROLLER get '/' do @raids = Raid.all.reverse - mechanize = Mechanize.new - page = mechanize.get('http://trugul.com/highscores') - highscores = page.search "//table[@id='highscores_table']//tr[@class='clickable']/td[2]" + leaders = Leader.all + last_update = leaders.first ? leaders.first.created_at : DateTime.new(0) + pp last_update + pp DateTime.now + rebuild_leaders if last_update + 300 < DateTime.now - require 'pp' - @top20 = [] - highscores.each do |td_user| - user = td_user.text.scan(/[A-Za-z0-9]+/) - @top20 << { user: user.first, date: nil } - end + @top20 = leaders.map { |l| { user: l.leader, date: nil } } @top20.each_with_index do |hash, i| @raids.each do |raid| @@ -33,9 +35,6 @@ get '/' do @top20 = @top20.select { |h| h[:date] }.sort_by { |h| h[:date] } + @top20.reject { |h| h[:date] } - # get last attack for each - # order by date - erb :index end @@ -52,63 +51,3 @@ post '/' do { :message => 'Raid failed to save' }.to_json end end - -#HELPERS -def player_style(player) - "color:#{players[player]};font-weight: bold" if players.keys.include?(player) -end - -def players - { - 'greggnic' => '#3c763d', - 'atomaka' => '#31708f', - 'mafiaman' => '#a94442' - } -end - -def money_style(value) - value.to_f < 0 ? 'color:#a94442' : 'color:#3c763d' -end - -def readable_number(value) - if value.to_f < 0 - negative = true - value *= -1 if value < 0 - else - negative = false - end - - numbers.each do |number, symbol| - if value.to_f / number.to_f >= 1 - new_value = negative ? '-' : '' - new_value += sprintf('%.2f', value.to_f / number.to_f) + '' + symbol + '' - return new_value - end - end - - value = 0.0 unless value - return sprintf('%.2f', value) + " " -end - -def numbers - { - '1000000000000000' => 'Q', - '1000000000000' => 'T', - '1000000000' => 'B', - '1000000' => 'M', - '1000' => 'K' - } -end - -# MODEL -class Raid < ActiveRecord::Base - def money=(value) - value = value.to_s.gsub(/[$,]/, '').to_f - write_attribute(:money, value) - end - - def soldiers=(value) - value = value.to_s.gsub(/[$,]/, '').to_f - write_attribute(:soldiers, value) - end -end diff --git a/db/migrate/20150425172329_create_leaders.rb b/db/migrate/20150425172329_create_leaders.rb new file mode 100644 index 0000000..7e65364 --- /dev/null +++ b/db/migrate/20150425172329_create_leaders.rb @@ -0,0 +1,8 @@ +class CreateLeaders < ActiveRecord::Migration + def change + create_table :leaders do |t| + t.string :leader + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 3796aaf..63b748a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,13 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20150415152327) do +ActiveRecord::Schema.define(version: 20150425172329) do + + create_table "leaders", force: :cascade do |t| + t.string "leader" + t.datetime "created_at" + t.datetime "updated_at" + end create_table "raids", force: :cascade do |t| t.string "attacker" diff --git a/helpers/raids_helper.rb b/helpers/raids_helper.rb new file mode 100644 index 0000000..ce2a709 --- /dev/null +++ b/helpers/raids_helper.rb @@ -0,0 +1,45 @@ +def player_style(player) + "color:#{players[player]};font-weight: bold" if players.keys.include?(player) +end + +def players + { + 'greggnic' => '#3c763d', + 'atomaka' => '#31708f', + 'mafiaman' => '#a94442' + } +end + +def money_style(value) + value.to_f < 0 ? 'color:#a94442' : 'color:#3c763d' +end + +def readable_number(value) + if value.to_f < 0 + negative = true + value *= -1 if value < 0 + else + negative = false + end + + numbers.each do |number, symbol| + if value.to_f / number.to_f >= 1 + new_value = negative ? '-' : '' + new_value += sprintf('%.2f', value.to_f / number.to_f) + '' + symbol + '' + return new_value + end + end + + value = 0.0 unless value + return sprintf('%.2f', value) + " " +end + +def numbers + { + '1000000000000000' => 'Q', + '1000000000000' => 'T', + '1000000000' => 'B', + '1000000' => 'M', + '1000' => 'K' + } +end diff --git a/jobs/leaders.rb b/jobs/leaders.rb new file mode 100644 index 0000000..a327430 --- /dev/null +++ b/jobs/leaders.rb @@ -0,0 +1,20 @@ +require 'sinatra/activerecord' +require 'mechanize' +require 'nokogiri' + +require './models/leader' + +def rebuild_leaders + puts "rebuilding_leaders called" + Leader.destroy_all + + mechanize = Mechanize.new + page = mechanize.get('http://trugul.com/highscores') + leaders = page.search "//table[@id='highscores_table']//tr[@class='clickable']/td[2]" + + leaders.each do |td_user| + user = td_user.text.scan(/[A-Za-z0-9]+/).first + + Leader.new(leader: user).save + end +end diff --git a/models/leader.rb b/models/leader.rb new file mode 100644 index 0000000..918b516 --- /dev/null +++ b/models/leader.rb @@ -0,0 +1,3 @@ +class Leader < ActiveRecord::Base + +end diff --git a/models/raid.rb b/models/raid.rb new file mode 100644 index 0000000..5a08511 --- /dev/null +++ b/models/raid.rb @@ -0,0 +1,11 @@ +class Raid < ActiveRecord::Base + def money=(value) + value = value.to_s.gsub(/[$,]/, '').to_f + write_attribute(:money, value) + end + + def soldiers=(value) + value = value.to_s.gsub(/[$,]/, '').to_f + write_attribute(:soldiers, value) + end +end