Class: Skyline::Article

Inherits:
ActiveRecord::Base
  • Object
show all
Extended by:
ActiveSupport::Memoizable
Defined in:
app/models/skyline/article.rb

Direct Known Subclasses

Page, PageFragment

Defined Under Namespace

Classes: Data

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.publishable?Boolean

used by SearchableItem

Returns:

  • (Boolean)


66
67
68
# File 'app/models/skyline/article.rb', line 66

def publishable?
  true
end

.right_prefixObject

The prefix to use when determining rights. User#allow? uses this method when called with 2 parameters. –



61
62
63
# File 'app/models/skyline/article.rb', line 61

def right_prefix
  "article"      
end

.to_paramObject



54
55
56
# File 'app/models/skyline/article.rb', line 54

def to_param
  self.name.underscore
end

Instance Method Details

#data_classObject

The class that provides our custom data fields. – Note: We can’t use memoize here, because it freezes the class



164
165
166
167
168
169
# File 'app/models/skyline/article.rb', line 164

def data_class
  return @_data_class unless @_data_class.nil?
  @_data_class = (self.class.name + "::" + "Data").constantize
rescue NameError
  @_data_class = false
end

#depublishObject

Depublish a page, removes the published_publication if keep_history? is false

Raises

StandardError

if page is persistent

Raises:

  • (StandardError)


83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'app/models/skyline/article.rb', line 83

def depublish
  raise StandardError, "can't be depublished because this page is persistent" if self.persistent?
  
  if self.published_publication
    self.published_publication.destroy unless self.keep_history?
    self.published_publication = nil
  end
  
  self.published_publication_data = nil
  self.url_part = "page-#{self.position}"
  
  self.save
end

#depublishable?Boolean

Returns:

  • (Boolean)


102
103
104
# File 'app/models/skyline/article.rb', line 102

def depublishable?
  !self.persistent?
end

#destroyObject



97
98
99
100
# File 'app/models/skyline/article.rb', line 97

def destroy
  depublish
  super
end

#destroyable?Boolean

Returns:

  • (Boolean)


106
107
108
# File 'app/models/skyline/article.rb', line 106

def destroyable?
  !self.persistent? && self.published_publication == nil
end

#editable_by?(user) ⇒ Boolean

Checks if the page can be edited by a certain user Currently only checks on page locks. –

Returns:

  • (Boolean)


146
147
148
149
# File 'app/models/skyline/article.rb', line 146

def editable_by?(user)
  user = user.kind_of?(Skyline::User) ? user : Skyline::User.find_by_id(user)    
  self.locked? && user.allow?(:page_lock) || !self.locked?
end

#enable_locking?Boolean

Returns:

  • (Boolean)


138
139
140
# File 'app/models/skyline/article.rb', line 138

def enable_locking?
  true
end

#enable_multiple_variants?Boolean

Returns:

  • (Boolean)


134
135
136
# File 'app/models/skyline/article.rb', line 134

def enable_multiple_variants?
  true
end

#enable_publishing?Boolean

Returns:

  • (Boolean)


130
131
132
# File 'app/models/skyline/article.rb', line 130

def enable_publishing?
  true
end

#keep_history?Boolean

Returns:

  • (Boolean)


126
127
128
# File 'app/models/skyline/article.rb', line 126

def keep_history?
  false
end

#preview_wrapper_pageObject

a subclass might return a Page in which the article (ie: NewsItem) will be rendered for previewing



180
181
182
# File 'app/models/skyline/article.rb', line 180

def preview_wrapper_page
  nil
end

#previewable?Boolean

Returns:

  • (Boolean)


118
119
120
# File 'app/models/skyline/article.rb', line 118

def previewable?
  self.renderable?
end

#published?Boolean

Returns:

  • (Boolean)


71
72
73
74
75
# File 'app/models/skyline/article.rb', line 71

def published?
  # Don't use only "self.published_publication" here, it causes way too many lookups
  # If the next test is wrong, than maybe you should wonder why it is wrong? Foreign key left behind?
  self.published_publication_id.present?
end

#renderable?Boolean

Returns:

  • (Boolean)


110
111
112
# File 'app/models/skyline/article.rb', line 110

def renderable?
  self.renderable_scope.renderer.templates_for(self).any?
end

#renderable_scopeObject



114
115
116
# File 'app/models/skyline/article.rb', line 114

def renderable_scope
  Skyline::WildcardRenderableScope.new
end

#right_prefixObject



171
172
173
# File 'app/models/skyline/article.rb', line 171

def right_prefix
  self.class.right_prefix
end

#rollbackable?Boolean

Returns:

  • (Boolean)


122
123
124
# File 'app/models/skyline/article.rb', line 122

def rollbackable?
  true
end

#set_default_variant(variant) ⇒ Object



156
157
158
159
# File 'app/models/skyline/article.rb', line 156

def set_default_variant(variant)
  return if variant.id == self.default_variant_id && variant.data_id == self.default_variant_data_id
  self.attributes = {:default_variant_id => variant.id, :default_variant_data_id => variant.data_id}
end

#set_default_variant!(variant) ⇒ Object



151
152
153
154
# File 'app/models/skyline/article.rb', line 151

def set_default_variant!(variant)
  return if variant.id == self.default_variant_id && variant.data_id == self.default_variant_data_id
  self.update_attributes(:default_variant_id => variant.id, :default_variant_data_id => variant.data_id)
end

#siteObject



188
189
190
# File 'app/models/skyline/article.rb', line 188

def site
  Skyline::Site.new
end

#sitesObject



184
185
186
# File 'app/models/skyline/article.rb', line 184

def sites
  [Skyline::Site.new]
end

#titleObject



175
176
177
# File 'app/models/skyline/article.rb', line 175

def title
  self.id
end