Module: Refine::Conditions::HasClauses
- Included in:
- BooleanCondition, Condition, DateCondition, FilterCondition, NumericCondition, OptionCondition, TextCondition
- Defined in:
- app/models/refine/conditions/has_clauses.rb
Class Method Summary collapse
Instance Method Summary collapse
- #before_clause_validation(input = []) ⇒ Object
- #boot_has_clauses ⇒ Object
- #clause_display_map ⇒ Object
- #custom_clauses ⇒ Object
- #ensure_clause(clause) ⇒ Object
- #ensure_clauses ⇒ Object
- #get_clause_by_id(id) ⇒ Object
- #get_clauses ⇒ Object
- #only_clauses(specific_clauses) ⇒ Object
- #remap_clause_displays(map) ⇒ Object
- #update_show_clauses(clause, value) ⇒ Object
- #with_clauses(clauses_to_include) ⇒ Object
- #without_clauses(clauses_to_exclude) ⇒ Object
Class Method Details
.included(klass) ⇒ Object
4 5 6 7 8 |
# File 'app/models/refine/conditions/has_clauses.rb', line 4 def self.included(klass) klass.class_eval do mattr_accessor :default_clause_display_map, default: {}, instance_accessor: false end end |
Instance Method Details
#before_clause_validation(input = []) ⇒ Object
22 23 24 25 26 27 28 29 30 31 |
# File 'app/models/refine/conditions/has_clauses.rb', line 22 def before_clause_validation(input = []) proc do |input| if input.present? current_clause = clauses.select{ |clause| clause.id == input[:clause] } if current_clause.present? add_rules(current_clause[0].rules) end end end end |
#boot_has_clauses ⇒ Object
10 11 12 13 14 15 16 |
# File 'app/models/refine/conditions/has_clauses.rb', line 10 def boot_has_clauses @show_clauses = {} add_rules({ clause: "required" }) ({ clauses: get_clauses }) add_ensurance(ensure_clauses) before_validate(before_clause_validation) end |
#clause_display_map ⇒ Object
18 19 20 |
# File 'app/models/refine/conditions/has_clauses.rb', line 18 def clause_display_map @clause_display_map ||= {} end |
#custom_clauses ⇒ Object
33 34 35 |
# File 'app/models/refine/conditions/has_clauses.rb', line 33 def custom_clauses [] end |
#ensure_clause(clause) ⇒ Object
76 77 78 79 80 81 82 83 84 85 |
# File 'app/models/refine/conditions/has_clauses.rb', line 76 def ensure_clause(clause) if !clause.is_a? Clause errors.add(:base, I18n.t("refine.refine_blueprints.has_clauses.must_be_instance_of", instance: "#{Clause::class}")) raise Errors::ConditionClauseError, "#{errors.}" end if clause.id.blank? || clause.display.blank? errors.add(:base, I18n.t("refine.refine_blueprints.has_clauses.must_have_id_and_display")) raise Errors::ConditionClauseError, "#{errors.}" end end |
#ensure_clauses ⇒ Object
64 65 66 67 68 69 70 71 72 73 74 |
# File 'app/models/refine/conditions/has_clauses.rb', line 64 def ensure_clauses proc do clauses = get_clauses.call if clauses.any? clauses.each { |clause| ensure_clause(clause) } else errors.add(:base, I18n.t("refine.refine_blueprints.has_clauses.not_determined")) raise Errors::ConditionClauseError, "#{errors.}" end end end |
#get_clause_by_id(id) ⇒ Object
87 88 89 90 91 |
# File 'app/models/refine/conditions/has_clauses.rb', line 87 def get_clause_by_id(id) clause = get_clauses.call().find{ |clause| clause.id == id } raise I18n.t("refine.refine_blueprints.has_clauses.not_found", id: id) unless clause clause end |
#get_clauses ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'app/models/refine/conditions/has_clauses.rb', line 93 def get_clauses proc do returned_clauses = clauses.dup # Clause display map takes precedence over default display map. Merge order matters. map = self.class.default_clause_display_map.merge(clause_display_map) @show_clauses.each do |clause_id, rule| filterable_clause_index = returned_clauses.index{ |clause| clause.id.to_sym == clause_id } if rule == false returned_clauses.delete_at(filterable_clause_index) elsif rule == true add_clause = returned_clauses.find{|clause| clause.id.to_sym == clause_id } returned_clauses << add_clause if !add_clause end end # Rewrite display if the key exists in the map. returned_clauses.each do |clause| if map.key?(clause.id.to_sym) clause.display = map[clause.id.to_sym] end end returned_clauses end end |
#only_clauses(specific_clauses) ⇒ Object
42 43 44 45 46 47 48 |
# File 'app/models/refine/conditions/has_clauses.rb', line 42 def only_clauses(specific_clauses) # Remove all clauses clauses.map(&:id).each {|clause_id| update_show_clauses(clause_id, false) } # Add specific clauses by id, not by fully qualified clause specific_clauses.each {|clause| update_show_clauses(clause, true) } self end |
#remap_clause_displays(map) ⇒ Object
37 38 39 40 |
# File 'app/models/refine/conditions/has_clauses.rb', line 37 def remap_clause_displays(map) clause_display_map.merge!(map) self end |
#update_show_clauses(clause, value) ⇒ Object
60 61 62 |
# File 'app/models/refine/conditions/has_clauses.rb', line 60 def update_show_clauses(clause, value) @show_clauses.merge!({"#{clause}": value}) end |
#with_clauses(clauses_to_include) ⇒ Object
50 51 52 53 |
# File 'app/models/refine/conditions/has_clauses.rb', line 50 def with_clauses(clauses_to_include) clauses_to_include.each {|clause| update_show_clauses(clause, true) } self end |
#without_clauses(clauses_to_exclude) ⇒ Object
55 56 57 58 |
# File 'app/models/refine/conditions/has_clauses.rb', line 55 def without_clauses(clauses_to_exclude) clauses_to_exclude.each {|clause| update_show_clauses(clause, false) } self end |