Class: RailsConnector::BasicObj
- Inherits:
-
Object
- Object
- RailsConnector::BasicObj
- Extended by:
- ActiveModel::Naming
- Defined in:
- lib/rails_connector/basic_obj.rb
Overview
The CMS file class
Class Method Summary collapse
-
.all ⇒ ObjSearchEnumerator
Returns a ObjSearchEnumerator of all Objs.
-
.find(id_or_list) ⇒ Obj+
Find an Obj by its id.
-
.find_all_by_name(name) ⇒ ObjSearchEnumerator
Returns a ObjSearchEnumerator of all Objs with the given name.
-
.find_all_by_obj_class(obj_class) ⇒ ObjSearchEnumerator
Returns a ObjSearchEnumerator of all Objs with the given
obj_class. -
.find_by_name(name) ⇒ Obj
Find an Obj with the given name.
-
.find_by_path(path) ⇒ Obj
Find the Obj with the given path.
-
.find_by_permalink(permalink) ⇒ Obj
Returns the Obj with the given permalink, or
nilif no matching Obj exists. -
.find_by_permalink!(permalink) ⇒ Obj
Returns the Obj with the given permalink, or raise ResourceNotFound if no matching Obj exists.
-
.homepage ⇒ Obj
Returns the homepage obj.
-
.root ⇒ Obj
Returns the root Obj, i.e.
-
.valid_page_classes_beneath(parent_path) ⇒ NilClass, Array<Symbol, String>
Hook method to control which page classes should be available for a page with given path.
-
.where(field, operator, value, boost = nil) ⇒ ObjSearchEnumerator
Returns a ObjSearchEnumerator with the given initial subquery consisting of the four arguments.
Instance Method Summary collapse
-
#[](key) ⇒ Object
Returns the value of an internal or external attribute specified by its name.
-
#active? ⇒ Boolean
deprecated
Deprecated.
Active is deprecated without substitution.
-
#ancestors ⇒ Array<Obj>
Returns an Array of all the ancestor objects, starting at the root and ending at this object’s parent.
-
#body ⇒ String
Returns the body (main content) of the Obj for non-binary Objs.
-
#body_content_type ⇒ String
returns the content type of the Obj’s body for binary Objs.
-
#body_data_url ⇒ String
returns an URL to retrieve the Obj’s body for binary Objs.
-
#body_length ⇒ Object
for binary Objs body_length equals the file size for non-binary Objs body_length equals the number of characters in the body (main content).
-
#children ⇒ Array<Obj>
return a list of all child Objs.
-
#content_type ⇒ String
(also: #mime_type)
For a binary Obj, the content_type is equal to the content_type of its body (i.e. its data).
-
#controller_action_name ⇒ String
This method determines the action that should be invoked when the
Objis requested. -
#controller_name ⇒ String
This method determines the controller that should be invoked when the
Objis requested. -
#display_title ⇒ String
Returns the title of the content or the name.
-
#file_extension ⇒ String
returns the extension (the part after the last dot) from the Obj’s name.
-
#find_nearest(name) ⇒ Obj
Returns the Object with the given name next in the hierarchy returns
nilif no object with the given name was found. -
#homepage? ⇒ Boolean
Returns true if the current obj is the BasicObj.homepage obj.
- #id ⇒ Object
- #last_changed ⇒ Object
-
#name ⇒ Object
returns the Obj‘s name, i.e.
- #obj_class ⇒ String
-
#parent ⇒ Object
return the Obj that is the parent of this Obj.
-
#path ⇒ Object
returns the Obj‘s path as a String.
-
#permalink ⇒ Object
returns the obj’s permalink.
-
#reload ⇒ Object
Reloads the attributes of this object from the database.
-
#root? ⇒ Boolean
Returns true if this object is the root object.
-
#slug ⇒ String
This method is used to calculate a part of a URL of this Obj.
-
#sorted_toclist(*args) ⇒ Array<Obj>
Returns the sorted
toclist, respecting sort order and type of this Obj. - #title ⇒ Object
-
#toclist(*args) ⇒ Array<Obj>
Returns a list of children excluding the binary? ones unless :all is specfied.
- #valid_from ⇒ Object
- #valid_until ⇒ Object
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class RailsConnector::AttributeContent
Class Method Details
.all ⇒ ObjSearchEnumerator
Returns a ObjSearchEnumerator of all Objs. If invoked on a subclass of Obj, the result will be restricted to instances of that subclass.
78 79 80 81 82 83 84 |
# File 'lib/rails_connector/basic_obj.rb', line 78 def self.all if superclass == RailsConnector::BasicObj search_for_all else find_all_by_obj_class(name) end end |
.find(id_or_list) ⇒ Obj+
Find an Obj by its id. If the paremeter is an Array containing ids, return a list of corresponding Objs.
46 47 48 49 50 51 52 53 54 |
# File 'lib/rails_connector/basic_obj.rb', line 46 def self.find(id_or_list) case id_or_list when Array find_objs_by(:id, id_or_list).map(&:first) else obj = find_objs_by(:id, [id_or_list.to_s]).first.first obj or raise ResourceNotFound, "Could not find Obj with id #{id_or_list}" end end |
.find_all_by_name(name) ⇒ ObjSearchEnumerator
Returns a ObjSearchEnumerator of all Objs with the given name.
121 122 123 |
# File 'lib/rails_connector/basic_obj.rb', line 121 def self.find_all_by_name(name) where(:_name, :equals, name) end |
.find_all_by_obj_class(obj_class) ⇒ ObjSearchEnumerator
Returns a ObjSearchEnumerator of all Objs with the given obj_class.
90 91 92 |
# File 'lib/rails_connector/basic_obj.rb', line 90 def self.find_all_by_obj_class(obj_class) search_for_all.and(:_obj_class, :equals, obj_class) end |
.find_by_name(name) ⇒ Obj
Find an Obj with the given name. If several Objs with the given name exist, an arbitrary one of these Objs is chosen and returned. If no Obj with the name exits, nil is returned.
113 114 115 |
# File 'lib/rails_connector/basic_obj.rb', line 113 def self.find_by_name(name) where(:_name, :equals, name).batch_size(1).first end |
.find_by_path(path) ⇒ Obj
Find the Obj with the given path. Returns nil if no matching Obj exists.
99 100 101 |
# File 'lib/rails_connector/basic_obj.rb', line 99 def self.find_by_path(path) find_objs_by(:path, [path]).first.first end |
.find_by_permalink(permalink) ⇒ Obj
Returns the Obj with the given permalink, or nil if no matching Obj exists.
129 130 131 |
# File 'lib/rails_connector/basic_obj.rb', line 129 def self.find_by_permalink(permalink) find_objs_by(:permalink, [permalink]).first.first end |
.find_by_permalink!(permalink) ⇒ Obj
Returns the Obj with the given permalink, or raise ResourceNotFound if no matching Obj exists.
137 138 139 140 |
# File 'lib/rails_connector/basic_obj.rb', line 137 def self.find_by_permalink!(permalink) find_by_permalink(permalink) or raise ResourceNotFound, "Could not find Obj with permalink '#{permalink}'" end |
.homepage ⇒ Obj
Returns the homepage obj. This can be overwritten in your application’s Obj. Use #homepage? to check if an obj is the homepage.
230 231 232 |
# File 'lib/rails_connector/basic_obj.rb', line 230 def self.homepage root end |
.root ⇒ Obj
Returns the root Obj, i.e. the Obj with the path “/”
221 222 223 224 |
# File 'lib/rails_connector/basic_obj.rb', line 221 def self.root BasicObj.find_by_path("/") or raise ResourceNotFound, "Obj.root not found: There is no Obj with path '/'." end |
.valid_page_classes_beneath(parent_path) ⇒ NilClass, Array<Symbol, String>
Hook method to control which page classes should be available for a page with given path. Override it to allow only certain classes or none. Must return either NilClass, or Array.
Be aware that the given argument is a parent path. E.g. when creating a page with path /products/shoes then the argument will be /products.
If NilClass is returned, then all possible classes will be available. By default NilClass is returned.
If Array is returned, then it should include desired class names. Each class name must be either a String or a Symbol. Only this class names will be available. Order of the class names will be preserved.
167 168 |
# File 'lib/rails_connector/basic_obj.rb', line 167 def self.valid_page_classes_beneath(parent_path) end |
.where(field, operator, value, boost = nil) ⇒ ObjSearchEnumerator
Returns a ObjSearchEnumerator with the given initial subquery consisting of the four arguments.
Note that field and value can also be arrays for searching several fields or searching for several values.
ObjSearchEnumerators can be chained using one of the chainable methods (e.g. ObjSearchEnumerator#and and ObjSearchEnumerator#and_not).
70 71 72 |
# File 'lib/rails_connector/basic_obj.rb', line 70 def self.where(field, operator, value, boost = nil) ObjSearchEnumerator.new(nil).and(field, operator, value, boost) end |
Instance Method Details
#[](key) ⇒ Object
Returns the value of an internal or external attribute specified by its name. Passing an invalid key will not raise an error, but return nil.
484 485 486 487 488 489 490 491 492 493 494 |
# File 'lib/rails_connector/basic_obj.rb', line 484 def [](key) key = key.to_s if OLD_INTERNAL_KEYS.include?(key) send(key) elsif key.start_with?('_') && OLD_INTERNAL_KEYS.include?(internal_key = key[1..-1]) # For backwards compatibility reasons send(internal_key) else super end end |
#active? ⇒ Boolean
Active is deprecated without substitution.
Returns true if this object is active.
329 330 331 332 333 |
# File 'lib/rails_connector/basic_obj.rb', line 329 def active? Deprecation.warn_method('Obj#active?') return false unless valid_from valid_from <= Time.now && (!valid_until || Time.now <= valid_until) end |
#ancestors ⇒ Array<Obj>
Returns an Array of all the ancestor objects, starting at the root and ending at this object’s parent.
184 185 186 187 188 189 190 191 |
# File 'lib/rails_connector/basic_obj.rb', line 184 def ancestors return [] if root? ancestor_paths = parent_path.scan(/\/[^\/]+/).inject([""]) do |list, component| list << list.last + component end ancestor_paths[0] = "/" BasicObj.find_many_by_paths(ancestor_paths) end |
#body ⇒ String
Returns the body (main content) of the Obj for non-binary Objs. Returns nil for binary Objs.
554 555 556 557 558 559 560 |
# File 'lib/rails_connector/basic_obj.rb', line 554 def body if binary? nil else StringTagging.tag_as_html(read_attribute('body'), self) end end |
#body_content_type ⇒ String
returns the content type of the Obj’s body for binary Objs. returns nil for non-binary Objs.
589 590 591 592 593 594 595 596 597 598 |
# File 'lib/rails_connector/basic_obj.rb', line 589 def body_content_type if binary? blob = find_blob if blob blob.content_type else "application/octet-stream" end end end |
#body_data_url ⇒ String
returns an URL to retrieve the Obj’s body for binary Objs. returns nil for non-binary Objs.
578 579 580 581 582 583 |
# File 'lib/rails_connector/basic_obj.rb', line 578 def body_data_url if binary? blob = find_blob blob.url if blob end end |
#body_length ⇒ Object
for binary Objs body_length equals the file size for non-binary Objs body_length equals the number of characters in the body (main content)
565 566 567 568 569 570 571 572 |
# File 'lib/rails_connector/basic_obj.rb', line 565 def body_length if binary? blob = find_blob blob ? blob.length : 0 else (body || "").length end end |
#children ⇒ Array<Obj>
return a list of all child Objs.
196 197 198 |
# File 'lib/rails_connector/basic_obj.rb', line 196 def children self.class.find_objs_by(:ppath, [path]).first end |
#content_type ⇒ String Also known as: mime_type
For a binary Obj, the content_type is equal to the content_type of its body (i.e. its data). For non-binary Objs, a the default content_type is “text/html”. Override this method in subclasses to define a different content_type. Note that only Objs with content_type “text/html” will be rendered with layout and templates by the DefaultCmsController.
533 534 535 536 537 538 539 |
# File 'lib/rails_connector/basic_obj.rb', line 533 def content_type if binary? body_content_type else "text/html" end end |
#controller_action_name ⇒ String
This method determines the action that should be invoked when the Obj is requested. The default action is ‘index’. Overwrite this method to force a different action to be used.
260 261 262 |
# File 'lib/rails_connector/basic_obj.rb', line 260 def controller_action_name "index" end |
#controller_name ⇒ String
This method determines the controller that should be invoked when the Obj is requested. By default a controller matching the Obj’s obj_class will be used. If the controller does not exist, the CmsController will be used as a fallback. Overwrite this method to force a different controller to be used.
251 252 253 |
# File 'lib/rails_connector/basic_obj.rb', line 251 def controller_name obj_class end |
#display_title ⇒ String
Returns the title of the content or the name.
287 288 289 |
# File 'lib/rails_connector/basic_obj.rb', line 287 def display_title self.title || name end |
#file_extension ⇒ String
returns the extension (the part after the last dot) from the Obj’s name. returns an empty string if no extension is present in the Obj’s name.
546 547 548 |
# File 'lib/rails_connector/basic_obj.rb', line 546 def file_extension File.extname(name)[1..-1] || "" end |
#find_nearest(name) ⇒ Obj
Returns the Object with the given name next in the hierarchy returns nil if no object with the given name was found.
446 447 448 449 450 451 452 453 454 |
# File 'lib/rails_connector/basic_obj.rb', line 446 def find_nearest(name) obj = self.class.find_by_path(root? ? "/#{name}" : "#{path}/#{name}") if obj obj elsif !self.root? parent.find_nearest(name) end end |
#homepage? ⇒ Boolean
Returns true if the current obj is the homepage obj.
266 267 268 |
# File 'lib/rails_connector/basic_obj.rb', line 266 def homepage? self == self.class.homepage end |
#id ⇒ Object
35 36 37 |
# File 'lib/rails_connector/basic_obj.rb', line 35 def id read_attribute('_id') end |
#last_changed ⇒ Object
512 513 514 |
# File 'lib/rails_connector/basic_obj.rb', line 512 def last_changed read_attribute('_last_changed') end |
#name ⇒ Object
returns the Obj‘s name, i.e. the last component of the path.
210 211 212 213 214 215 216 |
# File 'lib/rails_connector/basic_obj.rb', line 210 def name if root? "" else path.match(/[^\/]+$/)[0] end end |
#obj_class ⇒ String
507 508 509 |
# File 'lib/rails_connector/basic_obj.rb', line 507 def obj_class read_attribute('_obj_class') end |
#parent ⇒ Object
return the Obj that is the parent of this Obj. returns nil for the root Obj.
177 178 179 |
# File 'lib/rails_connector/basic_obj.rb', line 177 def parent root? ? nil : BasicObj.find_by_path(parent_path) end |
#path ⇒ Object
returns the Obj‘s path as a String.
204 205 206 |
# File 'lib/rails_connector/basic_obj.rb', line 204 def path read_attribute('_path') or raise 'Obj without path' end |
#permalink ⇒ Object
returns the obj’s permalink.
241 242 243 |
# File 'lib/rails_connector/basic_obj.rb', line 241 def permalink read_attribute('_permalink') end |
#reload ⇒ Object
Reloads the attributes of this object from the database. Notice that the ruby class of this Obj instance will NOT change, even if the obj_class in the database has changed.
500 501 502 503 |
# File 'lib/rails_connector/basic_obj.rb', line 500 def reload obj_data = CmsBackend.find_obj_data_by(Workspace.current.data, :id, [id.to_s]).first.first update_data(obj_data) end |
#root? ⇒ Boolean
Returns true if this object is the root object.
364 365 366 |
# File 'lib/rails_connector/basic_obj.rb', line 364 def root? path == "/" end |
#slug ⇒ String
This method is used to calculate a part of a URL of this Obj.
The routing schema: <obj.id>/<obj.slug>
The default is parameterize on obj.title.
You can customize this part by overwriting #slug.
280 281 282 |
# File 'lib/rails_connector/basic_obj.rb', line 280 def slug (title || '').parameterize end |
#sorted_toclist(*args) ⇒ Array<Obj>
Returns the sorted toclist, respecting sort order and type of this Obj.
382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 |
# File 'lib/rails_connector/basic_obj.rb', line 382 def sorted_toclist(*args) list = self.toclist(*args) return [] if list.blank? cached_sort_key1 = self.sort_key1 cached_sort_type1 = self.sort_type1 sorted_list = if cached_sort_key1.blank? list.sort { |left_obj, right_obj| left_obj.name <=> right_obj.name } else cached_sort_key2 = self.sort_key2 cached_sort_type2 = self.sort_type2 cached_sort_key3 = self.sort_key3 cached_sort_type3 = self.sort_type3 list.sort do |left_obj, right_obj| compare = compare_on_sort_key(left_obj, right_obj, cached_sort_key1, cached_sort_type1) if compare == 0 && cached_sort_key2 compare = compare_on_sort_key(left_obj, right_obj, cached_sort_key2, cached_sort_type2) if compare == 0 && cached_sort_key3 compare = compare_on_sort_key(left_obj, right_obj, cached_sort_key3, cached_sort_type3) end end compare end end return self.sort_order == "descending" ? sorted_list.reverse : sorted_list end |
#title ⇒ Object
292 293 294 |
# File 'lib/rails_connector/basic_obj.rb', line 292 def title read_attribute('title') end |
#toclist(*args) ⇒ Array<Obj>
Returns a list of children excluding the binary? ones unless :all is specfied. This is mainly used for navigations.
372 373 374 375 376 377 |
# File 'lib/rails_connector/basic_obj.rb', line 372 def toclist(*args) return [] unless publication? toclist = children toclist = toclist.reject { |toc| toc.binary? } unless args.include?(:all) toclist end |
#valid_from ⇒ Object
517 518 519 |
# File 'lib/rails_connector/basic_obj.rb', line 517 def valid_from read_attribute('_valid_from') end |
#valid_until ⇒ Object
522 523 524 |
# File 'lib/rails_connector/basic_obj.rb', line 522 def valid_until read_attribute('_valid_until') end |