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