diff --git a/app.rb b/app.rb index d5f37947..808bcbb5 100644 --- a/app.rb +++ b/app.rb @@ -71,6 +71,12 @@ get '/stats_mockup' do end get '/?' do + if SimpleCache.expired?(:sites_count) + @sites_count = SimpleCache.store :sites_count, Site.count.roundup(100), 600 # 10 Minutes + else + @sites_count = SimpleCache.get :sites_count + end + erb :index, layout: false end diff --git a/environment.rb b/environment.rb index eb4289a0..22654ad9 100644 --- a/environment.rb +++ b/environment.rb @@ -96,3 +96,13 @@ class Sinatra::Base render_original engine, data, options, locals, &block end end + +class Numeric + def roundup(nearest=10) + self % nearest == 0 ? self : self + nearest - (self % nearest) + end + + def rounddown(nearest=10) + self % nearest == 0 ? self : self - (self % nearest) + end +end \ No newline at end of file diff --git a/models/simple_cache.rb b/models/simple_cache.rb new file mode 100644 index 00000000..3c10ad57 --- /dev/null +++ b/models/simple_cache.rb @@ -0,0 +1,25 @@ +require 'thread' +require 'time' + +module SimpleCache + @cache = {} + @semaphore = Mutex.new + + class << self + def store(name, value, timeout=30) + @semaphore.synchronize { + @cache[name] = {value: value, expires_at: Time.now+timeout} + } + value + end + + def get(name) + @cache[name][:value] + end + + def expired?(name) + return false if @cache[name] && @cache[name][:expires_at] > Time.now + true + end + end +end \ No newline at end of file diff --git a/views/_footer.erb b/views/_footer.erb index 0b67007f..430cc49a 100644 --- a/views/_footer.erb +++ b/views/_footer.erb @@ -3,15 +3,16 @@
- Neocities.org is a completely open source startup. Follow us on twitter. + Neocities.org is a completely open source project. Follow us on twitter.
- Browse, comment on, and follow the latest changes for any Neocities site! -
+ We're community of over <%= @sites_count.to_s.reverse.gsub(/...(?=.)/,'\&,').reverse %> websites that are bringing back creative expression on the web. Anyone can make a site, only your imagination is required. Join us!