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