Last active
December 26, 2015 06:19
-
-
Save sstarr/7107427 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# - A `Thing` can be 1% - 100% green | |
# - This is represented on the front end with a doughnut chart | |
# - The doughnut chart can't be generated since it's in an email | |
# - To get around this, we have 25 static doughnut images in increments of 4% | |
# This code takes the percentage and returns the relevant image. | |
# I'm sure there must be a more sensible way of doing this than using the | |
# world's longest switch statement. Any ideas? | |
class Thing | |
key :percent_green, Integer | |
def static_doughnut | |
case percent_green | |
when 1,2,3,4 | |
"1-4.gif" | |
when 5,6,7,8 | |
"5-8.gif" | |
when 9,10,11,12 | |
"9-12.gif" | |
when 13,14,15,16 | |
"13-16.gif" | |
when 17,18,19,20 | |
"17-20.gif" | |
when 21,22,23,24 | |
"21-24.gif" | |
when 25,26,27,28 | |
"25-28.gif" | |
when 29,30,31,32 | |
"29-32.gif" | |
when 33,34,35,36 | |
"33-36.gif" | |
when 37,38,39,40 | |
"37-40.gif" | |
when 41,42,43,44 | |
"41-44.gif" | |
when 45,46,47,48 | |
"45-48.gif" | |
when 49,50,51,52 | |
"49-52.gif" | |
when 53,54,55,56 | |
"53-56.gif" | |
when 57,58,59,60 | |
"57-60.gif" | |
when 62,62,63,64 | |
"61-64.gif" | |
when 65,66,67,68 | |
"65-68.gif" | |
when 69,70,71,72 | |
"69-72.gif" | |
when 73,74,75,76 | |
"73-76.gif" | |
when 77,78,79,80 | |
"77-80.gif" | |
when 81,82,83,84 | |
"81-84.gif" | |
when 85,86,87,88 | |
"85-88.gif" | |
when 89,90,91,92 | |
"89-92.gif" | |
when 93,94,95,96 | |
"93-96.gif" | |
when 97,98,99,100 | |
"97-100.gif" | |
end | |
end | |
end |
The ranges follow an arithmetic progression so you just need to get everything together to plug into the arithmetic series formula.
def static_doughnut
min = 1
max = 100
return if percent_green < min or percent_green > max # maintain original interface by doing nothing if outside range
d = 4 # must be a factor of 'max' if 'min' is 1 for evenly spaced ranges
n = (percent_green - 1) / d + 1
lower_bound = min + (n - 1) * d # arithmetic series formula
upper_bound = lower_bound + d - 1
"#{lower_bound}-#{upper_bound}.gif"
end
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I don't know the syntax for Ruby but in C# you could do the following - so I am assuming that something similar can be done in Ruby.
You would need to be able to rename your gif's from 0 to 24 (e.g. doughnut0.gif)
Each number would represent one of your ranges (e.g. doughnut0.gif is percentage 1-4)
So a function that would return the file name with the correct number for the percentage range could look something like this:
private string GetGif(int percentage)
{
int x = (int)((percentage - 1) / 4);
return(string.Format("doughnut{0}.gif", x));
}
Hope this helps!