Last active
August 29, 2015 14:02
-
-
Save volkanunsal/c13441adf8b8706de056 to your computer and use it in GitHub Desktop.
This file contains 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
ANY = "ANY" | |
# Public: Logic engine | |
# | |
# args: the criteria to match against | |
# | |
# Examples | |
# | |
# args = {noncitizen: true, in_prison: false, term_served: true, paroled: true, on_probation: false, fines_paid: true, num_years_since_release: 5, felony_type: "robbery"} | |
# Engine.check(args) | |
# # => ["alabama"] | |
# | |
# Returns the states that fit the criteria | |
class Engine | |
# state, noncitizen, in_prison, term_served, paroled, on_probation, fines_paid, num_years_since_release | |
@voter_profiles: [ | |
["alabama", false, false, true, true, false, ANY, ANY], | |
["alaska", false, false, true, true, false, ANY, ANY], | |
["arizona", false, false, true, ANY, ANY, ANY, ANY], | |
["arkansas", false, false, true, true, false, ANY, ANY], | |
["california", false, false, true, true, ANY, ANY, ANY], | |
["colorado", false, false, true, true, ANY, ANY, ANY], | |
["connecticut", false, false, true, true, ANY, ANY, ANY], | |
["delaware", false, false, true, true, false, ANY, ANY], | |
["district_of_columbia", false, false, true, ANY, ANY, ANY, ANY], | |
["florida", false, false, true, true, false, ANY, ANY], | |
["georgia", false, false, true, true, false, ANY, ANY], | |
["hawaii", false, false, true, ANY, ANY, ANY, ANY], | |
["idaho", false, false, true, true, false, ANY, ANY], | |
["illinois", false, false, true, ANY, ANY, ANY, ANY], | |
["indiana", false, false, true, ANY, ANY, ANY, ANY], | |
["iowa", false, false, true, true, false, true, ANY], | |
["kansas", false, false, true, true, false, ANY, ANY], | |
["kentucky", false, false, true, true, false, ANY, ANY], | |
["louisiana", false, false, true, true, false, ANY, ANY], | |
["maine", false, ANY, ANY, ANY, ANY, ANY, ANY], | |
["maryland", false, false, true, true, false, ANY, ANY], | |
["massachusetts", false, false, true, ANY, ANY, ANY, ANY], | |
["michigan", false, false, true, ANY, ANY, ANY, ANY], | |
["minnesota", false, false, true, true, false, ANY, ANY], | |
["mississippi", false, false, true, true, false, ANY, ANY], | |
["missouri", false, false, true, true, false, ANY, ANY], | |
["montana", false, false, true, ANY, ANY, ANY, ANY], | |
["nebraska", false, false, true, true, false, ANY, 2], | |
["nevada", false, false, true, ANY, ANY, ANY, ANY], | |
["new_hampshire", false, false, true, ANY, ANY, ANY, ANY], | |
["new_jersey", false, false, true, true, false, ANY, ANY], | |
["new_mexico", false, false, true, true, false, ANY, ANY], | |
["new_york", false, false, true, true, ANY, ANY, ANY], | |
["north_carolina", false, false, true, true, false, ANY, ANY], | |
["north_dakota", false, false, true, ANY, ANY, ANY, ANY], | |
["ohio", false, false, true, ANY, ANY, ANY, ANY], | |
["oklahoma", false, false, true, true, false, ANY, ANY], | |
["oregon", false, false, true, ANY, ANY, ANY, ANY], | |
["pennsylvania", false, false, true, ANY, ANY, ANY, ANY], | |
["rhode_island", false, false, true, ANY, ANY, ANY, ANY], | |
["south_carolina", false, false, true, true, false, ANY, ANY], | |
["south_dakota", false, false, true, true, false, ANY, ANY], | |
["tennessee", false, false, true, true, false, ANY, 2], | |
["texas", false, false, true, true, false, ANY, ANY], | |
["utah", false, false, true, ANY, ANY, ANY, ANY], | |
["vermont", false, ANY, ANY, ANY, ANY, ANY, ANY], | |
["virginia", false, false, true, true, false, ANY, ANY], | |
["washington", false, false, true, true, false, ANY, ANY], | |
["west_virginia", false, false, true, true, false, ANY, ANY], | |
["wisconsin", false, false, true, true, false, ANY, ANY], | |
["wyoming", false, false, true, true, false, ANY, 5] | |
] | |
@egregious_felonies: | |
"alabama": ["murder", "rape", "incest", "sexual_crime_against_children"] | |
"delaware": ["murder", "bribery", "manslaughter", "abuse_of_office"] | |
"florida": ["everything"] | |
"kentucky": ["everything"] | |
"mississippi": ["everything"] | |
"nebraska": ["treason"] | |
"tennessee": ["murder", "rape", "treason", "voter_fraud"] | |
"virginia": ["murder", "rape"] | |
"wyoming": ["murder", "rape"] | |
@check: (opts)-> | |
a = _.defaults(opts, {noncitizen: false, in_prison: false, term_served: true, paroled: ANY, on_probation: false, fines_paid: ANY, num_years_since_release: ANY, "felony_type[]": ANY}) | |
arglist = [a["noncitizen"], a["in_prison"], a["term_served"], a["paroled"], a["on_probation"], a["fines_paid"], a["num_years_since_release"]] | |
@find(a["felony_type[]"],arglist) | |
@find: (felony_type,arglist)-> | |
states = [] | |
felonies = @egregious_felonies | |
_.each(@voter_profiles, (profile)-> | |
[state, rules] = [_.first(profile), _.rest(profile)] | |
# Comparing the rule to the corresponding value in the arglist. If the rule and arglist value match, continue as normal. If either of the rules are ANY, then continue as normal. Next, make sure that the felony, if it exists, is not in egregious felonies list. | |
release_rule_index = rules.length - 1 | |
validator = (rule,i)-> | |
return true if arglist[i] == ANY or rule == ANY | |
if i is release_rule_index | |
# the num_years_since_release require a gtd check | |
arglist[i] >= rule or isNaN(parseInt(arglist[i])) | |
else | |
arglist[i] == rule | |
bad_felony_done = (felonies[state] and _.some(felony_type, ((f)->_.contains(felonies[state],f)))) || false | |
# When the iteration is complete, if no rules have been violated, then add the state into the states array. | |
states.push(state) if(_.every(rules, validator) and !bad_felony_done) | |
) | |
states |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment