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 |
# File 'app/models/wf/guard.rb', line 53 def check_exp(_entry, workitem) # 1000ms, 200mb context = MiniRacer::Context.new(timeout: 1000, max_memory: 200_000_000) context.eval("let target = #{target_hash.to_json};") context.eval("let workitem = #{workitem.to_json};") exp_value = context.eval(exp) yes_or_no?(exp_value, value) end |
#check_fieldable(entry) ⇒ Object
62 63 64 65 66 67 |
# File 'app/models/wf/guard.rb', line 62 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
87 88 89 90 91 92 93 |
# File 'app/models/wf/guard.rb', line 87 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
95 96 97 98 99 100 101 102 |
# File 'app/models/wf/guard.rb', line 95 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
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'app/models/wf/guard.rb', line 69 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 |