Analog

A Ruby helper for scaling numbers

Background

Provides a quick way to scale a number from one range or set to another.

A simple example is:

You'd like to plot a point on a 500px graph using a data that lies in the 0..1 range.

Scale.transform(0.5).from(0..1).to(0..500)
=> 250

It's commonly useful for preparing data to be consumed by generalized APIs and communication protocols.

Personally, I've used it in graphics, audio and for converting music data between OSC and MIDI.

Usage

require "scale"

This example will scale a number down by 1/10th

Scale.transform(22).from(0..150).to(0..15)
=> 2

Output a float by using a float in the destination range

Scale.transform(22).from(0..150).to(0..15.0)
=> 2.2

Use Arrays and Sets

Scale.transform(0.40).from(0..1).to([0, 2, 4, 8, 12, 16, 32, 64, 128, 512])
=> 8

Scale.transform(8).from(Set.new([0, 2, 4, 8, 16, 64])).to(0..10)
=> 6

See the examples for more

Core Extension

There is a Numeric extension that you can optionally include.

require "scale/core_ext"

0.40.scaled_from(0..1).to([0, 2, 4, 8, 12, 16, 32, 64, 128, 512])
=> 8

See the core_ext example for more examples.

Installation

gem install analog

or with Bundler

gem "analog"

License

Licensed under Apache 2.0, See the file LICENSE

Copyright (c) 2014-2017 Ari Russo