class CMIS::Children
Public Class Methods
new(folder, options = {})
click to toggle source
Options: from, page_size
# File lib/cmis/children.rb, line 7 def initialize(folder, options = {}) @folder = folder @options = options.symbolize_keys init_options end
Public Instance Methods
each_child(options = {}) { |object| ... }
click to toggle source
Options: limit
# File lib/cmis/children.rb, line 15 def each_child(options = {}, &block) return enum_for(:each_child, options) unless block_given? init_options limit = parse_limit(options) return if limit == 0 counter = 0 while has_next? results.each do |object| yield object counter = counter.next return unless counter < limit end end end
each_page(options = {}) { |r = results| ... }
click to toggle source
Options: limit
# File lib/cmis/children.rb, line 33 def each_page(options = {}, &block) return enum_for(:each_page, options) unless block_given? init_options limit = parse_limit(options) counter = 0 while has_next? break unless counter < limit yield r = results counter += r.size end end
has_next?()
click to toggle source
# File lib/cmis/children.rb, line 57 def has_next? @has_next end
results()
click to toggle source
# File lib/cmis/children.rb, line 47 def results result = do_get_children @skip_count += result.results.size @has_next = result.has_more_items @total = result.num_items result.results end
total()
click to toggle source
# File lib/cmis/children.rb, line 61 def total @total ||= do_get_children.num_items end
Private Instance Methods
build_object_with_relationships(json)
click to toggle source
# File lib/cmis/children.rb, line 101 def build_object_with_relationships(json) object = ObjectFactory.create(json['object'], @folder.repository) # If relationships are included, override the object method... if relationships = build_relationships(json) metaclass = class << object; self; end metaclass.send(:define_method, :relationships) do # ...and make the Array respond to `each_relationship` def relationships.each_relationship(args, &blck) each(&blck) end relationships end end object end
build_relationships(json)
click to toggle source
# File lib/cmis/children.rb, line 119 def build_relationships(json) if json['object']['relationships'] json['object']['relationships'].map do |r| ObjectFactory.create(r, @folder.repository) end end end
do_get_children()
click to toggle source
# File lib/cmis/children.rb, line 86 def do_get_children server = @folder.repository.server result = server.execute!({ cmisselector: 'children', repositoryId: @folder.repository.id, objectId: @folder.cmis_object_id, maxItems: @max_items, skipCount: @skip_count, orderBy: @order_by, includeRelationships: @include_relationships, filter: @filter }, @opts) results = result['objects'].map { |o| build_object_with_relationships(o) } QueryResult.new(results, result['numItems'], result['hasMoreItems']) end
init_options()
click to toggle source
# File lib/cmis/children.rb, line 67 def init_options @max_items = @options[:page_size] || 10 @skip_count = @options[:from] || 0 @order_by = @options[:order_by] @filter = @options[:filter] @include_relationships = @options[:include_relationships] @has_next = true @opts = @options.slice(:query, :headers) end
parse_limit(options)
click to toggle source
# File lib/cmis/children.rb, line 78 def parse_limit(options) options.symbolize_keys! limit = options[:limit] || 10 limit = BigDecimal::INFINITY if limit == :all raise 'Not a valid limit' unless limit.is_a? Numeric limit end