Class: ReputationSystem::Network
- Inherits:
-
Object
- Object
- ReputationSystem::Network
- Defined in:
- lib/reputation_system/network.rb
Class Method Summary collapse
- .add_reputation_def(class_name, reputation_name, options) ⇒ Object
- .add_scope_for(class_name, reputation_name, scope) ⇒ Object
- .get_reputation_def(class_name, reputation_name) ⇒ Object
- .get_reputation_defs(class_name) ⇒ Object
- .get_scoped_reputation_name(class_name, reputation_name, scope) ⇒ Object
- .get_weight_of_source_from_reputation_name_of_target(target, source_name, reputation_name) ⇒ Object
- .has_reputation_for?(class_name, reputation_name) ⇒ Boolean
- .has_scope?(class_name, reputation_name, scope) ⇒ Boolean
- .has_scopes?(class_name, reputation_name) ⇒ Boolean
- .is_primary_reputation?(class_name, reputation_name) ⇒ Boolean
- .remove_reputation_def(class_name, reputation_name) ⇒ Object
Class Method Details
.add_reputation_def(class_name, reputation_name, options) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/reputation_system/network.rb', line 48 def add_reputation_def(class_name, reputation_name, ) reputation_defs = get_reputation_defs(class_name) [:source] = convert_to_array_if_hash([:source]) [:source_of] ||= [] [:source_of] = convert_to_array_if_hash([:source_of]) [:aggregated_by] = [:aggregated_by] || :sum assign_self_as_default_value_for_of_attr([:source]) assign_self_as_default_value_for_of_attr([:source_of]) reputation_defs[reputation_name] = [:source].each do |s| src_class_name = derive_class_name_from_attribute(class_name, s[:of]) if has_reputation_for?(src_class_name, s[:reputation]) derive_source_of_from_source(class_name, reputation_name, s, src_class_name) else # Because the source class might not have been initialized at this time. derive_source_of_from_source_later(class_name, reputation_name, s, src_class_name) end end unless is_primary_reputation?(class_name, reputation_name) perform_derive_later(class_name, reputation_name) (class_name, reputation_name, ) end |
.add_scope_for(class_name, reputation_name, scope) ⇒ Object
80 81 82 83 84 85 86 87 88 |
# File 'lib/reputation_system/network.rb', line 80 def add_scope_for(class_name, reputation_name, scope) = get_reputation_def(class_name, reputation_name) if has_scope?(class_name, reputation_name, scope) raise ArgumentError, "#{scope} is already defined for #{reputation_name}" else [:scopes].push scope.to_sym if [:scopes] create_scoped_reputation_def(class_name, reputation_name, scope, ) end end |
.get_reputation_def(class_name, reputation_name) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/reputation_system/network.rb', line 29 def get_reputation_def(class_name, reputation_name) reputation_def = {} unless class_name == "ActiveRecord::Base" reputation_defs = get_reputation_defs(class_name) reputation_defs[reputation_name.to_sym] ||= {} reputation_def = reputation_defs[reputation_name.to_sym] if reputation_def == {} begin # This recursion finds reputation definition in the ancestor in case of STI. klass = class_name.constantize.superclass reputation_def = get_reputation_def(klass.name, reputation_name) if klass rescue NameError # Class might have not been initialized yet at this point. end end end reputation_def end |
.get_reputation_defs(class_name) ⇒ Object
25 26 27 |
# File 'lib/reputation_system/network.rb', line 25 def get_reputation_defs(class_name) network[class_name.to_sym] ||= {} end |
.get_scoped_reputation_name(class_name, reputation_name, scope) ⇒ Object
99 100 101 102 103 104 105 |
# File 'lib/reputation_system/network.rb', line 99 def get_scoped_reputation_name(class_name, reputation_name, scope) raise ArgumentError, "#{reputation_name.to_s} is not defined for #{class_name}" unless has_reputation_for?(class_name, reputation_name) scope = scope.to_sym if scope validate_scope_necessity(class_name, reputation_name, scope) validate_scope_existence(class_name, reputation_name, scope) "#{reputation_name}#{"_#{scope}" if scope}" end |
.get_weight_of_source_from_reputation_name_of_target(target, source_name, reputation_name) ⇒ Object
107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/reputation_system/network.rb', line 107 def get_weight_of_source_from_reputation_name_of_target(target, source_name, reputation_name) source = get_reputation_def(target.class.name, reputation_name)[:source] if source.is_a?(Array) source.each do |s| srn = get_scoped_reputation_name_from_source_def_and_target(s, target) return s[:weight] if srn.to_sym == source_name.to_sym end else source[:weight] end end |
.has_reputation_for?(class_name, reputation_name) ⇒ Boolean
20 21 22 23 |
# File 'lib/reputation_system/network.rb', line 20 def has_reputation_for?(class_name, reputation_name) reputation_def = get_reputation_def(class_name, reputation_name) !!reputation_def[:source] end |
.has_scope?(class_name, reputation_name, scope) ⇒ Boolean
94 95 96 97 |
# File 'lib/reputation_system/network.rb', line 94 def has_scope?(class_name, reputation_name, scope) scopes = get_reputation_def(class_name, reputation_name)[:scopes] scopes && scopes.include?(scope.to_sym) end |
.has_scopes?(class_name, reputation_name) ⇒ Boolean
90 91 92 |
# File 'lib/reputation_system/network.rb', line 90 def has_scopes?(class_name, reputation_name) !get_reputation_def(class_name, reputation_name)[:scopes].nil? end |
.is_primary_reputation?(class_name, reputation_name) ⇒ Boolean
75 76 77 78 |
# File 'lib/reputation_system/network.rb', line 75 def is_primary_reputation?(class_name, reputation_name) = get_reputation_def(class_name, reputation_name) [:source].is_a?(Symbol) end |
.remove_reputation_def(class_name, reputation_name) ⇒ Object
70 71 72 73 |
# File 'lib/reputation_system/network.rb', line 70 def remove_reputation_def(class_name, reputation_name) reputation_defs = get_reputation_defs(class_name) reputation_defs.delete(reputation_name.to_sym) end |