analog 0.1 → 0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -4
  3. data/lib/scale.rb +1 -1
  4. data/lib/scale/scheme.rb +63 -21
  5. metadata +2 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d406496d1f9d968519029f39c59cfd4de9d89959
4
- data.tar.gz: 6c6594988cb9a366f6125f21a340d1782ee1930c
3
+ metadata.gz: 5fa67d3ea0f497fdb0f6c4e0d795d539963f4b09
4
+ data.tar.gz: deed6727fb227a1f7f59efd3b6ac09d3c915ea52
5
5
  SHA512:
6
- metadata.gz: fd71860f234567f1f0111c7b723a0b0760ccf02645a1ea6f85f678dbd1e863974af788b45429a93c2708873d128c8ddb72e29597b8b7a2c96266e865dce1ebe7
7
- data.tar.gz: 92ef67f94ef2ff5049da82808d8046d4cae7e11a836ea3ee546914d1e0b3dbdfcfa6db991ce401f20bcfcf4fe8b29eec4f55548f63d3b4d5dd87158608ce45ef
6
+ metadata.gz: 49e2004c03e8cbc8288feff90b472efca61cfc5dc84c9df5cbcdadaed0b5d9ead6ae231056f7919af3d56784a7198d8711294bfdeb95fcbeb3a645d1e15f59dd
7
+ data.tar.gz: 0ecb3626a87261d3d6c5c693a83420d000df25158a16ef055e89fef2d846d9244519b9afa8e1d80b2944ecb6b0221fbcec408c404d57c7c6ff3510e4e79089cc
data/README.md CHANGED
@@ -4,15 +4,15 @@ A Ruby helper for scaling numbers.
4
4
 
5
5
  #### Background
6
6
 
7
- This helper provides a quick way to take a number and scale it given a source and destination range/set/etc.
7
+ Provides a quick way to scale a number from one range or set to another.
8
8
 
9
- It's useful for converting data from raw values to a range used for display or other kinds of output.
9
+ This is useful for converting data from raw values to a range used for display or other kinds of output.
10
10
 
11
- I use this all the time in music programming, converting OSC messages to musical notes and things like that and figure it might be useful to others.
11
+ I use it all the time in music programming, converting OSC messages to musical notes and things like that and figure it might be useful to others.
12
12
 
13
13
  A simple example is:
14
14
 
15
- If you want to plot a point on a 500px graph using a data that lies in the 0..1 range, do
15
+ You want to plot a point on a 500px graph using a data that lies in the 0..1 range.
16
16
 
17
17
  ```ruby
18
18
  Scale.transform(0.5).using(0..1, 0..500)
@@ -6,6 +6,6 @@ require "scale/source"
6
6
  # A Ruby helper for scaling numbers
7
7
  module Scale
8
8
 
9
- VERSION = "0.1"
9
+ VERSION = "0.2"
10
10
 
11
11
  end
@@ -4,7 +4,29 @@ module Scale
4
4
  # @param [Numeric] input
5
5
  # @return [Scale::Scheme]
6
6
  def self.transform(input)
7
- Scheme.new(:input => input)
7
+ Scheme.new.scale(input)
8
+ end
9
+
10
+ # Build a scaling scheme starting with the given source
11
+ # @param [::Enumerable] source
12
+ # @return [Scale::Scheme]
13
+ def self.from(source)
14
+ Scheme.new.from(source)
15
+ end
16
+
17
+ # Build a scaling scheme starting with the given destination
18
+ # @param [::Enumerable] destination
19
+ # @return [Scale::Scheme]
20
+ def self.to(destination)
21
+ Scheme.new.to(destination)
22
+ end
23
+
24
+ # Build a scaling scheme starting with the given source and destination
25
+ # @param [::Enumerable] source
26
+ # @param [::Enumerable] destination
27
+ # @return [Scale::Scheme]
28
+ def self.using(source, destination)
29
+ Scheme.new.using(:source => source, :destination => destination)
8
30
  end
9
31
 
10
32
  # Describes a particular scaling scenario
@@ -13,8 +35,8 @@ module Scale
13
35
  attr_reader :destination, :input, :source
14
36
 
15
37
  # @param [Hash] options
16
- # @option options [Scale::Destination] :destination The destination for this scaling scenario
17
- # @option options [Scale::Source] :source The source for this scaling scenario
38
+ # @option options [::Enumerable] :destination The destination for this scaling scenario
39
+ # @option options [::Enumerable] :source The source for this scaling scenario
18
40
  def initialize(options = {})
19
41
  @input = options[:input]
20
42
  @source = Source.new(options[:source]) unless options[:source].nil?
@@ -25,39 +47,59 @@ module Scale
25
47
  # has all of its needed properties, the scaled value will be returned. Otherwise
26
48
  # this method will return the updated Scheme object.
27
49
  #
28
- # @param [Scale::Source] source
29
- # @return [Fixnum, Scale::Scheme]
50
+ # @param [::Enumerable] source
51
+ # @return [Numeric, Scale::Scheme]
30
52
  def from(source)
31
53
  @source = Source.new(source)
32
- if @input.nil? || @destination.nil?
33
- self
34
- else
35
- @destination.scale(@input, @source)
36
- end
54
+ scale? ? result : self
37
55
  end
38
56
 
39
57
  # Set the destination for this scaling scenario. If on calling this method, the
40
58
  # scenario has all of its needed properties, the scaled value will be returned.
41
59
  # Otherwise this method will return the updated Scheme object.
42
60
  #
43
- # @param [Scale::Destination] destination
44
- # @return [Fixnum, Scale::Scheme]
61
+ # @param [::Enumerable] destination
62
+ # @return [Numeric, Scale::Scheme]
45
63
  def to(destination)
46
64
  @destination = Destination.new(destination)
47
- if @input.nil? || @source.nil?
48
- self
49
- else
50
- @destination.scale(@input, @source)
51
- end
65
+ scale? ? result : self
52
66
  end
53
67
 
54
- # Set both the source and destination on this scheme
55
- # @param [Scale::Source] source
56
- # @param [Scale::Destination] destination
68
+ # Set both the source and destination on this scheme. If on calling this method, the
69
+ # scenario has all of its needed properties, the scaled value will be returned.
70
+ # Otherwise this method will return the updated Scheme object.
71
+ #
72
+ # @param [::Enumerable] source
73
+ # @param [::Enumerable] destination
74
+ # @return [Numeric, Scale::Scheme]
57
75
  def using(source, destination)
58
76
  @source = Source.new(source)
59
77
  @destination = Destination.new(destination)
60
- @destination.scale(@input, @source)
78
+ scale? ? result : self
79
+ end
80
+
81
+
82
+ # Set the input of this scaling scenario. If on calling this method, the
83
+ # scenario has all of its needed properties, the scaled value will be returned.
84
+ # Otherwise this method will return the updated Scheme object.
85
+ #
86
+ # @param [Numeric] number
87
+ # @return [Numeric, Scale::Scheme]
88
+ def scale(number)
89
+ @input = number
90
+ scale? ? result : self
91
+ end
92
+
93
+ # Scan this scaling scenario be run?
94
+ # @return [Boolean] Whether this scaling scenario can be run
95
+ def scale?
96
+ !@input.nil? && !@source.nil? && !@destination.nil?
97
+ end
98
+
99
+ # Get the result of this scaling scenario
100
+ # @return [Numeric, nil]
101
+ def result
102
+ @result ||= @destination.scale(@input, @source)
61
103
  end
62
104
 
63
105
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: analog
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: '0.2'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ari Russo
@@ -52,8 +52,7 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- description: Provides a quick way to take a number and scale it given a source and
56
- destination Array, Range, Set, etc
55
+ description: Provides a quick way to scale a number from one range or set to another
57
56
  email:
58
57
  - ari.russo@gmail.com
59
58
  executables: []