Module: ReputationSystem::Base::ClassMethods

Defined in:
lib/reputation_system/base.rb

Instance Method Summary collapse

Instance Method Details

#has_reputation(reputation_name, options) ⇒ Object

Raises:

  • (ArgumentError)


42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/reputation_system/base.rb', line 42

def has_reputation(reputation_name, options)
  has_valid_input = reputation_name && options[:source]

  raise ArgumentError, "has_reputation method received invalid arguments." unless has_valid_input
  # Overwrites reputation if the same reputation name is declared in the same model.
  # TODO: This should raise exception instead while allowing Rails app to reload in dev mode.
  ReputationSystem::Network.remove_reputation_def(name, reputation_name) if has_reputation_for?(reputation_name)

  # If it is first time to be called
  unless ancestors.include?(ReputationSystem::ReputationMethods)
    has_many :reputations, :as => :target, :class_name => "ReputationSystem::Reputation", :dependent => :destroy do
      def for(reputation_name)
        self.where(:reputation_name => reputation_name)
      end
    end
    has_many :evaluations, :as => :target, :class_name => "ReputationSystem::Evaluation", :dependent => :destroy do
      def for(reputation_name)
        self.where(:reputation_name => reputation_name)
      end
    end

    include ReputationSystem::QueryBuilder
    include ReputationSystem::QueryMethods
    include ReputationSystem::FinderMethods
    include ReputationSystem::ReputationMethods
    include ReputationSystem::ScopeMethods
  end

  ReputationSystem::Network.add_reputation_def(name, reputation_name, options)

  # evaluation related methods are defined only for primary reputations
  include ReputationSystem::EvaluationMethods if ReputationSystem::Network.is_primary_reputation?(name, reputation_name) && !ancestors.include?(ReputationSystem::EvaluationMethods)
end

#has_reputation_for?(reputation_name) ⇒ Boolean

Returns:

  • (Boolean)


76
77
78
# File 'lib/reputation_system/base.rb', line 76

def has_reputation_for?(reputation_name)
  ReputationSystem::Network.has_reputation_for?(name, reputation_name)
end