Class: RExchange::Folder
- Inherits:
-
Object
- Object
- RExchange::Folder
- Includes:
- Enumerable, REXML
- Defined in:
- lib/rexchange/folder.rb,
lib/rexchange/generic_item.rb
Direct Known Subclasses
Constant Summary collapse
- CONTENT_TYPES =
{}
Instance Attribute Summary collapse
-
#credentails ⇒ Object
readonly
Returns the value of attribute credentails.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
Instance Method Summary collapse
-
#each ⇒ Object
Iterate through each entry in this folder.
-
#folders ⇒ Object
Return an Array of subfolders for this folder.
-
#initialize(credentials, parent, name, content_type) ⇒ Folder
constructor
A new instance of Folder.
-
#method_missing(sym, *args) ⇒ Object
Used to access subfolders.
-
#search(conditions = {}) ⇒ Object
Not Implemented!.
-
#to_s ⇒ Object
Return the absolute path to this folder (but not the full URI).
Constructor Details
#initialize(credentials, parent, name, content_type) ⇒ Folder
Returns a new instance of Folder.
20 21 22 23 |
# File 'lib/rexchange/folder.rb', line 20 def initialize(credentials, parent, name, content_type) @credentials, @parent, @name = credentials, parent, name @content_type = CONTENT_TYPES[content_type] || Message end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(sym, *args) ⇒ Object
Used to access subfolders.
26 27 28 29 30 31 32 |
# File 'lib/rexchange/folder.rb', line 26 def method_missing(sym, *args) if folders.has_key?(sym.to_s) folders[sym.to_s] else raise FolderNotFoundError.new("#{sym} is not a subfolder of #{name}") end end |
Instance Attribute Details
#credentails ⇒ Object (readonly)
Returns the value of attribute credentails.
18 19 20 |
# File 'lib/rexchange/folder.rb', line 18 def credentails @credentails end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
18 19 20 |
# File 'lib/rexchange/folder.rb', line 18 def name @name end |
Instance Method Details
#each ⇒ Object
Iterate through each entry in this folder
37 38 39 40 41 |
# File 'lib/rexchange/folder.rb', line 37 def each @content_type::find(@credentials, to_s).each do |item| yield item end end |
#folders ⇒ Object
Return an Array of subfolders for this folder
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 |
# File 'lib/rexchange/folder.rb', line 50 def folders @folders ||= begin request_body = <<-eos <?xml version="1.0"?> <D:searchrequest xmlns:D = "DAV:"> <D:sql> SELECT "DAV:displayname", "DAV:contentclass" FROM SCOPE('shallow traversal of "#{to_s}"') WHERE "DAV:ishidden" = false AND "DAV:isfolder" = true </D:sql> </D:searchrequest> eos response = DavSearchRequest.execute(@credentials, :body => request_body) folders = {} # iterate through folders query and add a new Folder # object for each, under a normalized name. xpath_query = "//a:propstat[a:status/text() = 'HTTP/1.1 200 OK']/a:prop" Document.new(response.body).elements.each(xpath_query) do |m| displayname = m.elements['a:displayname'].text contentclass = m.elements['a:contentclass'].text folders[displayname.normalize] = Folder.new(@credentials, self, displayname, contentclass.split(':').last.sub(/folder$/, '')) end folders end end |
#search(conditions = {}) ⇒ Object
Not Implemented!
44 45 46 47 |
# File 'lib/rexchange/folder.rb', line 44 def search(conditions = {}) raise NotImplementedError.new('Bad Touch!') @content_type::find(@credentials, to_s, conditions) end |
#to_s ⇒ Object
Return the absolute path to this folder (but not the full URI)
82 83 84 |
# File 'lib/rexchange/folder.rb', line 82 def to_s "#@parent/#@name/".squeeze('/') end |