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.
253 254 255 |
# File 'lib/rails_connector/basic_obj.rb', line 253 def self.homepage root end |
.root ⇒ Obj
Returns the root Obj, i.e. the Obj with the path “/”
244 245 246 247 |
# File 'lib/rails_connector/basic_obj.rb', line 244 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.
514 515 516 517 518 519 520 521 522 523 524 |
# File 'lib/rails_connector/basic_obj.rb', line 514 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.
352 353 354 355 356 |
# File 'lib/rails_connector/basic_obj.rb', line 352 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.
584 585 586 587 588 589 590 |
# File 'lib/rails_connector/basic_obj.rb', line 584 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.
624 625 626 627 628 629 630 631 632 633 |
# File 'lib/rails_connector/basic_obj.rb', line 624 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.
608 609 610 611 612 613 |
# File 'lib/rails_connector/basic_obj.rb', line 608 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)
595 596 597 598 599 600 601 602 |
# File 'lib/rails_connector/basic_obj.rb', line 595 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.
563 564 565 566 567 568 569 |
# File 'lib/rails_connector/basic_obj.rb', line 563 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.
283 284 285 |
# File 'lib/rails_connector/basic_obj.rb', line 283 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.
274 275 276 |
# File 'lib/rails_connector/basic_obj.rb', line 274 def controller_name obj_class end |
#display_title ⇒ String
Returns the title of the content or the name.
310 311 312 |
# File 'lib/rails_connector/basic_obj.rb', line 310 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.
576 577 578 |
# File 'lib/rails_connector/basic_obj.rb', line 576 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.
476 477 478 479 480 481 482 483 484 |
# File 'lib/rails_connector/basic_obj.rb', line 476 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.
289 290 291 |
# File 'lib/rails_connector/basic_obj.rb', line 289 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
542 543 544 |
# File 'lib/rails_connector/basic_obj.rb', line 542 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
537 538 539 |
# File 'lib/rails_connector/basic_obj.rb', line 537 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.
264 265 266 |
# File 'lib/rails_connector/basic_obj.rb', line 264 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.
530 531 532 533 |
# File 'lib/rails_connector/basic_obj.rb', line 530 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.
394 395 396 |
# File 'lib/rails_connector/basic_obj.rb', line 394 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.
303 304 305 |
# File 'lib/rails_connector/basic_obj.rb', line 303 def slug (title || '').parameterize end |
#sorted_toclist(*args) ⇒ Array<Obj>
Returns the sorted toclist, respecting sort order and type of this Obj.
412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 |
# File 'lib/rails_connector/basic_obj.rb', line 412 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
315 316 317 |
# File 'lib/rails_connector/basic_obj.rb', line 315 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.
402 403 404 405 406 407 |
# File 'lib/rails_connector/basic_obj.rb', line 402 def toclist(*args) return [] unless publication? toclist = children toclist = toclist.reject { |toc| toc.binary? } unless args.include?(:all) toclist end |
#valid_from ⇒ Object
547 548 549 |
# File 'lib/rails_connector/basic_obj.rb', line 547 def valid_from read_attribute('_valid_from') end |
#valid_until ⇒ Object
552 553 554 |
# File 'lib/rails_connector/basic_obj.rb', line 552 def valid_until read_attribute('_valid_until') end |