HitCounter

Build status Code Climate Coveralls CII Best Practices Gem Version

Self-hosted Ruby version of that old 90s chestnut, <BLINK>the web-site hit counter</BLINK>.

Installation

  1. Install the gem and supporting files.

    Gemfile

      gem 'hit_counter'
    

    Run:

      bundle
      rake hit_counter:install
    

    Security note

    HitCounter is cryptographically signed. To insure the gem you install hasn’t been tampered with, add my public key as a trusted certificate and then install:

    gem cert --add <(curl -Ls https://raw.github.com/FoveaCentral/hit_counter/master/certs/ivanoblomov.pem)
    gem install hit_counter -P HighSecurity
    
  2. Add a controller action to your app.

    application_controller.rb

      def hit_counter
        return if params[:url].blank?
    
        # find or create a hit counter for this URL
        hc = HitCounter.get params[:url]
    
        # increase the tally by one
        hc.increment
    
        # get the image as a blob and stream it to the browser
        send_data hc.image(params[:style]).to_blob,
                  disposition: 'inline',
                  filename: "#{hc.hits}.png",
                  type: :png
     end
    

    routes.rb

     get 'hit-counter' => 'application#hit_counter'
     # technically should be POST/PUT, but GET makes integration simpler
    
  3. Add the hit-counter image tag to your site's HTML:

      <img alt="Hit Counter" border="0" src="/hit-counter?url=https://cnn.com&style=1" />
    

Or try it out in irb with:

require './spec/spec_helper'
hc = HitCounter.get('cnn.com')

Customizing the Hit-Counter Image

Use an Existing Style

Name Style number
Celtic image of 3 in celtic style
Odometer image of 1 in odometer style
Scout image of 2 in scout style

You can use one of the three included styles by specifying a different style param in the HTML:

  <img alt="Hit Counter" border="0" src="/hit-counter?url=cnn.com&style=1" />

Create Your Own Style

  1. To add your own style, create a PNG for each of the digits, 0.png through 9.png. Save the images in a folder named after your new style in public/images/digits.

  2. In your controller, declare a new STYLES constant and add the folder name to it:

      HitCounter::STYLES = %w(odometer scout celtic folder_name)
    
  3. In your HTML, specify the new style with a style param equal to its index in the array plus one (unlike arrays, the style param's index is one-based):

      <img alt="Hit Counter" border="0" src="/hit-counter?url=cnn.com&style=4" />
    

Documentation

Complete RDoc documentation is available at RubyDoc.info.

Contributing to HitCounter

Cheers!

Buy Me A Coffee

Copyright © 2011-2022 Roderick Monje. See LICENSE.txt for further details.