Module: ImpliedPublication

Included in:
Subject
Defined in:
backend/app/model/mixins/implied_publication.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary (collapse)

Instance Method Summary (collapse)

Class Method Details

+ (Object) included(base)



3
4
5
# File 'backend/app/model/mixins/implied_publication.rb', line 3

def self.included(base)
  base.extend(ClassMethods)
end

+ (Object) relevant_relationships



8
9
10
# File 'backend/app/model/mixins/implied_publication.rb', line 8

def self.relevant_relationships
  [:subject, :linked_agents]
end

Instance Method Details

- (Boolean) is_published_by_implication?

Returns:

  • (Boolean)


12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'backend/app/model/mixins/implied_publication.rb', line 12

def is_published_by_implication?
  self.class.relationship_dependencies.any? {|relationship_name, relationship_dependency|
    next unless ImpliedPublication::relevant_relationships.include? relationship_name
    relationship_dependency.any? {|related_class|
      next unless related_class.columns.include?(:publish)
      relationship_class = related_class.find_relationship(relationship_name, true)
      reference_columns = relationship_class.reference_columns_for(self.class)
      referrer_columns = relationship_class.reference_columns_for(related_class)

      referrer_columns.any? {|referrer_column|
        reference_columns.any? {|reference_column|
          relationship_class.join(related_class, :id => referrer_column).
          filter(:publish => 1).
          filter(reference_column => self.id).
          any?
        }
      }
    }
  }
end