Class: Wf::Guard
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- Wf::Guard
- Defined in:
- app/models/wf/guard.rb
Constant Summary collapse
- OP =
%w[ = > < >= <= is_empty ].freeze
Instance Method Summary collapse
- #check_exp(entry, workitem) ⇒ Object
- #check_fieldable(entry) ⇒ Object
- #inspect ⇒ Object
- #pass?(entry, workitem) ⇒ Boolean
- #validate_exp_and_fieldable ⇒ Object
- #value_after_cast ⇒ Object
- #yes_or_no?(input_value, setting_value) ⇒ Boolean
Instance Method Details
#check_exp(entry, workitem) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'app/models/wf/guard.rb', line 53 def check_exp(entry, workitem) form_hash = if entry entry.for_mini_racer else {} end target_hash = workitem&.case&.targetable&.attributes || {} user_hash = workitem&.holding_user&.attributes || {} # 1000ms, 200mb context = MiniRacer::Context.new(timeout: 1000, max_memory: 200_000_000) context.eval("let form = #{form_hash.to_json};") context.eval("let user = #{user_hash.to_json};") context.eval("let target = #{target_hash.to_json};") exp_value = context.eval(exp) yes_or_no?(exp_value, value) end |
#check_fieldable(entry) ⇒ Object
72 73 74 75 76 77 |
# File 'app/models/wf/guard.rb', line 72 def check_fieldable(entry) fv = entry.field_values.where(field_id: fieldable_id).first return unless fv yes_or_no?(fv.value_after_cast, value_after_cast) end |
#inspect ⇒ Object
97 98 99 100 101 102 103 |
# File 'app/models/wf/guard.rb', line 97 def inspect if exp %(eval(exp) #{op} #{value}) else %(#{fieldable&.form&.name}.#{fieldable&.name} #{op} #{value}) end end |
#pass?(entry, workitem) ⇒ Boolean
45 46 47 48 49 50 51 |
# File 'app/models/wf/guard.rb', line 45 def pass?(entry, workitem) if exp check_exp(entry, workitem) else check_fieldable(entry) end end |
#validate_exp_and_fieldable ⇒ Object
105 106 107 108 109 110 111 112 |
# File 'app/models/wf/guard.rb', line 105 def validate_exp_and_fieldable if fieldable && exp.present? errors.add(:exp, "Exp and Fieldable can not be set at the same time.") return end errors.add(:exp, "Must set one of Exp and Fieldable.") unless fieldable || exp.present? end |
#value_after_cast ⇒ Object
40 41 42 43 |
# File 'app/models/wf/guard.rb', line 40 def value_after_cast field = fieldable fieldable&.cast(value) end |
#yes_or_no?(input_value, setting_value) ⇒ Boolean
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'app/models/wf/guard.rb', line 79 def yes_or_no?(input_value, setting_value) if op == "=" input_value == setting_value elsif op == ">" input_value > setting_value elsif op == "<" input_value < setting_value elsif op == ">=" input_value >= setting_value elsif op == "<=" input_value <= setting_value elsif op == "is_empty" input_value.blank? else false end end |