Browse Source

Refactor depends on (#649)

* Refactor depends on in the form json to specify the object for the dependency

Co-authored-by: baarkerlounger  <baarkerlounger@users.noreply.github.com>

* Refactor depends_on_met method to execcute methods on given objects

Co-authored-by: baarkerlounger  <baarkerlounger@users.noreply.github.com>

* Remove org section

Co-authored-by: Kat <katrina@madetech.com>
Co-authored-by: baarkerlounger  <baarkerlounger@users.noreply.github.com>
pull/654/head
baarkerlounger 3 years ago committed by GitHub
parent
commit
16fce6f2bf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 19
      app/models/form.rb
  2. 3441
      config/forms/2021_2022.json
  3. 3680
      config/forms/2022_2023.json
  4. 89
      spec/fixtures/forms/2021_2022.json

19
app/models/form.rb

@ -157,16 +157,25 @@ class Form
depends_on.any? do |conditions_set| depends_on.any? do |conditions_set|
return false unless conditions_set return false unless conditions_set
conditions_set.all? do |question, value| conditions_set.all? do |condition|
object, method, value = condition.values_at("object", "method", "value")
object_instance = case object
when "case_log"
case_log
when "user"
nil
end
if value.is_a?(Hash) && value.key?("operator") if value.is_a?(Hash) && value.key?("operator")
operator = value["operator"] operator = value["operator"]
operand = value["operand"] operand = value["operand"]
case_log[question]&.send(operator, operand) object_instance[method]&.send(operator, operand)
else else
parts = question.split(".") parts = method.split(".")
case_log_value = send_chain(parts, case_log)
object_instance_value = send_chain(parts, object_instance)
value.nil? ? case_log_value == value : !case_log_value.nil? && case_log_value == value value.nil? ? object_instance_value == value : !object_instance_value.nil? && object_instance_value == value
end end
end end
end end

3441
config/forms/2021_2022.json

File diff suppressed because it is too large Load Diff

3680
config/forms/2022_2023.json

File diff suppressed because it is too large Load Diff

89
spec/fixtures/forms/2021_2022.json vendored

@ -21,12 +21,8 @@
} }
}, },
"depends_on": [ "depends_on": [
{ [{"object": "case_log", "method": "housingneeds_a", "value": 1}],
"housingneeds_a": 1 [{"object": "case_log", "method": "housingneeds_a", "value": null}]
},
{
"housingneeds_a": null
}
] }, ] },
"person_1_age": { "person_1_age": {
"questions": { "questions": {
@ -189,8 +185,20 @@
"9": { "9": {
"value": "Child under 16", "value": "Child under 16",
"depends_on": [ "depends_on": [
{ "age2_known": 1 }, [
{ "age2": { "operator": "<", "operand": 16 } } {
"object": "case_log",
"method": "age2_known",
"value": 1
}
],
[
{
"object": "case_log",
"method": "age2",
"value": { "operator": "<", "operand": 16 }
}
]
] ]
}, },
"1": { "1": {
@ -200,9 +208,9 @@
} }
}, },
"depends_on": [ "depends_on": [
{ [{
"age2": { "operator": ">", "operand": 15 } "object": "case_log", "method": "age2", "value": { "operator": ">", "operand": 15 }
} }]
] ]
}, },
"propcode": { "propcode": {
@ -322,11 +330,10 @@
} }
} }
}, },
"depends_on": [ "depends_on": [[
{ {"object": "case_log", "method": "previous_la_known", "value": 1},
"previous_la_known": 1, {"object": "case_log", "method": "is_previous_la_inferred", "value": false}
"is_previous_la_inferred": false ]
}
] ]
}, },
"condition_effects": { "condition_effects": {
@ -347,9 +354,7 @@
} }
}, },
"depends_on": [ "depends_on": [
{ [{"object": "case_log", "method": "illness", "value": 1}]
"illness": 1
}
] ]
} }
} }
@ -397,9 +402,7 @@
} }
}, },
"depends_on": [ "depends_on": [
{ [{"object": "case_log", "method": "is_la_inferred", "value": false}]
"is_la_inferred": false
}
] ]
}, },
"property_postcode": { "property_postcode": {
@ -459,7 +462,9 @@
} }
} }
}, },
"depends_on": [{"is_la_inferred": false}] "depends_on": [
[{"object": "case_log", "method": "is_la_inferred", "value": false}]
]
}, },
"property_wheelchair_accessible": { "property_wheelchair_accessible": {
"questions": { "questions": {
@ -513,7 +518,10 @@
} }
} }
}, },
"depends_on": [{ "preg_occ": 1 }, { "wchair" : 1 }] "depends_on": [
[{"object": "case_log", "method": "preg_occ", "value": 1}],
[{"object": "case_log", "method": "wchair", "value": 1}]
]
}, },
"conditional_question_no_page": { "conditional_question_no_page": {
"questions": { "questions": {
@ -531,7 +539,9 @@
} }
} }
}, },
"depends_on": [{ "preg_occ": 2 }] "depends_on": [
[{"object": "case_log", "method": "preg_occ", "value": 2}]
]
}, },
"conditional_question_no_second_page": { "conditional_question_no_second_page": {
"questions": { "questions": {
@ -549,7 +559,10 @@
} }
} }
}, },
"depends_on": [{ "preg_occ": 2, "sex1": "M" }] "depends_on": [
[{"object": "case_log", "method": "preg_occ", "value": 2},
{"object": "case_log", "method": "sex1", "value": "M"}]
]
} }
} }
} }
@ -599,7 +612,9 @@
} }
}, },
"net_income_value_check": { "net_income_value_check": {
"depends_on": [{ "net_income_soft_validation_triggered?": true }], "depends_on": [
[{"object": "case_log", "method": "net_income_soft_validation_triggered?", "value": true}]
],
"title_text": { "translation": "soft_validations.net_income.title_text" }, "title_text": { "translation": "soft_validations.net_income.title_text" },
"informative_text": { "informative_text": {
"translation": "soft_validations.net_income.hint_text", "translation": "soft_validations.net_income.hint_text",
@ -681,7 +696,9 @@
} }
}, },
"dependent_page": { "dependent_page": {
"depends_on": [{ "incfreq": 1 }], "depends_on": [
[{"object": "case_log", "method": "incfreq", "value": 1}]
],
"questions": { "questions": {
"dependent_question": { "dependent_question": {
"check_answer_label": "Dependent Question", "check_answer_label": "Dependent Question",
@ -825,7 +842,9 @@
"width": 4 "width": 4
} }
}, },
"depends_on": [{"period": 3}] "depends_on": [
[{"object": "case_log", "method": "period", "value": 3}]
]
}, },
"care_home_charge_bi_weekly": { "care_home_charge_bi_weekly": {
"questions": { "questions": {
@ -839,7 +858,9 @@
"width": 4 "width": 4
} }
}, },
"depends_on": [{"period": 2}] "depends_on": [
[{"object": "case_log", "method": "period", "value": 2}]
]
} }
} }
} }
@ -888,13 +909,15 @@
}, },
"hidden_in_check_answers": { "hidden_in_check_answers": {
"depends_on": [ "depends_on": [
{ "layear": 0 }, [{"object": "case_log", "method": "layear", "value": 0}],
{ "layear": 1 } [{"object": "case_log", "method": "layear", "value": 1}]
] ]
} }
} }
}, },
"depends_on": [{ "renewal": 0 }] "depends_on": [
[{"object": "case_log", "method": "renewal", "value": 0}]
]
}, },
"time_on_la_waiting_list": { "time_on_la_waiting_list": {
"questions": { "questions": {

Loading…
Cancel
Save