class Togls::RuleRepository
Rule
Repository
The Rule
Repository is the intended interface to store and retrieve rules. It does these by interfacing with Rule
Repository Drivers which are passed in during construction as an Array.
Public Class Methods
new(drivers)
click to toggle source
# File lib/togls/rule_repository.rb, line 8 def initialize(drivers) unless drivers.is_a?(Array) raise Togls::InvalidDriver, 'RuleRepository requires a valid driver' end if drivers.empty? raise Togls::MissingDriver, 'RuleRepository requires a driver' end @drivers = drivers end
Public Instance Methods
extract_storage_payload(rule)
click to toggle source
# File lib/togls/rule_repository.rb, line 25 def extract_storage_payload(rule) { 'id' => rule.id.to_s, 'type_id' => ::Togls.send(:rule_type_registry).get_type_id(rule.class.to_s), 'data' => rule.data, 'target_type' => rule.target_type.to_s } end
fetch_rule_data(id)
click to toggle source
# File lib/togls/rule_repository.rb, line 34 def fetch_rule_data(id) rule_data = nil @drivers.reverse.each do |driver| rule_data = driver.get(id) break if rule_data end rule_data end
get(rule_id)
click to toggle source
# File lib/togls/rule_repository.rb, line 43 def get(rule_id) rule_data = fetch_rule_data(rule_id) validate_rule_data(rule_data) reconstitute_rule(rule_data) end
reconstitute_rule(rule_data)
click to toggle source
# File lib/togls/rule_repository.rb, line 70 def reconstitute_rule(rule_data) if rule_data.has_key?('target_type') ::Togls.rule_type(rule_data['type_id'])\ .new(rule_data['id'].to_sym, rule_data['type_id'].to_sym, rule_data['data'], target_type: rule_data['target_type'].to_sym) else ::Togls.rule_type(rule_data['type_id']).new(rule_data['id'].to_sym, rule_data['type_id'].to_sym, rule_data['data']) end end
store(rule)
click to toggle source
# File lib/togls/rule_repository.rb, line 18 def store(rule) rule_data = extract_storage_payload(rule) @drivers.each do |driver| driver.store(rule.id.to_s, rule_data) end end
validate_rule_data(rule_data)
click to toggle source
# File lib/togls/rule_repository.rb, line 49 def validate_rule_data(rule_data) if rule_data.nil? Togls.logger.warn "None of the rule repository drivers claim to have the rule" raise Togls::RepositoryRuleDataInvalid, "None of the rule repository drivers claim to have the rule" end ['id', 'type_id', 'data', 'target_type'].each do |k| if !rule_data.has_key? k Togls.logger.warn "One of the rule repository drivers returned rule data that is missing the '#{k}'" raise Togls::RepositoryRuleDataInvalid, "One of the rule repository drivers returned rule data that is missing the '#{k}'" end end ['id', 'type_id', 'target_type'].each do |k| if !rule_data[k].is_a?(String) Togls.logger.warn "One of the rule repository drivers returned rule data with '#{k}' not being a string" raise Togls::RepositoryRuleDataInvalid, "One of the rule repository drivers returned rule data with '#{k}' not being a string" end end end