• Stars
    star
    6
  • Rank 2,539,965 (Top 51 %)
  • Language
    Ruby
  • Created over 14 years ago
  • Updated almost 14 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

An easy to use Rails plugin to quickly throttle application actions based on configurable duration and limit.

Action Throttler

There is also a PHP version (for Kohana), see here: http://github.com/fredwu/kthrottler

Introduction

Action Throttler is an easy to use Rails plugin to quickly throttle application actions based on configurable duration and limit.

Brought to you by Envato and Wuit.

Features

  • Easy to use, easy to configure
  • Lightweight
  • Supports both Rails 2 and 3

Limitations

  • Supports ActiveRecord only
  • Uses Rake instead of Rails Generator for file generation (for compatibility purpose)

Usage

Download and install the plugin

Rails 2

script/plugin install http://[email protected]/fredwu/action_throttler.git

Rails 3

rails plugin install http://[email protected]/fredwu/action_throttler.git

Set up the plugin

To generate the migration file and migrate the database:

rake action_throttler:migrate
rake db:migrate

Or alternatively:

rake action_throttler:auto_migrate

Configure the actions

The configuration file is located at PATH_TO_YOUR_APP/config/initializers/action_throttler.rb.

The configuration block looks like this:

ActionThrottler::Actions.add :mail do |action|
  action.duration = 1.hour
  action.limit    = 10
end

You can add as many configuration blocks as you like, just make sure you label them properly (i.e. like :mail in the example).

In the example, we are setting the :mail action to perform at most 10 times within 1 hour duration.

Register the actions in your app

Now we will need to register the actions so they are recorded in the database.

To simply run an action, in your app (presumably somewhere in the controller), do this:

ActionThrottler::Actions.run(:mail)

ActionThrottler::Actions.run will return true or false depending on whether or not the action is being throttled.

ActionThrottler::Actions.run has an alias ActionThrottler::Actions.can_run and a negative alias ActionThrottler::Actions.cannot_run.

Typically, we would want to produce feedback to the user when an action is throttled, you can do so by:

if ActionThrottler::Actions.cannot_run(:mail)
  # tell the user that this action is not performed
end

ActionThrottler::Actions.run also takes an optional reference parameter:

ActionThrottler::Actions.run(:mail, @current_user)

The reference parameter is very useful because we can track and throttle the action based on a reference, such as a user. The parameter accepts a String, an Integer or an ActiveRecord object.

Note that ActionThrottler::Actions.run and its aliases will perform the action when possible. If you only want to check to see if an action can be performed, you can do this:

ActionThrottler::Actions.can_be_run?(:mail, @current_user)

ActionThrottler::Actions.can_be_run? returns true or false without performing the action, and it also has a negative alias, ActionThrottler::Actions.cannot_be_run?.

Author

Copyright (c) 2010 Fred Wu (http://fredwu.me), released under the MIT license

More Repositories

1

crawler

A high performance web crawler / scraper in Elixir.
Elixir
917
star
2

jquery-endless-scroll

Endless/infinite scrolling/pagination.
CoffeeScript
838
star
3

angel_nest

Project code name: Angel Nest. :)
Ruby
775
star
4

api_taster

A quick and easy way to visually test your Rails application's API.
Ruby
727
star
5

simple_bayes

A Naive Bayes machine learning implementation in Elixir.
Elixir
392
star
6

datamappify

Compose, decouple and manage domain logic and data persistence separately. Works particularly great for composing form objects!
Ruby
332
star
7

opq

Elixir queue! A simple, in-memory queue with worker pooling and rate limiting in Elixir.
Elixir
255
star
8

stemmer

An English (Porter2) stemming implementation in Elixir.
Elixir
149
star
9

bustle

Activities recording and retrieving using a simple Pub/Sub-like interface.
Ruby
93
star
10

ruby_decorators

Ruby method decorators inspired by Python.
Ruby
63
star
11

inherited_resources_views

Share and DRY up views between resources. Use with Inherited Resources.
Ruby
60
star
12

jquery-inline-confirmation

Inline Confirmation plugin for jQuery. One of the less obtrusive ways of implementing confirmation dialogues.
JavaScript
53
star
13

toy-robot-elixir

The infamous Toy Robot code test done in Elixir.
Elixir
45
star
14

skinny-coffee-machine

A simple JavaScript state machine with observers, for browsers and Node.js.
JavaScript
42
star
15

kohana-phamlp

This module is a bridge between the Kohana PHP framework (http://kohanaframework.org/) and the PHamlP library (http://code.google.com/p/phamlp/).
PHP
25
star
16

authlite

Authlite, an auth module for Kohana PHP framework, it offers greater flexibility than the official Auth module.
PHP
23
star
17

dotfiles

My dotfiles
Shell
18
star
18

amaze_hands

Amaze Hands is an amazing tool developed for analysing Kanban board cards.
Ruby
15
star
19

kthrottler

A Kohana port of Action Throtller (for Rails): http://github.com/fredwu/action_throttler
PHP
14
star
20

jquery-slideshow-lite

An extremely lightweight slideshow plugin for jQuery.
JavaScript
14
star
21

code-test-2016-cultureamp

Ruby
13
star
22

README-xplor

Fred @ Xplor - how to work with me.
10
star
23

code-test-2016-myob

Ruby
8
star
24

code-test-2016-trunkplatform

Ruby
6
star
25

app_reset

Resets (and if available, seeds) your databases.
Ruby
6
star
26

yield.rb

Aggregated token amounts and values. Supports ApeBoard, YieldWatch, Binance, CoinGecko and more.
Ruby
5
star
27

layerful

Layerful PHP framework.
4
star
28

advent_of_code_2018

https://adventofcode.com/2018/about
Elixir
4
star
29

security_guard

A collection of useful tools for auditing data and performing security checks.
Ruby
3
star
30

fredwu.me-v3

JavaScript
3
star
31

ruby-slim-tmbundle

https://github.com/slim-template/ruby-slim.tmbundle
3
star
32

kata-poker-hands-elixir

A coding kata for comparing poker hands - Elixir version.
Elixir
2
star
33

flower

Playground to test out the Lotus framework.
Ruby
2
star
34

jqstub

A simple stub library for jQuery / Zepto objects.
JavaScript
1
star
35

project_retard

One sale a day e-commerce platform built on Ruby on Rails.
JavaScript
1
star
36

reacraft

Ruby
1
star
37

kata-poker-hands-ruby

A coding kata for comparing poker hands - Ruby version.
Ruby
1
star
38

toy-robot-lolz

It's art. And it's beautiful.
Ruby
1
star
39

code-test-2016-adslot

CoffeeScript
1
star
40

spiky_xml

Just a spike on XML parsing in different environments.
JavaScript
1
star