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 it’s 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 object.
-
.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 avaiable 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
Returns true if this object is active.
-
#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 it’s body (i.e. it’s data).
-
#controller_action_name ⇒ String
This method determines the action that should be invoked when the Obj is requested.
-
#controller_name ⇒ String
This method determines the controller that should be invoked when the Obj is 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 object is the homepage object.
- #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 part a part of a URL of an 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 exportable? children excluding the binary? ones unless :all is specfied.
- #valid_from ⇒ Object
- #valid_until ⇒ Object
-
#valid_widget_classes_for(field_name) ⇒ NilClass, Array<Symbol, String>
Hook method to control which widget classes should be avaiable for this page.
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_name, *args) ⇒ Object (private)
778 779 780 781 782 783 784 |
# File 'lib/rails_connector/basic_obj.rb', line 778 def method_missing(method_name, *args) if has_attribute?(method_name) read_attribute(method_name.to_s) else super end end |
Class Method Details
.all ⇒ ObjSearchEnumerator
Returns a ObjSearchEnumerator of all Objs. If invoked on a subclass of Obj, the result will be restricted to Obj of that subclass.
75 76 77 78 79 80 81 |
# File 'lib/rails_connector/basic_obj.rb', line 75 def self.all if superclass == RailsConnector::BasicObj ObjSearchEnumerator.new(nil) else find_all_by_obj_class(self.name) end end |
.find(id_or_list) ⇒ Obj+
Find an Obj by it’s id. If the paremeter is an Array containing ids, return a list of corresponding Objs.
43 44 45 46 47 48 49 50 51 |
# File 'lib/rails_connector/basic_obj.rb', line 43 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.
118 119 120 |
# File 'lib/rails_connector/basic_obj.rb', line 118 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.
87 88 89 |
# File 'lib/rails_connector/basic_obj.rb', line 87 def self.find_all_by_obj_class(obj_class) where(:_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.
110 111 112 |
# File 'lib/rails_connector/basic_obj.rb', line 110 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.
96 97 98 |
# File 'lib/rails_connector/basic_obj.rb', line 96 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.
126 127 128 |
# File 'lib/rails_connector/basic_obj.rb', line 126 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.
134 135 136 137 |
# File 'lib/rails_connector/basic_obj.rb', line 134 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 object. This can be overwritten in your application’s Obj. Use Obj#homepage? to check if an object is the homepage.
270 271 272 |
# File 'lib/rails_connector/basic_obj.rb', line 270 def self.homepage root end |
.root ⇒ Obj
Returns the root Obj, i.e. the Obj with the path “/”
261 262 263 264 |
# File 'lib/rails_connector/basic_obj.rb', line 261 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 avaiable 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.
164 165 |
# File 'lib/rails_connector/basic_obj.rb', line 164 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).
67 68 69 |
# File 'lib/rails_connector/basic_obj.rb', line 67 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.
527 528 529 530 531 532 533 534 535 536 537 538 539 |
# File 'lib/rails_connector/basic_obj.rb', line 527 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) elsif has_attribute?(key) read_attribute(key) else nil end end |
#active? ⇒ Boolean
Returns true if this object is active.
363 364 365 366 |
# File 'lib/rails_connector/basic_obj.rb', line 363 def 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.
201 202 203 204 205 206 207 208 |
# File 'lib/rails_connector/basic_obj.rb', line 201 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.
603 604 605 606 607 608 609 |
# File 'lib/rails_connector/basic_obj.rb', line 603 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.
643 644 645 646 647 648 649 650 651 652 |
# File 'lib/rails_connector/basic_obj.rb', line 643 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.
627 628 629 630 631 632 |
# File 'lib/rails_connector/basic_obj.rb', line 627 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)
614 615 616 617 618 619 620 621 |
# File 'lib/rails_connector/basic_obj.rb', line 614 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.
213 214 215 |
# File 'lib/rails_connector/basic_obj.rb', line 213 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 it’s body (i.e. it’s 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.
582 583 584 585 586 587 588 |
# File 'lib/rails_connector/basic_obj.rb', line 582 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.
295 296 297 |
# File 'lib/rails_connector/basic_obj.rb', line 295 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.
286 287 288 |
# File 'lib/rails_connector/basic_obj.rb', line 286 def controller_name obj_class end |
#display_title ⇒ String
Returns the title of the content or the name.
322 323 324 |
# File 'lib/rails_connector/basic_obj.rb', line 322 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.
595 596 597 |
# File 'lib/rails_connector/basic_obj.rb', line 595 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.
493 494 495 496 497 |
# File 'lib/rails_connector/basic_obj.rb', line 493 def find_nearest(name) obj = self.class.find_by_path(root? ? "/#{name}" : "#{path}/#{name}") return obj if obj and obj.active? parent.find_nearest(name) unless self.root? end |
#homepage? ⇒ Boolean
Returns true if the current object is the homepage object.
301 302 303 |
# File 'lib/rails_connector/basic_obj.rb', line 301 def homepage? self == self.class.homepage end |
#id ⇒ Object
32 33 34 |
# File 'lib/rails_connector/basic_obj.rb', line 32 def id read_attribute('_id') end |
#last_changed ⇒ Object
561 562 563 |
# File 'lib/rails_connector/basic_obj.rb', line 561 def last_changed read_attribute('_last_changed') end |
#name ⇒ Object
returns the Obj’s name, i.e. the last component of the path.
227 228 229 230 231 232 233 |
# File 'lib/rails_connector/basic_obj.rb', line 227 def name if root? "" else path.match(/[^\/]+$/)[0] end end |
#obj_class ⇒ String
556 557 558 |
# File 'lib/rails_connector/basic_obj.rb', line 556 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.
194 195 196 |
# File 'lib/rails_connector/basic_obj.rb', line 194 def parent root? ? nil : BasicObj.find_by_path(parent_path) end |
#path ⇒ Object
returns the Obj’s path as a String.
221 222 223 |
# File 'lib/rails_connector/basic_obj.rb', line 221 def path read_attribute('_path') or raise 'Obj without path' end |
#permalink ⇒ Object
returns the obj’s permalink.
276 277 278 |
# File 'lib/rails_connector/basic_obj.rb', line 276 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.
545 546 547 548 |
# File 'lib/rails_connector/basic_obj.rb', line 545 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.
411 412 413 |
# File 'lib/rails_connector/basic_obj.rb', line 411 def root? path == "/" end |
#slug ⇒ String
This method is used to calculate part a part of a URL of an obj.
The routing schema: <obj.id>/<obj.slug>
The default is parameterize on obj.title.
You can customize this part by overwriting obj.slug in Obj.
315 316 317 |
# File 'lib/rails_connector/basic_obj.rb', line 315 def slug (title || '').parameterize end |
#sorted_toclist(*args) ⇒ Array<Obj>
Returns the sorted toclist, respecting sort order and type of this Obj.
429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 |
# File 'lib/rails_connector/basic_obj.rb', line 429 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
327 328 329 |
# File 'lib/rails_connector/basic_obj.rb', line 327 def title read_attribute('title') end |
#toclist(*args) ⇒ Array<Obj>
Returns a list of exportable? children excluding the binary? ones unless :all is specfied. This is mainly used for navigations.
419 420 421 422 423 424 |
# File 'lib/rails_connector/basic_obj.rb', line 419 def toclist(*args) return [] unless publication? toclist = children.select{ |toc| toc.exportable? } toclist = toclist.reject { |toc| toc.binary? } unless args.include?(:all) toclist end |
#valid_from ⇒ Object
566 567 568 |
# File 'lib/rails_connector/basic_obj.rb', line 566 def valid_from read_attribute('_valid_from') end |
#valid_until ⇒ Object
571 572 573 |
# File 'lib/rails_connector/basic_obj.rb', line 571 def valid_until read_attribute('_valid_until') end |
#valid_widget_classes_for(field_name) ⇒ NilClass, Array<Symbol, String>
Hook method to control which widget classes should be avaiable for this page. Override it to allow only certain classes or none. Must return either NilClass, or Array.
If NilClass is returned, then all widget classes will be available for this page. 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 for this page. Order of the class names will be preserved.
720 721 |
# File 'lib/rails_connector/basic_obj.rb', line 720 def (field_name) end |