Class: Content

Inherits:
ApplicationRecord show all
Includes:
Housekeeping, Shared::Attributions, Shared::Citations, Shared::Confidences, Shared::DataAttributes, Shared::Depictions, Shared::HasPapertrail, Shared::IsData
Defined in:
app/models/content.rb

Overview

Content is text related blocks, at present it only pertains to Otus. It requires both a Topic and an Otu. Future extensions may be added to use the model for Projects, etc. via STI.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Housekeeping

#has_polymorphic_relationship?

Instance Attribute Details

#otu_idInteger

When OtuContent::Text the id of the Otu the content pertains to. At present required.

Returns:

  • (Integer)


25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'app/models/content.rb', line 25

class Content < ApplicationRecord
  include Housekeeping
  include Shared::Depictions
  include Shared::Confidences
  include Shared::Citations
  include Shared::Attributions
  include Shared::IsData
  include Shared::HasPapertrail
  include Shared::DataAttributes
  ignore_whitespace_on(:text)

  belongs_to :otu, inverse_of: :contents
  belongs_to :topic, inverse_of: :contents
  has_one :public_content
  belongs_to :language

  validates_uniqueness_of :topic, scope: [:otu]

  validates_presence_of :text
  validates :topic, presence: true
  validates :otu, presence: true

  # scope :for_otu_page_layout, -> (otu_page_layout_id) {
  #   where('otu_page_layout_id = ?', otu_page_layout.od)
  # }

  # @return [Boolean]
  #    true if this content has been published
  def published?
    self.public_content
  end

  # TODO: this will have to be updated in subclasses.
  def publish
    to_publish = {
      topic: self.topic,
      text:  self.text,
      otu:   self.otu
    }

    self.public_content.delete if self.public_content
    self.public_content = PublicContent.new(to_publish)
    self.save
  end

  def unpublish
    self.public_content.destroy
  end

  # OTU_PAGE_LAYOUTS
  #       V
  # OTU_PAGE_LAYOUT_SECTIONS ^ .otu_page_layout_id v .topic_id
  #       V
  #     TOPICS
  #       V
  #    CONTENTS              v otu_id              ^ .topic_id
  #       ^
  #      OTU
  #
  # Given an otu_page_layout id. find all the topics
  # For this otu_page_layout, find the topics (ControlledVocabularyTerm.of_type(:topic))

  def self.for_page_layout(otu_page_layout_id)
    where('topic_id in (?)', OtuPageLayout.where(id: otu_page_layout_id).first.topics.pluck(:id))
  end

  def self.find_for_autocomplete(params)
    where('text ILIKE ? OR text ILIKE ?', "#{params[:term]}%", "%#{params[:term]}%")
  end
end

#project_idInteger

the project ID

Returns:

  • (Integer)


25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'app/models/content.rb', line 25

class Content < ApplicationRecord
  include Housekeeping
  include Shared::Depictions
  include Shared::Confidences
  include Shared::Citations
  include Shared::Attributions
  include Shared::IsData
  include Shared::HasPapertrail
  include Shared::DataAttributes
  ignore_whitespace_on(:text)

  belongs_to :otu, inverse_of: :contents
  belongs_to :topic, inverse_of: :contents
  has_one :public_content
  belongs_to :language

  validates_uniqueness_of :topic, scope: [:otu]

  validates_presence_of :text
  validates :topic, presence: true
  validates :otu, presence: true

  # scope :for_otu_page_layout, -> (otu_page_layout_id) {
  #   where('otu_page_layout_id = ?', otu_page_layout.od)
  # }

  # @return [Boolean]
  #    true if this content has been published
  def published?
    self.public_content
  end

  # TODO: this will have to be updated in subclasses.
  def publish
    to_publish = {
      topic: self.topic,
      text:  self.text,
      otu:   self.otu
    }

    self.public_content.delete if self.public_content
    self.public_content = PublicContent.new(to_publish)
    self.save
  end

  def unpublish
    self.public_content.destroy
  end

  # OTU_PAGE_LAYOUTS
  #       V
  # OTU_PAGE_LAYOUT_SECTIONS ^ .otu_page_layout_id v .topic_id
  #       V
  #     TOPICS
  #       V
  #    CONTENTS              v otu_id              ^ .topic_id
  #       ^
  #      OTU
  #
  # Given an otu_page_layout id. find all the topics
  # For this otu_page_layout, find the topics (ControlledVocabularyTerm.of_type(:topic))

  def self.for_page_layout(otu_page_layout_id)
    where('topic_id in (?)', OtuPageLayout.where(id: otu_page_layout_id).first.topics.pluck(:id))
  end

  def self.find_for_autocomplete(params)
    where('text ILIKE ? OR text ILIKE ?', "#{params[:term]}%", "%#{params[:term]}%")
  end
end

#revision_idInteger

Stubbed placeholder for Revision (sensus taxonomy) model. NOT PRESENTLY USED.

Returns:

  • (Integer)


25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'app/models/content.rb', line 25

class Content < ApplicationRecord
  include Housekeeping
  include Shared::Depictions
  include Shared::Confidences
  include Shared::Citations
  include Shared::Attributions
  include Shared::IsData
  include Shared::HasPapertrail
  include Shared::DataAttributes
  ignore_whitespace_on(:text)

  belongs_to :otu, inverse_of: :contents
  belongs_to :topic, inverse_of: :contents
  has_one :public_content
  belongs_to :language

  validates_uniqueness_of :topic, scope: [:otu]

  validates_presence_of :text
  validates :topic, presence: true
  validates :otu, presence: true

  # scope :for_otu_page_layout, -> (otu_page_layout_id) {
  #   where('otu_page_layout_id = ?', otu_page_layout.od)
  # }

  # @return [Boolean]
  #    true if this content has been published
  def published?
    self.public_content
  end

  # TODO: this will have to be updated in subclasses.
  def publish
    to_publish = {
      topic: self.topic,
      text:  self.text,
      otu:   self.otu
    }

    self.public_content.delete if self.public_content
    self.public_content = PublicContent.new(to_publish)
    self.save
  end

  def unpublish
    self.public_content.destroy
  end

  # OTU_PAGE_LAYOUTS
  #       V
  # OTU_PAGE_LAYOUT_SECTIONS ^ .otu_page_layout_id v .topic_id
  #       V
  #     TOPICS
  #       V
  #    CONTENTS              v otu_id              ^ .topic_id
  #       ^
  #      OTU
  #
  # Given an otu_page_layout id. find all the topics
  # For this otu_page_layout, find the topics (ControlledVocabularyTerm.of_type(:topic))

  def self.for_page_layout(otu_page_layout_id)
    where('topic_id in (?)', OtuPageLayout.where(id: otu_page_layout_id).first.topics.pluck(:id))
  end

  def self.find_for_autocomplete(params)
    where('text ILIKE ? OR text ILIKE ?', "#{params[:term]}%", "%#{params[:term]}%")
  end
end

#textString

The written content.

Returns:

  • (String)


25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'app/models/content.rb', line 25

class Content < ApplicationRecord
  include Housekeeping
  include Shared::Depictions
  include Shared::Confidences
  include Shared::Citations
  include Shared::Attributions
  include Shared::IsData
  include Shared::HasPapertrail
  include Shared::DataAttributes
  ignore_whitespace_on(:text)

  belongs_to :otu, inverse_of: :contents
  belongs_to :topic, inverse_of: :contents
  has_one :public_content
  belongs_to :language

  validates_uniqueness_of :topic, scope: [:otu]

  validates_presence_of :text
  validates :topic, presence: true
  validates :otu, presence: true

  # scope :for_otu_page_layout, -> (otu_page_layout_id) {
  #   where('otu_page_layout_id = ?', otu_page_layout.od)
  # }

  # @return [Boolean]
  #    true if this content has been published
  def published?
    self.public_content
  end

  # TODO: this will have to be updated in subclasses.
  def publish
    to_publish = {
      topic: self.topic,
      text:  self.text,
      otu:   self.otu
    }

    self.public_content.delete if self.public_content
    self.public_content = PublicContent.new(to_publish)
    self.save
  end

  def unpublish
    self.public_content.destroy
  end

  # OTU_PAGE_LAYOUTS
  #       V
  # OTU_PAGE_LAYOUT_SECTIONS ^ .otu_page_layout_id v .topic_id
  #       V
  #     TOPICS
  #       V
  #    CONTENTS              v otu_id              ^ .topic_id
  #       ^
  #      OTU
  #
  # Given an otu_page_layout id. find all the topics
  # For this otu_page_layout, find the topics (ControlledVocabularyTerm.of_type(:topic))

  def self.for_page_layout(otu_page_layout_id)
    where('topic_id in (?)', OtuPageLayout.where(id: otu_page_layout_id).first.topics.pluck(:id))
  end

  def self.find_for_autocomplete(params)
    where('text ILIKE ? OR text ILIKE ?', "#{params[:term]}%", "%#{params[:term]}%")
  end
end

#topic_idInteger

When OtuContent::Text the id of the Topic the content pertains to. At present required.

Returns:

  • (Integer)


25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'app/models/content.rb', line 25

class Content < ApplicationRecord
  include Housekeeping
  include Shared::Depictions
  include Shared::Confidences
  include Shared::Citations
  include Shared::Attributions
  include Shared::IsData
  include Shared::HasPapertrail
  include Shared::DataAttributes
  ignore_whitespace_on(:text)

  belongs_to :otu, inverse_of: :contents
  belongs_to :topic, inverse_of: :contents
  has_one :public_content
  belongs_to :language

  validates_uniqueness_of :topic, scope: [:otu]

  validates_presence_of :text
  validates :topic, presence: true
  validates :otu, presence: true

  # scope :for_otu_page_layout, -> (otu_page_layout_id) {
  #   where('otu_page_layout_id = ?', otu_page_layout.od)
  # }

  # @return [Boolean]
  #    true if this content has been published
  def published?
    self.public_content
  end

  # TODO: this will have to be updated in subclasses.
  def publish
    to_publish = {
      topic: self.topic,
      text:  self.text,
      otu:   self.otu
    }

    self.public_content.delete if self.public_content
    self.public_content = PublicContent.new(to_publish)
    self.save
  end

  def unpublish
    self.public_content.destroy
  end

  # OTU_PAGE_LAYOUTS
  #       V
  # OTU_PAGE_LAYOUT_SECTIONS ^ .otu_page_layout_id v .topic_id
  #       V
  #     TOPICS
  #       V
  #    CONTENTS              v otu_id              ^ .topic_id
  #       ^
  #      OTU
  #
  # Given an otu_page_layout id. find all the topics
  # For this otu_page_layout, find the topics (ControlledVocabularyTerm.of_type(:topic))

  def self.for_page_layout(otu_page_layout_id)
    where('topic_id in (?)', OtuPageLayout.where(id: otu_page_layout_id).first.topics.pluck(:id))
  end

  def self.find_for_autocomplete(params)
    where('text ILIKE ? OR text ILIKE ?', "#{params[:term]}%", "%#{params[:term]}%")
  end
end

Class Method Details

.find_for_autocomplete(params) ⇒ Object



91
92
93
# File 'app/models/content.rb', line 91

def self.find_for_autocomplete(params)
  where('text ILIKE ? OR text ILIKE ?', "#{params[:term]}%", "%#{params[:term]}%")
end

.for_page_layout(otu_page_layout_id) ⇒ Object

OTU_PAGE_LAYOUTS

V

OTU_PAGE_LAYOUT_SECTIONS ^ .otu_page_layout_id v .topic_id

   V
 TOPICS
   V
CONTENTS              v otu_id              ^ .topic_id
   ^
  OTU

Given an otu_page_layout id. find all the topics For this otu_page_layout, find the topics (ControlledVocabularyTerm.of_type(:topic))



87
88
89
# File 'app/models/content.rb', line 87

def self.for_page_layout(otu_page_layout_id)
  where('topic_id in (?)', OtuPageLayout.where(id: otu_page_layout_id).first.topics.pluck(:id))
end

Instance Method Details

#publishObject

TODO: this will have to be updated in subclasses.



58
59
60
61
62
63
64
65
66
67
68
# File 'app/models/content.rb', line 58

def publish
  to_publish = {
    topic: self.topic,
    text:  self.text,
    otu:   self.otu
  }

  self.public_content.delete if self.public_content
  self.public_content = PublicContent.new(to_publish)
  self.save
end

#published?Boolean

Returns true if this content has been published

Returns:

  • (Boolean)

    true if this content has been published



53
54
55
# File 'app/models/content.rb', line 53

def published?
  self.public_content
end

#unpublishObject



70
71
72
# File 'app/models/content.rb', line 70

def unpublish
  self.public_content.destroy
end